From 2c23e5fac5b4a142fe9ac61ef13ac931614c017a Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 26 Oct 2023 08:56:16 +0200 Subject: [PATCH 01/44] add description for concordium-client baker win-time --- source/mainnet/net/references/transactions.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/mainnet/net/references/transactions.rst b/source/mainnet/net/references/transactions.rst index 563233555b..14436d14c4 100644 --- a/source/mainnet/net/references/transactions.rst +++ b/source/mainnet/net/references/transactions.rst @@ -43,6 +43,9 @@ Transaction commands | ``baker set-key`` | Update the keys of a baker. For more | | | information, see :ref:`become-a-baker`. | +-------------------------------------+------------------------------------------------+ +| ``baker win-time`` | Show the earliest time the baker may be | +| | expected to bake a block. | ++-------------------------------------+------------------------------------------------+ | ``account update-keys`` | Update credentials keys for a specific | | | credential | +-------------------------------------+------------------------------------------------+ From ea5136369969c6db40615504d0ade5c1142332ff Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 26 Oct 2023 09:04:21 +0200 Subject: [PATCH 02/44] Add baker win time to cc queries. --- source/mainnet/net/references/query-node.rst | 17 +++++++++++++++++ source/mainnet/net/references/transactions.rst | 3 --- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index dde200ef87..036dd78ac3 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -318,3 +318,20 @@ following command: This prints a JSON list containing any such pending updates. As before you can also pass a block hash to the command to query a specific block. + +Baker queries +============== + +Earliest time a baker may be expected to bake a block +----------------------------------------------------- + +.. code-block:: console + concordium-client baker win-time 1 + Baker 1 is expected to bake no sooner than: + Thu, 26 Oct 2023 07:01:26 UTC (in 34s 699ms) + +Show the earliest time the baker may be expected to bake a block. + +- ``BAKER-ID``: Baker ID to query +- ``local-time``: Display time in the local time zone (instead of UTC). +- ``poll``: Repeatedly poll for the latest time.. diff --git a/source/mainnet/net/references/transactions.rst b/source/mainnet/net/references/transactions.rst index 14436d14c4..563233555b 100644 --- a/source/mainnet/net/references/transactions.rst +++ b/source/mainnet/net/references/transactions.rst @@ -43,9 +43,6 @@ Transaction commands | ``baker set-key`` | Update the keys of a baker. For more | | | information, see :ref:`become-a-baker`. | +-------------------------------------+------------------------------------------------+ -| ``baker win-time`` | Show the earliest time the baker may be | -| | expected to bake a block. | -+-------------------------------------+------------------------------------------------+ | ``account update-keys`` | Update credentials keys for a specific | | | credential | +-------------------------------------+------------------------------------------------+ From c78eeef441ddbbd6355452f6cfc2f08bd2cac1e8 Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 26 Oct 2023 09:14:42 +0200 Subject: [PATCH 03/44] description at top. --- source/mainnet/net/references/query-node.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index 036dd78ac3..77a2ec92e2 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -18,6 +18,7 @@ a backend node: and its relation to other blocks on the chain. - Consensus state: Show the parameters of the consensus protocol and statistics related to baking and finalization of blocks. +- Baker queries: Show baker information. .. _query-account-state: From 3b130f65eef96c1faae769d6debc3134688fdfde Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 26 Oct 2023 09:18:16 +0200 Subject: [PATCH 04/44] Show code block. --- source/mainnet/net/references/query-node.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index 77a2ec92e2..e9a9e5ecfb 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -327,7 +327,8 @@ Earliest time a baker may be expected to bake a block ----------------------------------------------------- .. code-block:: console - concordium-client baker win-time 1 + + $concordium-client baker win-time 1 Baker 1 is expected to bake no sooner than: Thu, 26 Oct 2023 07:01:26 UTC (in 34s 699ms) From 74edfac726c9d6e8cef246061dcc5e6eadcb3116 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Tue, 14 Nov 2023 11:00:36 +0100 Subject: [PATCH 05/44] Node 6.2.0 release Testnet --- .../tutorials/fractionalized-nft/burn.rst | 4 +- .../tutorials/fractionalized-nft/mint.rst | 8 +- source/mainnet/conf.py | 1 + source/mainnet/net/guides/developer-page.rst | 3 +- source/mainnet/net/guides/sdks-apis.rst | 1 - source/mainnet/net/installation/downloads.rst | 12 +- .../installation/previous-node-downloads.rst | 14 + source/mainnet/net/references/grpc.rst | 932 ------------------ source/mainnet/net/references/grpc2.rst | 47 +- .../net/release-notes/release-notes-lp.rst | 50 +- .../tutorials/fungible-tokens/mint-xfer.rst | 8 +- .../fungible-tokens/smart-contract.rst | 6 +- source/mainnet/variables.rst | 6 +- source/shared/setup-env.rst | 2 +- 14 files changed, 97 insertions(+), 997 deletions(-) delete mode 100644 source/mainnet/net/references/grpc.rst diff --git a/source/academy/tutorials/fractionalized-nft/burn.rst b/source/academy/tutorials/fractionalized-nft/burn.rst index e99415d847..c8c3836bf5 100644 --- a/source/academy/tutorials/fractionalized-nft/burn.rst +++ b/source/academy/tutorials/fractionalized-nft/burn.rst @@ -41,7 +41,7 @@ Run the command below after the necessary changes in the parameter JSON. .. code-block:: console - concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/burn-20.json --schema dist/schema.bin --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/burn-20.json --schema dist/schema.bin --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com As usual, after a change, check the state. @@ -78,7 +78,7 @@ Run the transfer command below. .. code-block:: console - concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/transfer-account.json --schema dist/schema.bin --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/transfer-account.json --schema dist/schema.bin --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: ../../images/mid-fractnft-burn2.png diff --git a/source/academy/tutorials/fractionalized-nft/mint.rst b/source/academy/tutorials/fractionalized-nft/mint.rst index 9d2c8a3ef6..7c79694a81 100644 --- a/source/academy/tutorials/fractionalized-nft/mint.rst +++ b/source/academy/tutorials/fractionalized-nft/mint.rst @@ -25,7 +25,7 @@ Check the state by calling the ``view()`` function as shown below. .. code-block:: console - concordium-client contract invoke --entrypoint view --schema ../cis2-multi/dist/schema.bin --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract invoke --entrypoint view --schema ../cis2-multi/dist/schema.bin --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: ../../images/mid-fractnft-mint2.png @@ -64,7 +64,7 @@ Run the command below to transfer the token to the fractionalizer. .. code-block:: console - concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/cis2-multi-transfer.json --schema multi/dist/schema.bin --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint transfer --parameter-json cis2-fractionalizer/cis2-multi-transfer.json --schema multi/dist/schema.bin --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: ../../images/mid-fractnft-mint3.png @@ -111,7 +111,7 @@ Then run the following command to mint the fractions. .. code-block:: console - concordium-client contract update --entrypoint mint --parameter-json ../sample-artifacts/cis2-fractionalizer/mint.json --schema ../cis2-fractionalizer/schema.bin --sender $ACCOUNT --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint mint --parameter-json ../sample-artifacts/cis2-fractionalizer/mint.json --schema ../cis2-fractionalizer/schema.bin --sender $ACCOUNT --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: ../../images/mid-fractnft-mint6.png @@ -119,7 +119,7 @@ Now, check the fractionalizer’s state with the command below. .. code-block:: console - concordium-client contract invoke --entrypoint view --schema dist/schema.bin --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract invoke --entrypoint view --schema dist/schema.bin --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: ../../images/mid-fractnft-mint7.png diff --git a/source/mainnet/conf.py b/source/mainnet/conf.py index 22fbdd029d..8e8a2591e7 100644 --- a/source/mainnet/conf.py +++ b/source/mainnet/conf.py @@ -406,6 +406,7 @@ "./net/installation/downloads-testnet": "net/installation/downloads.html", "./net/resources/legal": "net/resources/terms-and-conditions.html", "./en/mainnet/smart-contracts/onboarding-guide-solana-developers/index": "en/mainnet/smart-contracts/onboarding-guide-solana-developers/overview.html", + "./net/references/grpc": "net/references/grpc2.html", } # -- Tags that enables the .. only option ---------------- diff --git a/source/mainnet/net/guides/developer-page.rst b/source/mainnet/net/guides/developer-page.rst index b27e6bfebd..7b103c8141 100644 --- a/source/mainnet/net/guides/developer-page.rst +++ b/source/mainnet/net/guides/developer-page.rst @@ -38,7 +38,7 @@ Official resources - See :ref:`dApp examples` for a list of dApp examples and their resources. -- For testing purposes, a node is available on testnet to use when testing smart contracts and dApps. You can use this node for API calls of chain methods only with GRPC v1, gRPC v2, and gRPC web. The address is node.testnet.concordium.com on port 10000 (GRPCv1) and port 20000 (gRPCv2 and gRPC-web). This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. +- For testing purposes, a node is available on testnet to use when testing smart contracts and dApps. You can use this node for API calls of chain methods only with gRPC v2 and gRPC web. The address is node.testnet.concordium.com on port 20000 (gRPCv2 and gRPC-web). You can use this node for API calls of *chain methods only*. This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. - The `VSCode extension `__ can help you develop Concordium smart contracts. The extension sets up the editor for development, installs the ``cargo-concordium`` smart contract development tool for all supported platforms, and provides commands in the editor for the essential workflows, such as building and testing smart contracts. @@ -121,4 +121,3 @@ Community resources ../resources/dashboards ../references/developer-tools ../references/grpc2 - ../references/grpc diff --git a/source/mainnet/net/guides/sdks-apis.rst b/source/mainnet/net/guides/sdks-apis.rst index 2d17e44010..683f2b11db 100644 --- a/source/mainnet/net/guides/sdks-apis.rst +++ b/source/mainnet/net/guides/sdks-apis.rst @@ -8,7 +8,6 @@ SDKs and APIs The following SDKs and APIs exist for developing on the Concordium network. - :ref:`Concordium gRPC V2 API` -- :ref:`Concordium gRPC API` - `Concordium Rust SDK `_ - `Concordium Javascript (Node / Web) SDK `_ - `Concordium Java SDK `_ diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index b50c9aed2e..7d8f30944a 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -154,7 +154,7 @@ The |mw-gen1| is available for iOS and Android™. The |mw-gen1| supports iOS 13 Concordium Client |client-version| =================================== -- `Download the Mainnet Concordium Client for Linux `_ +- `Download the Mainnet Concordium Client for Linux `_ - SHA256 checksum of the download: :substitution-code:`|client-linux-checksum|` - :ref:`Verification instructions ` @@ -167,13 +167,13 @@ Concordium Client |client-version| where you replace `*` with |client-version|. -- `Download the Mainnet Concordium Client for macOS `_ +- `Download the Mainnet Concordium Client for macOS `_ - The macOS distribution is an installer that places an alias to the binary into the folder ``/usr/local/bin``. So after installing, you should have ``concordium-client`` on your path. -- `Download the Mainnet Concordium Client for Windows `_ +- `Download the Mainnet Concordium Client for Windows `_ .. _cargo-concordium-testnet: @@ -240,7 +240,7 @@ For the system requirements to run a node, see :ref:`System requirements to run .. dropdown:: Ubuntu |testnet-node-version| - To run a node on a server with Ubuntu, `download a Testnet Debian package `_. + To run a node on a server with Ubuntu, `download a Testnet Debian package `_. - SHA256 checksum of the download: ``b1b1e1c5e2e9e8100094a2e1d9fced47dc98e9dfcf0897e89755011adc44781a`` @@ -256,13 +256,13 @@ For the system requirements to run a node, see :ref:`System requirements to run .. dropdown:: Windows |testnet-node-version| - To run a node on Windows, `download a Testnet Windows Installer package `_. **Please be aware that you should backup your configuration, as the installer will overwrite the current configuration with a standard configuration.** + To run a node on Windows, `download a Testnet Windows Installer package `_. **Please be aware that you should backup your configuration, as the installer will overwrite the current configuration with a standard configuration.** To learn how to run a node on Windows, see :ref:`Run and manage a node on Windows `. .. dropdown:: Mac |testnet-node-version| - To run a node on macOS, `download a Testnet macOS installer package `_. + To run a node on macOS, `download a Testnet macOS installer package `_. To learn how to run a node on Mac, see :ref:`Run and manage a node on macOS `. diff --git a/source/mainnet/net/installation/previous-node-downloads.rst b/source/mainnet/net/installation/previous-node-downloads.rst index 0f853ef025..1f1d40651e 100644 --- a/source/mainnet/net/installation/previous-node-downloads.rst +++ b/source/mainnet/net/installation/previous-node-downloads.rst @@ -14,6 +14,8 @@ Windows - Mainnet and Testnet **Please be aware that you should backup your configuration, as the installer will overwrite the current configuration with a standard configuration.** +`Windows 6.1.7 `_ + `Windows 6.1.6 `_ (Testnet only) `Windows 6.0.4 `_ @@ -49,6 +51,8 @@ Windows - Mainnet and Testnet macOS - Mainnet and Testnet =========================== +`macOS 6.1.7 `_ + `macOS 6.1.6 `_ (Testnet only) `macOS 6.0.4 `_ @@ -208,6 +212,16 @@ Ubuntu - Testnet Default GRPC port is set to 10001 Default listen port is set to 8889 +`6.1.7 `__ + + - Verification instructions + + In a terminal: + + #. Navigate to the download. + #. Paste the following into the terminal: $sha256sum concordium-testnet-node_6.1.7-0_amd64.deb + #. Verify that the output matches the SHA256 checksum ``b1b1e1c5e2e9e8100094a2e1d9fced47dc98e9dfcf0897e89755011adc44781a`` + `6.1.6 `__ - Verification instructions diff --git a/source/mainnet/net/references/grpc.rst b/source/mainnet/net/references/grpc.rst deleted file mode 100644 index dcac9c7c16..0000000000 --- a/source/mainnet/net/references/grpc.rst +++ /dev/null @@ -1,932 +0,0 @@ -.. _grpc-documentation: - -==================== - gRPC documentation -==================== - -The Concordium node has a `gRPC `_ interface that enables -queries, sending of transactions, and more. -While the gRPC interface is powerful, it is not the most convenient tool. -Concordium provides a number of SDKs that build on top of the gRPC interface, which are -much more ergonomic to use. - -The SDKs currently provided are: - -- `Concordium Rust SDK `_ -- `Concordium Javascript (Node / Web) SDK `_ -- `Concordium Java SDK `_ -- `Concordium .NET (C#) SDK `_ -- `Concordium Rosetta SDK `_ - -The gRPC interface uses a mixture of protobuf-defined types and JSON. For the -JSON types, a `JSON Schema `_ is provided. -The protobuf types are defined in `the protobuf file defining the gRPC interface -`_. - -For the JSON schemas, you may find these two tools useful: - -- `JSON Schema Faker `_: Generates fake data - that conforms to the provided schema. -- `JSON Schema Validator `_: Validates - whether the JSON input follows the provided schema. - - -Notation -======== - -This page uses the following notation: - -- ``?a`` means ``a`` OR ``null``. - - - Queries that return ``?a`` will only do so if the input is malformed or - refers to non-existent data, for example a ``BlockHash`` for a block that - doesn't exist on the chain. - -- ``[a]`` means a list of type ``a``. -- JSON Schemas follow the `JSON Schema (Draft 7) `_. -- Protobuf code follow the `Protocol Buffers Version 3 Language Specification `_. -- ``Foo ::= (n: UInt16) (bars: Byteⁿ)`` - - - Denotes the serialization of the type ``Foo``, which starts with an unsigned - 16-bit big-endian integer, ``n``, which describes the number of bytes used to represent - ``bars``. So if ``n == 100``, then ``bars`` is represented with ``100`` bytes. - -Transactions -============ - -.. _grpc-send-transaction: - -.. function:: SendTransaction(network_id: Int32, payload: [Byte]) -> Bool - - Send a transaction to the given network. - The node will do basic transaction validation, such as signature checks and - account nonce checks, and if these fail, the call will return a gRPC error. - The payload is in binary encoding, read more in the - :ref:`grpc-transaction-encoding` section. - - :param Int32 network_id: The network that the transaction should be sent to - (only ``100`` is currently supported). - :param payload: Binary encoding of the transaction payload. - :type payload: ``[Byte]`` of |grpc-block-item|_ - :returns: Either ``True`` or one of the following gRPC errors: - - - ``INVALID_ARGUMENT``: The transaction was deemed invalid or - exceeds the maximum size allowed (the raw size of the transaction). - - ``FAILED_PRECONDITION``: The network was stopped due to an - unrecognized protocol update. - - ``DUPLICATE_ENTRY``: The transaction was a duplicate. - - ``INTERNAL``: An internal error happened and as such the - transaction could not be processed. The node will return a gRPC - status if the transaction was deemed invalid. - :rtype: Bool - -.. function:: GetTransactionStatus(transaction_hash: TransactionHash, block_hash: BlockHash) -> JsonResponse - - Get the status of a given transaction. - - :param transaction_hash: The transaction to query. - :type transaction_hash: |grpc-transaction-hash|_ - :returns: The status of the transaction, or ``null`` if either the transaction - or block hash is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?TransactionStatus`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetTransactionStatus.json - :language: json - -.. function:: GetTransactionStatusInBlock(transaction_hash: TransactionHash, block_hash: BlockHash) -> JsonResponse - - Get the status of a given transaction in a given block. - - :param transaction_hash: The transaction to query. - :param block_hash: The given block. - :type transaction_hash: |grpc-transaction-hash|_ - :type block_hash: |grpc-block-hash|_ - :returns: The status of the transaction, or ``null`` if either the transaction - or block hash is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?TransactionStatusInBlock`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetTransactionStatusInBlock.json - :language: json - -Blocks and consensus -==================== - -.. function:: GetConsensusStatus() -> JsonResponse - - Get the information about the consensus. - - :returns: Information about the consensus. - :rtype: ``JsonResponse`` with ``ConsensusInfo`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetConsensusInfo.json - :language: json - -.. function:: GetBlockInfo(block_hash: BlockHash) -> JsonResponse - - Get information, such as height, timings, and transaction counts for the - given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: Information about the block, or ``null`` if the block hash is - malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?BlockInfo`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBlockInfo.json - :language: json - -.. function:: GetBlockSummary(block_hash: BlockHash) -> JsonResponse - - Get a summary of the transactions and data in a given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: A summary of the transactions and data in the block, or ``null`` if - the block hash is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?BlockSummary`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBlockSummary.json - :language: json - -.. function:: GetBlocksAtHeight(block_height: BlockHeight) -> JsonResponse - - Get a list of the blocks at the given height. - - :param block_height: A block height. - :type block_height: |grpc-block-height|_ - :returns: A list of block hashes. - :rtype: ``JsonResponse`` with ``[BlockHash]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBlocksAtHeight.json - :language: json - -.. function:: GetAncestors(block_hash: BlockHash, amount: Amount) -> JsonResponse - - Get a list of the blocks preceding the given block. The list will contain at - most ``amount`` blocks. - - :param block_hash: The block to get ancestors of. - :type block_hash: |grpc-block-hash|_ - :param UInt64 amount: The requested number of ancestors. - :returns: A list of block hashes, or ``null`` if the block hash is malformed - or doesn't exist. - :rtype: ``JsonResponse`` with ``?[BlockHash]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetAncestors.json - :language: json - -.. function:: GetBranches() -> JsonResponse - - Get the branches of the tree. This is the part of the tree above the last - finalized block. - - :returns: The branches of the tree. - :rtype: ``JsonResponse`` with ``Branch`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBranches.json - :language: json - -Accounts -======== - -.. function:: GetAccountList(block_hash: BlockHash) -> JsonResponse - - Get a list of all accounts that exist in the state at the end of the given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: A list of accounts, or ``null`` if the block hash is malformed or - doesn't exist. - :rtype: ``JsonResponse`` with ``?[AccountAddress]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetAccountList.json - :language: json - -.. _grpc-get-account-info: - -.. function:: GetAccountInfo(block_hash: BlockHash, address: AccountAddress) -> JsonResponse - - Get the state of an account in the given block. - - :param block_hash: The given block. - :param address: The account to query. - :type block_hash: |grpc-block-hash|_ - :type address: |grpc-account-address|_ - :returns: The state of the account, or ``null`` if either the block hash or account - address is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?AccountInfo`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetAccountInfo.json - :language: json - -.. function:: GetAccountNonFinalizedTransactions(account_address: AccountAddress) -> JsonResponse - - Get a list of non-finalized transactions present on an account. - - :param account_address: The account to query. - :type account_address: |grpc-account-address|_ - :returns: A list of hashes of non-finalized transactions, or null if the - account address is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?[TransactionHash]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetAccountNonFinalized.json - :language: json - -.. function:: GetNextAccountNonce(account_address: AccountAddress) -> JsonResponse - - Returns the next available nonce for this account. - - :param account_address: The account to query. - :type account_address: |grpc-account-address|_ - :returns: An account nonce and whether there are any non-finalized - transactions for the account. Or ``null`` if the account address is - malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?AccountNonceResponse`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetNextAccountNonce.json - :language: json - -Smart contracts -=============== - -.. function:: GetModuleList(block_hash: BlockHash) -> JsonResponse - - Get a list of all smart contract modules that exist in the state at the end of the given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: A list of hashes of smart contract modules, or ``null`` if the - block hash is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?[ModuleHash]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetModuleList.json - :language: json - -.. function:: GetModuleSource(block_hash: BlockHash, module_ref: ModuleReference) -> ?[Byte] - - Get the binary source of a smart contract module. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :param module_ref: The reference (hash) of the smart contract module. - :type block_hash: |grpc-module-reference|_ - :returns: The binary source of the module, or ``null`` if either the block hash or - module reference is malformed or doesn't exist. - :rtype: ``?[Byte]`` - -.. _grpc-get-instances: - -.. function:: GetInstances(block_hash: BlockHash) -> JsonResponse - - Get a list of all smart contract instances that exist in the state at the end - of the given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: A list of smart contract addresses, or ``null`` if the block hash - is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?[ContractAddress]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetInstances.json - :language: json - -.. _grpc-get-instance-info: - -.. function:: GetInstanceInfo(block_hash: BlockHash, address: ContractAddress) -> JsonResponse - - Get information about the given smart contract instance in the given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :param address: The smart contract instance. - :type address: |grpc-contract-address|_ - :returns: Information about the smart contract instance, or ``null`` if - either the block hash or contract address is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?InstanceInfo`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetInstanceInfo.json - :language: json - -.. function:: InvokeContract(block_hash: BlockHash, context: ContractContext) -> JsonResponse - - Invoke a smart contract instance and view its results as if it had been - updated at the end of the given block. Please note that *this is not a - transaction*, so it won't affect the contract on chain. It only simulates the invocation. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :param context: The context in which to invoke the contract. - :type context: |grpc-contract-context|_ - :returns: An invocation result, or ``null`` if the block hash is malformed or - doesn't exist, or if the contract context is malformed or invalid. - :rtype: ``JsonResponse`` with ``?InvokeContractResult`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/InvokeContract.json - :language: json - -Baking -====== - -.. function:: GetPoolStatus(block_hash: BlockHash, passive_delegation: Bool, baker_id: UInt64) -> JsonResponse - - Get the status of a pool. - If ``passive_delegation == true``, this returns the status for the passive delegators. - Otherwise, it returns the status for the baker with the specified ID (if it exists). - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :param Bool passive_delegation: Whether the request is for passive delegation or a - specific baker. - :param UInt64 baker_id: The baker id to get the status of. - :returns: The status of the pool, or ``null`` if the block hash is malformed, - or if either the block hash or baker id doesn't exist. - :rtype: ``JsonResponse`` with ``?PoolStatus`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetPoolStatus.json - :language: json - - -.. function:: GetRewardStatus(block_hash: BlockHash) -> JsonResponse - - Get an overview of the balance of special accounts in the given block. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: The reward status in the given block, or ``null`` if the block hash - is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?RewardStatus`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetRewardStatus.json - :language: json - -.. function:: GetBirkParameters(block_hash: BlockHash) -> JsonResponse - - Get an overview of the parameters used for baking. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: The parameters used for baking in the given block, or ``null`` if - the block hash is malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?BirkParameters`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBirkParameters.json - :language: json - -.. function:: GetBakerList(block_hash: BlockHash) -> JsonResponse - - Get a list of all baker IDs registered at that block in ascending order. Or - ``null``, if the block is invalid. - - :param block_hash: The given block. - :type block_hash: |grpc-block-hash|_ - :returns: A list of baker IDs, or ``null`` if the block hash is malformed or - doesn't exist. - :rtype: ``JsonResponse`` with ``?[BakerId]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetBakerList.json - :language: json - -.. function:: StartBaker() -> Bool - - Start the baker. - - :returns: Whether starting the baker succeeded. - :rtype: Bool - -.. function:: StopBaker() -> Bool - - Stop the baker. - - :returns: Whether stopping the baker succeeded. - :rtype: Bool - -The node -======== - -.. function:: NodeInfo() -> NodeInfoResponse - - Get information about the running node. - - :returns: Information about the running node. - :rtype: |NodeInfoResponse|_ - -.. function:: PeerVersion() -> String - - Get the version of the node software. - - :returns: The version of the node software. - :rtype: String - -.. function:: PeerUptime() -> UInt64 - - Get the uptime of the node in milliseconds. - - :returns: The uptime of the queried node in milliseconds. - :rtype: UInt64 - -.. function:: PeerTotalSent() -> UInt64 - - Get the total number of packets sent by the node. - - :returns: The total number of packets sent by the node. - :rtype: UInt64 - -.. function:: PeerTotalReceive() -> UInt64 - - Get the total number of packets received by the node. - - :returns: The total number of packets received. - :rtype: UInt64 - -.. function:: Shutdown() -> Bool - - Shut down the node. - - :returns: Whether shutting down succeeded. - :rtype: Bool - -.. function:: DumpStart(file: FilePath, raw: Bool) -> Bool - - Start dumping packages into the specified file. *Only available on a node - built with the network_dump feature.* - - :param FilePath file: The file to dump packages into. - :param Bool raw: Whether it should dump the raw packages. - :returns: Whether it started dumping correctly. - :rtype: Bool - -.. function:: DumpStop() -> Bool - - Stop dumping packages. *Only available on a node built with the - network_dump feature.* - - :returns: Whether it stopped dumping correctly. - :rtype: Bool - -Networks and peers -================== - -.. function:: PeerList(include_bootstrappers: Bool) -> PeerListResponse - - Get a list of the peers that the node is connected to. - - :param Bool include_bootstrappers: Whether to include the bootstrapper nodes - in the response. - :returns: A list of peers. - :rtype: |PeerListResponse|_ - -.. function:: PeerStats(include_bootstrappers: Bool) -> PeerStatsResponse - - Get information on the peers that the node is connected to. - - :param Bool include_bootstrappers: Whether to include the bootstrapper nodes - in the response. - :returns: Information about the peers. - :rtype: |PeerStatsResponse|_ - -.. function:: PeerConnect(ip: String, port: Int32) -> Bool - - Suggest the node to connect to the submitted peer. If successful, this adds - the peer to the list of peers. - - :param String ip: IP of the peer. - :param Int32 port: Port of the peer. - :returns: Whether the request was processed successfully. - :rtype: Bool - -.. function:: PeerDisconnect(ip: String, port: Int32) -> Bool - - Disconnect from the peer and remove them from the given addresses list if - they are on it. - - :param String ip: IP of the peer. - :param Int32 port: Port of the peer. - :returns: Whether the request was processed successfully. - :rtype: Bool - -.. function:: BanNode(node_id: String, port: UInt32, ip: String, catchup_status: CatchupStatus) -> Bool - - Ban a node from being a peer. Note that you should provide a ``node_id`` OR - an ``ip``, but not both. Use ``null`` for the option not chosen. - - :param String node_id: The id of the node to ban. - :param UInt32 port: *Deprecated*: No longer used. Pass in ``null``. - :param String ip: The ip of the node. - :param CatchupStatus catchup_status: *Deprecated*: No longer used. Pass in ``null``. - :returns: Whether the banning succeeded. - :rtype: Bool - -.. function:: UnbanNode(node_id: String, port: UInt32, ip: String, catchup_status: CatchupStatus) -> Bool - - Unban a previously banned node. Note that you should provide a ``node_id`` OR - an ``ip``, but not both. Use ``null`` for the option not chosen. - - :param String node_id: The id of the node to ban. - :param UInt32 port: *Deprecated*: No longer used. Pass in ``null``. - :param String ip: The ip of the node. - :param CatchupStatus catchup_status: *Deprecated*: No longer used. Pass in ``null``. - :returns: Whether the unbanning succeeded. - :rtype: Bool - -.. function:: GetBannedPeers() -> PeerListResponse - - Get a list of banned peers. - - :returns: A list of banned peers. - :rtype: |PeerListResponse|_ - -.. function:: JoinNetwork(network_id: Int32) -> Bool - - Attempt to join the specified network. - - :param Int32 network_id: The network to join. - :returns: Whether joining succeeded. - :rtype: Bool - -.. function:: LeaveNetwork(network_id: Int32) -> Bool - - Attempt to leave the specified network. - - :param Int32 network_id: The network to leave. - :returns: Whether leaving succeeded. - :rtype: Bool - -Chain data -========== - -.. function:: GetIdentityProviders(block_hash: BlockHash) -> JsonResponse - - Get a list of all identity providers that exist in the state at the end of the given block. - - :param block_hash: The block to query. - :type block_hash: |grpc-block-hash|_ - :returns: A list of identity providers, or ``null`` if the block hash is - malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?[IdentityProvider]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetIdentityProviders.json - :language: json - -.. function:: GetAnonymityRevokers(block_hash: BlockHash) -> JsonResponse - - Get a list of all anonymity revokers that exist in the state at the end of the given block. - - :param block_hash: The block to query. - :type block_hash: |grpc-block-hash|_ - :returns: A list of anonymity revokers, or ``null`` if the block hash is - malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?[AnonymityRevoker]`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetAnonymityRevokers.json - :language: json - -.. function:: GetCryptographicParameters(block_hash: BlockHash) -> JsonResponse - - Get the cryptographic parameters used in the given block. - - :param block_hash: The block to query. - :type block_hash: |grpc-block-hash|_ - :returns: The cryptographic parameters, or ``null`` if the block hash is - malformed or doesn't exist. - :rtype: ``JsonResponse`` with ``?CryptographicParameters`` (see JSON schema below) - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/GetCryptographicParameters.json - :language: json - -Types -===== - -.. _grpc-transaction-hash: - -``TransactionHash`` - Base-16 encoded hash of a transaction (64 characters). Example: - - .. code-block:: json - - "2e71affba96da648ca628eccda190c3f2c3868d16a99619337dd50725582c2d1" - -.. _grpc-block-hash: - -``BlockHash`` - Base-16 encoded hash of a block (64 characters). Example: - - .. code-block:: json - - "987d6c06256fbf874d6ba14f19baee4390a31c6ee58edd9cc4efef62e89d22d7" - -.. _grpc-block-height: - -``BlockHeight`` - The block height. - See more details in the protobuf file here: |BlockHeight|_. - -.. _grpc-account-address: - -``AccountAddress`` - A string with the account address. - A base-58 check with version byte 1 encoded address (with Bitcoin mapping - table). Example: - - .. code-block:: json - - "3DJoe7aUwMwVmdFdRU2QsnJfsBbCmQu1QHvEg7YtWFZWmsoBXe" - -.. _grpc-module-reference: - -``ModuleReference`` - A string with module reference, which is the hash of the module. - Example: - - .. code-block:: json - - "eecfe4ceda7432e2727d8137b9c23c4c343634e41657b72313fb061e249aaa97" - -.. _grpc-contract-address: - -``ContractAddress`` - A JSON object with two fields: index and subindex. Example: - - .. code-block:: json - - { "index": 11235, "subindex": 0 } - -.. _grpc-contract-context: - -``ContractContext`` - The context in which a contract instance is invoked. Represented as a JSON - object. - - .. collapse:: View JSON schema - - .. literalinclude:: grpc-json-schemas/ContractContext.json - :language: json - -.. _grpc-transaction-encoding: - -Transaction encoding --------------------- - -This section describes the ``BlockItem`` used in the |grpc-send-transaction|_. -The binary serialization of an ``BlockItem`` is also covered, as that is the -expected format when sending transactions. -All possible transactions are *not* covered on this page. -Instead, there is a **focus on transfers and the smart contract-related transactions**. - -.. note:: - - All numbers in this section use `big-endian encoding `_. - - -.. _grpc-block-item: - -``BlockItem`` - A union type of the different categories of transactions. - - The only supported BiVersion is currently ``0``. All the transactions - explained on this page belong to the category |grpc-account-transaction|_ which - has ``BiTag == 0``. - - .. code-block:: - - BiVersion ::= (x: Byte) => x if x < 2^7 - | (m: BiVersion) (x: Byte) => (x - 2^7) + 2^7 * m if x >= 2^7 - - BiTag ::= (n: UInt8) - - BlockItem ::= (version: BiVersion) (tag: BiTag) (transaction: TransactionType) - -.. _grpc-account-transaction: - -``AccountTransaction`` - A transaction that originates from a specific account (the sender), and is - paid for by the sender. - - |grpc-transaction-signature|_: Signatures for the transaction. The message to sign is the SHA256 of the |grpc-transaction-header|_ + |grpc-transaction-payload|_. - - |grpc-transaction-header|_: A header with common data needed for all types of transactions. - - |grpc-transaction-payload|_: The actual contents of the transaction. For smart contracts this is DeployModule, InitContract, or Update. - - .. code-block:: - - AccountTransaction ::= (signature: TransactionSignature) (header: TransactionHeader) (payload: TransactionPayload) - -.. _grpc-transaction-signature: - -``TransactionSignature`` - A transaction signature is a map from the index of the credential to another - map from the key index to the actual signature. - The credential index is relative to the account address, and the indices - should be distinct. - The key index is relative to the credential. - The maximum length of the list is 255, and the minimum length is 1. - - .. code-block:: - - Signature ::= (keyIndex: UInt8) (n: UInt16) (signature: Byteⁿ) - - Credential ::= (credentialIndex: UInt8) (n: UInt8) (signatures: Signatureⁿ) - - TransactionSignature ::= (n: UInt8) (credentials: Credentialⁿ) - -.. _grpc-transaction-header: - -``TransactionHeader`` - A transaction header is a struct which consists of the following fields: - - ``AccountAddress``: The sender account. - - ``Nonce``: Account nonce. Initial nonce is ``1``. Is incremented by 1 with - every transaction originating from an account. Find the current nonce with - |grpc-get-account-info|_. - - ``Energy``: The amount of energy allocated for the execution of this transaction. - - ``PayloadSize``: Size of the |grpc-transaction-payload|_ in bytes. - - ``TransactionExpiryTime``: Absolute expiration time after which transaction will not be executed. Measured in seconds since unix epoch. - - .. code-block:: - - TransactionHeader ::= (accountAddress: Byte³²) (nonce: UInt64) (energy: UInt64) (payloadSize: UInt32) (transactionExpiryTime: UInt64) - -.. _grpc-transaction-payload: - -``TransactionPayload`` - A union type with the different types of transactions. - This page only covers some transaction types. - - .. code-block:: - - TransactionPayload ::= (0: UInt8) (content: DeployModule) - | (1: UInt8) (content: InitContract) - | (2: UInt8) (content: Update) - | (3: UInt8) (content: Transfer) - | (16: UInt8) (content: TransferWithMemo) - | (n: UInt8) (content: ) - - .. _grpc-module-deploy: - - ``DeployModule`` - Deploy a Wasm module to the chain. - The smart contract ``version`` is prefixed. - The chain currently support contract versions ``0`` and ``1``. - - .. code-block:: - - DeployModule ::= (version: UInt32) (n: UInt32) (module: Byteⁿ) - - .. note:: - - When working with smart contracts, a typical workflow is: - - - Deploy a smart contract module by sending a |grpc-module-deploy|_ transaction. - - Create a contract instance from the module by sending an |grpc-init-contract|_ transaction. - - Find the address of the contract instance via |grpc-get-instances|_ and |grpc-get-instance-info|_. - - Update the contract by sending a |grpc-update|_ transaction. - - .. _grpc-init-contract: - - ``InitContract`` - Initialize a smart contract using a deployed smart contract module. If - successful, it creates a smart contract *instance* with a unique |grpc-contract-address|_. - - ``amount``: Amount in microCCD (``10^-6 CCD``). - - ``moduleRef``: Hash of the module on chain. Byte-array of fixed size 32. - - ``initName``: Name of the init function including ``init_`` prefix. *In - UTF-8 encoding.* - - ``parameter``: Parameter for the init function. - - .. code-block:: - - InitName ::= (n: UInt16) (utf8: Byteⁿ) - - Parameter ::= (n: UInt16) (data: Byteⁿ) - - InitContract ::= (amount: UInt64) (moduleRef: Byte³²) (initName: InitName) (parameter: Parameter) - - .. _grpc-update: - - ``Update`` - Update a smart contract instance using its ``ContractAddress``. - - ``amount``: Amount in microCCD (``10^-6 CCD``). - - ``contractAddress``: Address of contract instance consisting of an index - and subindex. - - ``ReceiveName``: Name of receive function including ``.`` - prefix. (Notice the ``.``). *In UTF-8 encoding*. - - ``Parameter``: Parameter for the receive function. - - .. code-block:: - - ContractAddress ::= (index: UInt64) (subindex: UInt64) - - ReceiveName ::= (n: UInt16) (utf8: Byteⁿ) - - Parameter ::= (n: UInt16) (data: Byteⁿ) - - Update ::= (amount: UInt64) (contractAddress: ContractAddress) (receiveName: ReceiveName) (parameter: Parameter) - - .. _grpc-transfer: - - ``Transfer`` - Transfer CCD from the sender account to the specified account address. - The ``amount`` is microCCD (``10^-6 CCD``). - - .. code-block:: - - Transfer ::= (accountAddress: Byte³²) (amount: UInt64) - - - .. _grpc-transfer-with-memo: - - ``TransferWithMemo`` - Transfer CCD from the sender account the specified account address and - include a memo. The memo can be up to 256 bytes long, excluding its - length (``n``). - - .. code-block:: - - Memo ::= (n: UInt16) (data: Byteⁿ) - - TransferWithMemo ::= (accountAddress: Byte³²) (memo: Memo) (amount: UInt64) - -.. |grpc-block-hash| replace:: ``BlockHash`` -.. |grpc-block-height| replace:: ``BlockHeight`` -.. |grpc-transaction-hash| replace:: ``TransactionHash`` -.. |grpc-account-address| replace:: ``AccountAddress`` -.. |grpc-contract-address| replace:: ``ContractAddress`` -.. |grpc-contract-context| replace:: ``ContractContext`` -.. |grpc-block-item| replace:: ``BlockItem`` -.. |grpc-account-transaction| replace:: ``AccountTransaction`` -.. |grpc-transaction-signature| replace:: ``TransactionSignature`` -.. |grpc-transaction-header| replace:: ``TransactionHeader`` -.. |grpc-transaction-payload| replace:: ``TransactionPayload`` -.. |grpc-module-deploy| replace:: ``ModuleDeploy`` -.. |grpc-init-contract| replace:: ``InitContract`` -.. |grpc-update| replace:: ``Update`` -.. |grpc-get-instances| replace:: ``GetInstances`` -.. |grpc-get-instance-info| replace:: ``GetInstanceInfo`` -.. |grpc-module-reference| replace:: ``ModuleReference`` -.. |grpc-send-transaction| replace:: ``SendTransaction`` -.. |grpc-get-account-info| replace:: ``GetAccountInfo`` -.. _NodeInfoResponse: https://github.com/Concordium/concordium-grpc-api/blob/232e34fbe163f3f537277d406f058774a8d3a432/concordium_p2p_rpc.proto#L121 -.. |NodeInfoResponse| replace:: ``NodeInfoResponse`` -.. _BlockHeight: https://github.com/Concordium/concordium-grpc-api/blob/232e34fbe163f3f537277d406f058774a8d3a432/concordium_p2p_rpc.proto#L271 -.. |BlockHeight| replace:: ``BlockHeight`` -.. _PeerStatsResponse: https://github.com/Concordium/concordium-grpc-api/blob/232e34fbe163f3f537277d406f058774a8d3a432/concordium_p2p_rpc.proto#L89 -.. |PeerStatsResponse| replace:: ``PeerStatsResponse`` -.. _PeerListResponse: https://github.com/Concordium/concordium-grpc-api/blob/232e34fbe163f3f537277d406f058774a8d3a432/concordium_p2p_rpc.proto#L79 -.. |PeerListResponse| replace:: ``PeerListResponse`` diff --git a/source/mainnet/net/references/grpc2.rst b/source/mainnet/net/references/grpc2.rst index 48b8ca8018..569505be9f 100644 --- a/source/mainnet/net/references/grpc2.rst +++ b/source/mainnet/net/references/grpc2.rst @@ -4,29 +4,24 @@ gRPC V2 documentation ====================== -Since version 4.5.0 the Concordium node, in addition to the legacy :ref:`gRPC -API`, supports a new API that has a much more detailed -schema definition, and does not rely on JSON responses. It also supports -streaming responses in cases where there is a lot of data, and supports -subscribing to new blocks and finalizations. - -The new V2 interface enables access to the same data as the original V1 interface, -but in addition supports new endpoints, such as the ability to retrieve the -entire smart contract state. - -The original gRPC interface is going into maintenance mode and will -be deprecated in the future. - -The `in-depth documentation -`_ -of the new interface lists and documents all the endpoints. - -As with the V1 interface, for best experience the interface should be used -through an SDK. However the new interface makes it substantially easier to build -an SDK since there is a canonical schema of responses. - -At present the `Concordium Rust SDK -`_, `Concordium Javascript (Node / Web) SDK `_, `.NET SDK `__ and `Rosetta `__ have support for the new -interface. -Other SDKs will be migrated in the future, before the V1 -interface is deprecated. +The gRPC v2 API has a much more detailed schema definition, and does not rely on JSON responses as the now deprecated gRPC v1 API did. It also supports streaming responses in cases where there is a lot of data, and supports subscribing to new blocks. + +The V2 interface enables access to the same data as the now deprecated V1 interface, but in addition supports new endpoints, such as the ability to retrieve the entire smart contract state. + +The original gRPC interface has been deprecated in all node distributions as of December 5th, 2023. + +The `in-depth documentation `_ of the new interface lists and documents all the endpoints. + +For best experience, the interface should be used through an SDK. However, the new interface makes it substantially easier to build an SDK since there is a canonical schema of responses. + +At present the following SDKs support gRPC v2: + +- `Concordium Rust SDK `_ + +- `Concordium Javascript (Node / Web) SDK `_ + +- `.NET SDK `__ + +- `Rosetta `__ + +- `Concordium Java SDK `_ diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index e1713fe101..0c739586e1 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -977,12 +977,22 @@ Mainnet Testnet ------- - October 16, 2023 + November 28, 2023 - Version 6.1.7 adds load shedding for gRPC v2. This helps with protecting the node in case of high number of concurrent requests since they are now dropped immediately as opposed to queued. + Version 6.2.x deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. + + As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. + + A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. + + The account map is now kept solely on disk in a separate lmdb database and it is no longer part of the internal block state database. This change results in less memory usage per account and a decrease in the growth of the database. .. dropdown:: Previous releases + .. dropdown:: 6.1.7 - October 16, 2023 + + Version 6.1.7 adds load shedding for gRPC v2. This helps with protecting the node in case of high number of concurrent requests since they are now dropped immediately as opposed to queued. + .. dropdown:: 6.1.6 - October 10, 2023 Concordium Node 6.1.6 contains bug fixes and improvements. **This is the last release of the node that has support for V1 gRPC API.** @@ -1447,24 +1457,38 @@ Tools Concordium Client ----------------- - October 10, 2023 + November 28, 2023 + + Concordium Client 6.2.0 includes support for the following: + + - Revised client's reconnect handling so that the client will no longer attempt to automatically reconnect on timeouts and node resource exhaustion. - Concordium Client 6.1.0 includes support for the following: + - Renamed bakers to validators in output in accordance with the upcoming tokenomics changes. - - Added baker win-time command for determining the earliest time a specified baker is expected to bake. + - Added additional configuration options that use validator in place of baker in accordance with the upcoming tokenomics changes. For example, ``concordium-client validator add``. The older options still exist, but are hidden. - - Added support for the following node version 6.1 queries under the ``raw`` command: + - The ``module inspect`` command now attempts to print any embedded verifiable build information. - - ``GetBakersRewardPeriod`` - - ``GetBlockCertificates`` - - ``GetBakerEarliestWinTime`` - - ``GetWinningBakersEpoch`` - - ``GetFirstBlockEpoch`` - - Add support for CommissionRates in ``CurrentPaydayBakerPoolStatus`` (Only available for node versions > 6.0). - - Show all options for importing an account. + - The ``module deploy`` command now warns if a module is being deployed that does not have embedded verifiable build information. .. dropdown:: Previous releases + .. dropdown:: 6.1.0 - October 10, 2023 + + Concordium Client 6.1.0 includes support for the following: + + - Added baker win-time command for determining the earliest time a specified baker is expected to bake. + + - Added support for the following node version 6.1 queries under the ``raw`` command: + + - ``GetBakersRewardPeriod`` + - ``GetBlockCertificates`` + - ``GetBakerEarliestWinTime`` + - ``GetWinningBakersEpoch`` + - ``GetFirstBlockEpoch`` + - Add support for CommissionRates in ``CurrentPaydayBakerPoolStatus`` (Only available for node versions > 6.0). + - Show all options for importing an account. + .. dropdown:: 6.0.1 - August 9, 2023 Concordium Client 6.0.1 adds support for the upcoming `protocol version 6 `_ which is planned for release on Testnet August 21, 2023. **Note that this version of Concordium-Client requires at least node version 5.4.** diff --git a/source/mainnet/smart-contracts/tutorials/fungible-tokens/mint-xfer.rst b/source/mainnet/smart-contracts/tutorials/fungible-tokens/mint-xfer.rst index 2195012a0f..7085f560ff 100644 --- a/source/mainnet/smart-contracts/tutorials/fungible-tokens/mint-xfer.rst +++ b/source/mainnet/smart-contracts/tutorials/fungible-tokens/mint-xfer.rst @@ -35,7 +35,7 @@ Run the command below to call the contract ``mint()`` function. Remember that th .. code-block:: console - concordium-client contract update --entrypoint mint --parameter-json ../nft-artifacts/mint-params.json --schema dist/fungible/schema.bin --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint mint --parameter-json ../nft-artifacts/mint-params.json --schema dist/fungible/schema.bin --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com Now you have successfully minted your fungible tokens. @@ -47,7 +47,7 @@ Check the state to see the balance, circulating supply, and maximum supply. Run .. code-block:: console - concordium-client contract invoke --entrypoint view --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract invoke --entrypoint view --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: images/invoke-after-mint.png :width: 100% @@ -102,7 +102,7 @@ Run the command below to invoke the transfer. Remember that this is using the Co .. code-block:: console - concordium-client contract update --entrypoint transfer --parameter-json ../token-artifacts/transfer.json --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint transfer --parameter-json ../token-artifacts/transfer.json --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com Check the state one more time to see that the transfer worked as expected. @@ -134,7 +134,7 @@ Burn 200 tokens from your first account. To do that, run the command below to ca .. code-block:: console - concordium-client contract update --entrypoint burn --parameter-json ../token-artifacts/burn.json --sender --energy 6000 --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract update --entrypoint burn --parameter-json ../token-artifacts/burn.json --sender --energy 6000 --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: images/burn-tokens.png :width: 100% diff --git a/source/mainnet/smart-contracts/tutorials/fungible-tokens/smart-contract.rst b/source/mainnet/smart-contracts/tutorials/fungible-tokens/smart-contract.rst index eb9fa2c1e0..025c6c259b 100644 --- a/source/mainnet/smart-contracts/tutorials/fungible-tokens/smart-contract.rst +++ b/source/mainnet/smart-contracts/tutorials/fungible-tokens/smart-contract.rst @@ -488,13 +488,13 @@ You can embed the schema file in the module, which means you don’t have to cal Deploy the smart contract ------------------------- -If you don't have your own testnet node running, Concordium provides a running testnet gRPC node that is available at ``node.testnet.concordium.com`` on port 10000 (GRPCv1) and port 20000 (gRPCv2 and gRPC-web). You can use this node for API calls of *chain methods only* with GRPC v1, gRPC v2, and gRPC web. This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. For some use cases you might need to run your own local node due to the limitations of this one. +If you don't have your own testnet node running, Concordium provides a running testnet gRPC node that is available at ``node.testnet.concordium.com`` on port 20000 (gRPCv2 and gRPC-web). You can use this node for API calls of *chain methods only*. This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. For some use cases you might need to run your own local node due to the limitations of this one. Run the command below to deploy the smart contract. This command is structured to use the Concordium testnet node described above. If you are using your own local node, adjust the command accordingly. .. code-block:: console - concordium-client module deploy dist/fungible/module.wasm.v1 --sender --name --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client module deploy dist/fungible/module.wasm.v1 --sender --name --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: images/deploy-sc.png :width: 100% @@ -507,7 +507,7 @@ Using the Module reference hash value, create a contract instance with the comma .. code-block:: console - concordium-client contract init --sender --energy 30000 --contract --grpc-port 10000 --grpc-ip node.testnet.concordium.com + concordium-client contract init --sender --energy 30000 --contract --grpc-port 20000 --grpc-ip node.testnet.concordium.com .. image:: images/initialize-sc.png :width: 100% diff --git a/source/mainnet/variables.rst b/source/mainnet/variables.rst index a5e09a5082..264dc28e3e 100644 --- a/source/mainnet/variables.rst +++ b/source/mainnet/variables.rst @@ -13,8 +13,8 @@ .. |bw| replace:: Concordium Wallet for Web .. Client verification variables -.. |client-linux| replace:: concordium-client_6.1.0-1 -.. |client-version| replace:: 6.1.0-1 +.. |client-linux| replace:: concordium-client_6.2.0-0 +.. |client-version| replace:: 6.2.0-0 .. |client-linux-checksum| replace:: a52a035100d4b72580024b96bd69c750c3f20da8d93f6c405dde70f12c9dd878 .. Cargo verification variables @@ -24,7 +24,7 @@ .. Node version variables .. |mainnet-node-version| replace:: 6.1.7 -.. |testnet-node-version| replace:: 6.1.7 +.. |testnet-node-version| replace:: 6.2.0 .. Node debian package verification variables .. |node-deb-package| replace:: concordium-mainnet-node_6.1.7-0_amd64.deb diff --git a/source/shared/setup-env.rst b/source/shared/setup-env.rst index d1bf3f4fa8..f4f7896113 100644 --- a/source/shared/setup-env.rst +++ b/source/shared/setup-env.rst @@ -231,7 +231,7 @@ Remember you are working on the testnet. Check if your node collector is up and .. Note:: - For testing purposes, a node is available on testnet to use when testing smart contracts and dApps. You can use this node for API calls of chain methods only with GRPC v1, gRPC v2, and gRPC web. The address is node.testnet.concordium.com on port 10000 (GRPCv1) and port 20000 (gRPCv2 and gRPC-web). This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. + For testing purposes, a node is available on testnet to use when testing smart contracts and dApps. You can use this node for API calls of chain methods only with gRPC v2 and gRPC web. The address is node.testnet.concordium.com on port 20000 (gRPCv2 and gRPC-web). You can use this node for API calls of *chain methods only*. This node is maintained by Concordium, but Concordium does not guarantee availability. The status of this node is available on the `Testnet status page `__. .. _setup-wallet: From 5ba3781eacbeeb46d46c6a30be09ce8bfeb532ad Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 08:53:32 +0100 Subject: [PATCH 06/44] baker win-time documentation. --- source/mainnet/net/references/query-node.rst | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index e9a9e5ecfb..6d6ffe1172 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -332,8 +332,18 @@ Earliest time a baker may be expected to bake a block Baker 1 is expected to bake no sooner than: Thu, 26 Oct 2023 07:01:26 UTC (in 34s 699ms) -Show the earliest time the baker may be expected to bake a block. +Get the projected earliest time at which a particular baker will be required to bake a block. -- ``BAKER-ID``: Baker ID to query -- ``local-time``: Display time in the local time zone (instead of UTC). -- ``poll``: Repeatedly poll for the latest time.. +If the baker is not a baker for the current reward period, this returns a timestamp at the +start of the next reward period. If the baker is a baker for the current reward period, the +earliest win time is projected from the current round forward, assuming that each round after +the last finalized round will take the minimum block time. (If blocks take longer, or timeouts +occur, the actual time may be later, and the reported time in subsequent queries may reflect +this.) At the end of an epoch (or if the baker is not projected to bake before the end of the +epoch) the earliest win time for a (current) baker will be projected as the start of the next +epoch. + +One can supply the ``--poll`` option in order to continuously receive updates of when +the supplied baker may be expected to bake a block. + +This query is only supported from protocol version 6 and onwards. From 4bb81255b326269798880ad11a55fe63ff75f6f7 Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 09:57:47 +0100 Subject: [PATCH 07/44] Update storage folders descriptions in troubleshooting guides and remove image from windows troubleshooting. --- source/mainnet/net/nodes/troubleshoot-docker.rst | 3 +++ source/mainnet/net/nodes/troubleshoot-macos.rst | 1 + source/mainnet/net/nodes/troubleshoot-ubuntu.rst | 5 ++++- source/mainnet/net/nodes/troubleshoot-windows.rst | 3 +-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/source/mainnet/net/nodes/troubleshoot-docker.rst b/source/mainnet/net/nodes/troubleshoot-docker.rst index 3c6feb3236..f48a150bd3 100644 --- a/source/mainnet/net/nodes/troubleshoot-docker.rst +++ b/source/mainnet/net/nodes/troubleshoot-docker.rst @@ -15,6 +15,7 @@ Your node state directory should look something like this: .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat @@ -26,6 +27,7 @@ But because of the error it might look like this: .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat @@ -55,6 +57,7 @@ The database directory should contain matching pairs of ``blockstate-$i.dat`` an .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat diff --git a/source/mainnet/net/nodes/troubleshoot-macos.rst b/source/mainnet/net/nodes/troubleshoot-macos.rst index 518b143c83..e0eb4386e7 100644 --- a/source/mainnet/net/nodes/troubleshoot-macos.rst +++ b/source/mainnet/net/nodes/troubleshoot-macos.rst @@ -21,6 +21,7 @@ The database directory should contain matching pairs of ``blockstate-$i.dat`` an .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat diff --git a/source/mainnet/net/nodes/troubleshoot-ubuntu.rst b/source/mainnet/net/nodes/troubleshoot-ubuntu.rst index 9c75365ce4..39bde1e979 100644 --- a/source/mainnet/net/nodes/troubleshoot-ubuntu.rst +++ b/source/mainnet/net/nodes/troubleshoot-ubuntu.rst @@ -14,7 +14,8 @@ This error occurs due to the node running out of memory during the protocol upda Your node state directory should look something like this: .. code-block:: console - + + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat @@ -26,6 +27,7 @@ But because of the error it might look like this: .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat @@ -55,6 +57,7 @@ The database directory should contain matching pairs of ``blockstate-$i.dat`` an .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat diff --git a/source/mainnet/net/nodes/troubleshoot-windows.rst b/source/mainnet/net/nodes/troubleshoot-windows.rst index a9364c868f..aef60d0e9e 100644 --- a/source/mainnet/net/nodes/troubleshoot-windows.rst +++ b/source/mainnet/net/nodes/troubleshoot-windows.rst @@ -26,10 +26,9 @@ The solution is to delete the relevant portion of the database. The database directory should contain matching pairs of ``blockstate-$i.dat`` and ``treestate-$i`` files for some number of consecutive i's starting at 0. The number of the files differs depending on which protocol version is current. -.. image:: ../images/run-node/windows-node-db-files.png - .. code-block:: console + accountmap blockstate-0.dat blockstate-1.dat blockstate-2.dat From f8457101d008548c92ccab562c6aec09ed7488f6 Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 10:05:25 +0100 Subject: [PATCH 08/44] lint fix. --- source/mainnet/net/nodes/troubleshoot-ubuntu.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/nodes/troubleshoot-ubuntu.rst b/source/mainnet/net/nodes/troubleshoot-ubuntu.rst index 39bde1e979..c25df721fa 100644 --- a/source/mainnet/net/nodes/troubleshoot-ubuntu.rst +++ b/source/mainnet/net/nodes/troubleshoot-ubuntu.rst @@ -14,7 +14,7 @@ This error occurs due to the node running out of memory during the protocol upda Your node state directory should look something like this: .. code-block:: console - + accountmap blockstate-0.dat blockstate-1.dat From 66ac7db349eeda6e3f575a558e6595598c376ece Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 21:22:03 +0100 Subject: [PATCH 09/44] validator terminology --- source/mainnet/net/references/query-node.rst | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index 6d6ffe1172..6779a76bec 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -18,7 +18,7 @@ a backend node: and its relation to other blocks on the chain. - Consensus state: Show the parameters of the consensus protocol and statistics related to baking and finalization of blocks. -- Baker queries: Show baker information. +- Validator queries: Show validator information. .. _query-account-state: @@ -320,30 +320,30 @@ following command: This prints a JSON list containing any such pending updates. As before you can also pass a block hash to the command to query a specific block. -Baker queries +Validator queries ============== -Earliest time a baker may be expected to bake a block +Earliest time a validator may be expected to make a block ----------------------------------------------------- .. code-block:: console - $concordium-client baker win-time 1 - Baker 1 is expected to bake no sooner than: + $concordium-client validator win-time 1 + Validator 1 is expected to bake no sooner than: Thu, 26 Oct 2023 07:01:26 UTC (in 34s 699ms) -Get the projected earliest time at which a particular baker will be required to bake a block. +Get the projected earliest time at which a particular validator will be required to make a block. -If the baker is not a baker for the current reward period, this returns a timestamp at the -start of the next reward period. If the baker is a baker for the current reward period, the +If the validator is not a validator for the current reward period, this returns a timestamp at the +start of the next reward period. If the validator is a validator for the current reward period, the earliest win time is projected from the current round forward, assuming that each round after the last finalized round will take the minimum block time. (If blocks take longer, or timeouts occur, the actual time may be later, and the reported time in subsequent queries may reflect -this.) At the end of an epoch (or if the baker is not projected to bake before the end of the -epoch) the earliest win time for a (current) baker will be projected as the start of the next +this.) At the end of an epoch (or if the validator is not projected to make a block before the end of the +epoch) the earliest win time for a (current) validator will be projected as the start of the next epoch. One can supply the ``--poll`` option in order to continuously receive updates of when -the supplied baker may be expected to bake a block. +the supplied validator may be expected to make a block. This query is only supported from protocol version 6 and onwards. From bb0bb29b9759a742ab06c9a798d386d9d8d75b65 Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 21:26:22 +0100 Subject: [PATCH 10/44] fix underline too short. --- source/mainnet/net/references/query-node.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index 6779a76bec..1f8d37cb1d 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -321,7 +321,7 @@ This prints a JSON list containing any such pending updates. As before you can also pass a block hash to the command to query a specific block. Validator queries -============== +================= Earliest time a validator may be expected to make a block ----------------------------------------------------- From e2517eeb6134350251fdbdde85a4d65c4d2d3209 Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Thu, 16 Nov 2023 21:32:31 +0100 Subject: [PATCH 11/44] fix wording. --- source/mainnet/net/references/query-node.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index 1f8d37cb1d..da71f14283 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -323,27 +323,27 @@ also pass a block hash to the command to query a specific block. Validator queries ================= -Earliest time a validator may be expected to make a block +Earliest time a validator may be expected to produce a block ----------------------------------------------------- .. code-block:: console $concordium-client validator win-time 1 - Validator 1 is expected to bake no sooner than: + Validator 1 is expected to produce a block no sooner than: Thu, 26 Oct 2023 07:01:26 UTC (in 34s 699ms) -Get the projected earliest time at which a particular validator will be required to make a block. +Get the projected earliest time at which a particular validator will be required to produce a block. If the validator is not a validator for the current reward period, this returns a timestamp at the start of the next reward period. If the validator is a validator for the current reward period, the earliest win time is projected from the current round forward, assuming that each round after the last finalized round will take the minimum block time. (If blocks take longer, or timeouts occur, the actual time may be later, and the reported time in subsequent queries may reflect -this.) At the end of an epoch (or if the validator is not projected to make a block before the end of the +this.) At the end of an epoch (or if the validator is not projected to produce a block before the end of the epoch) the earliest win time for a (current) validator will be projected as the start of the next epoch. One can supply the ``--poll`` option in order to continuously receive updates of when -the supplied validator may be expected to make a block. +the supplied validator may be expected to produce a block. This query is only supported from protocol version 6 and onwards. From a0e8bfb4d6ddc5e5f77d6f71cb32f12521b0bb1a Mon Sep 17 00:00:00 2001 From: Emil Lai Date: Fri, 17 Nov 2023 06:51:32 +0100 Subject: [PATCH 12/44] fix. --- source/mainnet/net/references/query-node.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/references/query-node.rst b/source/mainnet/net/references/query-node.rst index da71f14283..894c4502aa 100644 --- a/source/mainnet/net/references/query-node.rst +++ b/source/mainnet/net/references/query-node.rst @@ -324,7 +324,7 @@ Validator queries ================= Earliest time a validator may be expected to produce a block ------------------------------------------------------ +------------------------------------------------------------ .. code-block:: console From dcd91a5097cc1ea74b30eed04530325ed6a0249e Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 17 Nov 2023 09:34:16 +0100 Subject: [PATCH 13/44] Update grpc2.rst --- source/mainnet/net/references/grpc2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/references/grpc2.rst b/source/mainnet/net/references/grpc2.rst index 569505be9f..036c43376e 100644 --- a/source/mainnet/net/references/grpc2.rst +++ b/source/mainnet/net/references/grpc2.rst @@ -20,7 +20,7 @@ At present the following SDKs support gRPC v2: - `Concordium Javascript (Node / Web) SDK `_ -- `.NET SDK `__ +- `.NET SDK `__ - `Rosetta `__ From 744b637b3b7d642303c69f295521eb7a1d60a41e Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 17 Nov 2023 09:35:01 +0100 Subject: [PATCH 14/44] Update release-notes-lp.rst --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 0c739586e1..71341e0d7b 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -980,7 +980,7 @@ Testnet November 28, 2023 Version 6.2.x deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. - + As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. From 95fb7dc147a571f5a6ad78ad5e08fd21b604f5a1 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Thu, 23 Nov 2023 11:35:14 +0100 Subject: [PATCH 15/44] Company ID tool --- .../mainnet/net/guides/company-identities.rst | 259 +++++------------- .../net/images/company-id-create-acct.png | Bin 0 -> 106393 bytes .../mainnet/net/images/company-id-recover.png | Bin 0 -> 105821 bytes .../mainnet/net/images/company-id-request.png | Bin 0 -> 81039 bytes source/mainnet/net/installation/downloads.rst | 15 +- 5 files changed, 86 insertions(+), 188 deletions(-) create mode 100644 source/mainnet/net/images/company-id-create-acct.png create mode 100644 source/mainnet/net/images/company-id-recover.png create mode 100644 source/mainnet/net/images/company-id-request.png diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 6754add017..ab02ab69bd 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -9,202 +9,101 @@ Company identity creation A company identity is for companies that need an identity and accounts on the Concordium blockchain, but don't want that identity to belong to a specific person. Company identities are therefore issued with documents that identify the company and not an individual. Company identities are only relevant for a few companies, such as crypto exchanges. -You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a company identity. You need to use a set of command-line tools, and you need to communicate directly with the identity provider (currently Notabene). `This page `_ describes Notabene's process, including recovery of company identities. +You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a company identity. You need to use the Company identity management tool, and you need to communicate directly with the identity provider (currently Notabene). `This page `_ describes Notabene's process, including recovery of company identities. -The information below describes how to create a company identity, how to create accounts with a company identity, and how to recover a company identity. Note that the process differs for testnet and mainnet. +The information below describes how to create a company identity, how to create accounts with a company identity, and how to recover a company identity. If you experience issues with the Concordium Company ID tool, please contact Concordium’s technical support via support@concordium.software. -Create an identity request -========================== +Using the company identity tool +=============================== -.. dropdown:: Mainnet +Once you have dowloaded the Concordium Company ID tool for your platform and installed it, you should choose your network, either Mainnet or Testnet. A default Concordium node URL is used, but you can enter your node URL, if desired. - #. Download the tools for your platform. +Request identity +---------------- - - `Tools for Linux `__ - - SHA256 checksum of the download: ``fd3620f3f3e2e9540b262ae68b8273c59816fbaa12d495629b07555c65bab4a2`` +#. Click **Request identity**. - - `Tools for Windows `__ - - SHA256 checksum of the download: ``38433e51efa95121ee4e25a15552dd02905193e3de5d3976e4b067bd9cb46096`` +#. Read the information and click **Proceed**. - - `Tools for MacOS `__ - - SHA256 checksum of the download: ``6f457a05dc2f3345b48fd7d9d387e80b46d37ceaa6ebeadd759b6de4e634a4ca`` +#. Write down or save your seedphrase by clicking the copy button to copy your seedphrase to the clipboard and remember to go to the clipboard and save the file. Keep your seedphrase secure as you will need it to create accounts or recover the identity. Click **Proceed**. - #. Extract the files in the bundle to the same location on your computer. The bundle contains the following files: +.. image:: ../images/company-id-request.png + :alt: company id tool screen showing identities related to seedphrase and option to select + :width: 50px - - ``user_cli`` (tool) +#. Enter your seedphrase to verify that you have recorded it correctly. Click **Proceed**. - - ``cryptographic-parameters.json`` +#. Click **Generate request.json**. The command outputs the ``request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. - - ``ars.json`` + - For **Mainnet** requests: Send the file to ania@notabene.id together with any other required identity data as described in the `entity verification instructions `_. - - ``ip-info.json`` (public keys of the identity provider Notabene) + - For **Testnet** requests: Send the file to support@concordium.software with the subject line "Test company identity". - The ``user_cli`` tool supports three modes: the ``generate-request-v1`` mode, the ``create-credential-v1`` mode and ``recover-identity``. The ``generate-request-v1`` generates the request for the identity object that is to be sent to the identity provider. In the ``create-credential-v1`` mode the tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. The ``recover-identity`` request generates an identity recovery request to be sent to the identity provider. +When the identity has been verified successfully, you will receive an email with an identity object file named ``id-object.json``. Store this file securely as you need it to create accounts and regenerate account keys. - #. Download ``concordium-client`` for your platform. See :ref:`Downloads` to get the file and checksum. +Create account +-------------- - #. To generate a request for an identity object, use the following command: +After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. - .. code-block:: console +**Create account** can also be used to regenerate the keys for an old account. - user_cli generate-request-v1 --cryptographic-parameters cryptographic-parameters.json --ars ars.json --ip-info ip-info.json --request-out request.json +#. Click **Create Account**. - The above command will ask for some additional input. You have to choose anonymity revokers and revocation threshold. Use arrow keys to navigate through the lists and the space key to select and deselect list entries. Select whether the identity shall be used for Mainnet or Testnet. Afterwards, 24 BIP-39 will be generated and shown; write down the words and type them in again. This is your secret recovery phrase. +#. Enter your seedphrase in the Enter seedphrase field. In the Identity object file field click to navigate to the location of the stored ``id-object.json`` file. Click **Get Accounts**. - The command outputs the ``request.json`` file which contains the request that should be sent to ania@notabene.id. Store the auxiliary output securely. +.. image:: ../images/company-id-create-acct.png + :alt: company id tool screen showing seedphrase field and file selection box + :width: 50px - #. To verify your identity towards Notabene, follow the `entity verification instructions `_. When the identity has been verified successfully, Notabene will notify you by email, and they will send you an identity object file named ``id-object.json``. If you experience any issues with this step, identity verification, please contact Notabene via ania@notabene.id. +#. On the next screen, click **Create Account** to create an account with this company identity. When prompted, save the ``account-keys.json`` in a secure location as you will need them to interact with the accounts on-chain. You can click **Create account** again to create another account. - If you experience issues with steps 1, 2, 3, or 4 please contact Concordium’s technical support via support@concordium.software. +.. dropdown:: Format of the key files + Both initial account keys and subsequent account keys are stored in JSON files. The unencrypted data is a JSON record with a number of fields. For sending transactions the fields that are relevant are: -.. dropdown:: Testnet + - ``accountKeys`` contains the account keys. It has the following format: - #. Download the tools for your platform. + .. code-block:: json - - `Tools for Linux `__ - - SHA256 checksum of the download: ``2847d59ff2a0806f081b04a503644f16d8f799e6975f1c32e9e6ce4871c25c49`` - - - `Tools for Windows `__ - - SHA256 checksum of the download: ``208f2054b19fe8f90a2e2fbeb026e34a496e0353c596e2c422f082ca881e32dc`` - - - `Tools for MacOS `__ - - SHA256 checksum of the download: ``d2d514e85b495fc4a25dbe349174e94a933f0447986cd502e8f17d7e7426e263`` - - #. Extract the files in the bundle to the same location on your computer. The bundle contains the following files: - - - ``user_cli`` (tool) - - - ``cryptographic-parameters-testnet.json`` - - - ``ars-testnet.json`` - - - ``ip-info-testnet.json`` (public keys of the identity provider) - - The ``user_cli`` tool supports three modes: the ``generate-request-v1`` mode, the ``create-credential-v1`` mode and ``recover-identity``. The ``generate-request-v1`` generates the request for the identity object that is to be sent to the identity provider. In the ``create-credential-v1`` mode the tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. The ``recover-identity`` request generates an identity recovery request to be sent to the identity provider. - - #. Download ``concordium-client`` for your platform. See :ref:`Downloads` to get the file and checksum. - - #. To generate a request for an identity object, use the following command: - - .. code-block:: console - - user_cli generate-request-v1 --cryptographic-parameters cryptographic-parameters-testnet.json --ars ars-testnet.json --ip-info ip-info-testnet.json --request-out request.json - - The above command will ask for some additional input. You have to choose anonymity revokers and revocation threshold. Use arrow keys to navigate through the lists and the space key to select and deselect list entries. Select whether the identity shall be used for Mainnet or Testnet. Afterwards, 24 BIP-39 will be generated and shown; write down the words and type them in again. You need these when creating credentials. - - The command outputs the ``request.json`` file which contains the request that should be sent to the identity provider. - - #. Email the ``request.json`` output file to support@concordium.software with the subject line "Test company identity". The request should be sent to the identity provider through a trusted channel, together with any other required identity data. Store the auxiliary output securely. - - #. When the identity has been verified successfully, Concordium will notify you by email, and they will send you an identity object file named ``id-object.json``. Use this identity object file when creating accounts. - - If you experience issues, please contact Concordium’s technical support via support@concordium.software. - -Create accounts -=============== - -After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. Accounts are created by deploying credentials. The user_cli tool can only be used to create credentials. To deploy them to the chain, thus creating accounts, you need to use concordium-client and access to a node. - -.. dropdown:: Mainnet - - #. To create additional accounts from the identity object returned by Notabene, run the following command: - - .. code-block:: console - - user_cli create-credential-v1 --cryptographic-parameters cryptographic-parameters.json --ars ars.json --ip-info ip-info.json --id-object id-object.json --keys-out account-keys.json --credential-out credential.json - - You will have to select whether to reveal the LEI, which was optional when creating the identity object. Use the space key to select and deselect list entries. You will also be asked whether to create credential for Mainnet or Testnet. Afterwards you will be asked to type in the 24 BIP-39 words from earlier. - - The command outputs the following files: - - - ``account-keys.json`` which contains account keys of the account that will be created by the credential. - - ``credential.json`` which contains the payload of the account creation transaction. This must be sent to the chain, otherwise the account will not be created. By default this must be sent to the chain within 15 minutes. A larger or shorter message expiry may be set with --message-expiry flag to the command. Note that the credential number must be unique for each respective ``id-object.json``. Duplicate credential numbers for the same ``id-object.json`` will be rejected when submitting to chain. - - .. Note:: - - You must deploy the ``credential.json`` output file to the chain exactly as described below. If you don't, the account will not be created. You need access to a node to complete this step. Store the auxiliary output securely. - - 2. To create the account on the chain make sure you have access to a node, then run the following command with concordium-client: - - .. code-block:: console - - concordium-client transaction deploy-credential credential.json - - where ``credential.json`` is the file obtained in the previous step. If the node runs on a different machine or in a custom setup, the options ``--grpc-ip`` and ``--grpc-port`` can be used to set the `IP address`_ and `port number`_ where the node is accessible. - - If you experience issues, please contact Concordium’s technical support via support@concordium.software. - -.. dropdown:: Testnet - - #. To create additional accounts from the identity object returned by Concordium, run the following command: - - .. code-block:: console - - user_cli create-credential-v1 --cryptographic-parameters cryptographic-parameters-testnet.json --ars ars-testnet.json --ip-info ip-info-testnet.json --id-object id-object.json --keys-out account-keys.json --credential-out credential.json - - You will have to select whether to reveal the LEI, which was optional when creating the identity object. Use the space key to select and deselect list entries. You will also be asked whether to create credential for Mainnet or Testnet. Afterwards you will be asked to type in the 24 BIP-39 words from earlier. - - The command outputs the following files: - - - ``account-keys.json`` which contains account keys of the account that will be created by the credential. - - ``credential.json`` which contains the payload of the account creation transaction. This must be sent to the chain, otherwise the account will not be created. By default this must be sent to the chain within 15 minutes. A larger or shorter message expiry may be set with --message-expiry flag to the command. Note that the credential number must be unique for each respective ``id-object.json``. Duplicate credential numbers for the same ``id-object.json`` will be rejected when submitting to chain. - - .. Note:: - - You must deploy the ``credential.json`` output file to the chain exactly as described below. If you don't, the account will not be created. You need access to a node to complete this step. Store the auxiliary output securely. - - 2. To create the account on the chain make sure you have access to a node, then run the following command with ``concordium-client``: - - .. code-block:: console - - concordium-client transaction deploy-credential credential.json - - where ``credential.json`` is the file obtained in the previous step. If the node runs on a different machine or in a custom setup, the options ``--grpc-ip`` and ``--grpc-port`` can be used to set the `IP address`_ and `port number`_ where the node is accessible. - - Once you have created accounts, you can request CCDs for testing. To request CCDs for testing, run the following command: - - ``curl -X PUT https://wallet-proxy.testnet.concordium.com/v0/testnetGTUDrop/3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV`` where you replace 3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV with the account address that should receive the CCDs. - - If you experience issues, please contact Concordium’s technical support via support@concordium.software. - -Recovery -======== - -If the identity object used to create credentials is lost, it can be recovered from the identity provider by generating a recovery request using the 24 words used when the identity was originally created. Note that the process differs between mainnet and testnet. - -.. dropdown:: Mainnet - - #. To recover your identity object (e.g. if you lost it), run the following command: - - .. code-block:: console - - user_cli recover-identity --cryptographic-parameters cryptographic-parameters.json --ip-info ip-info.json --request-out recovery-request.json - - #. Email the ``recovery-request.json`` output file to ania@notabene.id. The request should be sent to the identity provider through a trusted channel, together with any other required identity data. When the recovery request has been validated successfully, Notabene will notify you by email, and they will return the identity object named ``id-object.json`` that you lost. With the recovered identity object, you can then recreate your account keys(account-keys.json) by running ``user_cli create-credential-v1``. - - If you experience issues, please contact Concordium’s technical support via support@concordium.software. + "accountKeys": { + "keys": { + "0": { + "keys": { + "0": { + "signKey": "1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7", + "verifyKey": "7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4" + } + }, + "threshold": 1 + } + }, + "threshold": 1 + } -.. dropdown:: Testnet + which contains the account keys. In this example the account has a single credential with index 0, and that credential has a single key with index 0. The private key is 1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7 and its public key is 7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4. - #. To recover your identity object (e.g. if you lost it), run the following command: + - ``address`` is the address of the account, e.g., - .. code-block:: console + .. code-block:: json - user_cli recover-identity --cryptographic-parameters cryptographic-parameters-testnet.json --ip-info ip-info-testnet.json --request-out recovery-request.json + "address": "2xe6cXEzBJZ8KXSYwb5uXJdHPZfAstbSZjfdAqsoF7VEq6q7AP" - Email the ``recovery-request.json`` output file to support@concordium.software with the subject line "Recover company identity". + - keys for encrypted transfers. These are only needed for sending and receiving encrypted transfers. - #. When the recovery request has been validated successfully, Concordium will notify you by email, and they will return the identity object named ``id-object.json`` that you lost. With the recovered identity object, you can then recreate your account keys(account-keys.json) by running ``user_cli create-credential-v1``. + .. code-block:: json - If you experience issues, please contact Concordium’s technical support via support@concordium.software. + "encryptionPublicKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c58a2f44906bda77f42bc3503b53b604a851737829899ffd4895abc0184e2da448e673f5e87367991d4a453a7f562df974", + "encryptionSecretKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c557da780304fba3b831439243201396e8c83daa83da1acc385a7a28519011e6da" Import created accounts into ``concordium-client`` -================================================== +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To use the accounts created in the Concordium Company ID tool, you must use Concordium Client. You can download it :ref:`here`. For information about how to use it, see :ref:`concordium-client`. The account keys are primarily meant for clients to integrate into their key management solution and their software, e.g., an exchange integrating their trading platform with the Concordium chain. -However if the ``account-keys.json`` file is not encrypted it can be imported into ``concordium-client`` with the command: +However, if the ``account-keys.json`` file is not encrypted it can be imported into ``concordium-client`` with the command: .. code-block:: console @@ -216,41 +115,27 @@ If the account-keys.json file is encrypted then it must first be decrypted. This The initial account keys cannot be directly imported into ``concordium-client``. -Format of the key files ------------------------ +Once you have created accounts, you can request CCDs for testing. To request CCDs for testing, run the following command: -Both initial account keys and subsequent account keys are stored in JSON files. The unencrypted data is a JSON record with a number of fields. For sending transactions the fields that are relevant are: +``curl -X PUT https://wallet-proxy.testnet.concordium.com/v0/testnetGTUDrop/3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV`` where you replace 3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV with the account address that should receive the CCDs. -- ``accountKeys`` contains the account keys. It has the following format: +Identity recovery +----------------- - .. code-block:: json - - "accountKeys": { - "keys": { - "0": { - "keys": { - "0": { - "signKey": "1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7", - "verifyKey": "7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4" - } - }, - "threshold": 1 - } - }, - "threshold": 1 - } +If the identity object used to create credentials is lost, it can be recovered from the identity provider by generating a recovery request using the 24 words used when the identity was originally created. Recover identity generates an identity recovery request to be sent to the identity provider. - which contains the account keys. In this example the account has a single credential with index 0, and that credential has a single key with index 0. The private key is 1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7 and its public key is 7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4. +#. Click **Identity Recovery**. -- ``address`` is the address of the account, e.g., +#. Enter your seedphrase in the Enter seedphrase field. And click **Find identities**. - .. code-block:: json +#. You see a list of identities associated with the seedphrase. In the Identities to recover drop-down, select the identity you want to recover. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. - "address": "2xe6cXEzBJZ8KXSYwb5uXJdHPZfAstbSZjfdAqsoF7VEq6q7AP" +.. image:: ../images/company-id-recover.png + :alt: company id tool screen showing identities related to seedphrase and option to select + :width: 50px -- keys for encrypted transfers. These are only needed for sending and receiving encrypted transfers. +- For Mainnet requests: Send the file to ania@notabene.id together with any other required identity data as described in the `entity verification instructions `_. - .. code-block:: json +- For Testnet requests: Send the file to support@concordium.software with the subject line "Recover company identity". - "encryptionPublicKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c58a2f44906bda77f42bc3503b53b604a851737829899ffd4895abc0184e2da448e673f5e87367991d4a453a7f562df974", - "encryptionSecretKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c557da780304fba3b831439243201396e8c83daa83da1acc385a7a28519011e6da" +When the recovery request has been verified successfully, you will receive an email with the identity object file named ``id-object.json`` that you lost. Store this file securely as you need it to create accounts and regenerate account keys. diff --git a/source/mainnet/net/images/company-id-create-acct.png b/source/mainnet/net/images/company-id-create-acct.png new file mode 100644 index 0000000000000000000000000000000000000000..827ad6e635ca04311583ba588ef26a8a60e399e8 GIT binary patch literal 106393 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�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

