From c7f9ac9d4f499b4853aae4541224a8c91c368a2d Mon Sep 17 00:00:00 2001 From: Paolo Tagliaferri Date: Mon, 1 Aug 2022 18:07:31 +0200 Subject: [PATCH 1/6] Added first draft of ZenIP 42202 for non-ceasable sidechains --- ZenIP-42202/ZenIP-42202-1.png | Bin 0 -> 75708 bytes ZenIP-42202/ZenIP-42202-2.png | Bin 0 -> 22983 bytes zenip-42202.md | 119 ++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 ZenIP-42202/ZenIP-42202-1.png create mode 100644 ZenIP-42202/ZenIP-42202-2.png create mode 100644 zenip-42202.md diff --git a/ZenIP-42202/ZenIP-42202-1.png b/ZenIP-42202/ZenIP-42202-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2599ead0823ab1ba7bf2c1d02e1f83537eb5776d GIT binary patch literal 75708 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≻rVFOlPfxh?PP~j4hR~%w#sy7 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 Xqwk+9wx8sW0%`Pg^>bP0l+XkKef=h| literal 0 HcmV?d00001 diff --git a/zenip-42202.md b/zenip-42202.md new file mode 100644 index 0000000..1fc0f57 --- /dev/null +++ b/zenip-42202.md @@ -0,0 +1,119 @@ + +# ZenIP-42202 + + ZenIP: 42202 + Title: Non-ceasable Sidechains + Owner: Paolo Tagliaferri, ; cronic, + Discussions-To: Paolo Tagliaferri, + Comments-URI: https://horizen.global/invite/discord + Status: Draft + Type: Consensus + Created: 2022-08-01 + License: MIT + +## Table of Contents + + + +- [Abstract](#abstract) +- [Motivation](#motivation) +- [Specification](#specification) + - [Constraints](#constraints) + - [Maturity](#maturity) + + +## Abstract + +This document describes the introduction of a new type of sidechains that “never cease” from processing transactions. The version for this type of sidechains is “v2”. + +Currently, all sidechains must specify a `withdrawalEpochLength` at creation time, and such value immediately determines when a submission window opens and closes for each epoch. + +The life cycle of any sidechain is composed of epochs, that are sets of consecutive blocks whose size is determined by the `withdrawalEpochLength`. The first epoch begins with the block in which the sidechain is created (through a transaction containing its SidechainCreationOutput), the second one starts after `withdrawalEpochLength` blocks and so on. + +At the beginning of any epoch, except for the first one, there is a subset of blocks that constitutes the so-called **submission window**, in which the sidechain is required to publish at least one certificate for the previous epoch. Any certificate received outside this window is automatically rejected. + +Certificates act as an heartbeat of a sidechain and are the only way to move coins back to the mainchain. + +If a sidechain doesn’t provide at least one certificate for an epoch, it is considered as “ceased” and no more transactions to and from the sidechain are accepted (only *Ceased Sidechain Withdrawals* are allowed as an emergency procedure to recover funds). + +![A ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) + +We propose to introduce sidechains v2 that are not required to submit certificates during a submission window but can continue to process transactions without the risk of ceasing. + +Please note that this non-ceasing behavior is not enabled for all sidechains v2, but it must be explicitly requested by setting the `withdrawalEpochLength` to “0”. + +To recap, sidechains v2 will have two different behaviors based on the creation parameters: + +- if the `withdrawalEpochLength` is set to “0”, the sidechain never cease + +- if the `withdrawalEpochLength` is not “0”, the sidechain works exactly as sidechains v1 (with normal ceasing behavior) + +## Motivation + +The entire sidechain mechanism that has been included in the Zen blockchain under the name of “Zendoo“ was designed and implemented having in mind the security of users in a fully decentralized scenario. + +In the meanwhile, some sidechains have started to be implemented in semi-centralized environments, where security constraints are way more relaxed. + +For instance, in a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees to users the possibility to perform withdrawal of funds directly from mainchain in case the sidechain is somehow compromised (but continues to publish certificates). Instead, if the sidechain ceases, users can still retrieve their funds by using the `Ceased Sidechain Withrawal` (CSW) mechanism. + +In semi-centralized environments, where users can trust the actors running the sidechain, those withdrawal mechanisms (MBTR and CSW) are not needed and users can rely on the normal Backward Transfer mechanism triggered on the sidechain itself. Moreover, in these environments, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: + +- bugs in the software running the nodes + +- connectivity issues + +- congestion of blocks (too many transactions and certificates for one single block) + +**Note**: The changes proposed in this ZenIP can mitigate such risks without affecting the security of the sidechain. + +## Specification + +The creation of sidechains v2 is triggered by the consensus rules starting with the activation of the fork point #10. + +Any attempt to create a sidechain v2 on mainnet before that height will be rejected. + +Sidechains v2 will keep all the features included in v1 in addition to the possibility to enable the non-ceasing behavior by properly setting the `withdrawalEpochLength`. + +![Non-ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) + +### Constraints + +Sidechains v2 will never cease when setting `withdrawalEpochLength` to “0” at creation time. They are not forced to publish certificates during fixed submission windows. However, they can publish a certificate whenever they want, with the only two following constraints: + +- The `epoch` values of certificates must be consecutive (i.e. after a certificate of epoch N the sidechain must publish a certificate of epoch N + 1) + +- The `quality` mechanism is disabled, so it’s not possible to publish two or more certificates for the same epoch + +These non-ceasable sidechains must satisfy the following constraints: + +- **Sidechain Creation** + + - `withdrawalEpochLength` must be set to 0 (to disable the fixed-length epochs and submission windows, otherwise they work exactly as sidechains v1 do). + + - `mainchainBackwardTransferRequestDataLength` must be set to 0 (to disable the MBTR). + + - `wCeasedVk` must be empty (to disable the CSW). + +- **Certificates** + + - The `quality` field must always be set to “0”. + + - If mainchain receives first a certificate of epoch N (either in mempool or in a block) and then another certificate of same epoch, the latter is rejected. + + - All certificates must refer (through the `endEpochCumScTxCommTreeRoot` field) to different ordered block. So, for instance, if the mainchain receives a certificate for epoch N referring to the mainchain block M (i.e. setting the `endEpochCumScTxCommTreeRoot `field to the same value specified in the header of the mainchain block M), any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with higher height than M (M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a more updated state of the mainchain and of the sidechain. + + - More than one certificate for the same sidechain can be included in the same block (if they respect all the constraints above). + +When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they will enable the default ceasing mechanism as it is intended for sidechains v1. + +### Maturity + +For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. + +For instance, whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are able to move to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature and after some block confirmation, they are included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. + +The same concept applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. In this case, it makes sense to mark the backward transfers as immature until the certificate is final. + +Moreover, a certificate can be reverted back, just in case a sidechain ceases. Zendoo considers maturity of any backward transfer included in a top quality certificate for epoch N only after the end of the submission window for epoch N + 1. + +Since non-ceasable sidechains don’t support the CSW, such maturity concept is not useful. Therefore, the maturity is going to be ignored and every cross-chain output or backward transfer will be immediately considered spendable (and added/removed to the sidechain balance). This only applies to sidechains v2 with `withdrawalEpochLength` set to “0”. \ No newline at end of file From bdd53993471257efec866a0de898ef8974bcf11e Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 15 Aug 2022 21:26:08 +0200 Subject: [PATCH 2/6] Applied suggestions from code review Co-authored-by: cronicc --- zenip-42202.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/zenip-42202.md b/zenip-42202.md index 1fc0f57..f64d49e 100644 --- a/zenip-42202.md +++ b/zenip-42202.md @@ -26,7 +26,7 @@ This document describes the introduction of a new type of sidechains that “never cease” from processing transactions. The version for this type of sidechains is “v2”. -Currently, all sidechains must specify a `withdrawalEpochLength` at creation time, and such value immediately determines when a submission window opens and closes for each epoch. +With sidechains v0 and v1, all sidechains must specify a `withdrawalEpochLength` > 0 at time of creation, this value determines the length of the epoch and when a submission window opens and closes for each epoch. The life cycle of any sidechain is composed of epochs, that are sets of consecutive blocks whose size is determined by the `withdrawalEpochLength`. The first epoch begins with the block in which the sidechain is created (through a transaction containing its SidechainCreationOutput), the second one starts after `withdrawalEpochLength` blocks and so on. @@ -42,19 +42,19 @@ We propose to introduce sidechains v2 that are not required to submit certificat Please note that this non-ceasing behavior is not enabled for all sidechains v2, but it must be explicitly requested by setting the `withdrawalEpochLength` to “0”. -To recap, sidechains v2 will have two different behaviors based on the creation parameters: +Sidechains v2 will have two different behaviors based on the creation parameters: -- if the `withdrawalEpochLength` is set to “0”, the sidechain never cease +- if the `withdrawalEpochLength` is set to “0”, the sidechain can never cease - if the `withdrawalEpochLength` is not “0”, the sidechain works exactly as sidechains v1 (with normal ceasing behavior) ## Motivation -The entire sidechain mechanism that has been included in the Zen blockchain under the name of “Zendoo“ was designed and implemented having in mind the security of users in a fully decentralized scenario. +The sidechain mechanism that has been included in the Horizen blockchain under the name of “Zendoo“ was designed and implemented having in mind the security of users in a fully decentralized scenario. -In the meanwhile, some sidechains have started to be implemented in semi-centralized environments, where security constraints are way more relaxed. +In the meanwhile, use cases with more relaxed security constraints that can benefit from a semi-centralized environment have been found. -For instance, in a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees to users the possibility to perform withdrawal of funds directly from mainchain in case the sidechain is somehow compromised (but continues to publish certificates). Instead, if the sidechain ceases, users can still retrieve their funds by using the `Ceased Sidechain Withrawal` (CSW) mechanism. +In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees to users the possibility to perform withdrawal of funds directly from mainchain in case the sidechain is somehow compromised (but continues to publish certificates). If the sidechain ceases, users can still retrieve their funds by using the `Ceased Sidechain Withrawal` (CSW) mechanism. In semi-centralized environments, where users can trust the actors running the sidechain, those withdrawal mechanisms (MBTR and CSW) are not needed and users can rely on the normal Backward Transfer mechanism triggered on the sidechain itself. Moreover, in these environments, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: @@ -102,7 +102,7 @@ These non-ceasable sidechains must satisfy the following constraints: - All certificates must refer (through the `endEpochCumScTxCommTreeRoot` field) to different ordered block. So, for instance, if the mainchain receives a certificate for epoch N referring to the mainchain block M (i.e. setting the `endEpochCumScTxCommTreeRoot `field to the same value specified in the header of the mainchain block M), any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with higher height than M (M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a more updated state of the mainchain and of the sidechain. - - More than one certificate for the same sidechain can be included in the same block (if they respect all the constraints above). + - More than one certificate for the same sidechain can be included in the same block (if they respect all the constraints above and are ordered sequentially). When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they will enable the default ceasing mechanism as it is intended for sidechains v1. @@ -112,8 +112,8 @@ For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount o For instance, whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are able to move to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature and after some block confirmation, they are included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. -The same concept applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. In this case, it makes sense to mark the backward transfers as immature until the certificate is final. +The concept of maturity also applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. Because of this backward transfers included in a certificate are immature until the certificate is final. -Moreover, a certificate can be reverted back, just in case a sidechain ceases. Zendoo considers maturity of any backward transfer included in a top quality certificate for epoch N only after the end of the submission window for epoch N + 1. +In case a sidechain ceases any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (another certificate was submitted in submission window of epoch N + 1). -Since non-ceasable sidechains don’t support the CSW, such maturity concept is not useful. Therefore, the maturity is going to be ignored and every cross-chain output or backward transfer will be immediately considered spendable (and added/removed to the sidechain balance). This only applies to sidechains v2 with `withdrawalEpochLength` set to “0”. \ No newline at end of file +Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. Therefore, every cross-chain output or backward transfer is immediately considered spendable (and added/removed to the sidechain balance). This only applies to sidechains v2 with `withdrawalEpochLength` set to “0”. \ No newline at end of file From a659feed6dfda81e654f7abe682fb3bdc4e7846c Mon Sep 17 00:00:00 2001 From: Paolo Tagliaferri Date: Wed, 17 Aug 2022 15:03:27 +0200 Subject: [PATCH 3/6] Additional changes coming from code review --- zenip-42202.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/zenip-42202.md b/zenip-42202.md index f64d49e..053f50d 100644 --- a/zenip-42202.md +++ b/zenip-42202.md @@ -24,7 +24,7 @@ ## Abstract -This document describes the introduction of a new type of sidechains that “never cease” from processing transactions. The version for this type of sidechains is “v2”. +This document introduces a new type of sidechain that never ceases from processing transactions. The version for this type of sidechains is “v2”. With sidechains v0 and v1, all sidechains must specify a `withdrawalEpochLength` > 0 at time of creation, this value determines the length of the epoch and when a submission window opens and closes for each epoch. @@ -44,7 +44,7 @@ Please note that this non-ceasing behavior is not enabled for all sidechains v2, Sidechains v2 will have two different behaviors based on the creation parameters: -- if the `withdrawalEpochLength` is set to “0”, the sidechain can never cease +- if the `withdrawalEpochLength` is set to “0”, the sidechain never ceases - if the `withdrawalEpochLength` is not “0”, the sidechain works exactly as sidechains v1 (with normal ceasing behavior) @@ -52,7 +52,7 @@ Sidechains v2 will have two different behaviors based on the creation parameters The sidechain mechanism that has been included in the Horizen blockchain under the name of “Zendoo“ was designed and implemented having in mind the security of users in a fully decentralized scenario. -In the meanwhile, use cases with more relaxed security constraints that can benefit from a semi-centralized environment have been found. +There are some use cases where sidechains are implemented in a semi-centralized environment with relaxed security constraints. In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees to users the possibility to perform withdrawal of funds directly from mainchain in case the sidechain is somehow compromised (but continues to publish certificates). If the sidechain ceases, users can still retrieve their funds by using the `Ceased Sidechain Withrawal` (CSW) mechanism. @@ -110,10 +110,12 @@ When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they w For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. -For instance, whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are able to move to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature and after some block confirmation, they are included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. +For instance, whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are able to move to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature and after some block confirmation, they are included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. +How is this concept of maturity handled by the mainchain? Whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins moved back from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to move back more coins than its balance, the transaction is rejected. + The concept of maturity also applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. Because of this backward transfers included in a certificate are immature until the certificate is final. -In case a sidechain ceases any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (another certificate was submitted in submission window of epoch N + 1). +If a sidechain ceases, any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (once a new certificate is submitted during the submission window of epoch N + 1). Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. Therefore, every cross-chain output or backward transfer is immediately considered spendable (and added/removed to the sidechain balance). This only applies to sidechains v2 with `withdrawalEpochLength` set to “0”. \ No newline at end of file From 8bd1c1ecad7732fe14e25ddead4eb81a1d7bf2d7 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 22 Aug 2022 15:49:33 +0200 Subject: [PATCH 4/6] Applied suggestions from code review Co-authored-by: Yuriko Inaba --- zenip-42202.md | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/zenip-42202.md b/zenip-42202.md index 053f50d..d0e0ef6 100644 --- a/zenip-42202.md +++ b/zenip-42202.md @@ -26,37 +26,37 @@ This document introduces a new type of sidechain that never ceases from processing transactions. The version for this type of sidechains is “v2”. -With sidechains v0 and v1, all sidechains must specify a `withdrawalEpochLength` > 0 at time of creation, this value determines the length of the epoch and when a submission window opens and closes for each epoch. +For sidechains v0 and v1, a `withdrawalEpochLength` > 0 must be specified at the time of creation. This value determines the length of the epoch and when a submission window opens and closes for each epoch. -The life cycle of any sidechain is composed of epochs, that are sets of consecutive blocks whose size is determined by the `withdrawalEpochLength`. The first epoch begins with the block in which the sidechain is created (through a transaction containing its SidechainCreationOutput), the second one starts after `withdrawalEpochLength` blocks and so on. +The life cycle of any sidechain is composed of epochs, which are sets of consecutive blocks whose size is defined by the `withdrawalEpochLength`. The first epoch begins with the block that creates the sidechain, the second epoch starts after a `withdrawalEpochLength` number of blocks, and so on. -At the beginning of any epoch, except for the first one, there is a subset of blocks that constitutes the so-called **submission window**, in which the sidechain is required to publish at least one certificate for the previous epoch. Any certificate received outside this window is automatically rejected. +At the beginning of every epoch (except for the first one), there is a subset of blocks that constitutes the **submission window**, during which the sidechain is required to publish at least one certificate for the previous epoch. Any certificate received outside this window is automatically rejected. -Certificates act as an heartbeat of a sidechain and are the only way to move coins back to the mainchain. +Certificates are the only way to move coins back to the mainchain. -If a sidechain doesn’t provide at least one certificate for an epoch, it is considered as “ceased” and no more transactions to and from the sidechain are accepted (only *Ceased Sidechain Withdrawals* are allowed as an emergency procedure to recover funds). +If a sidechain doesn’t provide at least one certificate for an epoch, it is considered “ceased” and no more transactions to or from the sidechain are accepted. Only *Ceased Sidechain Withdrawals* are allowed as an emergency procedure to recover funds. ![A ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) -We propose to introduce sidechains v2 that are not required to submit certificates during a submission window but can continue to process transactions without the risk of ceasing. +The proposal is to introduce sidechains v2 that are not required to submit certificates during a submission window and can continue to process transactions without the risk of ceasing. -Please note that this non-ceasing behavior is not enabled for all sidechains v2, but it must be explicitly requested by setting the `withdrawalEpochLength` to “0”. +This non-ceasing behavior is not enabled for all sidechains v2. It must be explicitly defined by setting the `withdrawalEpochLength` to “0”. Sidechains v2 will have two different behaviors based on the creation parameters: - if the `withdrawalEpochLength` is set to “0”, the sidechain never ceases -- if the `withdrawalEpochLength` is not “0”, the sidechain works exactly as sidechains v1 (with normal ceasing behavior) +- if the `withdrawalEpochLength` is greater than “0”, the sidechain works exactly as sidechains v0 and v1 with ceasing behavior ## Motivation -The sidechain mechanism that has been included in the Horizen blockchain under the name of “Zendoo“ was designed and implemented having in mind the security of users in a fully decentralized scenario. +The sidechain mechanism introduced in the Horizen blockchain with “Zendoo“ was designed and implemented for a fully decentralized scenario. -There are some use cases where sidechains are implemented in a semi-centralized environment with relaxed security constraints. +However, there are some use cases where sidechains are implemented in a semi-centralized environment with relaxed security constraints. -In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees to users the possibility to perform withdrawal of funds directly from mainchain in case the sidechain is somehow compromised (but continues to publish certificates). If the sidechain ceases, users can still retrieve their funds by using the `Ceased Sidechain Withrawal` (CSW) mechanism. +In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees the withdrawal of funds directly from mainchain in case the sidechain is compromised (but continues to publish certificates). Additionally, if the sidechain ceases, funds can be withdrawn with the `Ceased Sidechain Withrawal` (CSW). In a semi-centralized sidechain, however, MBTR and CSW are not necessary. -In semi-centralized environments, where users can trust the actors running the sidechain, those withdrawal mechanisms (MBTR and CSW) are not needed and users can rely on the normal Backward Transfer mechanism triggered on the sidechain itself. Moreover, in these environments, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: +In semi-centralized environments, the actors running the sidechain can be trusted, and users can rely on the Backward Transfer mechanism triggered on the sidechain itself. Moreover, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: - bugs in the software running the nodes @@ -64,7 +64,7 @@ In semi-centralized environments, where users can trust the actors running the s - congestion of blocks (too many transactions and certificates for one single block) -**Note**: The changes proposed in this ZenIP can mitigate such risks without affecting the security of the sidechain. +The proposed changes can mitigate such risks without affecting the security of the sidechain. ## Specification @@ -72,13 +72,13 @@ The creation of sidechains v2 is triggered by the consensus rules starting with Any attempt to create a sidechain v2 on mainnet before that height will be rejected. -Sidechains v2 will keep all the features included in v1 in addition to the possibility to enable the non-ceasing behavior by properly setting the `withdrawalEpochLength`. +Sidechains v2 includes all the features in sidechains v1, and adds the possibility of enabling non-ceasing behavior by setting `withdrawalEpochLength = "0"`. ![Non-ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) ### Constraints -Sidechains v2 will never cease when setting `withdrawalEpochLength` to “0” at creation time. They are not forced to publish certificates during fixed submission windows. However, they can publish a certificate whenever they want, with the only two following constraints: +Sidechains v2 will never cease when setting `withdrawalEpochLength` to “0” at creation time. They are not forced to publish certificates during fixed submission windows. They can publish a certificate whenever they want, with the two following constraints: - The `epoch` values of certificates must be consecutive (i.e. after a certificate of epoch N the sidechain must publish a certificate of epoch N + 1) @@ -88,21 +88,24 @@ These non-ceasable sidechains must satisfy the following constraints: - **Sidechain Creation** - - `withdrawalEpochLength` must be set to 0 (to disable the fixed-length epochs and submission windows, otherwise they work exactly as sidechains v1 do). + - `withdrawalEpochLength` must be set to 0. + This disabled fixed-length epochs and submission windows. - - `mainchainBackwardTransferRequestDataLength` must be set to 0 (to disable the MBTR). + - `mainchainBackwardTransferRequestDataLength` must be set to 0. + This disables MBTR. - - `wCeasedVk` must be empty (to disable the CSW). + - `wCeasedVk` must be empty. + This disables CSW. - **Certificates** - The `quality` field must always be set to “0”. - - If mainchain receives first a certificate of epoch N (either in mempool or in a block) and then another certificate of same epoch, the latter is rejected. + - If the mainchain first receives a certificate of epoch N (either in the mempool or in a block) and then receives another certificate in same epoch N, the latter is rejected. - All certificates must refer (through the `endEpochCumScTxCommTreeRoot` field) to different ordered block. So, for instance, if the mainchain receives a certificate for epoch N referring to the mainchain block M (i.e. setting the `endEpochCumScTxCommTreeRoot `field to the same value specified in the header of the mainchain block M), any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with higher height than M (M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a more updated state of the mainchain and of the sidechain. - - More than one certificate for the same sidechain can be included in the same block (if they respect all the constraints above and are ordered sequentially). + - More than one certificate for the same sidechain can be included in the same block if they follow all the constraints above and are ordered sequentially. When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they will enable the default ceasing mechanism as it is intended for sidechains v1. @@ -110,12 +113,12 @@ When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they w For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. -For instance, whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are able to move to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature and after some block confirmation, they are included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. -How is this concept of maturity handled by the mainchain? Whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins moved back from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to move back more coins than its balance, the transaction is rejected. +This means that whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are transferred to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature, and only after some block confirmations, are they included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. +On the mainchain, whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins transfer from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to transfer more coins than its balance, the transaction is rejected. The concept of maturity also applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. Because of this backward transfers included in a certificate are immature until the certificate is final. If a sidechain ceases, any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (once a new certificate is submitted during the submission window of epoch N + 1). -Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. Therefore, every cross-chain output or backward transfer is immediately considered spendable (and added/removed to the sidechain balance). This only applies to sidechains v2 with `withdrawalEpochLength` set to “0”. \ No newline at end of file +Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. This means that every cross-chain output or backward transfer is immediately considered spendable and it is immediately added to or removed from the sidechain balance. \ No newline at end of file From 56659bd6e72ebace7d136862824dccdf7d9d82e1 Mon Sep 17 00:00:00 2001 From: Paolo Tagliaferri Date: Mon, 6 Mar 2023 16:09:24 +0100 Subject: [PATCH 5/6] Updated according to latest changes to non-ceasable sidechains design Additional minor changes: - Fixed image 2 - Fixed link to image 2 - Fixed typos --- ZenIP-42202/ZenIP-42202-2.png | Bin 22983 -> 20629 bytes zenip-42202.md | 22 ++++++++++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ZenIP-42202/ZenIP-42202-2.png b/ZenIP-42202/ZenIP-42202-2.png index d3d79f927198957d3c7151200949025bda14773f..8845d6ae2a6a3dc1ba2bb61c8168275649625b65 100644 GIT binary patch literal 20629 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 literal 22983 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 Xqwk+9wx8sW0%`Pg^>bP0l+XkKef=h| diff --git a/zenip-42202.md b/zenip-42202.md index d0e0ef6..85d29da 100644 --- a/zenip-42202.md +++ b/zenip-42202.md @@ -26,7 +26,7 @@ This document introduces a new type of sidechain that never ceases from processing transactions. The version for this type of sidechains is “v2”. -For sidechains v0 and v1, a `withdrawalEpochLength` > 0 must be specified at the time of creation. This value determines the length of the epoch and when a submission window opens and closes for each epoch. +For sidechains v0 and v1, a `withdrawalEpochLength > 0` must be specified at the time of creation. This value determines the length of the epoch and when a submission window opens and closes for each epoch. The life cycle of any sidechain is composed of epochs, which are sets of consecutive blocks whose size is defined by the `withdrawalEpochLength`. The first epoch begins with the block that creates the sidechain, the second epoch starts after a `withdrawalEpochLength` number of blocks, and so on. @@ -54,7 +54,7 @@ The sidechain mechanism introduced in the Horizen blockchain with “Zendoo“ w However, there are some use cases where sidechains are implemented in a semi-centralized environment with relaxed security constraints. -In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees the withdrawal of funds directly from mainchain in case the sidechain is compromised (but continues to publish certificates). Additionally, if the sidechain ceases, funds can be withdrawn with the `Ceased Sidechain Withrawal` (CSW). In a semi-centralized sidechain, however, MBTR and CSW are not necessary. +In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees the withdrawal of funds directly from mainchain in case the sidechain is compromised (but continues to publish certificates). Additionally, if the sidechain ceases, funds can be withdrawn with the `Ceased Sidechain Withdrawal` (CSW). In a semi-centralized sidechain, however, MBTR and CSW are not necessary. In semi-centralized environments, the actors running the sidechain can be trusted, and users can rely on the Backward Transfer mechanism triggered on the sidechain itself. Moreover, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: @@ -74,7 +74,7 @@ Any attempt to create a sidechain v2 on mainnet before that height will be rejec Sidechains v2 includes all the features in sidechains v1, and adds the possibility of enabling non-ceasing behavior by setting `withdrawalEpochLength = "0"`. -![Non-ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) +![Non-ceasable sidechain](ZenIP-42202/ZenIP-42202-2.png) ### Constraints @@ -89,7 +89,7 @@ These non-ceasable sidechains must satisfy the following constraints: - **Sidechain Creation** - `withdrawalEpochLength` must be set to 0. - This disabled fixed-length epochs and submission windows. + This disables fixed-length epochs and submission windows. - `mainchainBackwardTransferRequestDataLength` must be set to 0. This disables MBTR. @@ -99,13 +99,11 @@ These non-ceasable sidechains must satisfy the following constraints: - **Certificates** - - The `quality` field must always be set to “0”. + - If the mainchain first receives a certificate of epoch N (either in the mempool or in a block) and then receives another certificate in the same epoch N, the latter is rejected. - - If the mainchain first receives a certificate of epoch N (either in the mempool or in a block) and then receives another certificate in same epoch N, the latter is rejected. - - - All certificates must refer (through the `endEpochCumScTxCommTreeRoot` field) to different ordered block. So, for instance, if the mainchain receives a certificate for epoch N referring to the mainchain block M (i.e. setting the `endEpochCumScTxCommTreeRoot `field to the same value specified in the header of the mainchain block M), any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with higher height than M (M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a more updated state of the mainchain and of the sidechain. - - - More than one certificate for the same sidechain can be included in the same block if they follow all the constraints above and are ordered sequentially. + - Any certificate of epoch N+1 must refer (through the `endEpochCumScTxCommTreeRoot` field) to a block that includes the certificate of epoch N in its *Sidechain Transactions Cumulative Commitment Tree*. So, for instance, if the mainchain receives a certificate for epoch N included in the mainchain block M, any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with height equal or higher than M (M, M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a state of the mainchain that includes the previous certificate. The practical implications of this constraint are: + - It's not possible to have more than one certificate in a block or in the mempool for a given non-ceasable sidechain. + - Before starting the generation of the proof for a certificate of epoch N, the certificate of epoch N-1 must be already mined. When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they will enable the default ceasing mechanism as it is intended for sidechains v1. @@ -114,11 +112,11 @@ When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they w For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. This means that whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are transferred to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature, and only after some block confirmations, are they included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. -On the mainchain, whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins transfer from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to transfer more coins than its balance, the transaction is rejected. +On the mainchain, whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins transferred from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to transfer more coins than its balance, the transaction is rejected. The concept of maturity also applies to backward transfers in a certificate. During the submission window phase, a certificate can be superseded by another certificate of higher quality. Because of this backward transfers included in a certificate are immature until the certificate is final. -If a sidechain ceases, any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (once a new certificate is submitted during the submission window of epoch N + 1). +If a sidechain ceases, any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top-quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (once a new certificate is submitted during the submission window of epoch N + 1). Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. This means that every cross-chain output or backward transfer is immediately considered spendable and it is immediately added to or removed from the sidechain balance. \ No newline at end of file From 507706dc2c60bf538188a2b1186008d889b8b498 Mon Sep 17 00:00:00 2001 From: Paolo Tagliaferri Date: Mon, 5 Jun 2023 12:05:22 +0200 Subject: [PATCH 6/6] Updated the document and moved to final Original author: @victHorizen --- zenip-42202.md | 80 +++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/zenip-42202.md b/zenip-42202.md index 85d29da..b4bb614 100644 --- a/zenip-42202.md +++ b/zenip-42202.md @@ -6,7 +6,7 @@ Owner: Paolo Tagliaferri, ; cronic, Discussions-To: Paolo Tagliaferri, Comments-URI: https://horizen.global/invite/discord - Status: Draft + Status: Final Type: Consensus Created: 2022-08-01 License: MIT @@ -15,6 +15,7 @@ +- [Terminology](#terminology) - [Abstract](#abstract) - [Motivation](#motivation) - [Specification](#specification) @@ -22,9 +23,15 @@ - [Maturity](#maturity) +## Terminology + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](#references). + ## Abstract -This document introduces a new type of sidechain that never ceases from processing transactions. The version for this type of sidechains is “v2”. +This document introduces a new type of sidechain that never ceases from processing cross-chain transactions. The version for this type of sidechains is “v2”. + +### Problem statement For sidechains v0 and v1, a `withdrawalEpochLength > 0` must be specified at the time of creation. This value determines the length of the epoch and when a submission window opens and closes for each epoch. @@ -38,9 +45,11 @@ If a sidechain doesn’t provide at least one certificate for an epoch, it is co ![A ceasable sidechain](ZenIP-42202/ZenIP-42202-1.png) +### Proposal + The proposal is to introduce sidechains v2 that are not required to submit certificates during a submission window and can continue to process transactions without the risk of ceasing. -This non-ceasing behavior is not enabled for all sidechains v2. It must be explicitly defined by setting the `withdrawalEpochLength` to “0”. +The non-ceasing behavior is optional for sidechains v2. It must be enabled by setting the `withdrawalEpochLength` to “0”. Sidechains v2 will have two different behaviors based on the creation parameters: @@ -52,64 +61,60 @@ Sidechains v2 will have two different behaviors based on the creation parameters The sidechain mechanism introduced in the Horizen blockchain with “Zendoo“ was designed and implemented for a fully decentralized scenario. -However, there are some use cases where sidechains are implemented in a semi-centralized environment with relaxed security constraints. +The ceasing mechanism introduced with “Zendoo” was conceived for a fully permissionless and decentralized scenario. With time we realized that the former was making it hard in a certain number of use cases to follow the rules. -In a fully decentralized sidechain, the `Mainchain Backward Transfer Request` (MBTR) guarantees the withdrawal of funds directly from mainchain in case the sidechain is compromised (but continues to publish certificates). Additionally, if the sidechain ceases, funds can be withdrawn with the `Ceased Sidechain Withdrawal` (CSW). In a semi-centralized sidechain, however, MBTR and CSW are not necessary. +There are cases in which is not economically efficient to send a certificate if there is no data to include, or cases in which the missed slot doesn't depend on the parties' will (i.e. a bug in a sidechain client). Moreover, it happens exactly the opposite when someone can benefit to send the certificate the soonest. -In semi-centralized environments, the actors running the sidechain can be trusted, and users can rely on the Backward Transfer mechanism triggered on the sidechain itself. Moreover, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: +That's why we are proposing to relax the security constraints. + +We still believe that for fully decentralized sidechains, the `Mainchain Backward Transfer Request` (MBTR) and the `Ceased Sidechain Withdrawal` (CSW) are valuable. MBTR guarantees the withdrawal of funds directly from mainchain in case the sidechain is compromised (but continues to publish certificates), while, if the sidechain ceases, funds can be withdrawn with CSW. Where the most valuable thing to preserve is not Zen, MBTR and CSW are less important (e.g. in a sidechain implementing a smart contracting platform, tokens or agreements won't be recoverable using those features). + +In sidechains where the assumption of keeping an honest majority is valid, users can rely on the Backward Transfer mechanism triggered on the sidechain itself. Moreover, having fixed certificate submission windows may lead to unwanted or unexpected ceasing due to a variety of reasons: - bugs in the software running the nodes - connectivity issues -- congestion of blocks (too many transactions and certificates for one single block) - The proposed changes can mitigate such risks without affecting the security of the sidechain. ## Specification -The creation of sidechains v2 is triggered by the consensus rules starting with the activation of the fork point #10. +The creation of sidechains v2 is triggered by the consensus rules starting with the activation of fork point #10. -Any attempt to create a sidechain v2 on mainnet before that height will be rejected. +Any attempt to create a sidechain v2 on mainnet before that height SHALL be rejected. -Sidechains v2 includes all the features in sidechains v1, and adds the possibility of enabling non-ceasing behavior by setting `withdrawalEpochLength = "0"`. +Sidechains v2 SHALL include all the features in sidechains v1. +A Sidechains v2 registered with `withdrawalEpochLength = "0"` MUST activate the optional non-ceasing behavior. +A Sidechains v2 registered with `withdrawalEpochLength <> "0"` MUST activate the traditional ceasing behavior as it is intended for sidechains v0 and v1. ![Non-ceasable sidechain](ZenIP-42202/ZenIP-42202-2.png) ### Constraints -Sidechains v2 will never cease when setting `withdrawalEpochLength` to “0” at creation time. They are not forced to publish certificates during fixed submission windows. They can publish a certificate whenever they want, with the two following constraints: - -- The `epoch` values of certificates must be consecutive (i.e. after a certificate of epoch N the sidechain must publish a certificate of epoch N + 1) +Sidechains v2 MUST never cease when setting `withdrawalEpochLength` to "0" at creation time. They are not forced to publish certificates during fixed submission windows. They have, though, some constraints: -- The `quality` mechanism is disabled, so it’s not possible to publish two or more certificates for the same epoch +- The `epoch` values of certificates MUST be consecutive (i.e. after a certificate of epoch N the following one MUST refer to epoch N + 1) -These non-ceasable sidechains must satisfy the following constraints: +- The `quality` mechanism is disabled, so SHALL NOT be possible to publish two or more certificates for the same epoch -- **Sidechain Creation** - - - `withdrawalEpochLength` must be set to 0. - This disables fixed-length epochs and submission windows. - - - `mainchainBackwardTransferRequestDataLength` must be set to 0. - This disables MBTR. - - - `wCeasedVk` must be empty. - This disables CSW. +These non-ceasable sidechains MUST satisfy the following constraints: +- **Sidechain Creation / Registration in the case of non-ceasible behavior** + + - A Sidechains v2 creation transaction with non-ceasible behavior MUST disable MBTR (by setting `mainchainBackwardTransferRequestDataLength` to 0. + - A Sidechains v2 creation transaction with non-ceasible behavior MUST disable CSW (by having `wCeasedVk` empty). + - **Certificates** - - If the mainchain first receives a certificate of epoch N (either in the mempool or in a block) and then receives another certificate in the same epoch N, the latter is rejected. - - - Any certificate of epoch N+1 must refer (through the `endEpochCumScTxCommTreeRoot` field) to a block that includes the certificate of epoch N in its *Sidechain Transactions Cumulative Commitment Tree*. So, for instance, if the mainchain receives a certificate for epoch N included in the mainchain block M, any certificate coming next must refer to a `endEpochCumScTxCommTreeRoot` (and thus to a block) with height equal or higher than M (M, M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a state of the mainchain that includes the previous certificate. The practical implications of this constraint are: - - It's not possible to have more than one certificate in a block or in the mempool for a given non-ceasable sidechain. - - Before starting the generation of the proof for a certificate of epoch N, the certificate of epoch N-1 must be already mined. + - If the mainchain first receives a certificate of epoch N (either in the mempool or in a block) and then receives another certificate in the same epoch N, the latter MUST be rejected. -When sidechains v2 are created with `withdrawalEpochLength` not set to 0, they will enable the default ceasing mechanism as it is intended for sidechains v1. + - Any certificate of epoch N+1 MUST refer (through the `endEpochCumScTxCommTreeRoot` field) to a block that includes the certificate of epoch N in its *Sidechain Transactions Cumulative Commitment Tree*. So, for instance, if the mainchain receives a certificate for epoch N included in the mainchain block M, any certificate coming next must refer to an `endEpochCumScTxCommTreeRoot` (and thus to a block) with height equal or higher than M (M, M + 1, M + 2, etc., are all good candidates). Such constraint enforces that a certificate of higher epoch refers to a state of the mainchain that includes the previous certificate. The practical implications of this constraint are: + - SHALL NOT be possible to have more than one certificate in a block or in the mempool for a given non-ceasable sidechain. + - The generation of the proof for a certificate of epoch N MUST wait for the certificate of epoch N-1 to be mined. ### Maturity -For sidechain v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. +For sidechains v0 and v1, Zendoo implements a maturity mechanism for the amount of coins transferred to and from any sidechain. This means that whenever transactions are created with a cross-chain output (sidechain creation, forward transfer, or mainchain backward transfer request), the coins and fees are transferred to the sidechain but the amount is not immediately added to its balance. The coins are marked as immature, and only after some block confirmations, are they included in the sidechain balance. The number of confirmations is set to `10` blocks for mainnet in the chain parameters. On the mainchain, whenever a transaction including a CSW or a certificate with BTs is received, the validation rules enforce that the total amount of coins transferred from sidechain to mainchain does not exceed the sidechain balance. If a sidechain tries to transfer more coins than its balance, the transaction is rejected. @@ -119,4 +124,11 @@ The concept of maturity also applies to backward transfers in a certificate. Dur If a sidechain ceases, any backward transfers in an immature certificate are reverted. Zendoo only considers backward transfers included in a top-quality certificate for epoch N mature at the end of the submission window for epoch N + 1 (once a new certificate is submitted during the submission window of epoch N + 1). -Since non-ceasable sidechains don’t support CSW, the concept of maturity is unnecessary. This means that every cross-chain output or backward transfer is immediately considered spendable and it is immediately added to or removed from the sidechain balance. \ No newline at end of file +Since non-ceasable sidechains don't support CSW, the concept of maturity is unnecessary: + +Every cross-chain output or backward transfer MUST be immediately spendable +Every cross-chain output or backward transfer MUST be immediately added to or removed from the sidechain's balance. + +## References + +[1] RFC2119 - Key words for use in RFCs to Indicate Requirement Levels https://tools.ietf.org/html/rfc2119