Skip to content
Mailing Lists/CIP-0068 - Bootstrap network with non-zero roundSource on lists.sync.global ↗

CIP-0068 - Bootstrap network with non-zero round

cip-discussCIP-00685 messagesstarted 10-07-2025
  1. #1Julien Tinguely10-07-2025source ↗
    Hi, we'd like to propose a CIP-0068 to enable network resets that maintain historical round progression. This will be achieved by allowing networks to be bootstrapped from a non-zero initial round.
     
    Please let us know if you have any questions.
     
     
    _________________________________________
     CIP: n/a
     Title: Bootstrap network with non-zero round
     Author: Julien Tinguely
     Comments-Summary: No comments yet
     Status: Draft
     Type: Standards Track
     Created: 2025-07-09
     Approved: ?
     License: CC0-1.0

    Abstract

    This CIP proposes to modify the network's bootstrapping process allowing SV nodes to start from a pre-configured non-zero round.
    Currently, on network resets, all SV nodes begin at round zero, which also means they revert to the initial coin issuance curve.
    Our goal is to enable network resets that maintain historical round progression, rather than resetting to zero.
    This approach aims to better align TestNet with MainNet's ongoing state.

    Specification

    Daml


    A new optional argument `initialRound` is added to the `DsoRules_Bootstrap` choice.
    When provided, this value is used as the initial round in the network so rather than creating round 0, 1 and 2 when initializing
    we create `initialRound`, `initialRound + 1`, `initialRound + 2`. The rounds are created with `issuingFor` set to the same time
    in the issuance curve that would be used if rounds advanced one by one starting from 0.

    SV Application

    The SV Application is modified so that it reads the new optional flag `SPLICE_APP_SV_INITIAL_ROUND` defaulted to 0.
    Each SV Application compares its value to its onboarding sponsor's value when joining after a reset.
    This ensures that a misconfiguration by either the sponsor or the joining node is caught.

    When initializing the network, this value is passed as an argument to the Daml choice `DsoRules_Bootstrap`.

    Motivations

    The main motivation for this change is to reset TestNet with an initial round close to the one running in MainNet for the future resets.
    MainNet continuously progresses through rounds and forcing TestNet to restart from round zero creates a significant gap, especially in the coin issuance.
    We want it to align with MainNet.

    Risks and mitigations

    All SVs must set the value and inconsistent configurations are caught so mistakes by any SV during the reset will be caught.

    There is no risk on MainNet as this code is only used on network initialization.

    Backwards compatibility

    If no `SPLICE_APP_SV_INITIAL_ROUND` is configured, the round is automatically set to 0.

    Reference implementation

    An early version of this implementation can be found in [splice - feature/bootstrap-with-non-zero-round](https://github.com/hyperledger-labs/splice/tree/feature/bootstrap-with-non-zero-round)

    Copyright

    This CIP is licensed under CC0-1.0: [Creative Commons CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/)
     
     
     
    Julien Tinguely
    Software Engineer
    Digital Asset, creators of Daml

    This message, and any attachments, is for the intended recipient(s) only, may contain information that is privileged, confidential and/or proprietary and subject to important terms and conditions available at http://www.digitalasset.com/emaildisclaimer.html. If you are not the intended recipient, please delete this message.
  2. #2Aman Goyal14-07-2025source ↗
    Hi Julien,

    Thank you for reaching out to Stas regarding the endorsement. Following our discussion, we are in agreement with this CIP and are happy to endorse it.

    Please consider this email as our official endorsement.

    Regards,
    Aman


    toggle quoted message Show quoted text


    On Thu, Jul 10, 2025 at 8:59 PM Julien Tinguely via lists.sync.global <julien.tinguely=digitalasset.com@...> wrote:
    Hi, we'd like to propose a CIP to enable network resets that maintain historical round progression. This will be achieved by allowing networks to be bootstrapped from a non-zero initial round.

    Please let us know if you have any questions.


    _________________________________________
     CIP: n/a
     Title: Bootstrap network with non-zero round
     Author: Julien Tinguely
     Comments-Summary: No comments yet
     Status: Draft
     Type: Standards Track
     Created: 2025-07-09
     Approved: ?
     License: CC0-1.0

    Abstract

    This CIP proposes to modify the network's bootstrapping process allowing SV nodes to start from a pre-configured non-zero round.
    Currently, on network resets, all SV nodes begin at round zero, which also means they revert to the initial coin issuance curve.
    Our goal is to enable network resets that maintain historical round progression, rather than resetting to zero.
    This approach aims to better align TestNet with MainNet's ongoing state.

    Specification

    Daml


    A new optional argument `initialRound` is added to the `DsoRules_Bootstrap` choice.
    When provided, this value is used as the initial round in the network so rather than creating round 0, 1 and 2 when initializing
    we create `initialRound`, `initialRound + 1`, `initialRound + 2`. The rounds are created with `issuingFor` set to the same time
    in the issuance curve that would be used if rounds advanced one by one starting from 0.

    SV Application

    The SV Application is modified so that it reads the new optional flag `SPLICE_APP_SV_INITIAL_ROUND` defaulted to 0.
    Each SV Application compares its value to its onboarding sponsor's value when joining after a reset.
    This ensures that a misconfiguration by either the sponsor or the joining node is caught.

    When initializing the network, this value is passed as an argument to the Daml choice `DsoRules_Bootstrap`.

    Motivations

    The main motivation for this change is to reset TestNet with an initial round close to the one running in MainNet for the future resets.
    MainNet continuously progresses through rounds and forcing TestNet to restart from round zero creates a significant gap, especially in the coin issuance.
    We want it to align with MainNet.

    Risks and mitigations

    All SVs must set the value and inconsistent configurations are caught so mistakes by any SV during the reset will be caught.

    There is no risk on MainNet as this code is only used on network initialization.

    Backwards compatibility

    If no `SPLICE_APP_SV_INITIAL_ROUND` is configured, the round is automatically set to 0.

    Reference implementation

    An early version of this implementation can be found in [splice - feature/bootstrap-with-non-zero-round](https://github.com/hyperledger-labs/splice/tree/feature/bootstrap-with-non-zero-round)

    Copyright

    This CIP is licensed under CC0-1.0: [Creative Commons CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/)



    Julien Tinguely
    Software Engineer
    Digital Asset, creators of Daml

    This message, and any attachments, is for the intended recipient(s) only, may contain information that is privileged, confidential and/or proprietary and subject to important terms and conditions available at http://www.digitalasset.com/emaildisclaimer.html. If you are not the intended recipient, please delete this message.

  3. #3Chris Zuehlke15-07-2025source ↗
    We are generally in favor of the change, but would like to better understand if this could ever happen in Mainnet and inadvertently change the round number.

    For instance, is this bootstrapping logic in the code path for an HDM?  If so, what controls are put in place to avoid inadvertent changes?

    Thanks
    Chris
  4. #4Julien Tinguely15-07-2025source ↗
    The proposed change resides in part of the code that is not involved with HDMs. On HDMs all contracts are preserved so the network resumes at the currently active rounds. This means the initial round can only be set on network resets, which is strictly limited to DevNet and TestNet.
     
    Thanks
    Julien
  5. #5Chris Zuehlke29-07-2025source ↗
    Yes, Cumberland is willing to endorse this CIP.
     
    Chris