Iv 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


@+}jmtCftu~g; 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 fU5fni+n-#b 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

vT^>L-MB`2TpZFN<-pjwCg0xizp;s)ui9}`oN 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�?bflKVh2oHD`;9L{cWAfDv$l#m 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 OfAcezrwJ!7-}yhW#iQo{ literal 0 HcmV?d00001 diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index b50c9aed2e..10154f7010 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -299,7 +299,7 @@ Download the block separately to inspect it or to run a node in a custom configu Auxiliary tools =============== -Auxiliary tools are a collection of tools that can be used by developers to perform actions as needed. +Auxiliary tools are a collection of tools that can be used to perform actions as needed. Encrypt/decrypt tool v1.0.0 --------------------------- @@ -312,6 +312,19 @@ Encrypt/decrypt tool v1.0.0 For information about how to use the encrypt/decrypt tool, see :ref:`Auxiliary tools `. +Company identity management tool v0.1.0 +--------------------------------------- + +Use this tool to create a company identity, request accounts using a company identity, and recover a company identity. + +- `Download the Company identity management tool for Linux `_ + +- `Download the Company identity management tool for Windows `_ + +- `Download the Company identity management tool for MacOS `_ + +For information about how to use the company identity management tool, see XXX. + .. toctree:: :hidden: :maxdepth: 1 From d341aceb600d1237a52a6657d32929d225e89a09 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Thu, 23 Nov 2023 11:39:49 +0100 Subject: [PATCH 16/44] Fix lint error --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index ab02ab69bd..b7b2dfbd0a 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -44,7 +44,7 @@ When the identity has been verified successfully, you will receive an email with Create account -------------- -After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. +After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. **Create account** can also be used to regenerate the keys for an old account. From 7f85caa0a15f22b8e7991cb7f4ddd7a3f19b41d1 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Thu, 23 Nov 2023 11:51:42 +0100 Subject: [PATCH 17/44] Fix image sizes and placement --- source/mainnet/net/guides/company-identities.rst | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index b7b2dfbd0a..41b78edc14 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -27,9 +27,8 @@ Request identity #. Write down or save your seedphrase by clicking the copy button to copy your seedphrase to the clipboard and remember to go to the clipboard and save the file. Keep your seedphrase secure as you will need it to create accounts or recover the identity. Click **Proceed**. -.. image:: ../images/company-id-request.png - :alt: company id tool screen showing identities related to seedphrase and option to select - :width: 50px + .. image:: ../images/company-id-request.png + :alt: company id tool screen showing identities related to seedphrase and option to select #. Enter your seedphrase to verify that you have recorded it correctly. Click **Proceed**. @@ -52,9 +51,8 @@ After obtaining the ``id-object.json`` identity object from the identity provide #. Enter your seedphrase in the Enter seedphrase field. In the Identity object file field click to navigate to the location of the stored ``id-object.json`` file. Click **Get Accounts**. -.. image:: ../images/company-id-create-acct.png - :alt: company id tool screen showing seedphrase field and file selection box - :width: 50px + .. image:: ../images/company-id-create-acct.png + :alt: company id tool screen showing seedphrase field and file selection box #. On the next screen, click **Create Account** to create an account with this company identity. When prompted, save the ``account-keys.json`` in a secure location as you will need them to interact with the accounts on-chain. You can click **Create account** again to create another account. @@ -130,9 +128,8 @@ If the identity object used to create credentials is lost, it can be recovered f #. You see a list of identities associated with the seedphrase. In the Identities to recover drop-down, select the identity you want to recover. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. -.. image:: ../images/company-id-recover.png - :alt: company id tool screen showing identities related to seedphrase and option to select - :width: 50px + .. image:: ../images/company-id-recover.png + :alt: company id tool screen showing identities related to seedphrase and option to select - For Mainnet requests: Send the file to ania@notabene.id together with any other required identity data as described in the `entity verification instructions `_. From 36d394c06fe8340627e25c49114960a791df7822 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:41:41 +0100 Subject: [PATCH 18/44] Update source/mainnet/net/guides/company-identities.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 41b78edc14..ba912c3221 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -9,7 +9,7 @@ Company identity creation A company identity is for companies that need an identity and accounts on the Concordium blockchain, but don't want that identity to belong to a specific person. Company identities are therefore issued with documents that identify the company and not an individual. Company identities are only relevant for a few companies, such as crypto exchanges. -You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a company identity. You need to use the Company identity management tool, and you need to communicate directly with the identity provider (currently Notabene). `This page `_ describes Notabene's process, including recovery of company identities. +You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a company identity. You need to use the Concordium Company ID tool, and you need to communicate directly with the identity provider (currently Notabene). `This page `_ describes Notabene's process, including recovery of company identities. The information below describes how to create a company identity, how to create accounts with a company identity, and how to recover a company identity. If you experience issues with the Concordium Company ID tool, please contact Concordium’s technical support via support@concordium.software. From 443eff850d7fff677aa6c2dae24e103a860f3863 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:42:08 +0100 Subject: [PATCH 19/44] Update source/mainnet/net/guides/company-identities.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index ba912c3221..74fd731a72 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -54,7 +54,7 @@ After obtaining the ``id-object.json`` identity object from the identity provide .. image:: ../images/company-id-create-acct.png :alt: company id tool screen showing seedphrase field and file selection box -#. On the next screen, click **Create Account** to create an account with this company identity. When prompted, save the ``account-keys.json`` in a secure location as you will need them to interact with the accounts on-chain. You can click **Create account** again to create another account. +#. On the next screen, click **Create Account** to create an account with this company identity. When prompted, save the ``account-keys.json`` in a secure location as you will need them to interact with the account on-chain. You can click **Create account** again to create another account. .. dropdown:: Format of the key files From 7cb21c8d325a33ad962e15d4ae8fb7003b7cbf44 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:42:16 +0100 Subject: [PATCH 20/44] Update source/mainnet/net/guides/company-identities.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 74fd731a72..2978b84a04 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -13,7 +13,7 @@ You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a comp The information below describes how to create a company identity, how to create accounts with a company identity, and how to recover a company identity. If you experience issues with the Concordium Company ID tool, please contact Concordium’s technical support via support@concordium.software. -Using the company identity tool +Using the Concordium Company ID tool =============================== Once you have dowloaded the Concordium Company ID tool for your platform and installed it, you should choose your network, either Mainnet or Testnet. A default Concordium node URL is used, but you can enter your node URL, if desired. From 6926a117f15dc4a1002e00952b2e6dee5dc46e5b Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:43:10 +0100 Subject: [PATCH 21/44] Update source/mainnet/net/installation/downloads.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/installation/downloads.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 6d07393e1f..8decd4926d 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -321,7 +321,7 @@ Use this tool to create a company identity, request accounts using a company ide - `Download the Company identity management tool for Windows `_ -- `Download the Company identity management tool for MacOS `_ +- `Download the Company identity management tool for MacOS `_ For information about how to use the company identity management tool, see XXX. From 65332696823e35d69338ced02ac00c585872f73f Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:43:44 +0100 Subject: [PATCH 22/44] Update source/mainnet/net/installation/downloads.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/installation/downloads.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 8decd4926d..d758e3dbd3 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -317,7 +317,9 @@ Company identity management tool v0.1.0 Use this tool to create a company identity, request accounts using a company identity, and recover a company identity. -- `Download the Company identity management tool for Linux `_ +- `Download the Company identity management tool for Linux - Debian package `_ + +- `Download the Company identity management tool for Linux - App image `_ - `Download the Company identity management tool for Windows `_ From 04a79be6cb336a1bfb6c8f6b6dd202a049b1164d Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:43:54 +0100 Subject: [PATCH 23/44] Update source/mainnet/net/installation/downloads.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/installation/downloads.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index d758e3dbd3..a37fc09606 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -321,7 +321,7 @@ Use this tool to create a company identity, request accounts using a company ide - `Download the Company identity management tool for Linux - App image `_ -- `Download the Company identity management tool for Windows `_ +- `Download the Company identity management tool for Windows `_ - `Download the Company identity management tool for MacOS `_ From a3b949ed8df2a528de41ffbbab97c1538528e923 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 06:45:42 +0100 Subject: [PATCH 24/44] Update source/mainnet/net/guides/company-identities.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 2978b84a04..e3eab36806 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -43,7 +43,7 @@ When the identity has been verified successfully, you will receive an email with Create account -------------- -After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. +After obtaining the ``id-object.json`` identity object from the identity provider you can create accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider to create accounts on chain. **Create account** can also be used to regenerate the keys for an old account. From 98e058cc0699f8e0d574137df9ab6eeca14a4ddd Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 07:06:28 +0100 Subject: [PATCH 25/44] Update source/mainnet/net/guides/company-identities.rst Co-authored-by: Martin Heinrich <98821384+mh-concordium@users.noreply.github.com> --- source/mainnet/net/guides/company-identities.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index e3eab36806..52a735b24c 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -126,7 +126,7 @@ If the identity object used to create credentials is lost, it can be recovered f #. Enter your seedphrase in the Enter seedphrase field. And click **Find identities**. -#. You see a list of identities associated with the seedphrase. In the Identities to recover drop-down, select the identity you want to recover. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. +#. You see a list of accounts associated with the seedphrase. It is possible to save the account keys that can be ussed to interact with the account on the chain. Indices that are to the left of the account address are pointing to the identity index, being the first value and the account index being the second value (0,0). In the Identities to recover drop-down, select the identity you want to recover. There will always be one additional index on the list for selection to be sure that request can be generated for more than one identity. This is mainly useful in cases where first identity object was lost or unused to create accounts. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. When the request has been verified successfully, you will receive an email with an identity object . Store this file securely as you need it to create accounts on the chain. .. image:: ../images/company-id-recover.png :alt: company id tool screen showing identities related to seedphrase and option to select From 70fdf6ebbaf902366f53f6a30d88a0050b36bc7e Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Fri, 24 Nov 2023 07:07:39 +0100 Subject: [PATCH 26/44] Address review comments --- .../mainnet/net/guides/company-identities.rst | 55 +++++++++++------- .../net/images/company-id-acct-keys.png | Bin 0 -> 92122 bytes 2 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 source/mainnet/net/images/company-id-acct-keys.png diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 41b78edc14..1bf474bd04 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -45,7 +45,7 @@ Create account After obtaining the ``id-object.json`` identity object from the identity provider you can create additional accounts on the chain. The Concordium Company ID tool requires the identity object returned by the identity provider and generates a credential that can be sent to the chain to create an account. -**Create account** can also be used to regenerate the keys for an old account. +**Create account** can also be used to regenerate the keys for an old account. In this case, you would need ``id-object.json`` file again. If you have lost that file, use :ref:`Identity Recovery` to retrieve it so you can recover your accounts and save the account keys. After selecting Identity Recovery, enter your seed phrase. If there are accounts on chain related to the seed phrase, you will be able to store the keys of those accounts. #. Click **Create Account**. @@ -56,6 +56,13 @@ After obtaining the ``id-object.json`` identity object from the identity provide #. On the next screen, click **Create Account** to create an account with this company identity. When prompted, save the ``account-keys.json`` in a secure location as you will need them to interact with the accounts on-chain. You can click **Create account** again to create another account. +.. note:: + + If you are trying to recover the ``account-keys.json`` file(s), you can also use **Create Account**. After entering your seedphrase and selecting your ``id-object.json`` file you will see a list of account associated with this seedphrase and ID object. Click **Save** to save the ``account-keys.json`` for that account. + + .. image:: ../images/company-id-acct-keys.png + :alt: company id tool screen showing seedphrase field and file selection box + .. dropdown:: Format of the key files Both initial account keys and subsequent account keys are stored in JSON files. The unencrypted data is a JSON record with a number of fields. For sending transactions the fields that are relevant are: @@ -64,35 +71,39 @@ After obtaining the ``id-object.json`` identity object from the identity provide .. code-block:: json - "accountKeys": { - "keys": { - "0": { - "keys": { - "0": { - "signKey": "1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7", - "verifyKey": "7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4" - } + { + "environment": "testnet", + "type": "concordium-browser-wallet-account", + "v": 0, + "value": { + "accountKeys": { + "keys": { + "0": { + "keys": { + "0": { + "signKey": "81e7d8e625a00b6f5b97dd8b0a97807212e6b0ceb4fd206e715b97536c83caea", + "verifyKey": "03164c9e6654c1544a0e7d33780df425c695f6222fda75c047aea5186680e491" + } + }, + "threshold": 1 + } + }, + "threshold": 1 }, - "threshold": 1 + "address": "3LfTBXYtc6TEjuJiKgLpFGEtGRMPhBsKRB76Q4x91LZPWSmQ9Z", + "credentials": { + "0": "843785aef9446c8e5b2c6922863e49231b93fb9950909c3166e7c287357a1a495ecfbdcb6ca36ea5998fef2c9dee91f8" } - }, - "threshold": 1 + } } - which contains the account keys. In this example the account has a single credential with index 0, and that credential has a single key with index 0. The private key is 1e16c2e2302023fc5235c60734981a2427004f95b6ace50a1d8a205ee9e5f9e7 and its public key is 7e9983b292cf5e5822b48dbed1c2d498aca97c097f7116511f7dcf6187d218c4. + In this example the account has a single credential with index 0, and that credential has a single key with index 0. The private key is 03164c9e6654c1544a0e7d33780df425c695f6222fda75c047aea5186680e491 and its public key is 81e7d8e625a00b6f5b97dd8b0a97807212e6b0ceb4fd206e715b97536c83caea. - ``address`` is the address of the account, e.g., .. code-block:: json - "address": "2xe6cXEzBJZ8KXSYwb5uXJdHPZfAstbSZjfdAqsoF7VEq6q7AP" - - - keys for encrypted transfers. These are only needed for sending and receiving encrypted transfers. - - .. code-block:: json - - "encryptionPublicKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c58a2f44906bda77f42bc3503b53b604a851737829899ffd4895abc0184e2da448e673f5e87367991d4a453a7f562df974", - "encryptionSecretKey": "b14cbfe44a02c6b1f78711176d5f437295367aa4f2a8c2551ee10d25a03adc69d61a332a058971919dad7312e1fc94c557da780304fba3b831439243201396e8c83daa83da1acc385a7a28519011e6da" + "address": "3LfTBXYtc6TEjuJiKgLpFGEtGRMPhBsKRB76Q4x91LZPWSmQ9Z" Import created accounts into ``concordium-client`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -117,6 +128,8 @@ Once you have created accounts, you can request CCDs for testing. To request CCD ``curl -X PUT https://wallet-proxy.testnet.concordium.com/v0/testnetGTUDrop/3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV`` where you replace 3GXM6cEuAwEA47EEtFpax9PLhMWchWmkaPmNZmW1kbDaWaKBxV with the account address that should receive the CCDs. +.. _id-recovery: + Identity recovery ----------------- diff --git a/source/mainnet/net/images/company-id-acct-keys.png b/source/mainnet/net/images/company-id-acct-keys.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed81e738c1ca0488c7dd17ab40edd0b2673cb27 GIT binary patch literal 92122 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�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 X Date: Fri, 24 Nov 2023 08:22:25 +0100 Subject: [PATCH 27/44] Finish addressing review comments --- .../mainnet/net/guides/company-identities.rst | 2 +- .../mainnet/net/images/company-id-recover.png | Bin 105821 -> 110484 bytes source/mainnet/net/installation/downloads.rst | 20 ++++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 7c4bb6c470..08b4db07a3 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -14,7 +14,7 @@ You can't use the Desktop Wallet, |bw|, |mw-gen2|, or |mw-gen1| to create a comp The information below describes how to create a company identity, how to create accounts with a company identity, and how to recover a company identity. If you experience issues with the Concordium Company ID tool, please contact Concordium’s technical support via support@concordium.software. Using the Concordium Company ID tool -=============================== +==================================== Once you have dowloaded the Concordium Company ID tool for your platform and installed it, you should choose your network, either Mainnet or Testnet. A default Concordium node URL is used, but you can enter your node URL, if desired. diff --git a/source/mainnet/net/images/company-id-recover.png b/source/mainnet/net/images/company-id-recover.png index 1f3f4789354a07de9b034dac12d0fd5c9ff55410..564ecd5fd2a939d10aa874cf32198522622311d7 100644 GIT binary patch literal 110484 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�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Πl}ucL>{C3|;#eAbl=nIn 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 literal 105821 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


