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. We provide a number of SDKs that build on top of the gRPC interface, which are much more ergonomic to use.

These are the SDKs we currently provide:

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:

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#

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 Transaction encoding section.

Parameters
  • network_id (Int32) – The network that the transaction should be sent to (only 100 is currently supported).

  • payload ([Byte] of BlockItem) – Binary encoding of the transaction payload.

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.

Return type

Bool

GetTransactionStatus(transaction_hash: TransactionHash, block_hash: BlockHash) JsonResponse#

Get the status of a given transaction.

Parameters

transaction_hash (TransactionHash) – The transaction to query.

Returns

The status of the transaction, or null if either the transaction or block hash is malformed or doesn’t exist.

Return type

JsonResponse with ?TransactionStatus (see JSON schema below)

View JSON schema
{
  "$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
    }
  }
}
GetTransactionStatusInBlock(transaction_hash: TransactionHash, block_hash: BlockHash) JsonResponse#

Get the status of a given transaction in a given block.

Parameters
Returns

The status of the transaction, or null if either the transaction or block hash is malformed or doesn’t exist.

Return type

JsonResponse with ?TransactionStatusInBlock (see JSON schema below)

View JSON schema
{
  "$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
    }
  }
}

Blocks and consensus#

GetConsensusStatus() JsonResponse#

Get the information about the consensus.

Returns

Information about the consensus.

Return type

JsonResponse with ConsensusInfo (see JSON schema below)

View JSON schema
{
  "$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})*$"
    }
  }
}
GetBlockInfo(block_hash: BlockHash) JsonResponse#

Get information, such as height, timings, and transaction counts for the given block.

Parameters

block_hash (BlockHash) – The given block.

Returns

Information about the block, or null if the block hash is malformed or doesn’t exist.

Return type

JsonResponse with ?BlockInfo (see JSON schema below)

View JSON schema
{
  "$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})*$"
    }
  }
}
GetBlockSummary(block_hash: BlockHash) JsonResponse#

Get a summary of the transactions and data in a given block.

Parameters

block_hash (BlockHash) – The given block.

Returns

A summary of the transactions and data in the block, or null if the block hash is malformed or doesn’t exist.

Return type

JsonResponse with ?BlockSummary (see JSON schema below)

View JSON schema
{
  "$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&quo