@+}jmtCftu~g; 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 fU5fni+n-#b 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

vT^>L-MB`2TpZFN<-pjwCg0xizp;s)ui9}`oN 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. -Company identity management tool v0.1.0 +Company identity management tool v1.0.2 --------------------------------------- Use this tool to create a company identity, request accounts using a company identity, and recover a company identity. - `Download the Company identity management tool for Linux - Debian package `_ + - Verification instructions + + In a terminal: + + #. Navigate to the download. + #. Paste the following into the terminal: $sha256sum concordium-company-id_1.0.2_amd64.deb + #. Verify that the output matches the SHA256 checksum ``c728dbe0b5ab950e4e705d7faceaee4b5ade615acd34b3bc6e75250acdedfaa9``. + - `Download the Company identity management tool for Linux - App image `_ + - Verification instructions + + In a terminal: + + #. Navigate to the download. + #. Paste the following into the terminal: $sha256sum concordium-company-id_1.0.2_amd64.AppImage + #. Verify that the output matches the SHA256 checksum ``8b6964d827808d3a8a9244d202e3aa8cdffeb2462edf44b3e32e7b41549b710f``. + - `Download the Company identity management tool for Windows `_ - `Download the Company identity management tool for MacOS `_ -For information about how to use the company identity management tool, see XXX. +For information about how to use the company identity management tool, see :ref:`company-identities`. .. toctree:: :hidden: From a113e6080c70c8970e4cbbff5ec4557171458eb9 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Fri, 24 Nov 2023 09:56:09 +0100 Subject: [PATCH 28/44] Address review comments --- source/mainnet/net/guides/company-identities.rst | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/mainnet/net/guides/company-identities.rst b/source/mainnet/net/guides/company-identities.rst index 08b4db07a3..286c67d00e 100644 --- a/source/mainnet/net/guides/company-identities.rst +++ b/source/mainnet/net/guides/company-identities.rst @@ -65,7 +65,7 @@ After obtaining the ``id-object.json`` identity object from the identity provide .. dropdown:: Format of the key files - Both initial account keys and subsequent account keys are stored in JSON files. The unencrypted data is a JSON record with a number of fields. For sending transactions the fields that are relevant are: + Both initial account keys and subsequent account keys are stored in JSON files. The unencrypted data is a JSON record with a number of fields. This is the same format as exported by the other Concordium wallets (except Desktop Wallet). For sending transactions the fields that are relevant are: - ``accountKeys`` contains the account keys. It has the following format: @@ -116,11 +116,9 @@ However, if the ``account-keys.json`` file is not encrypted it can be imported i .. code-block:: console - concordium-client config account import account-keys.json --format=genesis --name my-account + concordium-client config account import account-keys.json --name my-account -where the ``--name`` option is optional, and if given, will name the account according to the given value ("my-account" in the example above). - -If the account-keys.json file is encrypted then it must first be decrypted. This can be done with the :ref:`utils tool`. +``--name`` is mandatory and will name the account according to the given value ("my-account" in the example above). The initial account keys cannot be directly imported into ``concordium-client``. @@ -139,7 +137,7 @@ If the identity object used to create credentials is lost, it can be recovered f #. Enter your seedphrase in the Enter seedphrase field. And click **Find identities**. -#. You see a list of accounts associated with the seedphrase. It is possible to save the account keys that can be ussed to interact with the account on the chain. Indices that are to the left of the account address are pointing to the identity index, being the first value and the account index being the second value (0,0). In the Identities to recover drop-down, select the identity you want to recover. There will always be one additional index on the list for selection to be sure that request can be generated for more than one identity. This is mainly useful in cases where first identity object was lost or unused to create accounts. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. Store the auxiliary output securely. When the request has been verified successfully, you will receive an email with an identity object . Store this file securely as you need it to create accounts on the chain. +#. You see a list of accounts associated with the seedphrase. It is possible to save the account keys that can be ussed to interact with the account on the chain. Indices that are to the left of the account address are pointing to the identity index, being the first value and the account index being the second value (0,0). In the Identities to recover drop-down, select the identity you want to recover. There will always be one additional index on the list for selection to be sure that request can be generated for more than one identity. This is mainly useful in cases where first identity object was lost or unused to create accounts. Click **Generate recovery request**. The command outputs the ``recovery-request.json`` file. The request should be sent to the identity provider through a trusted channel. When the request has been verified successfully, you will receive an email with an identity object. Store this file securely as you need it to create accounts on the chain. .. image:: ../images/company-id-recover.png :alt: company id tool screen showing identities related to seedphrase and option to select @@ -148,4 +146,4 @@ If the identity object used to create credentials is lost, it can be recovered f - For Testnet requests: Send the file to support@concordium.software with the subject line "Recover company identity". -When the recovery request has been verified successfully, you will receive an email with the identity object file named ``id-object.json`` that you lost. Store this file securely as you need it to create accounts and regenerate account keys. +When the recovery request has been verified successfully, you will receive an email with the identity object file named ``id-object.json`` that you lost. Store this file securely as you need it to create accounts. From 713187feb1c994603129d72d7a762cf7e6189018 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Fri, 24 Nov 2023 11:38:50 +0100 Subject: [PATCH 29/44] Update release version, checksum --- source/mainnet/net/installation/downloads.rst | 8 ++++---- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- source/mainnet/variables.rst | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 7d8f30944a..d6ee1ddeb9 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -240,9 +240,9 @@ For the system requirements to run a node, see :ref:`System requirements to run .. dropdown:: Ubuntu |testnet-node-version| - To run a node on a server with Ubuntu, `download a Testnet Debian package `_. + To run a node on a server with Ubuntu, `download a Testnet Debian package `_. - - SHA256 checksum of the download: ``b1b1e1c5e2e9e8100094a2e1d9fced47dc98e9dfcf0897e89755011adc44781a`` + - SHA256 checksum of the download: ``5e97f77f3dedfd8921045a3ed4623600281b5331d37e527424a2f01068e6b2b1`` To learn how to run a node with Ubuntu, see :ref:`Run a node on a server with Ubuntu `. @@ -256,13 +256,13 @@ For the system requirements to run a node, see :ref:`System requirements to run .. dropdown:: Windows |testnet-node-version| - To run a node on Windows, `download a Testnet Windows Installer package `_. **Please be aware that you should backup your configuration, as the installer will overwrite the current configuration with a standard configuration.** + To run a node on Windows, `download a Testnet Windows Installer package `_. **Please be aware that you should backup your configuration, as the installer will overwrite the current configuration with a standard configuration.** To learn how to run a node on Windows, see :ref:`Run and manage a node on Windows `. .. dropdown:: Mac |testnet-node-version| - To run a node on macOS, `download a Testnet macOS installer package `_. + To run a node on macOS, `download a Testnet macOS installer package `_. To learn how to run a node on Mac, see :ref:`Run and manage a node on macOS `. diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 0c739586e1..4ee83ee777 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -979,7 +979,7 @@ Testnet November 28, 2023 - Version 6.2.x deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. + Version 6.2.3 deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. diff --git a/source/mainnet/variables.rst b/source/mainnet/variables.rst index 264dc28e3e..2d2b9473e0 100644 --- a/source/mainnet/variables.rst +++ b/source/mainnet/variables.rst @@ -24,7 +24,7 @@ .. Node version variables .. |mainnet-node-version| replace:: 6.1.7 -.. |testnet-node-version| replace:: 6.2.0 +.. |testnet-node-version| replace:: 6.2.3 .. Node debian package verification variables .. |node-deb-package| replace:: concordium-mainnet-node_6.1.7-0_amd64.deb From 3008793ecc158c0ddfdc20ce6e6011818215e927 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Fri, 24 Nov 2023 11:40:54 +0100 Subject: [PATCH 30/44] Change RN wording --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 4ee83ee777..7da101e356 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -985,7 +985,7 @@ Testnet A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. - The account map is now kept solely on disk in a separate lmdb database and it is no longer part of the internal block state database. This change results in less memory usage per account and a decrease in the growth of the database. + The account map is now kept solely on disk in a separate lmdb database and it is no longer part of the internal block state database. This change results in significantly reduced resource usage for the node. .. dropdown:: Previous releases From 55d5e661cf3986da37489a5bd70bac7752484959 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:00:15 +0100 Subject: [PATCH 31/44] Update release-notes-lp.rst --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 17d2d1e46f..90117fb2c7 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -988,7 +988,7 @@ Testnet November 28, 2023 Version 6.2.3 deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. - + As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. From 7c6313e1b94faf6afa1601880138c82d70941892 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:52:27 +0100 Subject: [PATCH 32/44] Update source/mainnet/net/installation/downloads.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/installation/downloads.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 7717f7c689..4792171e03 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -154,7 +154,7 @@ The |mw-gen1| is available for iOS and Android™. The |mw-gen1| supports iOS 13 Concordium Client |client-version| =================================== -- `Download the Mainnet Concordium Client for Linux `_ +- `Download the Mainnet Concordium Client for Linux `_ - SHA256 checksum of the download: :substitution-code:`|client-linux-checksum|` - :ref:`Verification instructions ` From c9077eb6f5396bad32f3c23f5b8febe8f66939ed Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:52:36 +0100 Subject: [PATCH 33/44] Update source/mainnet/net/installation/downloads.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/installation/downloads.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 4792171e03..71a1b5b9f0 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -167,7 +167,7 @@ Concordium Client |client-version| where you replace `*` with |client-version|. -- `Download the Mainnet Concordium Client for macOS `_ +- `Download the Mainnet Concordium Client for macOS `_ - The macOS distribution is an installer that places an alias to the binary into the folder ``/usr/local/bin``. So after installing, you should have From 03915ac5163cf6db196e8e18ba16c924a1160ab4 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:52:43 +0100 Subject: [PATCH 34/44] Update source/mainnet/net/installation/downloads.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/installation/downloads.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/installation/downloads.rst b/source/mainnet/net/installation/downloads.rst index 71a1b5b9f0..105e318534 100644 --- a/source/mainnet/net/installation/downloads.rst +++ b/source/mainnet/net/installation/downloads.rst @@ -173,7 +173,7 @@ Concordium Client |client-version| into the folder ``/usr/local/bin``. So after installing, you should have ``concordium-client`` on your path. -- `Download the Mainnet Concordium Client for Windows `_ +- `Download the Mainnet Concordium Client for Windows `_ .. _cargo-concordium-testnet: From 72d65db4f99e0f5c7a81997e080274be0e03dece Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:53:10 +0100 Subject: [PATCH 35/44] Update source/mainnet/net/release-notes/release-notes-lp.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 90117fb2c7..53ae595fb6 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -1467,7 +1467,7 @@ Concordium Client November 28, 2023 - Concordium Client 6.2.0 includes support for the following: + Concordium Client 6.2.1 includes support for the following: - Revised client's reconnect handling so that the client will no longer attempt to automatically reconnect on timeouts and node resource exhaustion. From 9aab30408d1233d72208129dc73932bdb56fa2d8 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:53:16 +0100 Subject: [PATCH 36/44] Update source/mainnet/variables.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/variables.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/variables.rst b/source/mainnet/variables.rst index 5fc8190059..007eba3b4b 100644 --- a/source/mainnet/variables.rst +++ b/source/mainnet/variables.rst @@ -13,7 +13,7 @@ .. |bw| replace:: Concordium Wallet for Web .. Client verification variables -.. |client-linux| replace:: concordium-client_6.2.0-0 +.. |client-linux| replace:: concordium-client_6.2.1-0 .. |client-version| replace:: 6.2.0-0 .. |client-linux-checksum| replace:: a52a035100d4b72580024b96bd69c750c3f20da8d93f6c405dde70f12c9dd878 From 08066c06de8fb1dc8b767ae08ec00435ec505a3b Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:53:28 +0100 Subject: [PATCH 37/44] Update source/mainnet/variables.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/variables.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/variables.rst b/source/mainnet/variables.rst index 007eba3b4b..defca2bd38 100644 --- a/source/mainnet/variables.rst +++ b/source/mainnet/variables.rst @@ -14,7 +14,7 @@ .. Client verification variables .. |client-linux| replace:: concordium-client_6.2.1-0 -.. |client-version| replace:: 6.2.0-0 +.. |client-version| replace:: 6.2.1-0 .. |client-linux-checksum| replace:: a52a035100d4b72580024b96bd69c750c3f20da8d93f6c405dde70f12c9dd878 .. Cargo verification variables From cc6a481fe4c257344f53630b9490e9178d4d2552 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:53:44 +0100 Subject: [PATCH 38/44] Update source/mainnet/net/release-notes/release-notes-lp.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 53ae595fb6..8e9da4555c 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -987,7 +987,7 @@ Testnet November 28, 2023 - Version 6.2.3 deprecates the gRPC v1 API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. + Version 6.2.3 removes the V1 gRPC API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. From e7c5906b27b2852452fb64d1ae0a9204c4fbeb30 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:54:09 +0100 Subject: [PATCH 39/44] Update source/mainnet/net/release-notes/release-notes-lp.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 8e9da4555c..da0e905c6e 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -993,7 +993,7 @@ Testnet A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. - The account map is now kept solely on disk in a separate lmdb database and it is no longer part of the internal block state database. This change results in significantly reduced resource usage for the node. + The account map is now kept solely on disk in a separate LMDB database and it is no longer part of the internal block state database. This change results in significantly reduced resource usage for the node. .. dropdown:: Previous releases From ccbbd66d7eb47f0c096f6caf93ee7890468b3276 Mon Sep 17 00:00:00 2001 From: Danielle Gunter <95341910+dg-concordium@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:55:25 +0100 Subject: [PATCH 40/44] Update source/mainnet/net/release-notes/release-notes-lp.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleš Bizjak --- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index da0e905c6e..5c7cae4fac 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -989,7 +989,7 @@ Testnet Version 6.2.3 removes the V1 gRPC API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. - As part of the tokenomics changes, new endpoints have been added for validators. The existing endpoints will continue to work. + As part of the tokenomics changes the node has new configuration options that uses the new terminology. The existing options using the legacy terminology are still supported, however they are hidden. A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. From d241010bfcdddb425c1eacc075a37a8acd0bb325 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Mon, 27 Nov 2023 09:31:53 +0100 Subject: [PATCH 41/44] Address review comments --- source/mainnet/net/nodes/baker-ubuntu.rst | 2 +- source/mainnet/net/release-notes/release-notes-lp.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/mainnet/net/nodes/baker-ubuntu.rst b/source/mainnet/net/nodes/baker-ubuntu.rst index f7273fe9f6..625d10fe7e 100644 --- a/source/mainnet/net/nodes/baker-ubuntu.rst +++ b/source/mainnet/net/nodes/baker-ubuntu.rst @@ -70,7 +70,7 @@ Prerequisites [Service] - Environment=CONCORDIUM_NODE_BAKER_CREDENTIALS_FILE=%S/concordium-b6078154d6717e909ce0da4a45a25151b592824f31624b755900a74429e3073d/validator-credentials.json + Environment=CONCORDIUM_NODE_VALIDATOR_CREDENTIALS_FILE=%S/concordium-b6078154d6717e909ce0da4a45a25151b592824f31624b755900a74429e3073d/validator-credentials.json BindReadOnlyPaths=/home/user/concordium/validator-credentials.json:%S/concordium-b6078154d6717e909ce0da4a45a25151b592824f31624b755900a74429e3073d/validator-credentials.json Where you replace the path `/home/user/concordium/validator-credentials.json` with the actual location of the file. diff --git a/source/mainnet/net/release-notes/release-notes-lp.rst b/source/mainnet/net/release-notes/release-notes-lp.rst index 5c7cae4fac..479b7a3572 100644 --- a/source/mainnet/net/release-notes/release-notes-lp.rst +++ b/source/mainnet/net/release-notes/release-notes-lp.rst @@ -989,7 +989,7 @@ Testnet Version 6.2.3 removes the V1 gRPC API. This removes the configuration options ``CONCORDIUM_NODE_RPC_SERVER_PORT``, ``CONCORDIUM_NODE_RPC_SERVER_ADDRESS``, ``CONCORDIUM_NODE_RPC_SERVER_TOKEN``, ``CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS`` and their command line equivalents. An additional health-check service was also added to the V2 GRPC API. This service conforms to the `standard GRPC health service API `__. - As part of the tokenomics changes the node has new configuration options that uses the new terminology. The existing options using the legacy terminology are still supported, however they are hidden. + As part of the tokenomics changes the node has new configuration options that use the new terminology. The existing options using the legacy terminology are still supported, however they are hidden. A ``DryRun`` endpoint has also been that allows simulating the execution of transactions. From 7e163474fab1cfda747f2877221ae13285e57ec1 Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Mon, 27 Nov 2023 10:52:45 +0100 Subject: [PATCH 42/44] Update concordium client checksum --- source/mainnet/variables.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/mainnet/variables.rst b/source/mainnet/variables.rst index defca2bd38..ec8b71d714 100644 --- a/source/mainnet/variables.rst +++ b/source/mainnet/variables.rst @@ -15,7 +15,7 @@ .. Client verification variables .. |client-linux| replace:: concordium-client_6.2.1-0 .. |client-version| replace:: 6.2.1-0 -.. |client-linux-checksum| replace:: a52a035100d4b72580024b96bd69c750c3f20da8d93f6c405dde70f12c9dd878 +.. |client-linux-checksum| replace:: 20b5b0502c34743d3d30a269b58e47b66982fdb4fd11e82fc510f9e01ba2b161 .. Cargo verification variables .. |cargo-linux| replace:: cargo-concordium_2.8.0 From d00c3b6f0898e0dba32863eaf1b1d5c8d0c10c6a Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Mon, 27 Nov 2023 12:25:13 +0100 Subject: [PATCH 43/44] Add additional invoke functions --- source/mainnet/smart-contracts/references/host-fns.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/mainnet/smart-contracts/references/host-fns.rst b/source/mainnet/smart-contracts/references/host-fns.rst index b1d27acc6a..904b605319 100644 --- a/source/mainnet/smart-contracts/references/host-fns.rst +++ b/source/mainnet/smart-contracts/references/host-fns.rst @@ -354,6 +354,10 @@ Functions only accessible for smart contract receive functions. ``3`` for query a contract balance. ``4`` for query the exchange rates. + + ``5`` for check the account signature. + + ``6`` for query the account keys. :param i32 start: Pointer to the start of the invoke payload. :param i32 length: Length of the invoke payload. :return: If the last five bytes are ``0`` then the call succeeded. In this From d26748f8146b5cbace443a432504a126066c0b5e Mon Sep 17 00:00:00 2001 From: dg-concordium Date: Tue, 28 Nov 2023 13:24:12 +0100 Subject: [PATCH 44/44] Remove old v1 json files --- .../grpc-json-schemas/ContractContext.json | 141 - .../grpc-json-schemas/GetAccountInfo.json | 826 --- .../grpc-json-schemas/GetAccountList.json | 19 - .../GetAccountNonFinalized.json | 19 - .../grpc-json-schemas/GetAncestors.json | 19 - .../GetAnonymityRevokers.json | 71 - .../grpc-json-schemas/GetBakerList.json | 13 - .../grpc-json-schemas/GetBirkParameters.json | 86 - .../grpc-json-schemas/GetBlockInfo.json | 145 - .../grpc-json-schemas/GetBlockSummary.json | 5715 ----------------- .../grpc-json-schemas/GetBlocksAtHeight.json | 16 - .../grpc-json-schemas/GetBranches.json | 60 - .../grpc-json-schemas/GetConsensusInfo.json | 243 - .../GetCryptographicParameters.json | 68 - .../GetIdentityProviders.json | 80 - .../grpc-json-schemas/GetInstanceInfo.json | 83 - .../grpc-json-schemas/GetInstances.json | 32 - .../grpc-json-schemas/GetModuleList.json | 19 - .../GetNextAccountNonce.json | 34 - .../grpc-json-schemas/GetPoolStatus.json | 374 -- .../grpc-json-schemas/GetRewardStatus.json | 131 - .../GetTransactionStatus.json | 3924 ----------- .../GetTransactionStatusInBlock.json | 3918 ----------- .../grpc-json-schemas/InvokeContract.json | 1345 ---- 24 files changed, 17381 deletions(-) delete mode 100644 source/mainnet/net/references/grpc-json-schemas/ContractContext.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetAccountInfo.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetAccountList.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetAccountNonFinalized.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetAncestors.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetAnonymityRevokers.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBakerList.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBirkParameters.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBlockInfo.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBlockSummary.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBlocksAtHeight.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetBranches.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetConsensusInfo.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetCryptographicParameters.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetIdentityProviders.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetInstanceInfo.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetInstances.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetModuleList.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetNextAccountNonce.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetPoolStatus.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetRewardStatus.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetTransactionStatus.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/GetTransactionStatusInBlock.json delete mode 100644 source/mainnet/net/references/grpc-json-schemas/InvokeContract.json diff --git a/source/mainnet/net/references/grpc-json-schemas/ContractContext.json b/source/mainnet/net/references/grpc-json-schemas/ContractContext.json deleted file mode 100644 index ff50e7db05..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/ContractContext.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ContractContext", - "description": "Data needed to invoke the contract.", - "type": "object", - "required": [ - "contract", - "method" - ], - "properties": { - "amount": { - "description": "Amount to invoke the contract with.", - "default": "0", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contract": { - "description": "Contract to invoke.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "energy": { - "description": "The amount of energy to allow for execution. This should be small enough so that it can be converted to interpreter energy.", - "default": 10000000, - "type": "integer", - "format": "uint64", - "maximum": 100000000000.0, - "minimum": 0.0 - }, - "invoker": { - "description": "Invoker of the contract. If this is not supplied then the contract will be invoked by an account with address 0, no credentials and sufficient amount of CCD to cover the transfer amount. If given, the relevant address must exist in the blockstate.", - "anyOf": [ - { - "$ref": "#/definitions/Address" - }, - { - "type": "null" - } - ] - }, - "method": { - "description": "Which entrypoint to invoke.", - "type": "string" - }, - "parameter": { - "description": "Parameter to invoke with.", - "default": "", - "allOf": [ - { - "$ref": "#/definitions/Parameter" - } - ] - } - }, - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "Address": { - "description": "Either an account or contract address. Some operations are allowed on both types of items, hence the need for this type.", - "oneOf": [ - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressContract" - ] - } - } - } - ] - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "Parameter": { - "type": "string", - "maxLength": 2048, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetAccountInfo.json b/source/mainnet/net/references/grpc-json-schemas/GetAccountInfo.json deleted file mode 100644 index 7ec5f1de34..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetAccountInfo.json +++ /dev/null @@ -1,826 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_AccountInfo", - "anyOf": [ - { - "$ref": "#/definitions/AccountInfo" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "AccountCredentialWithoutProofs_for_HexString_and_AttributeKind": { - "description": "Account credential with values and commitments, but without proofs. Serialization must match the serializaiton of `AccountCredential` in Haskell.", - "oneOf": [ - { - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "description": "Values in initial credential deployment.", - "type": "object", - "required": [ - "credentialPublicKeys", - "ipIdentity", - "policy", - "regId" - ], - "properties": { - "credentialPublicKeys": { - "description": "Account this credential belongs to.", - "allOf": [ - { - "$ref": "#/definitions/CredentialPublicKeys" - } - ] - }, - "ipIdentity": { - "description": "Identity of the identity provider who signed the identity object from which this credential is derived.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "policy": { - "description": "Policy of this credential object.", - "allOf": [ - { - "$ref": "#/definitions/Policy_for_HexString_and_AttributeKind" - } - ] - }, - "regId": { - "description": "Credential registration id of the credential.", - "allOf": [ - { - "$ref": "#/definitions/HexString" - } - ] - } - } - }, - "type": { - "type": "string", - "enum": [ - "initial" - ] - } - } - }, - { - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "description": "Values (as opposed to proofs) in credential deployment.", - "type": "object", - "required": [ - "arData", - "commitments", - "credId", - "credentialPublicKeys", - "ipIdentity", - "policy", - "revocationThreshold" - ], - "properties": { - "arData": { - "description": "Anonymity revocation data. List of anonymity revokers which can revoke identity. NB: The order is important since it is the same order as that signed by the identity provider, and permuting the list will invalidate the signature from the identity provider.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/ChainArData_for_HexString" - } - }, - "commitments": { - "$ref": "#/definitions/CredentialDeploymentCommitments_for_HexString" - }, - "credId": { - "description": "Credential registration id of the credential.", - "allOf": [ - { - "$ref": "#/definitions/HexString" - } - ] - }, - "credentialPublicKeys": { - "description": "Credential keys (i.e. account holder keys).", - "allOf": [ - { - "$ref": "#/definitions/CredentialPublicKeys" - } - ] - }, - "ipIdentity": { - "description": "Identity of the identity provider who signed the identity object from which this credential is derived.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "policy": { - "description": "Policy of this credential object.", - "allOf": [ - { - "$ref": "#/definitions/Policy_for_HexString_and_AttributeKind" - } - ] - }, - "revocationThreshold": { - "description": "Anonymity revocation threshold. Must be <= length of ar_data.", - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } - }, - "type": { - "type": "string", - "enum": [ - "normal" - ] - } - } - } - ] - }, - "AccountEncryptedAmount": { - "description": "The state of the encrypted balance of an account.", - "type": "object", - "required": [ - "incomingAmounts", - "selfAmount", - "startIndex" - ], - "properties": { - "aggregatedAmount": { - "description": "If ['Some'], the amount that has resulted from aggregating other amounts and the number of aggregated amounts (must be at least 2 if present).", - "default": null, - "type": [ - "array", - "null" - ], - "items": [ - { - "$ref": "#/definitions/EncryptedAmount" - }, - { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - } - ], - "maxItems": 2, - "minItems": 2 - }, - "incomingAmounts": { - "description": "Amounts starting at `start_index` (or at `start_index + 1` if there is an aggregated amount present). They are assumed to be numbered sequentially. The length of this list is bounded by the maximum number of incoming amounts on the accounts, which is currently 32. After that aggregation kicks in.", - "type": "array", - "items": { - "$ref": "#/definitions/EncryptedAmount" - } - }, - "selfAmount": { - "description": "Encrypted amount that is a result of this accounts' actions. In particular this list includes the aggregate of\n\n- remaining amounts that result when transfering to public balance - remaining amounts when transfering to another account - encrypted amounts that are transferred from public balance\n\nWhen a transfer is made all of these must always be used.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "startIndex": { - "description": "Starting index for incoming encrypted amounts. If an aggregated amount is present then this index is associated with such an amount and the list of incoming encrypted amounts starts at the index `start_index + 1`.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "AccountInfo": { - "description": "Account information exposed via the node's API. This is always the state of an account in a specific block.", - "type": "object", - "required": [ - "accountAddress", - "accountAmount", - "accountCredentials", - "accountEncryptedAmount", - "accountEncryptionKey", - "accountIndex", - "accountNonce", - "accountReleaseSchedule", - "accountThreshold" - ], - "properties": { - "accountAddress": { - "description": "Canonical address of the account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "accountAmount": { - "description": "Current (unencrypted) balance of the account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "accountBaker": { - "description": "`Some` (non-null) if and only if the account is a baker or delegator. In that case it is the information about the baker or delegator.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/AccountStakingInfo" - }, - { - "type": "null" - } - ] - }, - "accountCredentials": { - "description": "Map of all currently active credentials on the account. This includes public keys that can sign for the given credentials, as well as any revealed attributes. This map always contains a credential with index 0.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Versioned_for_AccountCredentialWithoutProofs_for_HexString_and_AttributeKind" - } - }, - "accountEncryptedAmount": { - "description": "The encrypted balance of the account.", - "allOf": [ - { - "$ref": "#/definitions/AccountEncryptedAmount" - } - ] - }, - "accountEncryptionKey": { - "description": "The public key for sending encrypted balances to the account.", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "accountIndex": { - "description": "Internal index of the account. Accounts on the chain get sequential indices. These should generally not be used outside of the chain, the account address is meant to be used to refer to accounts, however the account index serves the role of the baker id, if the account is a baker. Hence it is exposed here as well.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "accountNonce": { - "description": "Next nonce to be used for transactions signed from this account.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "accountReleaseSchedule": { - "description": "Release schedule for any locked up amount. This could be an empty release schedule.", - "allOf": [ - { - "$ref": "#/definitions/AccountReleaseSchedule" - } - ] - }, - "accountThreshold": { - "description": "Lower bound on how many credentials must sign any given transaction from this account.", - "type": "integer", - "format": "uint8", - "minimum": 1.0 - } - } - }, - "AccountReleaseSchedule": { - "description": "State of the account's release schedule. This is the balance of the account that is owned by the account, but cannot be used until the release point.", - "type": "object", - "required": [ - "schedule", - "total" - ], - "properties": { - "schedule": { - "description": "List of timestamped releases. In increasing order of timestamps.", - "type": "array", - "items": { - "$ref": "#/definitions/Release" - } - }, - "total": { - "description": "Total amount that is locked up in releases.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - }, - "AccountStakingInfo": { - "anyOf": [ - { - "description": "The account is a baker.", - "type": "object", - "required": [ - "bakerAggregationVerifyKey", - "bakerElectionVerifyKey", - "bakerId", - "bakerSignatureVerifyKey", - "restakeEarnings", - "stakedAmount" - ], - "properties": { - "bakerAggregationVerifyKey": { - "description": "Baker's public key used to check signatures on finalization records. This is only used if the baker has sufficient stake to participate in finalization.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerElectionVerifyKey": { - "description": "Baker's public key used to check whether they won the lottery or not.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "bakerId": { - "description": "Identity of the baker. This is actually the account index of the account controlling the baker.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakerSignatureVerifyKey": { - "description": "Baker's public key used to check that they are indeed the ones who produced the block.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "pendingChange": { - "anyOf": [ - { - "$ref": "#/definitions/StakePendingChange" - }, - { - "type": "null" - } - ] - }, - "poolInfo": { - "anyOf": [ - { - "$ref": "#/definitions/BakerPoolInfo" - }, - { - "type": "null" - } - ] - }, - "restakeEarnings": { - "type": "boolean" - }, - "stakedAmount": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - { - "description": "The account is delegating stake to a baker.", - "type": "object", - "required": [ - "delegationTarget", - "restakeEarnings", - "stakedAmount" - ], - "properties": { - "delegationTarget": { - "$ref": "#/definitions/DelegationTarget" - }, - "pendingChange": { - "anyOf": [ - { - "$ref": "#/definitions/StakePendingChange" - }, - { - "type": "null" - } - ] - }, - "restakeEarnings": { - "type": "boolean" - }, - "stakedAmount": { - "$ref": "#/definitions/CCDAmount" - } - } - } - ] - }, - "AttributeKind": { - "description": "Concrete attribute values. All currently supported attributes are string values.", - "type": "string" - }, - "BakerAggregationVerifyKey": { - "type": "string", - "maxLength": 192, - "minLength": 192, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerElectionVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerPoolInfo": { - "description": "Additional information about a baking pool. This information is added with the introduction of delegation.", - "type": "object", - "required": [ - "commissionRates", - "metadataUrl", - "openStatus" - ], - "properties": { - "commissionRates": { - "description": "The commission rates charged by the pool owner.", - "allOf": [ - { - "$ref": "#/definitions/CommissionRates" - } - ] - }, - "metadataUrl": { - "description": "The URL that links to the metadata about the pool.", - "type": "string" - }, - "openStatus": { - "description": "Whether the pool allows delegators.", - "allOf": [ - { - "$ref": "#/definitions/OpenStatus" - } - ] - } - } - }, - "BakerSignatureVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ChainArData_for_HexString": { - "description": "Data relating to a single anonymity revoker sent by the account holder to the chain. Typically a vector of these will be sent to the chain.", - "type": "object", - "required": [ - "encIdCredPubShare" - ], - "properties": { - "encIdCredPubShare": { - "description": "encrypted share of id cred pub", - "allOf": [ - { - "$ref": "#/definitions/Cipher" - } - ] - } - } - }, - "Cipher": { - "type": "string", - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CommissionRates": { - "type": "object", - "required": [ - "bakingCommission", - "finalizationCommission", - "transactionCommission" - ], - "properties": { - "bakingCommission": { - "description": "Fraction of baking rewards charged by the pool owner.", - "type": "number" - }, - "finalizationCommission": { - "description": "Fraction of finalization rewards charged by the pool owner.", - "type": "number" - }, - "transactionCommission": { - "description": "Fraction of transaction rewards charged by the pool owner.", - "type": "number" - } - } - }, - "Commitment_for_HexString": { - "description": "A Commitment is a group element.", - "allOf": [ - { - "$ref": "#/definitions/HexString" - } - ] - }, - "CredentialDeploymentCommitments_for_HexString": { - "description": "The commitments sent by the account holder to the chain in order to deploy credentials", - "type": "object", - "required": [ - "cmmAttributes", - "cmmCredCounter", - "cmmIdCredSecSharingCoeff", - "cmmMaxAccounts", - "cmmPrf" - ], - "properties": { - "cmmAttributes": { - "description": "List of commitments to the attributes that are not revealed. For the purposes of checking signatures, the commitments to those that are revealed as part of the policy are going to be computed by the verifier.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Commitment_for_HexString" - } - }, - "cmmCredCounter": { - "description": "commitment to credential counter", - "allOf": [ - { - "$ref": "#/definitions/Commitment_for_HexString" - } - ] - }, - "cmmIdCredSecSharingCoeff": { - "description": "commitments to the coefficients of the polynomial used to share id_cred_sec S + b1 X + b2 X^2... where S is id_cred_sec", - "type": "array", - "items": { - "$ref": "#/definitions/Commitment_for_HexString" - } - }, - "cmmMaxAccounts": { - "description": "commitment to the max account number.", - "allOf": [ - { - "$ref": "#/definitions/Commitment_for_HexString" - } - ] - }, - "cmmPrf": { - "description": "commitment to the prf key", - "allOf": [ - { - "$ref": "#/definitions/Commitment_for_HexString" - } - ] - } - } - }, - "CredentialPublicKeys": { - "description": "Public credential keys currently on the account, together with the threshold needed for a valid signature on a transaction.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } - }, - "DelegationTarget": { - "oneOf": [ - { - "description": "Delegate passively, i.e., to no specific baker.", - "type": "object", - "required": [ - "delegateType" - ], - "properties": { - "delegateType": { - "type": "string", - "enum": [ - "Passive" - ] - } - } - }, - { - "description": "Delegate to a specific baker.", - "type": "object", - "required": [ - "bakerId", - "delegateType" - ], - "properties": { - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "delegateType": { - "type": "string", - "enum": [ - "Baker" - ] - } - } - } - ] - }, - "EncryptedAmount": { - "type": "string", - "maxLength": 384, - "minLength": 384, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "HexString": { - "type": "string", - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "OpenStatus": { - "description": "The status of whether a baking pool allows delegators to join.", - "type": "string", - "enum": [ - "openForAll", - "closedForNew", - "closedForAll" - ] - }, - "Policy_for_HexString_and_AttributeKind": { - "description": "A policy is (currently) revealed values of attributes that are part of the identity object. Policies are part of credentials.", - "type": "object", - "required": [ - "createdAt", - "revealedAttributes", - "validTo" - ], - "properties": { - "createdAt": { - "$ref": "#/definitions/YearMonth" - }, - "revealedAttributes": { - "description": "Revealed attributes for now. In the future we might have additional items with (Tag, Property, Proof).", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/AttributeKind" - } - }, - "validTo": { - "$ref": "#/definitions/YearMonth" - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - }, - "Release": { - "description": "An individual release of a locked balance.", - "type": "object", - "required": [ - "amount", - "timestamp", - "transactions" - ], - "properties": { - "amount": { - "description": "Amount to be released.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "timestamp": { - "description": "Effective time of release.", - "type": "integer", - "format": "int64" - }, - "transactions": { - "description": "List of transaction hashes that contribute a balance to this release.", - "type": "array", - "items": { - "$ref": "#/definitions/SHA256Hash" - } - } - } - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "StakePendingChange": { - "description": "Pending change in the baker's stake.", - "oneOf": [ - { - "description": "The stake is being reduced. The new stake will take affect in the given epoch.", - "type": "object", - "required": [ - "change", - "effectiveTime", - "newStake" - ], - "properties": { - "change": { - "type": "string", - "enum": [ - "ReduceStake" - ] - }, - "effectiveTime": { - "type": "string", - "format": "date-time" - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - { - "description": "The baker will be removed at the end of the given epoch.", - "type": "object", - "required": [ - "change", - "effectiveTime" - ], - "properties": { - "change": { - "type": "string", - "enum": [ - "RemoveStake" - ] - }, - "effectiveTime": { - "type": "string", - "format": "date-time" - } - } - } - ] - }, - "VerifyKey": { - "type": "object", - "properties": { - "schemeId": { - "type": "string" - }, - "verifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } - }, - "Versioned_for_AccountCredentialWithoutProofs_for_HexString_and_AttributeKind": { - "description": "Versioned represents T as a versioned data-structure. The version is a integer number up to the implementation, which is serialized using variable integer encoding. The caller is responsible for ensuring the data structure `T` is compatible with the version number.", - "type": "object", - "required": [ - "v", - "value" - ], - "properties": { - "v": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "value": { - "$ref": "#/definitions/AccountCredentialWithoutProofs_for_HexString_and_AttributeKind" - } - } - }, - "YearMonth": { - "type": "string" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetAccountList.json b/source/mainnet/net/references/grpc-json-schemas/GetAccountList.json deleted file mode 100644 index bba83cf3ac..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetAccountList.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_AccountAddress", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/AccountAddress" - }, - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetAccountNonFinalized.json b/source/mainnet/net/references/grpc-json-schemas/GetAccountNonFinalized.json deleted file mode 100644 index c60499d7be..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetAccountNonFinalized.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_SHA256Hash", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/SHA256Hash" - }, - "definitions": { - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetAncestors.json b/source/mainnet/net/references/grpc-json-schemas/GetAncestors.json deleted file mode 100644 index c60499d7be..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetAncestors.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_SHA256Hash", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/SHA256Hash" - }, - "definitions": { - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetAnonymityRevokers.json b/source/mainnet/net/references/grpc-json-schemas/GetAnonymityRevokers.json deleted file mode 100644 index e2208d69bb..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetAnonymityRevokers.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_ArInfo_for_HexString", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/ArInfo_for_HexString" - }, - "definitions": { - "ArInfo_for_HexString": { - "description": "Information on a single anonymity revoker held by the IP. Typically an IP will hold a more than one.", - "type": "object", - "required": [ - "arDescription", - "arIdentity", - "arPublicKey" - ], - "properties": { - "arDescription": { - "description": "description of the anonymity revoker (e.g. name, contact number)", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "arIdentity": { - "description": "unique identifier of the anonymity revoker", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "arPublicKey": { - "description": "elgamal encryption key of the anonymity revoker", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "Description": { - "description": "Description either of an anonymity revoker or identity provider. Metadata that should be visible on the chain.", - "type": "object", - "required": [ - "description", - "name", - "url" - ], - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBakerList.json b/source/mainnet/net/references/grpc-json-schemas/GetBakerList.json deleted file mode 100644 index 6d24d06ad2..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBakerList.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_uint64", - "type": [ - "array", - "null" - ], - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBirkParameters.json b/source/mainnet/net/references/grpc-json-schemas/GetBirkParameters.json deleted file mode 100644 index ceb7ebb752..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBirkParameters.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_BirkParameters", - "anyOf": [ - { - "$ref": "#/definitions/BirkParameters" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "BirkBaker": { - "description": "State of an individual baker.", - "type": "object", - "required": [ - "bakerAccount", - "bakerId", - "bakerLotteryPower" - ], - "properties": { - "bakerAccount": { - "description": "Address of the account this baker is associated with.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "ID of the baker. Matches their account index.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakerLotteryPower": { - "description": "The lottery power of the baker. This is the baker's stake relative to the total staked amount.", - "type": "number", - "format": "double" - } - } - }, - "BirkParameters": { - "description": "The state of consensus parameters, and allowed participants (i.e., bakers).", - "type": "object", - "required": [ - "bakers", - "electionDifficulty", - "electionNonce" - ], - "properties": { - "bakers": { - "description": "The list of active bakers.", - "type": "array", - "items": { - "$ref": "#/definitions/BirkBaker" - } - }, - "electionDifficulty": { - "description": "Current election difficulty.", - "type": "number" - }, - "electionNonce": { - "description": "Leadership election nonce for the current epoch.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - } - } - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBlockInfo.json b/source/mainnet/net/references/grpc-json-schemas/GetBlockInfo.json deleted file mode 100644 index f8f5ef567d..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBlockInfo.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_BlockInfo", - "anyOf": [ - { - "$ref": "#/definitions/BlockInfo" - }, - { - "type": "null" - } - ], - "definitions": { - "BlockInfo": { - "description": "Metadata about a given block.", - "type": "object", - "required": [ - "blockArriveTime", - "blockHash", - "blockHeight", - "blockLastFinalized", - "blockParent", - "blockReceiveTime", - "blockSlot", - "blockSlotTime", - "blockStateHash", - "eraBlockHeight", - "finalized", - "genesisIndex", - "transactionCount", - "transactionEnergyCost", - "transactionsSize" - ], - "properties": { - "blockArriveTime": { - "description": "Time when the block was added to the node's tree. This is a subjective (i.e., node specific) value.", - "type": "string", - "format": "date-time" - }, - "blockBaker": { - "description": "Identity of the baker of the block. For non-genesis blocks the value is going to always be `Some`.", - "type": [ - "integer", - "null" - ], - "format": "uint64", - "minimum": 0.0 - }, - "blockHash": { - "description": "Hash of the block.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "blockHeight": { - "description": "Height of the block from genesis.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "blockLastFinalized": { - "description": "Pointer to the last finalized block. Each block has a pointer to a specific finalized block that existed at the time the block was produced.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "blockParent": { - "description": "Parent block pointer.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "blockReceiveTime": { - "description": "Time when the block was first received by the node. This can be in principle quite different from the arrive time if, e.g., block execution takes a long time, or the block must wait for the arrival of its parent.", - "type": "string", - "format": "date-time" - }, - "blockSlot": { - "description": "Slot number of the slot the block is in.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "blockSlotTime": { - "description": "Slot time of the slot the block is in. In contrast to [BlockInfo::block_arrive_time] this is an objective value, all nodes agree on it.", - "type": "string", - "format": "date-time" - }, - "blockStateHash": { - "description": "Hash of the block state at the end of the given block.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "eraBlockHeight": { - "description": "The height of this block relative to the (re)genesis block of its era.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalized": { - "description": "Whether the block is finalized or not.", - "type": "boolean" - }, - "genesisIndex": { - "description": "The genesis index for this block. This counts the number of protocol updates that have preceded this block, and defines the era of the block.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "transactionCount": { - "description": "The number of transactions in the block.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "transactionEnergyCost": { - "description": "The total energy consumption of transactions in the block.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "transactionsSize": { - "description": "Size of all the transactions in the block in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBlockSummary.json b/source/mainnet/net/references/grpc-json-schemas/GetBlockSummary.json deleted file mode 100644 index f9e4e42a5e..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBlockSummary.json +++ /dev/null @@ -1,5715 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_BlockSummary", - "anyOf": [ - { - "$ref": "#/definitions/BlockSummary" - }, - { - "type": "null" - } - ], - "definitions": { - "AccessStructure": { - "description": "And access structure for performing chain updates. The access structure is only meaningful in the context of a list of update keys to which the indices refer to.", - "type": "object", - "required": [ - "authorizedKeys", - "threshold" - ], - "properties": { - "authorizedKeys": { - "type": "array", - "items": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - }, - "uniqueItems": true - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "AccountAmount": { - "type": "object", - "required": [ - "address", - "amount" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "amount": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - "Address": { - "description": "Either an account or contract address. Some operations are allowed on both types of items, hence the need for this type.", - "oneOf": [ - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressContract" - ] - } - } - } - ] - }, - "ArInfo_for_HexString": { - "description": "Information on a single anonymity revoker held by the IP. Typically an IP will hold a more than one.", - "type": "object", - "required": [ - "arDescription", - "arIdentity", - "arPublicKey" - ], - "properties": { - "arDescription": { - "description": "description of the anonymity revoker (e.g. name, contact number)", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "arIdentity": { - "description": "unique identifier of the anonymity revoker", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "arPublicKey": { - "description": "elgamal encryption key of the anonymity revoker", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "AuthorizationsV0": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "AuthorizationsV1": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "cooldownParameters", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "timeParameters", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "cooldownParameters": { - "description": "Keys for changing cooldown periods related to baking and delegating.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "timeParameters": { - "description": "Keys for changing the lenghts of the reward period.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "BakerAggregationVerifyKey": { - "type": "string", - "maxLength": 192, - "minLength": 192, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerElectionVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerParameters": { - "type": "object", - "required": [ - "minimumThresholdForBaking" - ], - "properties": { - "minimumThresholdForBaking": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - "BakerSignatureVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BlockItemResult": { - "description": "Outcome of a block item execution.", - "oneOf": [ - { - "description": "The intended action was completed. The sender was charged, if applicable. Some events were generated describing the changes that happened on the chain.", - "type": "object", - "required": [ - "events", - "outcome" - ], - "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/Event" - } - }, - "outcome": { - "type": "string", - "enum": [ - "success" - ] - } - } - }, - { - "description": "The intended action was not completed due to an error. The sender was charged, but no other effect is seen on the chain.", - "type": "object", - "required": [ - "outcome", - "rejectReason" - ], - "properties": { - "outcome": { - "type": "string", - "enum": [ - "reject" - ] - }, - "rejectReason": { - "$ref": "#/definitions/RejectReason" - } - } - } - ] - }, - "BlockItemSummary": { - "description": "Summary of the outcome of a block item.", - "type": "object", - "required": [ - "cost", - "energyCost", - "hash", - "index", - "result", - "type" - ], - "properties": { - "cost": { - "description": "The amount of CCD the transaction was charged to the sender.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "energyCost": { - "description": "The amount of NRG the transaction cost.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "hash": { - "description": "Hash of the transaction.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "index": { - "description": "Index of the transaction in the block where it is included.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "result": { - "description": "What is the outcome of this particular block item.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemResult" - } - ] - }, - "sender": { - "description": "Sender, if available. The sender is always available for account transactions.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/AccountAddress" - }, - { - "type": "null" - } - ] - }, - "type": { - "description": "Which type of block item this is.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemType" - } - ] - } - } - }, - "BlockItemType": { - "description": "The type of the block item.", - "oneOf": [ - { - "description": "Account transactions are transactions that are signed by an account. Most transactions are account transactions.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "anyOf": [ - { - "$ref": "#/definitions/TransactionType" - }, - { - "type": "null" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "accountTransaction" - ] - } - } - }, - { - "description": "Credential deployments that create accounts are special kinds of transactions. They are not signed by the account in the usual way, and they are not paid for directly by the sender.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/CredentialType" - }, - "type": { - "type": "string", - "enum": [ - "credentialDeploymentTransaction" - ] - } - } - }, - { - "description": "Chain updates are signed by the governance keys. They affect the core parameters of the chain.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/UpdateType" - }, - "type": { - "type": "string", - "enum": [ - "updateTransaction" - ] - } - } - } - ] - }, - "BlockSummary": { - "description": "Summary of transactions, protocol generated transfers, and chain parameters in a given block.", - "anyOf": [ - { - "type": "object", - "required": [ - "protocolVersion", - "specialEvents", - "transactionSummaries", - "updates" - ], - "properties": { - "finalizationData": { - "description": "If the block contains a finalization record this contains its summary. Otherwise [None].", - "anyOf": [ - { - "$ref": "#/definitions/FinalizationSummary" - }, - { - "type": "null" - } - ] - }, - "protocolVersion": { - "description": "Protocol version at which this block was baked. This is no more than [ProtocolVersion::P3]", - "allOf": [ - { - "$ref": "#/definitions/ProtocolVersion" - } - ] - }, - "specialEvents": { - "description": "Any special events generated as part of this block. Special events are protocol defined transfers, e.g., rewards, minting.", - "type": "array", - "items": { - "$ref": "#/definitions/SpecialTransactionOutcome" - } - }, - "transactionSummaries": { - "description": "Outcomes of transactions in this block, ordered as in the block.", - "type": "array", - "items": { - "$ref": "#/definitions/BlockItemSummary" - } - }, - "updates": { - "description": "Chain parameters, and any scheduled updates to chain parameters or the protocol.", - "allOf": [ - { - "$ref": "#/definitions/UpdatesSkeleton_for_UpdateKeysCollectionSkeleton_for_AuthorizationsV0_and_ChainParametersV0_and_PendingUpdatesV0" - } - ] - } - } - }, - { - "type": "object", - "required": [ - "protocolVersion", - "specialEvents", - "transactionSummaries", - "updates" - ], - "properties": { - "finalizationData": { - "description": "If the block contains a finalization record this contains its summary. Otherwise [None].", - "anyOf": [ - { - "$ref": "#/definitions/FinalizationSummary" - }, - { - "type": "null" - } - ] - }, - "protocolVersion": { - "description": "Protocol version at which this block was baked. This is at least [ProtocolVersion::P4]", - "allOf": [ - { - "$ref": "#/definitions/ProtocolVersion" - } - ] - }, - "specialEvents": { - "description": "Any special events generated as part of this block. Special events are protocol defined transfers, e.g., rewards, minting.", - "type": "array", - "items": { - "$ref": "#/definitions/SpecialTransactionOutcome" - } - }, - "transactionSummaries": { - "description": "Outcomes of transactions in this block, ordered as in the block.", - "type": "array", - "items": { - "$ref": "#/definitions/BlockItemSummary" - } - }, - "updates": { - "description": "Chain parameters, and any scheduled updates to chain parameters or the protocol.", - "allOf": [ - { - "$ref": "#/definitions/UpdatesSkeleton_for_UpdateKeysCollectionSkeleton_for_AuthorizationsV1_and_ChainParametersV1_and_PendingUpdatesV1" - } - ] - } - } - } - ] - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ChainParametersV0": { - "description": "Values of chain parameters that can be updated via chain updates.", - "type": "object", - "required": [ - "accountCreationLimit", - "bakerCooldownEpochs", - "electionDifficulty", - "euroPerEnergy", - "foundationAccountIndex", - "microGTUPerEuro", - "minimumThresholdForBaking", - "rewardParameters" - ], - "properties": { - "accountCreationLimit": { - "description": "The limit for the number of account creations in a block.", - "type": "integer", - "format": "uint16", - "minimum": 0.0 - }, - "bakerCooldownEpochs": { - "description": "Extra number of epochs before reduction in stake, or baker deregistration is completed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionDifficulty": { - "description": "Election difficulty for consensus lottery.", - "type": "number" - }, - "euroPerEnergy": { - "description": "Euro per energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/ExchangeRate" - } - ] - }, - "foundationAccountIndex": { - "description": "Index of the foundation account.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "microGTUPerEuro": { - "description": "Micro ccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/ExchangeRate" - } - ] - }, - "minimumThresholdForBaking": { - "description": "Minimum threshold for becoming a baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "rewardParameters": { - "description": "Current reward parameters.", - "allOf": [ - { - "$ref": "#/definitions/RewardParametersSkeleton_for_MintDistributionV0" - } - ] - } - } - }, - "ChainParametersV1": { - "description": "Values of chain parameters that can be updated via chain updates.", - "type": "object", - "required": [ - "accountCreationLimit", - "bakingCommissionRange", - "capitalBound", - "delegatorCooldown", - "electionDifficulty", - "euroPerEnergy", - "finalizationCommissionRange", - "foundationAccountIndex", - "leverageBound", - "microGTUPerEuro", - "minimumEquityCapital", - "mintPerPayday", - "passiveBakingCommission", - "passiveFinalizationCommission", - "passiveTransactionCommission", - "poolOwnerCooldown", - "rewardParameters", - "rewardPeriodLength", - "transactionCommissionRange" - ], - "properties": { - "accountCreationLimit": { - "description": "The limit for the number of account creations in a block.", - "type": "integer", - "format": "uint16", - "minimum": 0.0 - }, - "bakingCommissionRange": { - "description": "The range of allowed baker commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "capitalBound": { - "description": "Maximum fraction of the total staked capital of that a new baker can have.", - "type": "number" - }, - "delegatorCooldown": { - "description": "Number of seconds that a delegator must cooldown when reducing their delegated stake.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionDifficulty": { - "description": "Election difficulty for consensus lottery.", - "type": "number" - }, - "euroPerEnergy": { - "description": "Euro per energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/ExchangeRate" - } - ] - }, - "finalizationCommissionRange": { - "description": "The range of allowed finalization commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "foundationAccountIndex": { - "description": "Index of the foundation account.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "leverageBound": { - "description": "The maximum leverage that a baker can have as a ratio of total stake to equity capital.", - "allOf": [ - { - "$ref": "#/definitions/LeverageFactor" - } - ] - }, - "microGTUPerEuro": { - "description": "Micro ccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/ExchangeRate" - } - ] - }, - "minimumEquityCapital": { - "description": "Minimum equity capital required for a new baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "mintPerPayday": { - "$ref": "#/definitions/MintRate" - }, - "passiveBakingCommission": { - "description": "Fraction of baking rewards charged by the passive delegation.", - "type": "number" - }, - "passiveFinalizationCommission": { - "description": "Fraction of finalization rewards charged by the passive delegation.", - "type": "number" - }, - "passiveTransactionCommission": { - "description": "Fraction of transaction rewards charged by the L-pool.", - "type": "number" - }, - "poolOwnerCooldown": { - "description": "Number of seconds that pool owners must cooldown when reducing their equity capital or closing the pool.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "rewardParameters": { - "description": "Current reward parameters.", - "allOf": [ - { - "$ref": "#/definitions/RewardParametersSkeleton_for_MintDistributionV1" - } - ] - }, - "rewardPeriodLength": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "transactionCommissionRange": { - "description": "The range of allowed transaction commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - } - } - }, - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "ContractEvent": { - "type": "string", - "maxLength": 1024, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CooldownParameters": { - "type": "object", - "required": [ - "delegatorCooldown", - "poolOwnerCooldown" - ], - "properties": { - "delegatorCooldown": { - "description": "Number of seconds that a delegator must cooldown when reducing their delegated stake.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "poolOwnerCooldown": { - "description": "Number of seconds that pool owners must cooldown when reducing their equity capital or closing the pool.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "CredentialRegistrationID": { - "type": "string", - "maxLength": 96, - "minLength": 96, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CredentialType": { - "description": "Enumeration of the types of credentials.", - "type": "string", - "enum": [ - "initial", - "normal" - ] - }, - "DelegationTarget": { - "oneOf": [ - { - "description": "Delegate passively, i.e., to no specific baker.", - "type": "object", - "required": [ - "delegateType" - ], - "properties": { - "delegateType": { - "type": "string", - "enum": [ - "Passive" - ] - } - } - }, - { - "description": "Delegate to a specific baker.", - "type": "object", - "required": [ - "bakerId", - "delegateType" - ], - "properties": { - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "delegateType": { - "type": "string", - "enum": [ - "Baker" - ] - } - } - } - ] - }, - "Description": { - "description": "Description either of an anonymity revoker or identity provider. Metadata that should be visible on the chain.", - "type": "object", - "required": [ - "description", - "name", - "url" - ], - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "EncryptedAmount": { - "type": "string", - "maxLength": 384, - "minLength": 384, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "Event": { - "description": "An event describing the changes that occurred to the state of the chain.", - "oneOf": [ - { - "description": "A smart contract module was successfully deployed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleDeployed" - ] - } - } - }, - { - "description": "A new smart contract instance was created.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "initName", - "ref", - "tag" - ], - "properties": { - "address": { - "description": "The newly assigned address of the contract.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the instance was initialized with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract initialization.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "initName": { - "description": "The name of the contract.", - "type": "string" - }, - "ref": { - "description": "Module with the source code of the contract.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "ContractInitialized" - ] - } - } - }, - { - "description": "A smart contract instance was updated.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "instigator", - "message", - "receiveName", - "tag" - ], - "properties": { - "address": { - "description": "Address of the affected instance.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the method was invoked with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract execution.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "instigator": { - "description": "The origin of the message to the smart contract. This can be either an account or a smart contract.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "message": { - "description": "The message passed to method.", - "allOf": [ - { - "$ref": "#/definitions/Parameter" - } - ] - }, - "receiveName": { - "description": "The name of the method that was executed.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "Updated" - ] - } - } - }, - { - "description": "An amount of CCD was transferred.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "Amount that was transferred.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "from": { - "description": "Sender, either smart contract instance or account.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "Transferred" - ] - }, - "to": { - "description": "Receiver. This will currently always be an account. Transferring to a smart contract is always an update.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - } - } - }, - { - "description": "An account with the given address was created.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "AccountCreated" - ] - } - } - }, - { - "description": "A new credential with the given ID was deployed onto an account. This is used only when a new account is created. See [Event::CredentialsUpdated] for when an existing account's credentials are updated.", - "type": "object", - "required": [ - "account", - "regId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "regId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialDeployed" - ] - } - } - }, - { - "description": "A new baker was registered, with the given ID and keys.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "restakeEarnings", - "signKey", - "stake", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "restakeEarnings": { - "description": "Whether the baker will automatically add earnings to their stake or not.", - "type": "boolean" - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "stake": { - "description": "The amount the account staked to become a baker. This amount is locked.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerAdded" - ] - } - } - }, - { - "description": "A baker was scheduled to be removed.", - "type": "object", - "required": [ - "account", - "bakerId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerRemoved" - ] - } - } - }, - { - "description": "A baker's stake was increased. This has effect immediately.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeIncreased" - ] - } - } - }, - { - "description": "A baker's stake was scheduled to be decreased. This will have an effect on the stake after a number of epochs, controlled by the baker cooldown period.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeDecreased" - ] - } - } - }, - { - "description": "The setting for whether rewards are added to stake immediately or not was changed to the given value.", - "type": "object", - "required": [ - "account", - "bakerId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "The new value of the flag.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetRestakeEarnings" - ] - } - } - }, - { - "description": "The baker keys were updated. The new keys are listed.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "signKey", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerKeysUpdated" - ] - } - } - }, - { - "description": "Keys of the given credential were updated.", - "type": "object", - "required": [ - "credId", - "tag" - ], - "properties": { - "credId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialKeysUpdated" - ] - } - } - }, - { - "description": "A new encrypted amount was added to the account.", - "type": "object", - "required": [ - "account", - "encryptedAmount", - "newIndex", - "tag" - ], - "properties": { - "account": { - "description": "The account onto which the amount was added.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "encryptedAmount": { - "description": "The encrypted amount that was added.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newIndex": { - "description": "The index the amount was assigned.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "NewEncryptedAmount" - ] - } - } - }, - { - "description": "One or more encrypted amounts were removed from an account as part of a transfer or decryption.", - "type": "object", - "required": [ - "account", - "inputAmount", - "newAmount", - "tag", - "upToIndex" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "inputAmount": { - "description": "The input encrypted amount that was removed.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount on the affected account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountsRemoved" - ] - }, - "upToIndex": { - "description": "The index indicating which amounts were used.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - { - "description": "The public balance of the account was increased via a transfer from encrypted to public balance.", - "type": "object", - "required": [ - "account", - "amount", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "amount": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "AmountAddedByDecryption" - ] - } - } - }, - { - "description": "The encrypted balance of the account was updated due to transfer from public to encrypted balance of the account.", - "type": "object", - "required": [ - "account", - "amount", - "newAmount", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "amount": { - "description": "The amount that was transferred from public to encrypted balance.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount of the account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedSelfAmountAdded" - ] - } - } - }, - { - "description": "An update was enqueued for the given time.", - "type": "object", - "required": [ - "effectiveTime", - "payload", - "tag" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "payload": { - "$ref": "#/definitions/UpdatePayload" - }, - "tag": { - "type": "string", - "enum": [ - "UpdateEnqueued" - ] - } - } - }, - { - "description": "A transfer with schedule was enqueued.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "The list of releases. Ordered by increasing timestamp.", - "type": "array", - "items": { - "type": "array", - "items": [ - { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - } - }, - "from": { - "description": "Sender account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "TransferredWithSchedule" - ] - }, - "to": { - "description": "Receiver account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - } - } - }, - { - "description": "The credentials of the account were updated. Either added, removed, or both.", - "type": "object", - "required": [ - "account", - "newCredIds", - "newThreshold", - "removedCredIds", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "newCredIds": { - "description": "The credential ids that were added.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "newThreshold": { - "description": "The (possibly) updated account threshold.", - "type": "integer", - "format": "uint8", - "minimum": 1.0 - }, - "removedCredIds": { - "description": "The credentials that were removed.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "CredentialsUpdated" - ] - } - } - }, - { - "description": "Data was registered.", - "type": "object", - "required": [ - "data", - "tag" - ], - "properties": { - "data": { - "$ref": "#/definitions/RegisteredData" - }, - "tag": { - "type": "string", - "enum": [ - "DataRegistered" - ] - } - } - }, - { - "description": "Memo", - "type": "object", - "required": [ - "memo", - "tag" - ], - "properties": { - "memo": { - "$ref": "#/definitions/Memo" - }, - "tag": { - "type": "string", - "enum": [ - "TransferMemo" - ] - } - } - }, - { - "description": "A V1 contract was interrupted.", - "type": "object", - "required": [ - "address", - "events", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that was interrupted.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "events": { - "description": "Events generated up to the interrupt.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "tag": { - "type": "string", - "enum": [ - "Interrupted" - ] - } - } - }, - { - "description": "A V1 contract resumed execution.", - "type": "object", - "required": [ - "address", - "success", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that is resuming.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "success": { - "description": "Whether the interrupt succeeded or not.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "Resumed" - ] - } - } - }, - { - "description": "Updated open status for a baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "openStatus", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "openStatus": { - "description": "The open status.", - "allOf": [ - { - "$ref": "#/definitions/OpenStatus" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetOpenStatus" - ] - } - } - }, - { - "description": "Updated metadata url for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "metadataURL", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "metadataURL": { - "description": "The URL.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetMetadataURL" - ] - } - } - }, - { - "description": "Updated transaction fee commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "tag", - "transactionFeeCommission" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetTransactionFeeCommission" - ] - }, - "transactionFeeCommission": { - "description": "The transaction fee commission.", - "type": "number" - } - } - }, - { - "description": "Updated baking reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "bakingRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakingRewardCommission": { - "description": "The baking reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetBakingRewardCommission" - ] - } - } - }, - { - "description": "Updated finalization reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "finalizationRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizationRewardCommission": { - "description": "The finalization reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetFinalizationRewardCommission" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeIncreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeDecreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "Whether earnings will be restaked", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetRestakeEarnings" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegationTarget", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegationTarget": { - "description": "New delegation target", - "allOf": [ - { - "$ref": "#/definitions/DelegationTarget" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetDelegationTarget" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationAdded" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationRemoved" - ] - } - } - } - ] - }, - "ExchangeRate": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "FinalizationSummary": { - "description": "Summary of the finalization record in a block, if any.", - "type": "object", - "required": [ - "finalizationBlockPointer", - "finalizationDelay", - "finalizationIndex", - "finalizers" - ], - "properties": { - "finalizationBlockPointer": { - "$ref": "#/definitions/SHA256Hash" - }, - "finalizationDelay": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizationIndex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizers": { - "type": "array", - "items": { - "$ref": "#/definitions/FinalizationSummaryParty" - } - } - } - }, - "FinalizationSummaryParty": { - "description": "Details of a party in a finalization.", - "type": "object", - "required": [ - "bakerId", - "signed", - "weight" - ], - "properties": { - "bakerId": { - "description": "The identity of the baker.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "signed": { - "description": "Whether the party's signature is present", - "type": "boolean" - }, - "weight": { - "description": "The party's relative weight in the committee", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "GASRewards": { - "description": "The reward fractions related to the gas account and inclusion of special transactions.", - "type": "object", - "required": [ - "accountCreation", - "baker", - "chainUpdate", - "finalizationProof" - ], - "properties": { - "accountCreation": { - "description": "`FeeAccountCreation`: fraction paid for including each account creation transaction in a block.", - "type": "number" - }, - "baker": { - "description": "`BakerPrevTransFrac`: fraction of the previous gas account paid to the baker.", - "type": "number" - }, - "chainUpdate": { - "description": "`FeeUpdate`: fraction paid for including an update transaction in a block.", - "type": "number" - }, - "finalizationProof": { - "description": "`FeeAddFinalisationProof`: fraction paid for including a finalization proof in a block.", - "type": "number" - } - } - }, - "HexString": { - "type": "string", - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "HigherLevelAccessStructure_for_Level1KeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "HigherLevelAccessStructure_for_RootKeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "InclusiveRange_for_Number": { - "type": "object", - "required": [ - "max", - "min" - ], - "properties": { - "max": { - "type": "number" - }, - "min": { - "type": "number" - } - } - }, - "IpInfo_for_HexString": { - "description": "Public information about an identity provider.", - "type": "object", - "required": [ - "ipCdiVerifyKey", - "ipDescription", - "ipIdentity", - "ipVerifyKey" - ], - "properties": { - "ipCdiVerifyKey": { - "description": "Ed public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "ipDescription": { - "description": "Free form description, e.g., how to contact them off-chain", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "ipIdentity": { - "description": "Unique identifier of the identity provider.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "ipVerifyKey": { - "description": "PS public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "Level1Update": { - "description": "An update with level 1 keys of either level 1 or level 2 keys. Each of the updates must be a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "LeverageFactor": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "Memo": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "MintDistributionV0": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward", - "mintPerSlot" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - }, - "mintPerSlot": { - "$ref": "#/definitions/MintRate" - } - } - }, - "MintDistributionV1": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - } - } - }, - "MintRate": { - "type": "number" - }, - "OpenStatus": { - "description": "The status of whether a baking pool allows delegators to join.", - "type": "string", - "enum": [ - "openForAll", - "closedForNew", - "closedForAll" - ] - }, - "Parameter": { - "type": "string", - "maxLength": 2048, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "PendingUpdatesV0": { - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "bakerStakeThreshold", - "electionDifficulty", - "euroPerEnergy", - "foundationAccount", - "gasRewards", - "level1Keys", - "level2Keys", - "microGTUPerEuro", - "mintDistribution", - "protocol", - "rootKeys", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "$ref": "#/definitions/UpdateQueue_for_ArInfo_for_HexString" - }, - "addIdentityProvider": { - "$ref": "#/definitions/UpdateQueue_for_IpInfo_for_HexString" - }, - "bakerStakeThreshold": { - "$ref": "#/definitions/UpdateQueue_for_BakerParameters" - }, - "electionDifficulty": { - "$ref": "#/definitions/UpdateQueue_for_Number" - }, - "euroPerEnergy": { - "$ref": "#/definitions/UpdateQueue_for_ExchangeRate" - }, - "foundationAccount": { - "$ref": "#/definitions/UpdateQueue_for_uint64" - }, - "gasRewards": { - "$ref": "#/definitions/UpdateQueue_for_GASRewards" - }, - "level1Keys": { - "$ref": "#/definitions/UpdateQueue_for_HigherLevelAccessStructure_for_Level1KeysKind" - }, - "level2Keys": { - "$ref": "#/definitions/UpdateQueue_for_AuthorizationsV0" - }, - "microGTUPerEuro": { - "$ref": "#/definitions/UpdateQueue_for_ExchangeRate" - }, - "mintDistribution": { - "$ref": "#/definitions/UpdateQueue_for_MintDistributionV0" - }, - "protocol": { - "$ref": "#/definitions/UpdateQueue_for_ProtocolUpdate" - }, - "rootKeys": { - "$ref": "#/definitions/UpdateQueue_for_HigherLevelAccessStructure_for_RootKeysKind" - }, - "transactionFeeDistribution": { - "$ref": "#/definitions/UpdateQueue_for_TransactionFeeDistribution" - } - } - }, - "PendingUpdatesV1": { - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "cooldownParameters", - "electionDifficulty", - "euroPerEnergy", - "foundationAccount", - "gasRewards", - "level1Keys", - "level2Keys", - "microGTUPerEuro", - "mintDistribution", - "poolParameters", - "protocol", - "rootKeys", - "timeParameters", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "$ref": "#/definitions/UpdateQueue_for_ArInfo_for_HexString" - }, - "addIdentityProvider": { - "$ref": "#/definitions/UpdateQueue_for_IpInfo_for_HexString" - }, - "cooldownParameters": { - "$ref": "#/definitions/UpdateQueue_for_CooldownParameters" - }, - "electionDifficulty": { - "$ref": "#/definitions/UpdateQueue_for_Number" - }, - "euroPerEnergy": { - "$ref": "#/definitions/UpdateQueue_for_ExchangeRate" - }, - "foundationAccount": { - "$ref": "#/definitions/UpdateQueue_for_uint64" - }, - "gasRewards": { - "$ref": "#/definitions/UpdateQueue_for_GASRewards" - }, - "level1Keys": { - "$ref": "#/definitions/UpdateQueue_for_HigherLevelAccessStructure_for_Level1KeysKind" - }, - "level2Keys": { - "$ref": "#/definitions/UpdateQueue_for_AuthorizationsV1" - }, - "microGTUPerEuro": { - "$ref": "#/definitions/UpdateQueue_for_ExchangeRate" - }, - "mintDistribution": { - "$ref": "#/definitions/UpdateQueue_for_MintDistributionV1" - }, - "poolParameters": { - "$ref": "#/definitions/UpdateQueue_for_PoolParameters" - }, - "protocol": { - "$ref": "#/definitions/UpdateQueue_for_ProtocolUpdate" - }, - "rootKeys": { - "$ref": "#/definitions/UpdateQueue_for_HigherLevelAccessStructure_for_RootKeysKind" - }, - "timeParameters": { - "$ref": "#/definitions/UpdateQueue_for_TimeParameters" - }, - "transactionFeeDistribution": { - "$ref": "#/definitions/UpdateQueue_for_TransactionFeeDistribution" - } - } - }, - "PoolParameters": { - "description": "Parameters related to staking pools.", - "type": "object", - "required": [ - "bakingCommissionRange", - "capitalBound", - "finalizationCommissionRange", - "leverageBound", - "minimumEquityCapital", - "passiveBakingCommission", - "passiveFinalizationCommission", - "passiveTransactionCommission", - "transactionCommissionRange" - ], - "properties": { - "bakingCommissionRange": { - "description": "The range of allowed baker commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "capitalBound": { - "description": "Maximum fraction of the total staked capital of that a new baker can have.", - "type": "number" - }, - "finalizationCommissionRange": { - "description": "The range of allowed finalization commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "leverageBound": { - "description": "The maximum leverage that a baker can have as a ratio of total stake to equity capital.", - "allOf": [ - { - "$ref": "#/definitions/LeverageFactor" - } - ] - }, - "minimumEquityCapital": { - "description": "Minimum equity capital required for a new baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "passiveBakingCommission": { - "description": "Fraction of baking rewards charged by the passive delegation.", - "type": "number" - }, - "passiveFinalizationCommission": { - "description": "Fraction of finalization rewards charged by the passive delegation.", - "type": "number" - }, - "passiveTransactionCommission": { - "description": "Fraction of transaction rewards charged by the L-pool.", - "type": "number" - }, - "transactionCommissionRange": { - "description": "The range of allowed transaction commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - } - } - }, - "ProtocolUpdate": { - "description": "A generic protocol update. This is essentially an announcement of the update. The details of the update will be communicated in some off-chain way, and bakers will need to update their node software to support the update.", - "type": "object", - "required": [ - "message", - "specificationAuxiliaryData", - "specificationHash", - "specificationURL" - ], - "properties": { - "message": { - "type": "string" - }, - "specificationAuxiliaryData": { - "$ref": "#/definitions/HexString" - }, - "specificationHash": { - "$ref": "#/definitions/SHA256Hash" - }, - "specificationURL": { - "type": "string" - } - } - }, - "ProtocolVersion": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - }, - "RegisteredData": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "RejectReason": { - "description": "A reason for why a transaction was rejected. Rejected means included in a block, but the desired action was not achieved. The only effect of a rejected transaction is payment.\n\nNOTE: Some of the variant definitions can look peculiar, but they are made to be compatible with the serialization of the Haskell datatype.", - "oneOf": [ - { - "description": "Error raised when validating the Wasm module.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ModuleNotWF" - ] - } - } - }, - { - "description": "As the name says.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleHashAlreadyExists" - ] - } - } - }, - { - "description": "Account does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidAccountReference" - ] - } - } - }, - { - "description": "Reference to a non-existing contract init method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidInitMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing contract receive method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidReceiveMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing module.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidModuleReference" - ] - } - } - }, - { - "description": "Contract instance does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/ContractAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidContractAddress" - ] - } - } - }, - { - "description": "Runtime exception occurred when running either the init or receive method.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RuntimeFailure" - ] - } - } - }, - { - "description": "When one wishes to transfer an amount from A to B but there are not enough funds on account/contract A to make this possible. The data are the from address and the amount to transfer.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/Address" - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "AmountTooLarge" - ] - } - } - }, - { - "description": "Serialization of the body failed.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "SerializationFailure" - ] - } - } - }, - { - "description": "We ran of out energy to process this transaction.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "OutOfEnergy" - ] - } - } - }, - { - "description": "Rejected due to contract logic in init function of a contract.", - "type": "object", - "required": [ - "rejectReason", - "tag" - ], - "properties": { - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedInit" - ] - } - } - }, - { - "type": "object", - "required": [ - "contractAddress", - "parameter", - "receiveName", - "rejectReason", - "tag" - ], - "properties": { - "contractAddress": { - "$ref": "#/definitions/ContractAddress" - }, - "parameter": { - "$ref": "#/definitions/Parameter" - }, - "receiveName": { - "type": "string" - }, - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedReceive" - ] - } - } - }, - { - "description": "Reward account desired by the baker does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentRewardAccount" - ] - } - } - }, - { - "description": "Proof that the baker owns relevant private keys is not valid.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidProof" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "AlreadyABaker" - ] - } - } - }, - { - "description": "Tried to remove a baker for an account that has no baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotABaker" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForBakerStake" - ] - } - } - }, - { - "description": "The amount provided is under the threshold required for becoming a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeUnderMinimumThresholdForBaking" - ] - } - } - }, - { - "description": "The change could not be made because the baker is in cooldown for another change", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakerInCooldown" - ] - } - } - }, - { - "description": "A baker with the given aggregation key already exists", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/BakerAggregationVerifyKey" - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateAggregationKey" - ] - } - } - }, - { - "description": "Encountered credential ID that does not exist", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonExistentCredentialID" - ] - } - } - }, - { - "description": "Attempted to add an account key to a key index already in use", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "KeyIndexAlreadyInUse" - ] - } - } - }, - { - "description": "When the account threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidAccountThreshold" - ] - } - } - }, - { - "description": "When the credential key threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentialKeySignThreshold" - ] - } - } - }, - { - "description": "Proof for an encrypted amount transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidEncryptedAmountTransferProof" - ] - } - } - }, - { - "description": "Proof for a secret to public transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidTransferToPublicProof" - ] - } - } - }, - { - "description": "Account tried to transfer an encrypted amount to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountSelfTransfer" - ] - } - } - }, - { - "description": "The provided index is below the start index or above `startIndex + length incomingAmounts`", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidIndexOnEncryptedTransfer" - ] - } - } - }, - { - "description": "The transfer with schedule is going to send 0 tokens", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ZeroScheduledAmount" - ] - } - } - }, - { - "description": "The transfer with schedule has a non strictly increasing schedule", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonIncreasingSchedule" - ] - } - } - }, - { - "description": "The first scheduled release in a transfer with schedule has already expired", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FirstScheduledReleaseExpired" - ] - } - } - }, - { - "description": "Account tried to transfer with schedule to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "ScheduledSelfTransfer" - ] - } - } - }, - { - "description": "At least one of the credentials was either malformed or its proof was incorrect.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentials" - ] - } - } - }, - { - "description": "Some of the credential IDs already exist or are duplicated in the transaction.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateCredIDs" - ] - } - } - }, - { - "description": "A credential id that was to be removed is not part of the account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentCredIDs" - ] - } - } - }, - { - "description": "Attemp to remove the first credential", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RemoveFirstCredential" - ] - } - } - }, - { - "description": "The credential holder of the keys to be updated did not sign the transaction", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "CredentialHolderDidNotSign" - ] - } - } - }, - { - "description": "Account is not allowed to have multiple credentials because it contains a non-zero encrypted transfer.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedMultipleCredentials" - ] - } - } - }, - { - "description": "The account is not allowed to receive encrypted transfers because it has multiple credentials.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToReceiveEncrypted" - ] - } - } - }, - { - "description": "The account is not allowed to send encrypted transfers (or transfer from/to public to/from encrypted)", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToHandleEncrypted" - ] - } - } - }, - { - "description": "A configure baker transaction is missing one or more arguments in order to add a baker.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingBakerAddParameters" - ] - } - } - }, - { - "description": "Finalization reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FinalizationRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Baking reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakingRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Transaction fee commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "TransactionFeeCommissionNotInRange" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "AlreadyADelegator" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForDelegationStake" - ] - } - } - }, - { - "description": "A configure delegation transaction is missing one or more arguments in order to add a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingDelegationAddParameters" - ] - } - } - }, - { - "description": "Delegation stake when adding a delegator was 0.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientDelegationStake" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "DelegatorInCooldown" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotADelegator" - ] - } - } - }, - { - "description": "Delegation target is not a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationTargetNotABaker" - ] - } - } - }, - { - "description": "The amount would result in pool capital higher than the maximum threshold.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeOverMaximumThresholdForPool" - ] - } - } - }, - { - "description": "The amount would result in pool with a too high fraction of delegated capital.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolWouldBecomeOverDelegated" - ] - } - } - }, - { - "description": "The pool is not open to delegators.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolClosed" - ] - } - } - } - ] - }, - "RewardParametersSkeleton_for_MintDistributionV0": { - "description": "Values of reward parameters.", - "type": "object", - "required": [ - "gASRewards", - "mintDistribution", - "transactionFeeDistribution" - ], - "properties": { - "gASRewards": { - "$ref": "#/definitions/GASRewards" - }, - "mintDistribution": { - "$ref": "#/definitions/MintDistributionV0" - }, - "transactionFeeDistribution": { - "$ref": "#/definitions/TransactionFeeDistribution" - } - } - }, - "RewardParametersSkeleton_for_MintDistributionV1": { - "description": "Values of reward parameters.", - "type": "object", - "required": [ - "gASRewards", - "mintDistribution", - "transactionFeeDistribution" - ], - "properties": { - "gASRewards": { - "$ref": "#/definitions/GASRewards" - }, - "mintDistribution": { - "$ref": "#/definitions/MintDistributionV1" - }, - "transactionFeeDistribution": { - "$ref": "#/definitions/TransactionFeeDistribution" - } - } - }, - "RootUpdate": { - "description": "An update with root keys of some other set of governance keys, or the root keys themselves. Each update is a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "rootKeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "ScheduledUpdate_for_ArInfo_for_HexString": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/ArInfo_for_HexString" - } - } - }, - "ScheduledUpdate_for_AuthorizationsV0": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - "ScheduledUpdate_for_AuthorizationsV1": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - }, - "ScheduledUpdate_for_BakerParameters": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/BakerParameters" - } - } - }, - "ScheduledUpdate_for_CooldownParameters": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/CooldownParameters" - } - } - }, - "ScheduledUpdate_for_ExchangeRate": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/ExchangeRate" - } - } - }, - "ScheduledUpdate_for_GASRewards": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/GASRewards" - } - } - }, - "ScheduledUpdate_for_HigherLevelAccessStructure_for_Level1KeysKind": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - "ScheduledUpdate_for_HigherLevelAccessStructure_for_RootKeysKind": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - "ScheduledUpdate_for_IpInfo_for_HexString": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/IpInfo_for_HexString" - } - } - }, - "ScheduledUpdate_for_MintDistributionV0": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/MintDistributionV0" - } - } - }, - "ScheduledUpdate_for_MintDistributionV1": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/MintDistributionV1" - } - } - }, - "ScheduledUpdate_for_Number": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "type": "number" - } - } - }, - "ScheduledUpdate_for_PoolParameters": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/PoolParameters" - } - } - }, - "ScheduledUpdate_for_ProtocolUpdate": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/ProtocolUpdate" - } - } - }, - "ScheduledUpdate_for_TimeParameters": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/TimeParameters" - } - } - }, - "ScheduledUpdate_for_TransactionFeeDistribution": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "$ref": "#/definitions/TransactionFeeDistribution" - } - } - }, - "ScheduledUpdate_for_uint64": { - "description": "A scheduled update of a given type.", - "type": "object", - "required": [ - "effectiveTime", - "update" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "update": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "SpecialTransactionOutcome": { - "description": "In addition to the user initiated transactions the protocol generates some events which are deemed \"Special outcomes\". These are rewards for running the consensus and finalization protocols.", - "oneOf": [ - { - "description": "Reward issued to all the bakers at the end of an epoch for baking blocks in the epoch.", - "type": "object", - "required": [ - "bakerRewards", - "remainder", - "tag" - ], - "properties": { - "bakerRewards": { - "type": "array", - "items": { - "$ref": "#/definitions/AccountAmount" - } - }, - "remainder": { - "description": "Remaining balance of the baking account. This will be transfered to the next epoch's reward account. It exists since it is not possible to perfectly distribute the accumulated rewards. The reason this is not possible is that amounts are integers.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakingRewards" - ] - } - } - }, - { - "description": "Distribution of newly minted CCD.", - "type": "object", - "required": [ - "foundationAccount", - "mintBakingReward", - "mintFinalizationReward", - "mintPlatformDevelopmentCharge", - "tag" - ], - "properties": { - "foundationAccount": { - "description": "The address of the foundation account that the newly minted CCD goes to.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "mintBakingReward": { - "description": "The portion of the newly minted CCD that goes to the baking reward account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "mintFinalizationReward": { - "description": "The portion that goes to the finalization reward account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "mintPlatformDevelopmentCharge": { - "description": "The portion that goes to the foundation, as foundation tax.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "Mint" - ] - } - } - }, - { - "description": "Distribution of finalization rewards.", - "type": "object", - "required": [ - "finalizationRewards", - "remainder", - "tag" - ], - "properties": { - "finalizationRewards": { - "type": "array", - "items": { - "$ref": "#/definitions/AccountAmount" - } - }, - "remainder": { - "description": "Remaining balance of the finalization reward account. It exists since it is not possible to perfectly distribute the accumulated rewards. The reason this is not possible is that amounts are integers.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "FinalizationRewards" - ] - } - } - }, - { - "description": "Reward for including transactions in a block.", - "type": "object", - "required": [ - "baker", - "bakerReward", - "foundationAccount", - "foundationCharge", - "newGASAccount", - "oldGASAccount", - "tag", - "transactionFees" - ], - "properties": { - "baker": { - "description": "The account address where the baker receives the reward.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerReward": { - "description": "The amount of CCD that goes to the baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "foundationAccount": { - "description": "The account address where the foundation receives the tax.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "foundationCharge": { - "description": "The amount of CCD that goes to the foundation.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "newGASAccount": { - "description": "New balance of the GAS account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "oldGASAccount": { - "description": "Previous balance of the GAS account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BlockReward" - ] - }, - "transactionFees": { - "description": "Total amount of transaction fees in the block.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - }, - { - "description": "Payment for the foundation.", - "type": "object", - "required": [ - "developmentCharge", - "foundationAccount", - "tag" - ], - "properties": { - "developmentCharge": { - "description": "Amount rewarded.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "foundationAccount": { - "description": "Address of the foundation account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "PaydayFoundationReward" - ] - } - } - }, - { - "description": "Payment for a particular account. When listed in a block summary, the delegated pool of the account is given by the last PaydayPoolReward outcome included before this outcome.", - "type": "object", - "required": [ - "account", - "bakerReward", - "finalizationReward", - "tag", - "transactionFees" - ], - "properties": { - "account": { - "description": "The account that got rewarded.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerReward": { - "description": "The baking reward at payday to the account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "finalizationReward": { - "description": "The finalization reward at payday to the account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "PaydayAccountReward" - ] - }, - "transactionFees": { - "description": "The transaction fee reward at payday to the account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - }, - { - "description": "Amounts accrued to accounts for each baked block.", - "type": "object", - "required": [ - "bakerId", - "bakerReward", - "foundationCharge", - "newGASAccount", - "oldGASAccount", - "passiveReward", - "tag", - "transactionFees" - ], - "properties": { - "bakerId": { - "description": "The baker of the block, who will receive the award.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakerReward": { - "description": "The amount awarded to the baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "foundationCharge": { - "description": "The amount awarded to the foundation.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "newGASAccount": { - "description": "The new balance of the GAS account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "oldGASAccount": { - "description": "The old balance of the GAS account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "passiveReward": { - "description": "The amount awarded to the passive delegators.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BlockAccrueReward" - ] - }, - "transactionFees": { - "description": "The total fees paid for transactions in the block.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - }, - { - "description": "Payment distributed to a pool or passive delegators.", - "type": "object", - "required": [ - "bakerReward", - "finalizationReward", - "tag", - "transactionFees" - ], - "properties": { - "bakerReward": { - "description": "Accrued baking rewards for pool.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "finalizationReward": { - "description": "Accrued finalization rewards for pool.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "poolOwner": { - "description": "The pool owner (passive delegators when 'None').", - "type": [ - "integer", - "null" - ], - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "PaydayPoolReward" - ] - }, - "transactionFees": { - "description": "Accrued transaction fees for pool.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - } - ] - }, - "TimeParameters": { - "description": "The time parameters are introduced as of protocol version 4, and consist of the reward period length and the mint rate per payday. These are coupled as a change to either affects the overall rate of minting.", - "type": "object", - "required": [ - "mintPerPayday", - "rewardPeriodLength" - ], - "properties": { - "mintPerPayday": { - "$ref": "#/definitions/MintRate" - }, - "rewardPeriodLength": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "TransactionFeeDistribution": { - "description": "Update the transaction fee distribution to the specified value.", - "type": "object", - "required": [ - "baker", - "gasAccount" - ], - "properties": { - "baker": { - "description": "The fraction that goes to the baker of the block.", - "type": "number" - }, - "gasAccount": { - "description": "The fraction that goes to the gas account. The remaining fraction will go to the foundation.", - "type": "number" - } - } - }, - "TransactionType": { - "description": "Types of account transactions.", - "type": "string", - "enum": [ - "deployModule", - "initContract", - "update", - "transfer", - "addBaker", - "removeBaker", - "updateBakerStake", - "updateBakerRestakeEarnings", - "updateBakerKeys", - "updateCredentialKeys", - "encryptedAmountTransfer", - "transferToEncrypted", - "transferToPublic", - "transferWithSchedule", - "updateCredentials", - "registerData", - "transferWithMemo", - "encryptedAmountTransferWithMemo", - "transferWithScheduleAndMemo", - "configureBaker", - "configureDelegation" - ] - }, - "UpdateKeysCollectionSkeleton_for_AuthorizationsV0": { - "description": "The current collection of keys allowed to do updates. Parametrized by the chain parameter version.", - "type": "object", - "required": [ - "level1Keys", - "level2Keys", - "rootKeys" - ], - "properties": { - "level1Keys": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - }, - "level2Keys": { - "$ref": "#/definitions/AuthorizationsV0" - }, - "rootKeys": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - "UpdateKeysCollectionSkeleton_for_AuthorizationsV1": { - "description": "The current collection of keys allowed to do updates. Parametrized by the chain parameter version.", - "type": "object", - "required": [ - "level1Keys", - "level2Keys", - "rootKeys" - ], - "properties": { - "level1Keys": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - }, - "level2Keys": { - "$ref": "#/definitions/AuthorizationsV1" - }, - "rootKeys": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - "UpdatePayload": { - "description": "The type of an update payload.", - "oneOf": [ - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ProtocolUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "protocol" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "type": "number" - }, - "updateType": { - "type": "string", - "enum": [ - "electionDifficulty" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "euroPerEnergy" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "microGTUPerEuro" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/AccountAddress" - }, - "updateType": { - "type": "string", - "enum": [ - "foundationAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV0" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TransactionFeeDistribution" - }, - "updateType": { - "type": "string", - "enum": [ - "transactionFeeDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/GASRewards" - }, - "updateType": { - "type": "string", - "enum": [ - "gASRewards" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/BakerParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "bakerStakeThreshold" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/RootUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "root" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/Level1Update" - }, - "updateType": { - "type": "string", - "enum": [ - "level1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ArInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addAnonymityRevoker" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/IpInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addIdentityProvider" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/CooldownParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "cooldownParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/PoolParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "poolParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TimeParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "timeParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV1" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistributionCPV1" - ] - } - } - } - ] - }, - "UpdateQueue_for_ArInfo_for_HexString": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_ArInfo_for_HexString" - } - } - } - }, - "UpdateQueue_for_AuthorizationsV0": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_AuthorizationsV0" - } - } - } - }, - "UpdateQueue_for_AuthorizationsV1": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_AuthorizationsV1" - } - } - } - }, - "UpdateQueue_for_BakerParameters": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_BakerParameters" - } - } - } - }, - "UpdateQueue_for_CooldownParameters": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_CooldownParameters" - } - } - } - }, - "UpdateQueue_for_ExchangeRate": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_ExchangeRate" - } - } - } - }, - "UpdateQueue_for_GASRewards": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_GASRewards" - } - } - } - }, - "UpdateQueue_for_HigherLevelAccessStructure_for_Level1KeysKind": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_HigherLevelAccessStructure_for_Level1KeysKind" - } - } - } - }, - "UpdateQueue_for_HigherLevelAccessStructure_for_RootKeysKind": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_HigherLevelAccessStructure_for_RootKeysKind" - } - } - } - }, - "UpdateQueue_for_IpInfo_for_HexString": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_IpInfo_for_HexString" - } - } - } - }, - "UpdateQueue_for_MintDistributionV0": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_MintDistributionV0" - } - } - } - }, - "UpdateQueue_for_MintDistributionV1": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_MintDistributionV1" - } - } - } - }, - "UpdateQueue_for_Number": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_Number" - } - } - } - }, - "UpdateQueue_for_PoolParameters": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_PoolParameters" - } - } - } - }, - "UpdateQueue_for_ProtocolUpdate": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_ProtocolUpdate" - } - } - } - }, - "UpdateQueue_for_TimeParameters": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_TimeParameters" - } - } - } - }, - "UpdateQueue_for_TransactionFeeDistribution": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_TransactionFeeDistribution" - } - } - } - }, - "UpdateQueue_for_uint64": { - "description": "A queue of updates of a given type.", - "type": "object", - "required": [ - "nextSequenceNumber", - "queue" - ], - "properties": { - "nextSequenceNumber": { - "description": "Next available sequence number for the update type.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "queue": { - "description": "Queue of updates, ordered by effective time.", - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledUpdate_for_uint64" - } - } - } - }, - "UpdateType": { - "description": "Enumeration of the types of updates that are possible.", - "type": "string", - "enum": [ - "updateProtocol", - "updateElectionDifficulty", - "updateEuroPerEnergy", - "updateMicroGTUPerEuro", - "updateFoundationAccount", - "updateMintDistribution", - "updateTransactionFeeDistribution", - "updateGASRewards", - "updateAddAnonymityRevoker", - "updateAddIdentityProvider", - "updateRootKeys", - "updateLevel1Keys", - "updateLevel2Keys", - "updatePoolParameters", - "updateCooldownParameters", - "updateTimeParameters" - ] - }, - "UpdatesSkeleton_for_UpdateKeysCollectionSkeleton_for_AuthorizationsV0_and_ChainParametersV0_and_PendingUpdatesV0": { - "description": "State of updates. This includes current values of parameters as well as any scheduled updates.", - "type": "object", - "required": [ - "chainParameters", - "keys", - "updateQueues" - ], - "properties": { - "chainParameters": { - "description": "Values of chain parameters.", - "allOf": [ - { - "$ref": "#/definitions/ChainParametersV0" - } - ] - }, - "keys": { - "description": "Keys allowed to perform updates.", - "allOf": [ - { - "$ref": "#/definitions/UpdateKeysCollectionSkeleton_for_AuthorizationsV0" - } - ] - }, - "protocolUpdate": { - "description": "Possibly pending protocol update.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/ProtocolUpdate" - }, - { - "type": "null" - } - ] - }, - "updateQueues": { - "description": "Any scheduled updates.", - "allOf": [ - { - "$ref": "#/definitions/PendingUpdatesV0" - } - ] - } - } - }, - "UpdatesSkeleton_for_UpdateKeysCollectionSkeleton_for_AuthorizationsV1_and_ChainParametersV1_and_PendingUpdatesV1": { - "description": "State of updates. This includes current values of parameters as well as any scheduled updates.", - "type": "object", - "required": [ - "chainParameters", - "keys", - "updateQueues" - ], - "properties": { - "chainParameters": { - "description": "Values of chain parameters.", - "allOf": [ - { - "$ref": "#/definitions/ChainParametersV1" - } - ] - }, - "keys": { - "description": "Keys allowed to perform updates.", - "allOf": [ - { - "$ref": "#/definitions/UpdateKeysCollectionSkeleton_for_AuthorizationsV1" - } - ] - }, - "protocolUpdate": { - "description": "Possibly pending protocol update.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/ProtocolUpdate" - }, - { - "type": "null" - } - ] - }, - "updateQueues": { - "description": "Any scheduled updates.", - "allOf": [ - { - "$ref": "#/definitions/PendingUpdatesV1" - } - ] - } - } - }, - "VerifyKey": { - "type": "object", - "properties": { - "schemeId": { - "type": "string" - }, - "verifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } - }, - "WasmVersion": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBlocksAtHeight.json b/source/mainnet/net/references/grpc-json-schemas/GetBlocksAtHeight.json deleted file mode 100644 index 810c0b3403..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBlocksAtHeight.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Array_of_SHA256Hash", - "type": "array", - "items": { - "$ref": "#/definitions/SHA256Hash" - }, - "definitions": { - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetBranches.json b/source/mainnet/net/references/grpc-json-schemas/GetBranches.json deleted file mode 100644 index d0cc55ac94..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetBranches.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Branch", - "description": "Branches of the tree. This is the part of the tree above the last finalized block.", - "type": "object", - "required": [ - "blockHash", - "children" - ], - "properties": { - "blockHash": { - "description": "Root of the tree.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "children": { - "description": "And children.", - "type": "array", - "items": { - "$ref": "#/definitions/Branch" - } - } - }, - "definitions": { - "Branch": { - "description": "Branches of the tree. This is the part of the tree above the last finalized block.", - "type": "object", - "required": [ - "blockHash", - "children" - ], - "properties": { - "blockHash": { - "description": "Root of the tree.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "children": { - "description": "And children.", - "type": "array", - "items": { - "$ref": "#/definitions/Branch" - } - } - } - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetConsensusInfo.json b/source/mainnet/net/references/grpc-json-schemas/GetConsensusInfo.json deleted file mode 100644 index babc7207c7..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetConsensusInfo.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ConsensusInfo", - "description": "Summary of the current state of consensus.", - "type": "object", - "required": [ - "bestBlock", - "bestBlockHeight", - "blockArriveLatencyEMA", - "blockArriveLatencyEMSD", - "blockReceiveLatencyEMA", - "blockReceiveLatencyEMSD", - "blocksReceivedCount", - "blocksVerifiedCount", - "currentEraGenesisBlock", - "currentEraGenesisTime", - "epochDuration", - "finalizationCount", - "genesisBlock", - "genesisIndex", - "genesisTime", - "lastFinalizedBlock", - "lastFinalizedBlockHeight", - "protocolVersion", - "slotDuration", - "transactionsPerBlockEMA", - "transactionsPerBlockEMSD" - ], - "properties": { - "bestBlock": { - "description": "Hash of the current best block. The best block is a protocol defined block that the node must use a parent block to build the chain on. Note that this is subjective, in the sense that it is only the best block among the blocks the node knows about.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "bestBlockHeight": { - "description": "Height of the best block. See [ConsensusInfo::best_block].", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "blockArriveLatencyEMA": { - "description": "The exponential moving average of the time between a block's nominal slot time, and the time at which it is verified.", - "type": "number", - "format": "double" - }, - "blockArriveLatencyEMSD": { - "description": "The exponential moving average standard deviation of the time between a block's nominal slot time, and the time at which it is verified.", - "type": "number", - "format": "double" - }, - "blockArrivePeriodEMA": { - "description": "Exponential moving average of the time between receiving blocks (in seconds).", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "blockArrivePeriodEMSD": { - "description": "Exponential moving average standard deviation of the time between blocks being verified.", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "blockLastArrivedTime": { - "description": "The time (local time of the node) that a block last arrived, i.e., was verified and added to the node's tree.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "blockLastReceivedTime": { - "description": "The time (local time of the node) that a block was last received.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "blockReceiveLatencyEMA": { - "description": "Exponential moving average of block receive latency (in seconds), i.e. the time between a block's nominal slot time, and the time at which is received.", - "type": "number", - "format": "double" - }, - "blockReceiveLatencyEMSD": { - "description": "Exponential moving average standard deviation of block receive latency (in seconds), i.e. the time between a block's nominal slot time, and the time at which is received.", - "type": "number", - "format": "double" - }, - "blockReceivePeriodEMA": { - "description": "Exponential moving average of the time between receiving blocks (in seconds).", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "blockReceivePeriodEMSD": { - "description": "Exponential moving average standard deviation of the time between receiving blocks (in seconds).", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "blocksReceivedCount": { - "description": "The number of blocks that have been received.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "blocksVerifiedCount": { - "description": "Number of blocks that arrived, i.e., were added to the tree. Note that in some cases this can be more than [ConsensusInfo::blocks_received_count] since blocks that the node itself produces count towards this, but are not received.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "currentEraGenesisBlock": { - "description": "Block hash of the genesis block of current era, i.e., since the last protocol update. Initially this is equal to [`genesis_block`](Self::genesis_block)'.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "currentEraGenesisTime": { - "description": "Time when the current era started.", - "type": "string", - "format": "date-time" - }, - "epochDuration": { - "description": "Duration of an epoch.", - "type": "integer", - "format": "int64" - }, - "finalizationCount": { - "description": "The number of completed finalizations.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizationPeriodEMA": { - "description": "Exponential moving average of the time between finalizations. Will be `None` if there are no finalizations yet since the node start.", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "finalizationPeriodEMSD": { - "description": "Exponential moving average standard deviation of the time between finalizations. Will be `None` if there are no finalizations yet since the node start.", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "genesisBlock": { - "description": "Hash of the genesis block.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "genesisIndex": { - "description": "The number of chain restarts via a protocol update. An effected protocol update instruction might not change the protocol version specified in the previous field, but it always increments the genesis index.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "genesisTime": { - "description": "Slot time of the genesis block.", - "type": "string", - "format": "date-time" - }, - "lastFinalizedBlock": { - "description": "Hash of the last, i.e., most recent, finalized block.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "lastFinalizedBlockHeight": { - "description": "Height of the last finalized block. Genesis block has height 0.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "lastFinalizedTime": { - "description": "Time at which a block last became finalized. Note that this is the local time of the node at the time the block was finalized.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "protocolVersion": { - "description": "Currently active protocol version.", - "allOf": [ - { - "$ref": "#/definitions/ProtocolVersion" - } - ] - }, - "slotDuration": { - "description": "Duration of a slot.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "transactionsPerBlockEMA": { - "description": "Exponential moving average of the number of transactions per block.", - "type": "number", - "format": "double" - }, - "transactionsPerBlockEMSD": { - "description": "Exponential moving average standard deviation of the number of transactions per block.", - "type": "number", - "format": "double" - } - }, - "definitions": { - "ProtocolVersion": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetCryptographicParameters.json b/source/mainnet/net/references/grpc-json-schemas/GetCryptographicParameters.json deleted file mode 100644 index 3d116d86ad..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetCryptographicParameters.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Versioned_for_GlobalContext_for_HexString", - "anyOf": [ - { - "$ref": "#/definitions/Versioned_for_GlobalContext_for_HexString" - }, - { - "type": "null" - } - ], - "definitions": { - "GlobalContext_for_HexString": { - "description": "A set of cryptographic parameters that are particular to the chain and shared by everybody that interacts with the chain.", - "type": "object", - "required": [ - "bulletproofGenerators", - "genesisString", - "onChainCommitmentKey" - ], - "properties": { - "bulletproofGenerators": { - "description": "Generators for the bulletproofs. It is unclear what length we will require here, or whether we'll allow dynamic generation.", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "genesisString": { - "description": "A free-form string used to distinguish between different chains even if they share other parameters.", - "type": "string" - }, - "onChainCommitmentKey": { - "description": "A shared commitment key known to the chain and the account holder (and therefore it is public). The account holder uses this commitment key to generate commitments to values in the attribute list.", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - }, - "Versioned_for_GlobalContext_for_HexString": { - "description": "Versioned represents T as a versioned data-structure. The version is a integer number up to the implementation, which is serialized using variable integer encoding. The caller is responsible for ensuring the data structure `T` is compatible with the version number.", - "type": "object", - "required": [ - "v", - "value" - ], - "properties": { - "v": { - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "value": { - "$ref": "#/definitions/GlobalContext_for_HexString" - } - } - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetIdentityProviders.json b/source/mainnet/net/references/grpc-json-schemas/GetIdentityProviders.json deleted file mode 100644 index 83c7b28333..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetIdentityProviders.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_IpInfo_for_HexString", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/IpInfo_for_HexString" - }, - "definitions": { - "Description": { - "description": "Description either of an anonymity revoker or identity provider. Metadata that should be visible on the chain.", - "type": "object", - "required": [ - "description", - "name", - "url" - ], - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "IpInfo_for_HexString": { - "description": "Public information about an identity provider.", - "type": "object", - "required": [ - "ipCdiVerifyKey", - "ipDescription", - "ipIdentity", - "ipVerifyKey" - ], - "properties": { - "ipCdiVerifyKey": { - "description": "Ed public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "ipDescription": { - "description": "Free form description, e.g., how to contact them off-chain", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "ipIdentity": { - "description": "Unique identifier of the identity provider.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "ipVerifyKey": { - "description": "PS public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetInstanceInfo.json b/source/mainnet/net/references/grpc-json-schemas/GetInstanceInfo.json deleted file mode 100644 index e80754304a..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetInstanceInfo.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_InstanceInfo", - "anyOf": [ - { - "$ref": "#/definitions/InstanceInfo" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "InstanceInfo": { - "description": "Helper struct to derive JSON instances for super::InstanceInfo.", - "type": "object", - "required": [ - "amount", - "methods", - "name", - "owner", - "sourceModule" - ], - "properties": { - "amount": { - "$ref": "#/definitions/CCDAmount" - }, - "methods": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "model": { - "type": [ - "string", - "null" - ] - }, - "name": { - "type": "string" - }, - "owner": { - "$ref": "#/definitions/AccountAddress" - }, - "sourceModule": { - "$ref": "#/definitions/SHA256Hash" - }, - "version": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - } - } - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "WasmVersion": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetInstances.json b/source/mainnet/net/references/grpc-json-schemas/GetInstances.json deleted file mode 100644 index ec270d252e..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetInstances.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_ContractAddress", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/ContractAddress" - }, - "definitions": { - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetModuleList.json b/source/mainnet/net/references/grpc-json-schemas/GetModuleList.json deleted file mode 100644 index c60499d7be..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetModuleList.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_Array_of_SHA256Hash", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/SHA256Hash" - }, - "definitions": { - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetNextAccountNonce.json b/source/mainnet/net/references/grpc-json-schemas/GetNextAccountNonce.json deleted file mode 100644 index da99b6cb91..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetNextAccountNonce.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_AccountNonceResponse", - "anyOf": [ - { - "$ref": "#/definitions/AccountNonceResponse" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountNonceResponse": { - "description": "Best guess about the current account nonce, with information about reliability.", - "type": "object", - "required": [ - "allFinal", - "nonce" - ], - "properties": { - "allFinal": { - "description": "A flag indicating whether all known transactions are finalized. This can be used as an indicator of how reliable the `nonce` value is.", - "type": "boolean" - }, - "nonce": { - "description": "The nonce that should be used.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetPoolStatus.json b/source/mainnet/net/references/grpc-json-schemas/GetPoolStatus.json deleted file mode 100644 index 7b71e62c82..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetPoolStatus.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_PoolStatus", - "anyOf": [ - { - "$ref": "#/definitions/PoolStatus" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "BakerPoolInfo": { - "description": "Additional information about a baking pool. This information is added with the introduction of delegation.", - "type": "object", - "required": [ - "commissionRates", - "metadataUrl", - "openStatus" - ], - "properties": { - "commissionRates": { - "description": "The commission rates charged by the pool owner.", - "allOf": [ - { - "$ref": "#/definitions/CommissionRates" - } - ] - }, - "metadataUrl": { - "description": "The URL that links to the metadata about the pool.", - "type": "string" - }, - "openStatus": { - "description": "Whether the pool allows delegators.", - "allOf": [ - { - "$ref": "#/definitions/OpenStatus" - } - ] - } - } - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "CommissionRates": { - "type": "object", - "required": [ - "bakingCommission", - "finalizationCommission", - "transactionCommission" - ], - "properties": { - "bakingCommission": { - "description": "Fraction of baking rewards charged by the pool owner.", - "type": "number" - }, - "finalizationCommission": { - "description": "Fraction of finalization rewards charged by the pool owner.", - "type": "number" - }, - "transactionCommission": { - "description": "Fraction of transaction rewards charged by the pool owner.", - "type": "number" - } - } - }, - "CurrentPaydayBakerPoolStatus": { - "type": "object", - "required": [ - "bakerEquityCapital", - "blocksBaked", - "delegatedCapital", - "effectiveStake", - "finalizationLive", - "lotteryPower", - "transactionFeesEarned" - ], - "properties": { - "bakerEquityCapital": { - "description": "The effective equity capital of the baker for the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "blocksBaked": { - "description": "The number of blocks baked in the current reward period.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "delegatedCapital": { - "description": "The effective delegated capital to the pool for the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "effectiveStake": { - "description": "The effective stake of the baker in the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "finalizationLive": { - "description": "Whether the baker has contributed a finalization proof in the current reward period.", - "type": "boolean" - }, - "lotteryPower": { - "description": "The lottery power of the baker in the current reward period.", - "type": "number", - "format": "double" - }, - "transactionFeesEarned": { - "description": "The transaction fees accruing to the pool in the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - } - } - }, - "OpenStatus": { - "description": "The status of whether a baking pool allows delegators to join.", - "type": "string", - "enum": [ - "openForAll", - "closedForNew", - "closedForAll" - ] - }, - "PoolPendingChange": { - "oneOf": [ - { - "type": "object", - "required": [ - "pendingChangeType" - ], - "properties": { - "pendingChangeType": { - "type": "string", - "enum": [ - "NoChange" - ] - } - } - }, - { - "type": "object", - "required": [ - "bakerEquityCapital", - "effectiveTime", - "pendingChangeType" - ], - "properties": { - "bakerEquityCapital": { - "description": "New baker equity capital.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "effectiveTime": { - "description": "Effective time of the change.", - "type": "string", - "format": "date-time" - }, - "pendingChangeType": { - "type": "string", - "enum": [ - "ReduceBakerCapital" - ] - } - } - }, - { - "type": "object", - "required": [ - "effectiveTime", - "pendingChangeType" - ], - "properties": { - "effectiveTime": { - "description": "Effective time of the change.", - "type": "string", - "format": "date-time" - }, - "pendingChangeType": { - "type": "string", - "enum": [ - "RemovePool" - ] - } - } - } - ] - }, - "PoolStatus": { - "oneOf": [ - { - "type": "object", - "required": [ - "allPoolTotalCapital", - "bakerAddress", - "bakerEquityCapital", - "bakerId", - "bakerStakePendingChange", - "delegatedCapital", - "delegatedCapitalCap", - "poolInfo", - "poolType" - ], - "properties": { - "allPoolTotalCapital": { - "description": "Total capital staked across all pools.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "bakerAddress": { - "description": "The account address of the pool owner.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerEquityCapital": { - "description": "The equity capital provided by the pool owner.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "bakerId": { - "description": "The 'BakerId' of the pool owner.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakerStakePendingChange": { - "description": "Any pending change to the baker's stake.", - "allOf": [ - { - "$ref": "#/definitions/PoolPendingChange" - } - ] - }, - "currentPaydayStatus": { - "description": "Status of the pool in the current reward period. This will be [None] if the pool is not a", - "anyOf": [ - { - "$ref": "#/definitions/CurrentPaydayBakerPoolStatus" - }, - { - "type": "null" - } - ] - }, - "delegatedCapital": { - "description": "The capital delegated to the pool by other accounts.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "delegatedCapitalCap": { - "description": "The maximum amount that may be delegated to the pool, accounting for leverage and stake limits.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "poolInfo": { - "description": "The pool info associated with the pool: open status, metadata URL and commission rates.", - "allOf": [ - { - "$ref": "#/definitions/BakerPoolInfo" - } - ] - }, - "poolType": { - "type": "string", - "enum": [ - "BakerPool" - ] - } - } - }, - { - "type": "object", - "required": [ - "allPoolTotalCapital", - "commissionRates", - "currentPaydayDelegatedCapital", - "currentPaydayTransactionFeesEarned", - "delegatedCapital", - "poolType" - ], - "properties": { - "allPoolTotalCapital": { - "description": "Total capital staked across all pools, including passive delegation.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "commissionRates": { - "description": "The passive delegation commission rates.", - "allOf": [ - { - "$ref": "#/definitions/CommissionRates" - } - ] - }, - "currentPaydayDelegatedCapital": { - "description": "The effective delegated capital to the passive delegators for the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "currentPaydayTransactionFeesEarned": { - "description": "The transaction fees accruing to the passive delegators in the current reward period.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "delegatedCapital": { - "description": "The total capital delegated passively.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "poolType": { - "type": "string", - "enum": [ - "PassiveDelegation" - ] - } - } - } - ] - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetRewardStatus.json b/source/mainnet/net/references/grpc-json-schemas/GetRewardStatus.json deleted file mode 100644 index 2b34b4afb2..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetRewardStatus.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_RewardsOverview", - "anyOf": [ - { - "$ref": "#/definitions/RewardsOverview" - }, - { - "type": "null" - } - ], - "definitions": { - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "MintRate": { - "type": "number" - }, - "ProtocolVersion": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "RewardsOverview": { - "description": "Reward data common to both V0 and V1 rewards.", - "type": "object", - "required": [ - "bakingRewardAccount", - "finalizationRewardAccount", - "gasAccount", - "protocolVersion", - "totalAmount", - "totalEncryptedAmount" - ], - "properties": { - "bakingRewardAccount": { - "description": "The amount in the baking reward account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "finalizationRewardAccount": { - "description": "The amount in the finalization reward account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "foundationTransactionRewards": { - "description": "The transaction reward fraction accruing to the foundation (to be paid at next payday).", - "anyOf": [ - { - "$ref": "#/definitions/CCDAmount" - }, - { - "type": "null" - } - ] - }, - "gasAccount": { - "description": "The amount in the GAS account.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "nextPaydayMintRate": { - "description": "The rate at which CCD will be minted (as a proportion of the total supply) at the next payday", - "anyOf": [ - { - "$ref": "#/definitions/MintRate" - }, - { - "type": "null" - } - ] - }, - "nextPaydayTime": { - "description": "The time of the next payday.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "protocolVersion": { - "description": "Protocol version that applies to these rewards. V0 variant only exists for protocol versions 1, 2, and 3.", - "allOf": [ - { - "$ref": "#/definitions/ProtocolVersion" - } - ] - }, - "totalAmount": { - "description": "The total CCD in existence.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "totalEncryptedAmount": { - "description": "The total CCD in encrypted balances.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "totalStakedCapital": { - "description": "The total capital put up as stake by bakers and delegators", - "anyOf": [ - { - "$ref": "#/definitions/CCDAmount" - }, - { - "type": "null" - } - ] - } - } - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatus.json b/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatus.json deleted file mode 100644 index ae9ab19a0c..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatus.json +++ /dev/null @@ -1,3924 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_TransactionStatus", - "anyOf": [ - { - "$ref": "#/definitions/TransactionStatus" - }, - { - "type": "null" - } - ], - "definitions": { - "AccessStructure": { - "description": "And access structure for performing chain updates. The access structure is only meaningful in the context of a list of update keys to which the indices refer to.", - "type": "object", - "required": [ - "authorizedKeys", - "threshold" - ], - "properties": { - "authorizedKeys": { - "type": "array", - "items": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - }, - "uniqueItems": true - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "Address": { - "description": "Either an account or contract address. Some operations are allowed on both types of items, hence the need for this type.", - "oneOf": [ - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressContract" - ] - } - } - } - ] - }, - "ArInfo_for_HexString": { - "description": "Information on a single anonymity revoker held by the IP. Typically an IP will hold a more than one.", - "type": "object", - "required": [ - "arDescription", - "arIdentity", - "arPublicKey" - ], - "properties": { - "arDescription": { - "description": "description of the anonymity revoker (e.g. name, contact number)", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "arIdentity": { - "description": "unique identifier of the anonymity revoker", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "arPublicKey": { - "description": "elgamal encryption key of the anonymity revoker", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "AuthorizationsV0": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "AuthorizationsV1": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "cooldownParameters", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "timeParameters", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "cooldownParameters": { - "description": "Keys for changing cooldown periods related to baking and delegating.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "timeParameters": { - "description": "Keys for changing the lenghts of the reward period.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "BakerAggregationVerifyKey": { - "type": "string", - "maxLength": 192, - "minLength": 192, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerElectionVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerParameters": { - "type": "object", - "required": [ - "minimumThresholdForBaking" - ], - "properties": { - "minimumThresholdForBaking": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - "BakerSignatureVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BlockItemResult": { - "description": "Outcome of a block item execution.", - "oneOf": [ - { - "description": "The intended action was completed. The sender was charged, if applicable. Some events were generated describing the changes that happened on the chain.", - "type": "object", - "required": [ - "events", - "outcome" - ], - "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/Event" - } - }, - "outcome": { - "type": "string", - "enum": [ - "success" - ] - } - } - }, - { - "description": "The intended action was not completed due to an error. The sender was charged, but no other effect is seen on the chain.", - "type": "object", - "required": [ - "outcome", - "rejectReason" - ], - "properties": { - "outcome": { - "type": "string", - "enum": [ - "reject" - ] - }, - "rejectReason": { - "$ref": "#/definitions/RejectReason" - } - } - } - ] - }, - "BlockItemSummary": { - "description": "Summary of the outcome of a block item.", - "type": "object", - "required": [ - "cost", - "energyCost", - "hash", - "index", - "result", - "type" - ], - "properties": { - "cost": { - "description": "The amount of CCD the transaction was charged to the sender.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "energyCost": { - "description": "The amount of NRG the transaction cost.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "hash": { - "description": "Hash of the transaction.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "index": { - "description": "Index of the transaction in the block where it is included.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "result": { - "description": "What is the outcome of this particular block item.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemResult" - } - ] - }, - "sender": { - "description": "Sender, if available. The sender is always available for account transactions.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/AccountAddress" - }, - { - "type": "null" - } - ] - }, - "type": { - "description": "Which type of block item this is.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemType" - } - ] - } - } - }, - "BlockItemType": { - "description": "The type of the block item.", - "oneOf": [ - { - "description": "Account transactions are transactions that are signed by an account. Most transactions are account transactions.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "anyOf": [ - { - "$ref": "#/definitions/TransactionType" - }, - { - "type": "null" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "accountTransaction" - ] - } - } - }, - { - "description": "Credential deployments that create accounts are special kinds of transactions. They are not signed by the account in the usual way, and they are not paid for directly by the sender.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/CredentialType" - }, - "type": { - "type": "string", - "enum": [ - "credentialDeploymentTransaction" - ] - } - } - }, - { - "description": "Chain updates are signed by the governance keys. They affect the core parameters of the chain.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/UpdateType" - }, - "type": { - "type": "string", - "enum": [ - "updateTransaction" - ] - } - } - } - ] - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "ContractEvent": { - "type": "string", - "maxLength": 1024, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CooldownParameters": { - "type": "object", - "required": [ - "delegatorCooldown", - "poolOwnerCooldown" - ], - "properties": { - "delegatorCooldown": { - "description": "Number of seconds that a delegator must cooldown when reducing their delegated stake.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "poolOwnerCooldown": { - "description": "Number of seconds that pool owners must cooldown when reducing their equity capital or closing the pool.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "CredentialRegistrationID": { - "type": "string", - "maxLength": 96, - "minLength": 96, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CredentialType": { - "description": "Enumeration of the types of credentials.", - "type": "string", - "enum": [ - "initial", - "normal" - ] - }, - "DelegationTarget": { - "oneOf": [ - { - "description": "Delegate passively, i.e., to no specific baker.", - "type": "object", - "required": [ - "delegateType" - ], - "properties": { - "delegateType": { - "type": "string", - "enum": [ - "Passive" - ] - } - } - }, - { - "description": "Delegate to a specific baker.", - "type": "object", - "required": [ - "bakerId", - "delegateType" - ], - "properties": { - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "delegateType": { - "type": "string", - "enum": [ - "Baker" - ] - } - } - } - ] - }, - "Description": { - "description": "Description either of an anonymity revoker or identity provider. Metadata that should be visible on the chain.", - "type": "object", - "required": [ - "description", - "name", - "url" - ], - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "EncryptedAmount": { - "type": "string", - "maxLength": 384, - "minLength": 384, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "Event": { - "description": "An event describing the changes that occurred to the state of the chain.", - "oneOf": [ - { - "description": "A smart contract module was successfully deployed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleDeployed" - ] - } - } - }, - { - "description": "A new smart contract instance was created.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "initName", - "ref", - "tag" - ], - "properties": { - "address": { - "description": "The newly assigned address of the contract.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the instance was initialized with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract initialization.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "initName": { - "description": "The name of the contract.", - "type": "string" - }, - "ref": { - "description": "Module with the source code of the contract.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "ContractInitialized" - ] - } - } - }, - { - "description": "A smart contract instance was updated.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "instigator", - "message", - "receiveName", - "tag" - ], - "properties": { - "address": { - "description": "Address of the affected instance.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the method was invoked with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract execution.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "instigator": { - "description": "The origin of the message to the smart contract. This can be either an account or a smart contract.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "message": { - "description": "The message passed to method.", - "allOf": [ - { - "$ref": "#/definitions/Parameter" - } - ] - }, - "receiveName": { - "description": "The name of the method that was executed.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "Updated" - ] - } - } - }, - { - "description": "An amount of CCD was transferred.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "Amount that was transferred.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "from": { - "description": "Sender, either smart contract instance or account.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "Transferred" - ] - }, - "to": { - "description": "Receiver. This will currently always be an account. Transferring to a smart contract is always an update.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - } - } - }, - { - "description": "An account with the given address was created.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "AccountCreated" - ] - } - } - }, - { - "description": "A new credential with the given ID was deployed onto an account. This is used only when a new account is created. See [Event::CredentialsUpdated] for when an existing account's credentials are updated.", - "type": "object", - "required": [ - "account", - "regId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "regId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialDeployed" - ] - } - } - }, - { - "description": "A new baker was registered, with the given ID and keys.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "restakeEarnings", - "signKey", - "stake", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "restakeEarnings": { - "description": "Whether the baker will automatically add earnings to their stake or not.", - "type": "boolean" - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "stake": { - "description": "The amount the account staked to become a baker. This amount is locked.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerAdded" - ] - } - } - }, - { - "description": "A baker was scheduled to be removed.", - "type": "object", - "required": [ - "account", - "bakerId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerRemoved" - ] - } - } - }, - { - "description": "A baker's stake was increased. This has effect immediately.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeIncreased" - ] - } - } - }, - { - "description": "A baker's stake was scheduled to be decreased. This will have an effect on the stake after a number of epochs, controlled by the baker cooldown period.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeDecreased" - ] - } - } - }, - { - "description": "The setting for whether rewards are added to stake immediately or not was changed to the given value.", - "type": "object", - "required": [ - "account", - "bakerId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "The new value of the flag.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetRestakeEarnings" - ] - } - } - }, - { - "description": "The baker keys were updated. The new keys are listed.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "signKey", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerKeysUpdated" - ] - } - } - }, - { - "description": "Keys of the given credential were updated.", - "type": "object", - "required": [ - "credId", - "tag" - ], - "properties": { - "credId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialKeysUpdated" - ] - } - } - }, - { - "description": "A new encrypted amount was added to the account.", - "type": "object", - "required": [ - "account", - "encryptedAmount", - "newIndex", - "tag" - ], - "properties": { - "account": { - "description": "The account onto which the amount was added.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "encryptedAmount": { - "description": "The encrypted amount that was added.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newIndex": { - "description": "The index the amount was assigned.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "NewEncryptedAmount" - ] - } - } - }, - { - "description": "One or more encrypted amounts were removed from an account as part of a transfer or decryption.", - "type": "object", - "required": [ - "account", - "inputAmount", - "newAmount", - "tag", - "upToIndex" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "inputAmount": { - "description": "The input encrypted amount that was removed.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount on the affected account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountsRemoved" - ] - }, - "upToIndex": { - "description": "The index indicating which amounts were used.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - { - "description": "The public balance of the account was increased via a transfer from encrypted to public balance.", - "type": "object", - "required": [ - "account", - "amount", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "amount": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "AmountAddedByDecryption" - ] - } - } - }, - { - "description": "The encrypted balance of the account was updated due to transfer from public to encrypted balance of the account.", - "type": "object", - "required": [ - "account", - "amount", - "newAmount", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "amount": { - "description": "The amount that was transferred from public to encrypted balance.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount of the account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedSelfAmountAdded" - ] - } - } - }, - { - "description": "An update was enqueued for the given time.", - "type": "object", - "required": [ - "effectiveTime", - "payload", - "tag" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "payload": { - "$ref": "#/definitions/UpdatePayload" - }, - "tag": { - "type": "string", - "enum": [ - "UpdateEnqueued" - ] - } - } - }, - { - "description": "A transfer with schedule was enqueued.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "The list of releases. Ordered by increasing timestamp.", - "type": "array", - "items": { - "type": "array", - "items": [ - { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - } - }, - "from": { - "description": "Sender account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "TransferredWithSchedule" - ] - }, - "to": { - "description": "Receiver account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - } - } - }, - { - "description": "The credentials of the account were updated. Either added, removed, or both.", - "type": "object", - "required": [ - "account", - "newCredIds", - "newThreshold", - "removedCredIds", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "newCredIds": { - "description": "The credential ids that were added.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "newThreshold": { - "description": "The (possibly) updated account threshold.", - "type": "integer", - "format": "uint8", - "minimum": 1.0 - }, - "removedCredIds": { - "description": "The credentials that were removed.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "CredentialsUpdated" - ] - } - } - }, - { - "description": "Data was registered.", - "type": "object", - "required": [ - "data", - "tag" - ], - "properties": { - "data": { - "$ref": "#/definitions/RegisteredData" - }, - "tag": { - "type": "string", - "enum": [ - "DataRegistered" - ] - } - } - }, - { - "description": "Memo", - "type": "object", - "required": [ - "memo", - "tag" - ], - "properties": { - "memo": { - "$ref": "#/definitions/Memo" - }, - "tag": { - "type": "string", - "enum": [ - "TransferMemo" - ] - } - } - }, - { - "description": "A V1 contract was interrupted.", - "type": "object", - "required": [ - "address", - "events", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that was interrupted.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "events": { - "description": "Events generated up to the interrupt.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "tag": { - "type": "string", - "enum": [ - "Interrupted" - ] - } - } - }, - { - "description": "A V1 contract resumed execution.", - "type": "object", - "required": [ - "address", - "success", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that is resuming.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "success": { - "description": "Whether the interrupt succeeded or not.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "Resumed" - ] - } - } - }, - { - "description": "Updated open status for a baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "openStatus", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "openStatus": { - "description": "The open status.", - "allOf": [ - { - "$ref": "#/definitions/OpenStatus" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetOpenStatus" - ] - } - } - }, - { - "description": "Updated metadata url for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "metadataURL", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "metadataURL": { - "description": "The URL.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetMetadataURL" - ] - } - } - }, - { - "description": "Updated transaction fee commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "tag", - "transactionFeeCommission" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetTransactionFeeCommission" - ] - }, - "transactionFeeCommission": { - "description": "The transaction fee commission.", - "type": "number" - } - } - }, - { - "description": "Updated baking reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "bakingRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakingRewardCommission": { - "description": "The baking reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetBakingRewardCommission" - ] - } - } - }, - { - "description": "Updated finalization reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "finalizationRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizationRewardCommission": { - "description": "The finalization reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetFinalizationRewardCommission" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeIncreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeDecreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "Whether earnings will be restaked", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetRestakeEarnings" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegationTarget", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegationTarget": { - "description": "New delegation target", - "allOf": [ - { - "$ref": "#/definitions/DelegationTarget" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetDelegationTarget" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationAdded" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationRemoved" - ] - } - } - } - ] - }, - "ExchangeRate": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "GASRewards": { - "description": "The reward fractions related to the gas account and inclusion of special transactions.", - "type": "object", - "required": [ - "accountCreation", - "baker", - "chainUpdate", - "finalizationProof" - ], - "properties": { - "accountCreation": { - "description": "`FeeAccountCreation`: fraction paid for including each account creation transaction in a block.", - "type": "number" - }, - "baker": { - "description": "`BakerPrevTransFrac`: fraction of the previous gas account paid to the baker.", - "type": "number" - }, - "chainUpdate": { - "description": "`FeeUpdate`: fraction paid for including an update transaction in a block.", - "type": "number" - }, - "finalizationProof": { - "description": "`FeeAddFinalisationProof`: fraction paid for including a finalization proof in a block.", - "type": "number" - } - } - }, - "HexString": { - "type": "string", - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "HigherLevelAccessStructure_for_Level1KeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "HigherLevelAccessStructure_for_RootKeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "InclusiveRange_for_Number": { - "type": "object", - "required": [ - "max", - "min" - ], - "properties": { - "max": { - "type": "number" - }, - "min": { - "type": "number" - } - } - }, - "IpInfo_for_HexString": { - "description": "Public information about an identity provider.", - "type": "object", - "required": [ - "ipCdiVerifyKey", - "ipDescription", - "ipIdentity", - "ipVerifyKey" - ], - "properties": { - "ipCdiVerifyKey": { - "description": "Ed public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "ipDescription": { - "description": "Free form description, e.g., how to contact them off-chain", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "ipIdentity": { - "description": "Unique identifier of the identity provider.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "ipVerifyKey": { - "description": "PS public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "Level1Update": { - "description": "An update with level 1 keys of either level 1 or level 2 keys. Each of the updates must be a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "LeverageFactor": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "Memo": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "MintDistributionV0": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward", - "mintPerSlot" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - }, - "mintPerSlot": { - "$ref": "#/definitions/MintRate" - } - } - }, - "MintDistributionV1": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - } - } - }, - "MintRate": { - "type": "number" - }, - "OpenStatus": { - "description": "The status of whether a baking pool allows delegators to join.", - "type": "string", - "enum": [ - "openForAll", - "closedForNew", - "closedForAll" - ] - }, - "Parameter": { - "type": "string", - "maxLength": 2048, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "PoolParameters": { - "description": "Parameters related to staking pools.", - "type": "object", - "required": [ - "bakingCommissionRange", - "capitalBound", - "finalizationCommissionRange", - "leverageBound", - "minimumEquityCapital", - "passiveBakingCommission", - "passiveFinalizationCommission", - "passiveTransactionCommission", - "transactionCommissionRange" - ], - "properties": { - "bakingCommissionRange": { - "description": "The range of allowed baker commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "capitalBound": { - "description": "Maximum fraction of the total staked capital of that a new baker can have.", - "type": "number" - }, - "finalizationCommissionRange": { - "description": "The range of allowed finalization commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "leverageBound": { - "description": "The maximum leverage that a baker can have as a ratio of total stake to equity capital.", - "allOf": [ - { - "$ref": "#/definitions/LeverageFactor" - } - ] - }, - "minimumEquityCapital": { - "description": "Minimum equity capital required for a new baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "passiveBakingCommission": { - "description": "Fraction of baking rewards charged by the passive delegation.", - "type": "number" - }, - "passiveFinalizationCommission": { - "description": "Fraction of finalization rewards charged by the passive delegation.", - "type": "number" - }, - "passiveTransactionCommission": { - "description": "Fraction of transaction rewards charged by the L-pool.", - "type": "number" - }, - "transactionCommissionRange": { - "description": "The range of allowed transaction commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - } - } - }, - "ProtocolUpdate": { - "description": "A generic protocol update. This is essentially an announcement of the update. The details of the update will be communicated in some off-chain way, and bakers will need to update their node software to support the update.", - "type": "object", - "required": [ - "message", - "specificationAuxiliaryData", - "specificationHash", - "specificationURL" - ], - "properties": { - "message": { - "type": "string" - }, - "specificationAuxiliaryData": { - "$ref": "#/definitions/HexString" - }, - "specificationHash": { - "$ref": "#/definitions/SHA256Hash" - }, - "specificationURL": { - "type": "string" - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - }, - "RegisteredData": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "RejectReason": { - "description": "A reason for why a transaction was rejected. Rejected means included in a block, but the desired action was not achieved. The only effect of a rejected transaction is payment.\n\nNOTE: Some of the variant definitions can look peculiar, but they are made to be compatible with the serialization of the Haskell datatype.", - "oneOf": [ - { - "description": "Error raised when validating the Wasm module.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ModuleNotWF" - ] - } - } - }, - { - "description": "As the name says.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleHashAlreadyExists" - ] - } - } - }, - { - "description": "Account does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidAccountReference" - ] - } - } - }, - { - "description": "Reference to a non-existing contract init method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidInitMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing contract receive method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidReceiveMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing module.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidModuleReference" - ] - } - } - }, - { - "description": "Contract instance does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/ContractAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidContractAddress" - ] - } - } - }, - { - "description": "Runtime exception occurred when running either the init or receive method.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RuntimeFailure" - ] - } - } - }, - { - "description": "When one wishes to transfer an amount from A to B but there are not enough funds on account/contract A to make this possible. The data are the from address and the amount to transfer.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/Address" - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "AmountTooLarge" - ] - } - } - }, - { - "description": "Serialization of the body failed.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "SerializationFailure" - ] - } - } - }, - { - "description": "We ran of out energy to process this transaction.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "OutOfEnergy" - ] - } - } - }, - { - "description": "Rejected due to contract logic in init function of a contract.", - "type": "object", - "required": [ - "rejectReason", - "tag" - ], - "properties": { - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedInit" - ] - } - } - }, - { - "type": "object", - "required": [ - "contractAddress", - "parameter", - "receiveName", - "rejectReason", - "tag" - ], - "properties": { - "contractAddress": { - "$ref": "#/definitions/ContractAddress" - }, - "parameter": { - "$ref": "#/definitions/Parameter" - }, - "receiveName": { - "type": "string" - }, - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedReceive" - ] - } - } - }, - { - "description": "Reward account desired by the baker does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentRewardAccount" - ] - } - } - }, - { - "description": "Proof that the baker owns relevant private keys is not valid.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidProof" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "AlreadyABaker" - ] - } - } - }, - { - "description": "Tried to remove a baker for an account that has no baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotABaker" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForBakerStake" - ] - } - } - }, - { - "description": "The amount provided is under the threshold required for becoming a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeUnderMinimumThresholdForBaking" - ] - } - } - }, - { - "description": "The change could not be made because the baker is in cooldown for another change", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakerInCooldown" - ] - } - } - }, - { - "description": "A baker with the given aggregation key already exists", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/BakerAggregationVerifyKey" - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateAggregationKey" - ] - } - } - }, - { - "description": "Encountered credential ID that does not exist", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonExistentCredentialID" - ] - } - } - }, - { - "description": "Attempted to add an account key to a key index already in use", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "KeyIndexAlreadyInUse" - ] - } - } - }, - { - "description": "When the account threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidAccountThreshold" - ] - } - } - }, - { - "description": "When the credential key threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentialKeySignThreshold" - ] - } - } - }, - { - "description": "Proof for an encrypted amount transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidEncryptedAmountTransferProof" - ] - } - } - }, - { - "description": "Proof for a secret to public transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidTransferToPublicProof" - ] - } - } - }, - { - "description": "Account tried to transfer an encrypted amount to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountSelfTransfer" - ] - } - } - }, - { - "description": "The provided index is below the start index or above `startIndex + length incomingAmounts`", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidIndexOnEncryptedTransfer" - ] - } - } - }, - { - "description": "The transfer with schedule is going to send 0 tokens", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ZeroScheduledAmount" - ] - } - } - }, - { - "description": "The transfer with schedule has a non strictly increasing schedule", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonIncreasingSchedule" - ] - } - } - }, - { - "description": "The first scheduled release in a transfer with schedule has already expired", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FirstScheduledReleaseExpired" - ] - } - } - }, - { - "description": "Account tried to transfer with schedule to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "ScheduledSelfTransfer" - ] - } - } - }, - { - "description": "At least one of the credentials was either malformed or its proof was incorrect.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentials" - ] - } - } - }, - { - "description": "Some of the credential IDs already exist or are duplicated in the transaction.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateCredIDs" - ] - } - } - }, - { - "description": "A credential id that was to be removed is not part of the account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentCredIDs" - ] - } - } - }, - { - "description": "Attemp to remove the first credential", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RemoveFirstCredential" - ] - } - } - }, - { - "description": "The credential holder of the keys to be updated did not sign the transaction", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "CredentialHolderDidNotSign" - ] - } - } - }, - { - "description": "Account is not allowed to have multiple credentials because it contains a non-zero encrypted transfer.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedMultipleCredentials" - ] - } - } - }, - { - "description": "The account is not allowed to receive encrypted transfers because it has multiple credentials.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToReceiveEncrypted" - ] - } - } - }, - { - "description": "The account is not allowed to send encrypted transfers (or transfer from/to public to/from encrypted)", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToHandleEncrypted" - ] - } - } - }, - { - "description": "A configure baker transaction is missing one or more arguments in order to add a baker.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingBakerAddParameters" - ] - } - } - }, - { - "description": "Finalization reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FinalizationRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Baking reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakingRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Transaction fee commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "TransactionFeeCommissionNotInRange" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "AlreadyADelegator" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForDelegationStake" - ] - } - } - }, - { - "description": "A configure delegation transaction is missing one or more arguments in order to add a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingDelegationAddParameters" - ] - } - } - }, - { - "description": "Delegation stake when adding a delegator was 0.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientDelegationStake" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "DelegatorInCooldown" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotADelegator" - ] - } - } - }, - { - "description": "Delegation target is not a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationTargetNotABaker" - ] - } - } - }, - { - "description": "The amount would result in pool capital higher than the maximum threshold.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeOverMaximumThresholdForPool" - ] - } - } - }, - { - "description": "The amount would result in pool with a too high fraction of delegated capital.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolWouldBecomeOverDelegated" - ] - } - } - }, - { - "description": "The pool is not open to delegators.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolClosed" - ] - } - } - } - ] - }, - "RootUpdate": { - "description": "An update with root keys of some other set of governance keys, or the root keys themselves. Each update is a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "rootKeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "TimeParameters": { - "description": "The time parameters are introduced as of protocol version 4, and consist of the reward period length and the mint rate per payday. These are coupled as a change to either affects the overall rate of minting.", - "type": "object", - "required": [ - "mintPerPayday", - "rewardPeriodLength" - ], - "properties": { - "mintPerPayday": { - "$ref": "#/definitions/MintRate" - }, - "rewardPeriodLength": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "TransactionFeeDistribution": { - "description": "Update the transaction fee distribution to the specified value.", - "type": "object", - "required": [ - "baker", - "gasAccount" - ], - "properties": { - "baker": { - "description": "The fraction that goes to the baker of the block.", - "type": "number" - }, - "gasAccount": { - "description": "The fraction that goes to the gas account. The remaining fraction will go to the foundation.", - "type": "number" - } - } - }, - "TransactionStatus": { - "description": "Status of a transaction known to the node.", - "oneOf": [ - { - "description": "Transaction is received, but not yet in any blocks.", - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "type": "string", - "enum": [ - "received" - ] - } - } - }, - { - "description": "Transaction is finalized in the given block, with the given summary. If the finalization committee is not corrupt then this will always be a singleton map.", - "type": "object", - "required": [ - "outcomes", - "status" - ], - "properties": { - "outcomes": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/BlockItemSummary" - } - }, - "status": { - "type": "string", - "enum": [ - "finalized" - ] - } - } - }, - { - "description": "Transaction is committed to one or more blocks. The outcomes are listed for each block. Note that in the vast majority of cases the outcome of a transaction should not be dependent on the block it is in, but this can in principle happen.", - "type": "object", - "required": [ - "outcomes", - "status" - ], - "properties": { - "outcomes": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/BlockItemSummary" - } - }, - "status": { - "type": "string", - "enum": [ - "committed" - ] - } - } - } - ] - }, - "TransactionType": { - "description": "Types of account transactions.", - "type": "string", - "enum": [ - "deployModule", - "initContract", - "update", - "transfer", - "addBaker", - "removeBaker", - "updateBakerStake", - "updateBakerRestakeEarnings", - "updateBakerKeys", - "updateCredentialKeys", - "encryptedAmountTransfer", - "transferToEncrypted", - "transferToPublic", - "transferWithSchedule", - "updateCredentials", - "registerData", - "transferWithMemo", - "encryptedAmountTransferWithMemo", - "transferWithScheduleAndMemo", - "configureBaker", - "configureDelegation" - ] - }, - "UpdatePayload": { - "description": "The type of an update payload.", - "oneOf": [ - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ProtocolUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "protocol" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "type": "number" - }, - "updateType": { - "type": "string", - "enum": [ - "electionDifficulty" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "euroPerEnergy" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "microGTUPerEuro" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/AccountAddress" - }, - "updateType": { - "type": "string", - "enum": [ - "foundationAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV0" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TransactionFeeDistribution" - }, - "updateType": { - "type": "string", - "enum": [ - "transactionFeeDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/GASRewards" - }, - "updateType": { - "type": "string", - "enum": [ - "gASRewards" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/BakerParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "bakerStakeThreshold" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/RootUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "root" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/Level1Update" - }, - "updateType": { - "type": "string", - "enum": [ - "level1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ArInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addAnonymityRevoker" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/IpInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addIdentityProvider" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/CooldownParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "cooldownParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/PoolParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "poolParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TimeParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "timeParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV1" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistributionCPV1" - ] - } - } - } - ] - }, - "UpdateType": { - "description": "Enumeration of the types of updates that are possible.", - "type": "string", - "enum": [ - "updateProtocol", - "updateElectionDifficulty", - "updateEuroPerEnergy", - "updateMicroGTUPerEuro", - "updateFoundationAccount", - "updateMintDistribution", - "updateTransactionFeeDistribution", - "updateGASRewards", - "updateAddAnonymityRevoker", - "updateAddIdentityProvider", - "updateRootKeys", - "updateLevel1Keys", - "updateLevel2Keys", - "updatePoolParameters", - "updateCooldownParameters", - "updateTimeParameters" - ] - }, - "VerifyKey": { - "type": "object", - "properties": { - "schemeId": { - "type": "string" - }, - "verifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } - }, - "WasmVersion": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatusInBlock.json b/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatusInBlock.json deleted file mode 100644 index f8990eea03..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/GetTransactionStatusInBlock.json +++ /dev/null @@ -1,3918 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_TransactionStatusInBlock", - "anyOf": [ - { - "$ref": "#/definitions/TransactionStatusInBlock" - }, - { - "type": "null" - } - ], - "definitions": { - "AccessStructure": { - "description": "And access structure for performing chain updates. The access structure is only meaningful in the context of a list of update keys to which the indices refer to.", - "type": "object", - "required": [ - "authorizedKeys", - "threshold" - ], - "properties": { - "authorizedKeys": { - "type": "array", - "items": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - }, - "uniqueItems": true - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "Address": { - "description": "Either an account or contract address. Some operations are allowed on both types of items, hence the need for this type.", - "oneOf": [ - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressContract" - ] - } - } - } - ] - }, - "ArInfo_for_HexString": { - "description": "Information on a single anonymity revoker held by the IP. Typically an IP will hold a more than one.", - "type": "object", - "required": [ - "arDescription", - "arIdentity", - "arPublicKey" - ], - "properties": { - "arDescription": { - "description": "description of the anonymity revoker (e.g. name, contact number)", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "arIdentity": { - "description": "unique identifier of the anonymity revoker", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "arPublicKey": { - "description": "elgamal encryption key of the anonymity revoker", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "AuthorizationsV0": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "AuthorizationsV1": { - "description": "Access structures for each of the different possible chain updates, togehter with the context giving all the possible keys.", - "type": "object", - "required": [ - "addAnonymityRevoker", - "addIdentityProvider", - "cooldownParameters", - "electionDifficulty", - "emergency", - "euroPerEnergy", - "foundationAccount", - "keys", - "microGTUPerEuro", - "mintDistribution", - "paramGASRewards", - "poolParameters", - "protocol", - "timeParameters", - "transactionFeeDistribution" - ], - "properties": { - "addAnonymityRevoker": { - "description": "Access structure for adding new anonymity revokers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "addIdentityProvider": { - "description": "Access structure for adding new identity providers.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "cooldownParameters": { - "description": "Keys for changing cooldown periods related to baking and delegating.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "electionDifficulty": { - "description": "Access structure for updating the election difficulty.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "emergency": { - "description": "Access structure for emergency updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "euroPerEnergy": { - "description": "Access structure for updating the euro to energy exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "foundationAccount": { - "description": "Access structure for updating the foundation account address.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "keys": { - "description": "The list of all keys that are currently authorized to perform updates.", - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "microGTUPerEuro": { - "description": "Access structure for updating the microccd per euro exchange rate.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "mintDistribution": { - "description": "Access structure for updating the mint distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "paramGASRewards": { - "description": "Access structure for updating the gas reward distribution parameters.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "poolParameters": { - "description": "Access structure for updating the pool parameters. For V0 this is only the baker stake threshold, for V1 there are more.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "protocol": { - "description": "Access structure for protocol updates.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "timeParameters": { - "description": "Keys for changing the lenghts of the reward period.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - }, - "transactionFeeDistribution": { - "description": "Access structure for updating the transaction fee distribution.", - "allOf": [ - { - "$ref": "#/definitions/AccessStructure" - } - ] - } - } - }, - "BakerAggregationVerifyKey": { - "type": "string", - "maxLength": 192, - "minLength": 192, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerElectionVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BakerParameters": { - "type": "object", - "required": [ - "minimumThresholdForBaking" - ], - "properties": { - "minimumThresholdForBaking": { - "$ref": "#/definitions/CCDAmount" - } - } - }, - "BakerSignatureVerifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "BlockItemResult": { - "description": "Outcome of a block item execution.", - "oneOf": [ - { - "description": "The intended action was completed. The sender was charged, if applicable. Some events were generated describing the changes that happened on the chain.", - "type": "object", - "required": [ - "events", - "outcome" - ], - "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/Event" - } - }, - "outcome": { - "type": "string", - "enum": [ - "success" - ] - } - } - }, - { - "description": "The intended action was not completed due to an error. The sender was charged, but no other effect is seen on the chain.", - "type": "object", - "required": [ - "outcome", - "rejectReason" - ], - "properties": { - "outcome": { - "type": "string", - "enum": [ - "reject" - ] - }, - "rejectReason": { - "$ref": "#/definitions/RejectReason" - } - } - } - ] - }, - "BlockItemSummary": { - "description": "Summary of the outcome of a block item.", - "type": "object", - "required": [ - "cost", - "energyCost", - "hash", - "index", - "result", - "type" - ], - "properties": { - "cost": { - "description": "The amount of CCD the transaction was charged to the sender.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "energyCost": { - "description": "The amount of NRG the transaction cost.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "hash": { - "description": "Hash of the transaction.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "index": { - "description": "Index of the transaction in the block where it is included.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "result": { - "description": "What is the outcome of this particular block item.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemResult" - } - ] - }, - "sender": { - "description": "Sender, if available. The sender is always available for account transactions.", - "default": null, - "anyOf": [ - { - "$ref": "#/definitions/AccountAddress" - }, - { - "type": "null" - } - ] - }, - "type": { - "description": "Which type of block item this is.", - "allOf": [ - { - "$ref": "#/definitions/BlockItemType" - } - ] - } - } - }, - "BlockItemType": { - "description": "The type of the block item.", - "oneOf": [ - { - "description": "Account transactions are transactions that are signed by an account. Most transactions are account transactions.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "anyOf": [ - { - "$ref": "#/definitions/TransactionType" - }, - { - "type": "null" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "accountTransaction" - ] - } - } - }, - { - "description": "Credential deployments that create accounts are special kinds of transactions. They are not signed by the account in the usual way, and they are not paid for directly by the sender.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/CredentialType" - }, - "type": { - "type": "string", - "enum": [ - "credentialDeploymentTransaction" - ] - } - } - }, - { - "description": "Chain updates are signed by the governance keys. They affect the core parameters of the chain.", - "type": "object", - "required": [ - "contents", - "type" - ], - "properties": { - "contents": { - "$ref": "#/definitions/UpdateType" - }, - "type": { - "type": "string", - "enum": [ - "updateTransaction" - ] - } - } - } - ] - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "ContractEvent": { - "type": "string", - "maxLength": 1024, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CooldownParameters": { - "type": "object", - "required": [ - "delegatorCooldown", - "poolOwnerCooldown" - ], - "properties": { - "delegatorCooldown": { - "description": "Number of seconds that a delegator must cooldown when reducing their delegated stake.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "poolOwnerCooldown": { - "description": "Number of seconds that pool owners must cooldown when reducing their equity capital or closing the pool.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "CredentialRegistrationID": { - "type": "string", - "maxLength": 96, - "minLength": 96, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CredentialType": { - "description": "Enumeration of the types of credentials.", - "type": "string", - "enum": [ - "initial", - "normal" - ] - }, - "DelegationTarget": { - "oneOf": [ - { - "description": "Delegate passively, i.e., to no specific baker.", - "type": "object", - "required": [ - "delegateType" - ], - "properties": { - "delegateType": { - "type": "string", - "enum": [ - "Passive" - ] - } - } - }, - { - "description": "Delegate to a specific baker.", - "type": "object", - "required": [ - "bakerId", - "delegateType" - ], - "properties": { - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "delegateType": { - "type": "string", - "enum": [ - "Baker" - ] - } - } - } - ] - }, - "Description": { - "description": "Description either of an anonymity revoker or identity provider. Metadata that should be visible on the chain.", - "type": "object", - "required": [ - "description", - "name", - "url" - ], - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "EncryptedAmount": { - "type": "string", - "maxLength": 384, - "minLength": 384, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "Event": { - "description": "An event describing the changes that occurred to the state of the chain.", - "oneOf": [ - { - "description": "A smart contract module was successfully deployed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleDeployed" - ] - } - } - }, - { - "description": "A new smart contract instance was created.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "initName", - "ref", - "tag" - ], - "properties": { - "address": { - "description": "The newly assigned address of the contract.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the instance was initialized with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract initialization.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "initName": { - "description": "The name of the contract.", - "type": "string" - }, - "ref": { - "description": "Module with the source code of the contract.", - "allOf": [ - { - "$ref": "#/definitions/SHA256Hash" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "ContractInitialized" - ] - } - } - }, - { - "description": "A smart contract instance was updated.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "instigator", - "message", - "receiveName", - "tag" - ], - "properties": { - "address": { - "description": "Address of the affected instance.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the method was invoked with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract execution.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "instigator": { - "description": "The origin of the message to the smart contract. This can be either an account or a smart contract.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "message": { - "description": "The message passed to method.", - "allOf": [ - { - "$ref": "#/definitions/Parameter" - } - ] - }, - "receiveName": { - "description": "The name of the method that was executed.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "Updated" - ] - } - } - }, - { - "description": "An amount of CCD was transferred.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "Amount that was transferred.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "from": { - "description": "Sender, either smart contract instance or account.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "Transferred" - ] - }, - "to": { - "description": "Receiver. This will currently always be an account. Transferring to a smart contract is always an update.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - } - } - }, - { - "description": "An account with the given address was created.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "AccountCreated" - ] - } - } - }, - { - "description": "A new credential with the given ID was deployed onto an account. This is used only when a new account is created. See [Event::CredentialsUpdated] for when an existing account's credentials are updated.", - "type": "object", - "required": [ - "account", - "regId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "regId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialDeployed" - ] - } - } - }, - { - "description": "A new baker was registered, with the given ID and keys.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "restakeEarnings", - "signKey", - "stake", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "restakeEarnings": { - "description": "Whether the baker will automatically add earnings to their stake or not.", - "type": "boolean" - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "stake": { - "description": "The amount the account staked to become a baker. This amount is locked.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerAdded" - ] - } - } - }, - { - "description": "A baker was scheduled to be removed.", - "type": "object", - "required": [ - "account", - "bakerId", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerRemoved" - ] - } - } - }, - { - "description": "A baker's stake was increased. This has effect immediately.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeIncreased" - ] - } - } - }, - { - "description": "A baker's stake was scheduled to be decreased. This will have an effect on the stake after a number of epochs, controlled by the baker cooldown period.", - "type": "object", - "required": [ - "account", - "bakerId", - "newStake", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "BakerStakeDecreased" - ] - } - } - }, - { - "description": "The setting for whether rewards are added to stake immediately or not was changed to the given value.", - "type": "object", - "required": [ - "account", - "bakerId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "bakerId": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "The new value of the flag.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetRestakeEarnings" - ] - } - } - }, - { - "description": "The baker keys were updated. The new keys are listed.", - "type": "object", - "required": [ - "account", - "aggregationKey", - "bakerId", - "electionKey", - "signKey", - "tag" - ], - "properties": { - "account": { - "description": "Account address of the baker.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "aggregationKey": { - "description": "The new public key for verifying finalization records.", - "allOf": [ - { - "$ref": "#/definitions/BakerAggregationVerifyKey" - } - ] - }, - "bakerId": { - "description": "ID of the baker whose keys were changed.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "electionKey": { - "description": "The new public key for verifying whether the baker won the block lottery.", - "allOf": [ - { - "$ref": "#/definitions/BakerElectionVerifyKey" - } - ] - }, - "signKey": { - "description": "The new public key for verifying block signatures.", - "allOf": [ - { - "$ref": "#/definitions/BakerSignatureVerifyKey" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerKeysUpdated" - ] - } - } - }, - { - "description": "Keys of the given credential were updated.", - "type": "object", - "required": [ - "credId", - "tag" - ], - "properties": { - "credId": { - "$ref": "#/definitions/CredentialRegistrationID" - }, - "tag": { - "type": "string", - "enum": [ - "CredentialKeysUpdated" - ] - } - } - }, - { - "description": "A new encrypted amount was added to the account.", - "type": "object", - "required": [ - "account", - "encryptedAmount", - "newIndex", - "tag" - ], - "properties": { - "account": { - "description": "The account onto which the amount was added.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "encryptedAmount": { - "description": "The encrypted amount that was added.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newIndex": { - "description": "The index the amount was assigned.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "NewEncryptedAmount" - ] - } - } - }, - { - "description": "One or more encrypted amounts were removed from an account as part of a transfer or decryption.", - "type": "object", - "required": [ - "account", - "inputAmount", - "newAmount", - "tag", - "upToIndex" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "inputAmount": { - "description": "The input encrypted amount that was removed.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount on the affected account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountsRemoved" - ] - }, - "upToIndex": { - "description": "The index indicating which amounts were used.", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - { - "description": "The public balance of the account was increased via a transfer from encrypted to public balance.", - "type": "object", - "required": [ - "account", - "amount", - "tag" - ], - "properties": { - "account": { - "$ref": "#/definitions/AccountAddress" - }, - "amount": { - "$ref": "#/definitions/CCDAmount" - }, - "tag": { - "type": "string", - "enum": [ - "AmountAddedByDecryption" - ] - } - } - }, - { - "description": "The encrypted balance of the account was updated due to transfer from public to encrypted balance of the account.", - "type": "object", - "required": [ - "account", - "amount", - "newAmount", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "amount": { - "description": "The amount that was transferred from public to encrypted balance.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "newAmount": { - "description": "The new self encrypted amount of the account.", - "allOf": [ - { - "$ref": "#/definitions/EncryptedAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedSelfAmountAdded" - ] - } - } - }, - { - "description": "An update was enqueued for the given time.", - "type": "object", - "required": [ - "effectiveTime", - "payload", - "tag" - ], - "properties": { - "effectiveTime": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "payload": { - "$ref": "#/definitions/UpdatePayload" - }, - "tag": { - "type": "string", - "enum": [ - "UpdateEnqueued" - ] - } - } - }, - { - "description": "A transfer with schedule was enqueued.", - "type": "object", - "required": [ - "amount", - "from", - "tag", - "to" - ], - "properties": { - "amount": { - "description": "The list of releases. Ordered by increasing timestamp.", - "type": "array", - "items": { - "type": "array", - "items": [ - { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - } - }, - "from": { - "description": "Sender account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "TransferredWithSchedule" - ] - }, - "to": { - "description": "Receiver account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - } - } - }, - { - "description": "The credentials of the account were updated. Either added, removed, or both.", - "type": "object", - "required": [ - "account", - "newCredIds", - "newThreshold", - "removedCredIds", - "tag" - ], - "properties": { - "account": { - "description": "The affected account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "newCredIds": { - "description": "The credential ids that were added.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "newThreshold": { - "description": "The (possibly) updated account threshold.", - "type": "integer", - "format": "uint8", - "minimum": 1.0 - }, - "removedCredIds": { - "description": "The credentials that were removed.", - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "CredentialsUpdated" - ] - } - } - }, - { - "description": "Data was registered.", - "type": "object", - "required": [ - "data", - "tag" - ], - "properties": { - "data": { - "$ref": "#/definitions/RegisteredData" - }, - "tag": { - "type": "string", - "enum": [ - "DataRegistered" - ] - } - } - }, - { - "description": "Memo", - "type": "object", - "required": [ - "memo", - "tag" - ], - "properties": { - "memo": { - "$ref": "#/definitions/Memo" - }, - "tag": { - "type": "string", - "enum": [ - "TransferMemo" - ] - } - } - }, - { - "description": "A V1 contract was interrupted.", - "type": "object", - "required": [ - "address", - "events", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that was interrupted.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "events": { - "description": "Events generated up to the interrupt.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "tag": { - "type": "string", - "enum": [ - "Interrupted" - ] - } - } - }, - { - "description": "A V1 contract resumed execution.", - "type": "object", - "required": [ - "address", - "success", - "tag" - ], - "properties": { - "address": { - "description": "Address of the contract that is resuming.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "success": { - "description": "Whether the interrupt succeeded or not.", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "Resumed" - ] - } - } - }, - { - "description": "Updated open status for a baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "openStatus", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "openStatus": { - "description": "The open status.", - "allOf": [ - { - "$ref": "#/definitions/OpenStatus" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetOpenStatus" - ] - } - } - }, - { - "description": "Updated metadata url for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "metadataURL", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "metadataURL": { - "description": "The URL.", - "type": "string" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetMetadataURL" - ] - } - } - }, - { - "description": "Updated transaction fee commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "tag", - "transactionFeeCommission" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetTransactionFeeCommission" - ] - }, - "transactionFeeCommission": { - "description": "The transaction fee commission.", - "type": "number" - } - } - }, - { - "description": "Updated baking reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "bakingRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "bakingRewardCommission": { - "description": "The baking reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetBakingRewardCommission" - ] - } - } - }, - { - "description": "Updated finalization reward commission for baker pool", - "type": "object", - "required": [ - "account", - "bakerId", - "finalizationRewardCommission", - "tag" - ], - "properties": { - "account": { - "description": "Baker account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "bakerId": { - "description": "Baker's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "finalizationRewardCommission": { - "description": "The finalization reward commission", - "type": "number" - }, - "tag": { - "type": "string", - "enum": [ - "BakerSetFinalizationRewardCommission" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeIncreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "newStake", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "newStake": { - "description": "New stake", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "DelegationStakeDecreased" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "restakeEarnings", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "restakeEarnings": { - "description": "Whether earnings will be restaked", - "type": "boolean" - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetRestakeEarnings" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegationTarget", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegationTarget": { - "description": "New delegation target", - "allOf": [ - { - "$ref": "#/definitions/DelegationTarget" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationSetDelegationTarget" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationAdded" - ] - } - } - }, - { - "type": "object", - "required": [ - "account", - "delegatorId", - "tag" - ], - "properties": { - "account": { - "description": "Delegator account", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - }, - "delegatorId": { - "description": "Delegator's id", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationRemoved" - ] - } - } - } - ] - }, - "ExchangeRate": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "GASRewards": { - "description": "The reward fractions related to the gas account and inclusion of special transactions.", - "type": "object", - "required": [ - "accountCreation", - "baker", - "chainUpdate", - "finalizationProof" - ], - "properties": { - "accountCreation": { - "description": "`FeeAccountCreation`: fraction paid for including each account creation transaction in a block.", - "type": "number" - }, - "baker": { - "description": "`BakerPrevTransFrac`: fraction of the previous gas account paid to the baker.", - "type": "number" - }, - "chainUpdate": { - "description": "`FeeUpdate`: fraction paid for including an update transaction in a block.", - "type": "number" - }, - "finalizationProof": { - "description": "`FeeAddFinalisationProof`: fraction paid for including a finalization proof in a block.", - "type": "number" - } - } - }, - "HexString": { - "type": "string", - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "HigherLevelAccessStructure_for_Level1KeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "HigherLevelAccessStructure_for_RootKeysKind": { - "description": "Either root, level1, or level 2 access structure. They all have the same structure, keys and a threshold. The phantom type parameter is used for added type safety to distinguish different access structures in different contexts.", - "type": "object", - "required": [ - "keys", - "threshold" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/VerifyKey" - } - }, - "threshold": { - "type": "integer", - "format": "uint16", - "minimum": 0.0 - } - } - }, - "InclusiveRange_for_Number": { - "type": "object", - "required": [ - "max", - "min" - ], - "properties": { - "max": { - "type": "number" - }, - "min": { - "type": "number" - } - } - }, - "IpInfo_for_HexString": { - "description": "Public information about an identity provider.", - "type": "object", - "required": [ - "ipCdiVerifyKey", - "ipDescription", - "ipIdentity", - "ipVerifyKey" - ], - "properties": { - "ipCdiVerifyKey": { - "description": "Ed public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - }, - "ipDescription": { - "description": "Free form description, e.g., how to contact them off-chain", - "allOf": [ - { - "$ref": "#/definitions/Description" - } - ] - }, - "ipIdentity": { - "description": "Unique identifier of the identity provider.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "ipVerifyKey": { - "description": "PS public key of the IP", - "allOf": [ - { - "$ref": "#/definitions/PublicKey" - } - ] - } - } - }, - "Level1Update": { - "description": "An update with level 1 keys of either level 1 or level 2 keys. Each of the updates must be a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "LeverageFactor": { - "type": "object", - "required": [ - "denominator", - "numerator" - ], - "properties": { - "denominator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "numerator": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "Memo": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "MintDistributionV0": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward", - "mintPerSlot" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - }, - "mintPerSlot": { - "$ref": "#/definitions/MintRate" - } - } - }, - "MintDistributionV1": { - "type": "object", - "required": [ - "bakingReward", - "finalizationReward" - ], - "properties": { - "bakingReward": { - "type": "number" - }, - "finalizationReward": { - "type": "number" - } - } - }, - "MintRate": { - "type": "number" - }, - "OpenStatus": { - "description": "The status of whether a baking pool allows delegators to join.", - "type": "string", - "enum": [ - "openForAll", - "closedForNew", - "closedForAll" - ] - }, - "Parameter": { - "type": "string", - "maxLength": 2048, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "PoolParameters": { - "description": "Parameters related to staking pools.", - "type": "object", - "required": [ - "bakingCommissionRange", - "capitalBound", - "finalizationCommissionRange", - "leverageBound", - "minimumEquityCapital", - "passiveBakingCommission", - "passiveFinalizationCommission", - "passiveTransactionCommission", - "transactionCommissionRange" - ], - "properties": { - "bakingCommissionRange": { - "description": "The range of allowed baker commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "capitalBound": { - "description": "Maximum fraction of the total staked capital of that a new baker can have.", - "type": "number" - }, - "finalizationCommissionRange": { - "description": "The range of allowed finalization commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - }, - "leverageBound": { - "description": "The maximum leverage that a baker can have as a ratio of total stake to equity capital.", - "allOf": [ - { - "$ref": "#/definitions/LeverageFactor" - } - ] - }, - "minimumEquityCapital": { - "description": "Minimum equity capital required for a new baker.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "passiveBakingCommission": { - "description": "Fraction of baking rewards charged by the passive delegation.", - "type": "number" - }, - "passiveFinalizationCommission": { - "description": "Fraction of finalization rewards charged by the passive delegation.", - "type": "number" - }, - "passiveTransactionCommission": { - "description": "Fraction of transaction rewards charged by the L-pool.", - "type": "number" - }, - "transactionCommissionRange": { - "description": "The range of allowed transaction commissions.", - "allOf": [ - { - "$ref": "#/definitions/InclusiveRange_for_Number" - } - ] - } - } - }, - "ProtocolUpdate": { - "description": "A generic protocol update. This is essentially an announcement of the update. The details of the update will be communicated in some off-chain way, and bakers will need to update their node software to support the update.", - "type": "object", - "required": [ - "message", - "specificationAuxiliaryData", - "specificationHash", - "specificationURL" - ], - "properties": { - "message": { - "type": "string" - }, - "specificationAuxiliaryData": { - "$ref": "#/definitions/HexString" - }, - "specificationHash": { - "$ref": "#/definitions/SHA256Hash" - }, - "specificationURL": { - "type": "string" - } - } - }, - "PublicKey": { - "type": "string", - "minLength": 64, - "pattern": "^([0-9]?[a-f]?)*$" - }, - "RegisteredData": { - "type": "string", - "maxLength": 512, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "RejectReason": { - "description": "A reason for why a transaction was rejected. Rejected means included in a block, but the desired action was not achieved. The only effect of a rejected transaction is payment.\n\nNOTE: Some of the variant definitions can look peculiar, but they are made to be compatible with the serialization of the Haskell datatype.", - "oneOf": [ - { - "description": "Error raised when validating the Wasm module.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ModuleNotWF" - ] - } - } - }, - { - "description": "As the name says.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleHashAlreadyExists" - ] - } - } - }, - { - "description": "Account does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidAccountReference" - ] - } - } - }, - { - "description": "Reference to a non-existing contract init method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidInitMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing contract receive method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidReceiveMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing module.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidModuleReference" - ] - } - } - }, - { - "description": "Contract instance does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/ContractAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidContractAddress" - ] - } - } - }, - { - "description": "Runtime exception occurred when running either the init or receive method.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RuntimeFailure" - ] - } - } - }, - { - "description": "When one wishes to transfer an amount from A to B but there are not enough funds on account/contract A to make this possible. The data are the from address and the amount to transfer.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/Address" - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "AmountTooLarge" - ] - } - } - }, - { - "description": "Serialization of the body failed.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "SerializationFailure" - ] - } - } - }, - { - "description": "We ran of out energy to process this transaction.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "OutOfEnergy" - ] - } - } - }, - { - "description": "Rejected due to contract logic in init function of a contract.", - "type": "object", - "required": [ - "rejectReason", - "tag" - ], - "properties": { - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedInit" - ] - } - } - }, - { - "type": "object", - "required": [ - "contractAddress", - "parameter", - "receiveName", - "rejectReason", - "tag" - ], - "properties": { - "contractAddress": { - "$ref": "#/definitions/ContractAddress" - }, - "parameter": { - "$ref": "#/definitions/Parameter" - }, - "receiveName": { - "type": "string" - }, - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedReceive" - ] - } - } - }, - { - "description": "Reward account desired by the baker does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentRewardAccount" - ] - } - } - }, - { - "description": "Proof that the baker owns relevant private keys is not valid.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidProof" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "AlreadyABaker" - ] - } - } - }, - { - "description": "Tried to remove a baker for an account that has no baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotABaker" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForBakerStake" - ] - } - } - }, - { - "description": "The amount provided is under the threshold required for becoming a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeUnderMinimumThresholdForBaking" - ] - } - } - }, - { - "description": "The change could not be made because the baker is in cooldown for another change", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakerInCooldown" - ] - } - } - }, - { - "description": "A baker with the given aggregation key already exists", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/BakerAggregationVerifyKey" - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateAggregationKey" - ] - } - } - }, - { - "description": "Encountered credential ID that does not exist", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonExistentCredentialID" - ] - } - } - }, - { - "description": "Attempted to add an account key to a key index already in use", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "KeyIndexAlreadyInUse" - ] - } - } - }, - { - "description": "When the account threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidAccountThreshold" - ] - } - } - }, - { - "description": "When the credential key threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentialKeySignThreshold" - ] - } - } - }, - { - "description": "Proof for an encrypted amount transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidEncryptedAmountTransferProof" - ] - } - } - }, - { - "description": "Proof for a secret to public transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidTransferToPublicProof" - ] - } - } - }, - { - "description": "Account tried to transfer an encrypted amount to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountSelfTransfer" - ] - } - } - }, - { - "description": "The provided index is below the start index or above `startIndex + length incomingAmounts`", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidIndexOnEncryptedTransfer" - ] - } - } - }, - { - "description": "The transfer with schedule is going to send 0 tokens", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ZeroScheduledAmount" - ] - } - } - }, - { - "description": "The transfer with schedule has a non strictly increasing schedule", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonIncreasingSchedule" - ] - } - } - }, - { - "description": "The first scheduled release in a transfer with schedule has already expired", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FirstScheduledReleaseExpired" - ] - } - } - }, - { - "description": "Account tried to transfer with schedule to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "ScheduledSelfTransfer" - ] - } - } - }, - { - "description": "At least one of the credentials was either malformed or its proof was incorrect.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentials" - ] - } - } - }, - { - "description": "Some of the credential IDs already exist or are duplicated in the transaction.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateCredIDs" - ] - } - } - }, - { - "description": "A credential id that was to be removed is not part of the account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentCredIDs" - ] - } - } - }, - { - "description": "Attemp to remove the first credential", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RemoveFirstCredential" - ] - } - } - }, - { - "description": "The credential holder of the keys to be updated did not sign the transaction", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "CredentialHolderDidNotSign" - ] - } - } - }, - { - "description": "Account is not allowed to have multiple credentials because it contains a non-zero encrypted transfer.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedMultipleCredentials" - ] - } - } - }, - { - "description": "The account is not allowed to receive encrypted transfers because it has multiple credentials.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToReceiveEncrypted" - ] - } - } - }, - { - "description": "The account is not allowed to send encrypted transfers (or transfer from/to public to/from encrypted)", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToHandleEncrypted" - ] - } - } - }, - { - "description": "A configure baker transaction is missing one or more arguments in order to add a baker.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingBakerAddParameters" - ] - } - } - }, - { - "description": "Finalization reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FinalizationRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Baking reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakingRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Transaction fee commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "TransactionFeeCommissionNotInRange" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "AlreadyADelegator" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForDelegationStake" - ] - } - } - }, - { - "description": "A configure delegation transaction is missing one or more arguments in order to add a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingDelegationAddParameters" - ] - } - } - }, - { - "description": "Delegation stake when adding a delegator was 0.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientDelegationStake" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "DelegatorInCooldown" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotADelegator" - ] - } - } - }, - { - "description": "Delegation target is not a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationTargetNotABaker" - ] - } - } - }, - { - "description": "The amount would result in pool capital higher than the maximum threshold.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeOverMaximumThresholdForPool" - ] - } - } - }, - { - "description": "The amount would result in pool with a too high fraction of delegated capital.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolWouldBecomeOverDelegated" - ] - } - } - }, - { - "description": "The pool is not open to delegators.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolClosed" - ] - } - } - } - ] - }, - "RootUpdate": { - "description": "An update with root keys of some other set of governance keys, or the root keys themselves. Each update is a separate transaction.", - "oneOf": [ - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "rootKeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_RootKeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level1KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/HigherLevelAccessStructure_for_Level1KeysKind" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdate" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV0" - } - } - }, - { - "type": "object", - "required": [ - "typeOfUpdate", - "updatePayload" - ], - "properties": { - "typeOfUpdate": { - "type": "string", - "enum": [ - "level2KeysUpdateV1" - ] - }, - "updatePayload": { - "$ref": "#/definitions/AuthorizationsV1" - } - } - } - ] - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "TimeParameters": { - "description": "The time parameters are introduced as of protocol version 4, and consist of the reward period length and the mint rate per payday. These are coupled as a change to either affects the overall rate of minting.", - "type": "object", - "required": [ - "mintPerPayday", - "rewardPeriodLength" - ], - "properties": { - "mintPerPayday": { - "$ref": "#/definitions/MintRate" - }, - "rewardPeriodLength": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "TransactionFeeDistribution": { - "description": "Update the transaction fee distribution to the specified value.", - "type": "object", - "required": [ - "baker", - "gasAccount" - ], - "properties": { - "baker": { - "description": "The fraction that goes to the baker of the block.", - "type": "number" - }, - "gasAccount": { - "description": "The fraction that goes to the gas account. The remaining fraction will go to the foundation.", - "type": "number" - } - } - }, - "TransactionStatusInBlock": { - "description": "Status of a transaction in a given block. NB: If the transaction is committed or finalized, but not in the given block, then the API response will be `QueryError::NotFound`, hence those cases are not covered by this type.", - "oneOf": [ - { - "description": "Transaction is received, but is not in any blocks.", - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "type": "string", - "enum": [ - "received" - ] - } - } - }, - { - "description": "Transaction is finalized in a block, with the given outcome.", - "type": "object", - "required": [ - "result", - "status" - ], - "properties": { - "result": { - "$ref": "#/definitions/BlockItemSummary" - }, - "status": { - "type": "string", - "enum": [ - "finalized" - ] - } - } - }, - { - "description": "Transaction is committed, but not yet finalized in a block, with the given outcome.", - "type": "object", - "required": [ - "result", - "status" - ], - "properties": { - "result": { - "$ref": "#/definitions/BlockItemSummary" - }, - "status": { - "type": "string", - "enum": [ - "committed" - ] - } - } - } - ] - }, - "TransactionType": { - "description": "Types of account transactions.", - "type": "string", - "enum": [ - "deployModule", - "initContract", - "update", - "transfer", - "addBaker", - "removeBaker", - "updateBakerStake", - "updateBakerRestakeEarnings", - "updateBakerKeys", - "updateCredentialKeys", - "encryptedAmountTransfer", - "transferToEncrypted", - "transferToPublic", - "transferWithSchedule", - "updateCredentials", - "registerData", - "transferWithMemo", - "encryptedAmountTransferWithMemo", - "transferWithScheduleAndMemo", - "configureBaker", - "configureDelegation" - ] - }, - "UpdatePayload": { - "description": "The type of an update payload.", - "oneOf": [ - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ProtocolUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "protocol" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "type": "number" - }, - "updateType": { - "type": "string", - "enum": [ - "electionDifficulty" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "euroPerEnergy" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ExchangeRate" - }, - "updateType": { - "type": "string", - "enum": [ - "microGTUPerEuro" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/AccountAddress" - }, - "updateType": { - "type": "string", - "enum": [ - "foundationAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV0" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TransactionFeeDistribution" - }, - "updateType": { - "type": "string", - "enum": [ - "transactionFeeDistribution" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/GASRewards" - }, - "updateType": { - "type": "string", - "enum": [ - "gASRewards" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/BakerParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "bakerStakeThreshold" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/RootUpdate" - }, - "updateType": { - "type": "string", - "enum": [ - "root" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/Level1Update" - }, - "updateType": { - "type": "string", - "enum": [ - "level1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/ArInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addAnonymityRevoker" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/IpInfo_for_HexString" - }, - "updateType": { - "type": "string", - "enum": [ - "addIdentityProvider" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/CooldownParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "cooldownParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/PoolParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "poolParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/TimeParameters" - }, - "updateType": { - "type": "string", - "enum": [ - "timeParametersCPV1" - ] - } - } - }, - { - "type": "object", - "required": [ - "update", - "updateType" - ], - "properties": { - "update": { - "$ref": "#/definitions/MintDistributionV1" - }, - "updateType": { - "type": "string", - "enum": [ - "mintDistributionCPV1" - ] - } - } - } - ] - }, - "UpdateType": { - "description": "Enumeration of the types of updates that are possible.", - "type": "string", - "enum": [ - "updateProtocol", - "updateElectionDifficulty", - "updateEuroPerEnergy", - "updateMicroGTUPerEuro", - "updateFoundationAccount", - "updateMintDistribution", - "updateTransactionFeeDistribution", - "updateGASRewards", - "updateAddAnonymityRevoker", - "updateAddIdentityProvider", - "updateRootKeys", - "updateLevel1Keys", - "updateLevel2Keys", - "updatePoolParameters", - "updateCooldownParameters", - "updateTimeParameters" - ] - }, - "VerifyKey": { - "type": "object", - "properties": { - "schemeId": { - "type": "string" - }, - "verifyKey": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - } - } - }, - "WasmVersion": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } -} \ No newline at end of file diff --git a/source/mainnet/net/references/grpc-json-schemas/InvokeContract.json b/source/mainnet/net/references/grpc-json-schemas/InvokeContract.json deleted file mode 100644 index ed037a243b..0000000000 --- a/source/mainnet/net/references/grpc-json-schemas/InvokeContract.json +++ /dev/null @@ -1,1345 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nullable_InvokeContractResult", - "anyOf": [ - { - "$ref": "#/definitions/InvokeContractResult" - }, - { - "type": "null" - } - ], - "definitions": { - "AccountAddress": { - "type": "string", - "maxLength": 50, - "minLength": 50, - "pattern": "^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]*" - }, - "Address": { - "description": "Either an account or contract address. Some operations are allowed on both types of items, hence the need for this type.", - "oneOf": [ - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/AccountAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressAccount" - ] - } - } - }, - { - "type": "object", - "required": [ - "address", - "type" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "type": { - "type": "string", - "enum": [ - "AddressContract" - ] - } - } - } - ] - }, - "BakerAggregationVerifyKey": { - "type": "string", - "maxLength": 192, - "minLength": 192, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "CCDAmount": { - "type": "string", - "maxLength": 20, - "minLength": 1, - "pattern": "^([0-9])*" - }, - "ContractAddress": { - "type": "object", - "required": [ - "index", - "subindex" - ], - "properties": { - "index": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "subindex": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - "ContractEvent": { - "type": "string", - "maxLength": 1024, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "ContractTraceElement": { - "description": "A successful contract invocation produces a sequence of effects on smart contracts and possibly accounts (if any contract transfers CCD to an account).", - "oneOf": [ - { - "description": "A contract instance was updated.", - "type": "object", - "required": [ - "Updated" - ], - "properties": { - "Updated": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "$ref": "#/definitions/InstanceUpdatedEvent" - } - } - } - }, - "additionalProperties": false - }, - { - "description": "A contract transferred am amount to the account,", - "type": "object", - "required": [ - "Transferred" - ], - "properties": { - "Transferred": { - "type": "object", - "required": [ - "amount", - "from", - "to" - ], - "properties": { - "amount": { - "description": "Amount transferred.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "from": { - "description": "Sender contract.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "to": { - "description": "Receiver account.", - "allOf": [ - { - "$ref": "#/definitions/AccountAddress" - } - ] - } - } - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "Interrupted" - ], - "properties": { - "Interrupted": { - "type": "object", - "required": [ - "address", - "events" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - } - } - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "Resumed" - ], - "properties": { - "Resumed": { - "type": "object", - "required": [ - "address", - "success" - ], - "properties": { - "address": { - "$ref": "#/definitions/ContractAddress" - }, - "success": { - "type": "boolean" - } - } - } - }, - "additionalProperties": false - } - ] - }, - "CredentialRegistrationID": { - "type": "string", - "maxLength": 96, - "minLength": 96, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "HexString": { - "type": "string", - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "InstanceUpdatedEvent": { - "description": "Data generated as part of updating a single contract instance. In general a single [Update](transactions::Payload::Update) transaction will generate one or more of these events, together with possibly some transfers.", - "type": "object", - "required": [ - "address", - "amount", - "events", - "instigator", - "message", - "receiveName" - ], - "properties": { - "address": { - "description": "Address of the affected instance.", - "allOf": [ - { - "$ref": "#/definitions/ContractAddress" - } - ] - }, - "amount": { - "description": "The amount the method was invoked with.", - "allOf": [ - { - "$ref": "#/definitions/CCDAmount" - } - ] - }, - "contractVersion": { - "default": 0, - "allOf": [ - { - "$ref": "#/definitions/WasmVersion" - } - ] - }, - "events": { - "description": "Any contract events that might have been generated by the contract execution.", - "type": "array", - "items": { - "$ref": "#/definitions/ContractEvent" - } - }, - "instigator": { - "description": "The origin of the message to the smart contract. This can be either an account or a smart contract.", - "allOf": [ - { - "$ref": "#/definitions/Address" - } - ] - }, - "message": { - "description": "The message passed to method.", - "allOf": [ - { - "$ref": "#/definitions/Parameter" - } - ] - }, - "receiveName": { - "description": "The name of the method that was executed.", - "type": "string" - } - } - }, - "InvokeContractResult": { - "oneOf": [ - { - "type": "object", - "required": [ - "events", - "tag", - "usedEnergy" - ], - "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/definitions/ContractTraceElement" - } - }, - "returnValue": { - "anyOf": [ - { - "$ref": "#/definitions/HexString" - }, - { - "type": "null" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "success" - ] - }, - "usedEnergy": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "reason", - "tag", - "usedEnergy" - ], - "properties": { - "reason": { - "$ref": "#/definitions/RejectReason" - }, - "returnValue": { - "anyOf": [ - { - "$ref": "#/definitions/HexString" - }, - { - "type": "null" - } - ] - }, - "tag": { - "type": "string", - "enum": [ - "failure" - ] - }, - "usedEnergy": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - } - } - } - ] - }, - "Parameter": { - "type": "string", - "maxLength": 2048, - "minLength": 0, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "RejectReason": { - "description": "A reason for why a transaction was rejected. Rejected means included in a block, but the desired action was not achieved. The only effect of a rejected transaction is payment.\n\nNOTE: Some of the variant definitions can look peculiar, but they are made to be compatible with the serialization of the Haskell datatype.", - "oneOf": [ - { - "description": "Error raised when validating the Wasm module.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ModuleNotWF" - ] - } - } - }, - { - "description": "As the name says.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "ModuleHashAlreadyExists" - ] - } - } - }, - { - "description": "Account does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidAccountReference" - ] - } - } - }, - { - "description": "Reference to a non-existing contract init method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidInitMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing contract receive method.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/SHA256Hash" - }, - { - "type": "string" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "InvalidReceiveMethod" - ] - } - } - }, - { - "description": "Reference to a non-existing module.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/SHA256Hash" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidModuleReference" - ] - } - } - }, - { - "description": "Contract instance does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/ContractAddress" - }, - "tag": { - "type": "string", - "enum": [ - "InvalidContractAddress" - ] - } - } - }, - { - "description": "Runtime exception occurred when running either the init or receive method.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RuntimeFailure" - ] - } - } - }, - { - "description": "When one wishes to transfer an amount from A to B but there are not enough funds on account/contract A to make this possible. The data are the from address and the amount to transfer.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": [ - { - "$ref": "#/definitions/Address" - }, - { - "$ref": "#/definitions/CCDAmount" - } - ], - "maxItems": 2, - "minItems": 2 - }, - "tag": { - "type": "string", - "enum": [ - "AmountTooLarge" - ] - } - } - }, - { - "description": "Serialization of the body failed.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "SerializationFailure" - ] - } - } - }, - { - "description": "We ran of out energy to process this transaction.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "OutOfEnergy" - ] - } - } - }, - { - "description": "Rejected due to contract logic in init function of a contract.", - "type": "object", - "required": [ - "rejectReason", - "tag" - ], - "properties": { - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedInit" - ] - } - } - }, - { - "type": "object", - "required": [ - "contractAddress", - "parameter", - "receiveName", - "rejectReason", - "tag" - ], - "properties": { - "contractAddress": { - "$ref": "#/definitions/ContractAddress" - }, - "parameter": { - "$ref": "#/definitions/Parameter" - }, - "receiveName": { - "type": "string" - }, - "rejectReason": { - "type": "integer", - "format": "int32" - }, - "tag": { - "type": "string", - "enum": [ - "RejectedReceive" - ] - } - } - }, - { - "description": "Reward account desired by the baker does not exist.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentRewardAccount" - ] - } - } - }, - { - "description": "Proof that the baker owns relevant private keys is not valid.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidProof" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "AlreadyABaker" - ] - } - } - }, - { - "description": "Tried to remove a baker for an account that has no baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotABaker" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForBakerStake" - ] - } - } - }, - { - "description": "The amount provided is under the threshold required for becoming a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeUnderMinimumThresholdForBaking" - ] - } - } - }, - { - "description": "The change could not be made because the baker is in cooldown for another change", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakerInCooldown" - ] - } - } - }, - { - "description": "A baker with the given aggregation key already exists", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/BakerAggregationVerifyKey" - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateAggregationKey" - ] - } - } - }, - { - "description": "Encountered credential ID that does not exist", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonExistentCredentialID" - ] - } - } - }, - { - "description": "Attempted to add an account key to a key index already in use", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "KeyIndexAlreadyInUse" - ] - } - } - }, - { - "description": "When the account threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidAccountThreshold" - ] - } - } - }, - { - "description": "When the credential key threshold is updated, it must not exceed the amount of existing keys", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentialKeySignThreshold" - ] - } - } - }, - { - "description": "Proof for an encrypted amount transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidEncryptedAmountTransferProof" - ] - } - } - }, - { - "description": "Proof for a secret to public transfer did not validate.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidTransferToPublicProof" - ] - } - } - }, - { - "description": "Account tried to transfer an encrypted amount to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "EncryptedAmountSelfTransfer" - ] - } - } - }, - { - "description": "The provided index is below the start index or above `startIndex + length incomingAmounts`", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidIndexOnEncryptedTransfer" - ] - } - } - }, - { - "description": "The transfer with schedule is going to send 0 tokens", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "ZeroScheduledAmount" - ] - } - } - }, - { - "description": "The transfer with schedule has a non strictly increasing schedule", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NonIncreasingSchedule" - ] - } - } - }, - { - "description": "The first scheduled release in a transfer with schedule has already expired", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FirstScheduledReleaseExpired" - ] - } - } - }, - { - "description": "Account tried to transfer with schedule to itself, that's not allowed.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "ScheduledSelfTransfer" - ] - } - } - }, - { - "description": "At least one of the credentials was either malformed or its proof was incorrect.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InvalidCredentials" - ] - } - } - }, - { - "description": "Some of the credential IDs already exist or are duplicated in the transaction.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "DuplicateCredIDs" - ] - } - } - }, - { - "description": "A credential id that was to be removed is not part of the account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialRegistrationID" - } - }, - "tag": { - "type": "string", - "enum": [ - "NonExistentCredIDs" - ] - } - } - }, - { - "description": "Attemp to remove the first credential", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "RemoveFirstCredential" - ] - } - } - }, - { - "description": "The credential holder of the keys to be updated did not sign the transaction", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "CredentialHolderDidNotSign" - ] - } - } - }, - { - "description": "Account is not allowed to have multiple credentials because it contains a non-zero encrypted transfer.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedMultipleCredentials" - ] - } - } - }, - { - "description": "The account is not allowed to receive encrypted transfers because it has multiple credentials.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToReceiveEncrypted" - ] - } - } - }, - { - "description": "The account is not allowed to send encrypted transfers (or transfer from/to public to/from encrypted)", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "NotAllowedToHandleEncrypted" - ] - } - } - }, - { - "description": "A configure baker transaction is missing one or more arguments in order to add a baker.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingBakerAddParameters" - ] - } - } - }, - { - "description": "Finalization reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "FinalizationRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Baking reward commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "BakingRewardCommissionNotInRange" - ] - } - } - }, - { - "description": "Transaction fee commission is not in the valid range for a baker", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "TransactionFeeCommissionNotInRange" - ] - } - } - }, - { - "description": "Tried to add baker for an account that already has a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "AlreadyADelegator" - ] - } - } - }, - { - "description": "The amount on the account was insufficient to cover the proposed stake.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientBalanceForDelegationStake" - ] - } - } - }, - { - "description": "A configure delegation transaction is missing one or more arguments in order to add a delegator.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "MissingDelegationAddParameters" - ] - } - } - }, - { - "description": "Delegation stake when adding a delegator was 0.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "InsufficientDelegationStake" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "DelegatorInCooldown" - ] - } - } - }, - { - "description": "Account is not a delegation account.", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "$ref": "#/definitions/AccountAddress" - }, - "tag": { - "type": "string", - "enum": [ - "NotADelegator" - ] - } - } - }, - { - "description": "Delegation target is not a baker", - "type": "object", - "required": [ - "contents", - "tag" - ], - "properties": { - "contents": { - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "tag": { - "type": "string", - "enum": [ - "DelegationTargetNotABaker" - ] - } - } - }, - { - "description": "The amount would result in pool capital higher than the maximum threshold.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "StakeOverMaximumThresholdForPool" - ] - } - } - }, - { - "description": "The amount would result in pool with a too high fraction of delegated capital.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolWouldBecomeOverDelegated" - ] - } - } - }, - { - "description": "The pool is not open to delegators.", - "type": "object", - "required": [ - "tag" - ], - "properties": { - "tag": { - "type": "string", - "enum": [ - "PoolClosed" - ] - } - } - } - ] - }, - "SHA256Hash": { - "type": "string", - "maxLength": 64, - "minLength": 64, - "pattern": "^(([0-9]?[a-f]?){2})*$" - }, - "WasmVersion": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - } - } -} \ No newline at end of file