From 23888dec7401474ab765de2222c04fcc0d826b36 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 5 May 2023 10:30:18 +0200 Subject: [PATCH 001/124] Add TIP-40 skeleton --- tips/TIP-0040/tip-0040.md | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tips/TIP-0040/tip-0040.md diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md new file mode 100644 index 000000000..6744d818e --- /dev/null +++ b/tips/TIP-0040/tip-0040.md @@ -0,0 +1,42 @@ +--- +tip: TODO +title: TODO +description: TODO +author: TODO +discussions-to: TODO +status: Draft +type: Standards +layer: Core +created: 2023-05-03 +requires: TIP-19, TIP-20, TIP-21 and TIP-22 +--- + +# Table of Contents + +1. [Summary](#summary) +2. [Motivation](#motivation) +3. [Building Blocks](#building-blocks) +4. [Copyright](#copyright) + +# Summary + +# Motivation + +# Building Blocks + +## Data Types & Subschema Notation + +Data types and subschemas used throughout this TIP are defined in [TIP-21](../TIP-0021/tip-0021.md). + +## Global Protocol Parameters + +Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA)](../TIP-0022/tip-0022.md) and [TIP-32 (Shimmer)](../TIP-0032/tip-0032.md). + +## Transaction Payload + +[TIP-20](../TIP-0020/tip-0020.md) is the basis for output validation in this TIP. + +# Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). + From db2fe0b202ebe0955bb9a3718347be7590937086 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 12 Jun 2023 12:49:09 +0200 Subject: [PATCH 002/124] Add Summary and Voting Power calculation --- tips/TIP-0040/tip-0040.md | 66 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 6744d818e..c855c4c2c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1,7 +1,7 @@ --- -tip: TODO -title: TODO -description: TODO +tip: 40 +title: Staking & Delegation +description: Staking, Delegation and Mana Rewards author: TODO discussions-to: TODO status: Draft @@ -16,12 +16,23 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 1. [Summary](#summary) 2. [Motivation](#motivation) 3. [Building Blocks](#building-blocks) -4. [Copyright](#copyright) +4. [Staking](#staking) +5. [Delegation](#delegation) +6. [Copyright](#copyright) # Summary +Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are rewarded. +Stakers lock IOTA tokens in order to become eligible to be selected into the validator committee. Delegators delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it voting weight from the locked tokens of the staker and the delegated tokens of all its delegators. +If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. +This results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while receiving rewards for their contribution. + +This TIP specifies the details of staking, delegation, committee selection, validation and Mana rewards. + # Motivation +TODO + # Building Blocks ## Data Types & Subschema Notation @@ -34,7 +45,52 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA ## Transaction Payload -[TIP-20](../TIP-0020/tip-0020.md) is the basis for output validation in this TIP. +[TIP-45](../TIP-0045/tip-0045.md) is the basis for output validation in this TIP. + +# Staking + +The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The following gives a high-level idea of the selection process, with the details specified in the rest of the section. + +Stakers, or interchangeably also called _registered validators_, get voting weight by locking IOTA tokens. By locking the tokens, the stakers prove control over them so the protocol assigns them a proportional amount of voting weight in exchange. Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase its voting weight further. A staker and all its delegators are called a staking or validator pool. Such a pool is eligible to be selected into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine the ledger state. + +The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch ends, the current activity of all registered validators as well as the pool's stake is determined. Through a selection procedure, a committee is selected out of all the registered pools who have a large enough voting power and enough block issuance activity. +Once selected, it is each pool's responsibility to issue _Validation Blocks_ across the epoch through which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the validator's pool receives. + +After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their IOTA tokens and claim their Mana rewards. + +## Registration + +Accounts are considered registered for validaton if they have a _Staking Feature_ in their _Features_. This feature and its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). + +## Voting Power + +TODO: Add updated timing figure from Draft TIP. + +_This figures details the timing around committee selection in epochs._ + +- For an Epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot`, the registered validators eligible to be selected into the committee are all account outputs satisfying all of the following conditions: + - The account has a _Staking Feature_ at the end of the slot with index `Epoch Start Slot - Epoch Setup Period`. + - The account's Staking Feature's `end_epoch` is greater or equal to `n`. + - The account issued at least one block whose `Account ID` field is equal to the `Account ID` of the account in question, and the block's slot index `block_slot_index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: + - `block_slot_index >= Epoch Start Slot - Epoch Setup Period - Activity Check Duration`. + - `block_slot_index <= Epoch Start Slot - Epoch Setup Period`. +- Any registered validator `i` satisfying the above condition has a voting power for Epoch `n` which is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Epoch Start Slot - Epoch Setup Period`, where: + - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. + +TODO: How exactly are we committing to the voting power? + +TODO: How/Where are we keeping track of the activity check data? + +## Committee Selection + +TODO: How do we go from the above list of registered validators with their corresponding voting power to the committee? + +# Delegation + +## Delegation Output + +TODO # Copyright From ad57f45433866a6e06c07e073b394d23cef6335f Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 12 Jun 2023 16:06:03 +0200 Subject: [PATCH 003/124] Update Committee Selection --- tips/TIP-0040/assets/selection-timing.png | Bin 0 -> 612544 bytes tips/TIP-0040/tip-0040.md | 30 +++++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) create mode 100755 tips/TIP-0040/assets/selection-timing.png diff --git a/tips/TIP-0040/assets/selection-timing.png b/tips/TIP-0040/assets/selection-timing.png new file mode 100755 index 0000000000000000000000000000000000000000..6c8f5d3510806155c30ea08628cc28908ab41fbe GIT binary patch literal 612544 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 literal 0 HcmV?d00001 diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index c855c4c2c..8459704af 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -62,25 +62,31 @@ After an epoch ends, the delegators of the pool can claim their rewards. The val Accounts are considered registered for validaton if they have a _Staking Feature_ in their _Features_. This feature and its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). -## Voting Power +## Committee Selection -TODO: Add updated timing figure from Draft TIP. +![](./assets/selection-timing.png) _This figures details the timing around committee selection in epochs._ -- For an Epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot`, the registered validators eligible to be selected into the committee are all account outputs satisfying all of the following conditions: - - The account has a _Staking Feature_ at the end of the slot with index `Epoch Start Slot - Epoch Setup Period`. +To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot`, the following steps must be taken. + +- The slot with index `Epoch Start Slot - MCA - Activity Window Duration - 1` is the registration slot `Slot Reg`. +- The slot with index `Epoch Start Slot - MCA - 1` is the activity window slot `Slot Act`. +- The set of _registered validators_ are all account outputs satisfying all of the following conditions: + - The account has a _Staking Feature_ at the end of the `Slot Reg`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. - - The account issued at least one block whose `Account ID` field is equal to the `Account ID` of the account in question, and the block's slot index `block_slot_index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: - - `block_slot_index >= Epoch Start Slot - Epoch Setup Period - Activity Check Duration`. - - `block_slot_index <= Epoch Start Slot - Epoch Setup Period`. -- Any registered validator `i` satisfying the above condition has a voting power for Epoch `n` which is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Epoch Start Slot - Epoch Setup Period`, where: +- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Slot Reg`, where: - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. - -TODO: How exactly are we committing to the voting power? - -TODO: How/Where are we keeping track of the activity check data? +- For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: + - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's slot index `block_slot_index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: + - `block_slot_index > Slot Reg`. + - `block_slot_index <= Slot Act`. +- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. + +**Open Questions** +- How exactly are we committing to the committee and its voting power? +- Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified on the protocol level or is this an implementation detail for the node software? ## Committee Selection From f13bf681e719193b190a2e2c52a628ee526d0ac2 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 12 Jun 2023 16:09:07 +0200 Subject: [PATCH 004/124] Expand MCA --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8459704af..c3b9f5841 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -70,8 +70,8 @@ _This figures details the timing around committee selection in epochs._ To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot`, the following steps must be taken. -- The slot with index `Epoch Start Slot - MCA - Activity Window Duration - 1` is the registration slot `Slot Reg`. -- The slot with index `Epoch Start Slot - MCA - 1` is the activity window slot `Slot Act`. +- The slot with index `Epoch Start Slot - Maximum Committable Age - Activity Window Duration - 1` is the registration slot `Slot Reg`. +- The slot with index `Epoch Start Slot - Maximum Committable Age - 1` is the activity window slot `Slot Act`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Slot Reg`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. From 7cffa95b47ddd648789c031486df29fef1db15f3 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 13 Jun 2023 12:35:58 +0200 Subject: [PATCH 005/124] Add Delegation Output --- tips/TIP-0040/tip-0040.md | 334 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 322 insertions(+), 12 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index c3b9f5841..dff49154a 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -68,35 +68,345 @@ Accounts are considered registered for validaton if they have a _Staking Feature _This figures details the timing around committee selection in epochs._ -To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot`, the following steps must be taken. +To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the following steps must be taken. -- The slot with index `Epoch Start Slot - Maximum Committable Age - Activity Window Duration - 1` is the registration slot `Slot Reg`. -- The slot with index `Epoch Start Slot - Maximum Committable Age - 1` is the activity window slot `Slot Act`. +- Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Maximum Committable Age - Activity Window Duration - 1`. +- Let `Activity Window Slot` be the last slot of the activity window with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - - The account has a _Staking Feature_ at the end of the `Slot Reg`. + - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Slot Reg`, where: +- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. - For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's slot index `block_slot_index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: - - `block_slot_index > Slot Reg`. - - `block_slot_index <= Slot Act`. + - `block_slot_index > Registration Slot(n)`. + - `block_slot_index <= Activity Window Slot`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. **Open Questions** - How exactly are we committing to the committee and its voting power? - Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified on the protocol level or is this an implementation detail for the node software? -## Committee Selection - -TODO: How do we go from the above list of registered validators with their corresponding voting power to the committee? - # Delegation +By delegating, a user adds voting weight in the form of IOTA tokens to a validator's voting power without having to become a validator themself. In order to delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. + ## Delegation Output -TODO +Delegation is implemented with a special output type, the so-called Delegation Output. + +Each Delegation output gets assigned a unique identifier `Delegation ID` upon creation by the protocol. `Delegation ID` is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. + + +
+ Delegation Output +
+ Describes a Delegation output, which delegates its contained IOTA tokens as voting power to a validator. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
Output Typeuint8 + Set to value 7 to denote a Delegation Output. +
Delegation IDByteArray[32]Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Amountuint64The amount of IOTA coins held by the output.
ValidatorByteArray[32]The Account ID of the validator to which this output is delegating.
Start Epochuint64The index of the first epoch for which this output delegates.
End Epochuint64The index of the last epoch for which this output delegates.
Delegated Amountuint64The amount of delegated IOTA coins.
Unlock Conditions Countuint8The number of unlock conditions following.
Unlock Conditions atMostOneOfEach +
+ Address Unlock Condition + + + + + + + + + + + + + + + +
NameTypeDescription
Unlock Condition Typeuint8 + Set to value 0 to denote an Address Unlock Condition. +
Address +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 0 to denote an Ed25519 Address. +
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Alias Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 8 to denote an Alias Address. +
Alias IDByteArray[32]The raw bytes of the Alias ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 16 to denote an NFT Address. +
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+
+
Immutable Features Countuint8The number of immutable features following. Immutable features are defined upon deployment of the UTXO state machine and are not allowed to change in any future state transition.
Immutable Features atMostOneOfEach +
+ Issuer Feature +
+ Identifies the validated issuer of the UTXO state machine. +
+ + + + + + + + + + + + + + + +
NameTypeDescription
Feature Typeuint8 + Set to value 1 to denote an Issuer Feature. +
Issuer oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 0 to denote an Ed25519 Address. +
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Alias Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 8 to denote an Alias Address. +
Alias IDByteArray[32]The raw bytes of the Alias ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
NameTypeDescription
Address Typeuint8 + Set to value 16 to denote an NFT Address. +
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+
+
+ + + +### Additional Transaction Syntactic Validation Rules + +#### Output Syntactic Validation + +- `Amount` field must fulfill the dust protection requirements and must not be `0`. +- `Amount` field must be ≤ `Max IOTA Supply`. +- It must hold true that `1` ≤ `Unlock Conditions Count` ≤ `1`. +- `Unlock Condition Type` of an Unlock Condition must define one of the following types: + - Address Unlock Condition +- Unlock Conditions must be sorted in ascending order based on their `Unlock Condition Type`. +- Syntactic validation of all present unlock conditions must pass. +- Address Unlock Condition must be present. +- It must hold true that `0` ≤ `Immutable Features Count` ≤ `1`. +- `Feature Type` of a Feature in `Immutable Features` must define one of the following types: + - Issuer Feature +- Features must be sorted in ascending order based on their `Feature Type` both in the `Immutable Features` + fields. +- Syntactic validation of all present features must pass. +- If `Delegation ID` is zeroed out, `Delegated Amount` must be `0`. +- If `Delegation ID` is not zeroed out, `Delegated Amount` must not be `0`. + +### Additional Transaction Semantic Validation Rules + +- Explicit `Delegation ID`: `Delegation ID` is taken as the value of the `Delegation ID` field in the NFT output. +- Implicit `Delegation ID`: When a Delegation output is consumed as an input in a transaction and `Delegation ID` field is zeroed out, take the BLAKE2b-256 hash of the `Output ID` of the input as `Delegation ID`. +- For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the input side. The + corresponding Delegation output has the explicit or implicit `Delegation ID` equal to that of the Delegation output on the output side. + +#### Consumed Outputs + +Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. + +- Delayed Claiming Transition + - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output side. + - The fields `Delegated Amount`, `Start Epoch` and `Validator` must not be changed. + - `End Epoch` on the output must be set as follows. + - Let `Output Transition Slot Index` be the slot index of the transaction in which the Delegation Output is transitioned. + - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). + - If `Output Transition Slot Index < Registration Slot(n+1)` then `End Epoch` must be set to the epoch index resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to `Output Transition Slot Index / Epoch Slot Duration + 1`. +- Destruction Transition + - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` as the Delegation Output on the input side. The next state is the empty state. + - During this transition, Mana rewards may be added to the total sum of mana on the input side of the transaction, according to [delegation rewards](#delegation-rewards). + +#### Created Outputs + +- When `Delegation ID` is zeroed out certain fields of the Delegation Output must be set as follows. + - Let `Output Creation Slot Index` be the slot index of the transaction in which the Delegation Output is created. + - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). + - If `Output Creation Slot Index < Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index resulting from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to `Output Creation Slot Index / Epoch Slot Duration + 2`. + - Set `Delegated Amount` to the value of the `Amount` field. + - Set `End Epoch` to `0`. + +# Mana Rewards + +## Staking Rewards + +## Delegation Rewards # Copyright From 0cca1077e58e05fc443dab010d52f3bcfe677189 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 13 Jun 2023 15:53:46 +0200 Subject: [PATCH 006/124] Update Timing figure --- tips/TIP-0040/assets/selection-timing.png | Bin 612544 -> 611263 bytes tips/TIP-0040/tip-0040.md | 19 +++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/tips/TIP-0040/assets/selection-timing.png b/tips/TIP-0040/assets/selection-timing.png index 6c8f5d3510806155c30ea08628cc28908ab41fbe..36f1fabd03ddc63ff6778ee56808e11effa1b5c6 100755 GIT binary patch delta 77435 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 CU#sG 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�?-oX_TW6e@Mwk5^gYxHpdR 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 diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index dff49154a..8b64cf2a2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -71,20 +71,23 @@ _This figures details the timing around committee selection in epochs._ To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the following steps must be taken. - Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Maximum Committable Age - Activity Window Duration - 1`. -- Let `Activity Window Slot` be the last slot of the activity window with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. +- Let `Activity Window Slot(n)` be the last slot of the activity window with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: - - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. - - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. - For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: - - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's slot index `block_slot_index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: - - `block_slot_index > Registration Slot(n)`. - - `block_slot_index <= Activity Window Slot`. + - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's slot index `Block Slot Index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: + - `Block Slot Index > Registration Slot(n)`. + - `Block Slot Index <= Activity Window Slot(n)`. +- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i`, where: + - `Stake_i` is the `Staked Amount` of IOTA tokens of the validator's _Staking Feature_ at the end of the slot with index `Registration Slot(n)`. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i` at the end of the slot with index `Activity Window Slot(n)`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. +Note: The order of these operations is deliberate. Filtering out all inactive registered validators before computing the delegated stake for each validator pool avoids unnecessary computations. + **Open Questions** + - How exactly are we committing to the committee and its voting power? - Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified on the protocol level or is this an implementation detail for the node software? @@ -380,7 +383,7 @@ Each Delegation output gets assigned a unique identifier `Delegation ID` upon cr #### Consumed Outputs -Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. +Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. From its initial state, a Delegation Output can either be destroyed or transitioned to a _Delayed Claiming_ state, from which it can then be destroyed. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. - Delayed Claiming Transition - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output side. From 91560050a2f1c0c858f99d7254c2c1bb6385b4b6 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 14 Jun 2023 14:14:08 +0200 Subject: [PATCH 007/124] Update Timing figure and voting power calc time --- tips/TIP-0040/assets/selection-timing.png | Bin 611263 -> 611349 bytes tips/TIP-0040/tip-0040.md | 10 ++++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/assets/selection-timing.png b/tips/TIP-0040/assets/selection-timing.png index 36f1fabd03ddc63ff6778ee56808e11effa1b5c6..03b15e52225d2709181720a84fec51499c84e234 100755 GIT binary patch delta 73452 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

- Issuer Feature -
- Identifies the validated issuer of the UTXO state machine. -
- - - - - - - - - - - - - - - -
NameTypeDescription
Feature Typeuint8 - Set to value 1 to denote an Issuer Feature. -
Issuer oneOf -
- Ed25519 Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 0 to denote an Ed25519 Address. -
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Alias Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 8 to denote an Alias Address. -
Alias IDByteArray[32]The raw bytes of the Alias ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 16 to denote an NFT Address. -
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
-
- - @@ -435,12 +334,6 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - Unlock Conditions must be sorted in ascending order based on their `Unlock Condition Type`. - Syntactic validation of all present unlock conditions must pass. - Address Unlock Condition must be present. -- It must hold true that `0` ≤ `Immutable Features Count` ≤ `1`. -- `Feature Type` of a Feature in `Immutable Features` must define one of the following types: - - Issuer Feature -- Features must be sorted in ascending order based on their `Feature Type` both in the `Immutable Features` - fields. -- Syntactic validation of all present features must pass. - `Validator ID` must not be zeroed out. ### Additional Transaction Semantic Validation Rules @@ -702,131 +595,6 @@ The following table shows the Delegation Output including the possible fields an - - Immutable Features Count - data - 1 - 1 - The number of immutable features following. Immutable features are defined upon deployment of the UTXO state machine and are not allowed to change in any future state transition. - - - Immutable Features atMostOneOfEach - -
- Issuer Feature -
- Identifies the validated issuer of the UTXO state machine. -
- - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Feature Typedata11 - Set to value 1 to denote an Issuer Feature. -
Issuer oneOf -
- Ed25519 Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 0 to denote an Ed25519 Address. -
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 8 to denote an Account Address. -
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 16 to denote an NFT Address. -
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
-
- - From 72813217795f5f14817b1a29437574df0aea298f Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 20 Jul 2023 15:55:34 +0200 Subject: [PATCH 035/124] Apply format --- tips/TIP-0040/tip-0040.md | 76 ++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 28 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 20cd73ed0..04d676872 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -637,20 +637,27 @@ Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be lat ### Performance Factor This performance factor for a slot is defined as follows. + #### Input values -- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in each slot on an epoch. + +- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in each slot on an + epoch. #### Calculations -- Then `Perfomance Factor` is given by the average number of blocks issued per slot, rounded down to the nearest integer. Additionally if validator did not issue any validation blocks in any slot, the performance factor for the whole epoch is set to 0 as a form of punishment. + +- Then `Perfomance Factor` is given by the average number of blocks issued per slot, rounded down to the nearest + integer. Additionally if validator did not issue any validation blocks in any slot, the performance factor for the + whole epoch is set to 0 as a form of punishment. Let `m` and `M` be the first and last slot of the epoch, respectively. + ``` Performance Factor = 0 sum = 0 for n = m, ..., M: if Validation Blocks Issued(n) == 0: Performance Factor = 0 - break + break sum += Validation Blocks Issued(n) end Performance Factor = floor(sum / (M - m + 1)) @@ -687,15 +694,19 @@ values being a list of objects consisting of these fields: ### Profit Margins + #### Input values -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA - tokens in the selected committee. + +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens + in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. #### Parameters + - Let ProfitMarginExponent be 8. #### Calculations + `Profit Margin = (Total Validator Stake< 9460800`. + +- `Initial Reward` = 233373068869021000 // TODO update with the correct value for epoch // TODO do we still need two + different init reward values depending on the slot/epoch index if we do not decay per slot? Like it was below: // + `233373068869021000 * decay(n)` if `n <= 9460800`. // `85853149583786000` if `n > 9460800`. - `Accuracy Reward Exponent` = 31 // TODO explain why did we choose those values - `Another Exponent` = 40 + #### Input values + - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. -- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined - at the time of the pool stake calculation, i.e. the end of the registration slot. -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA - tokens in the selected committee. +- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at + the time of the pool stake calculation, i.e. the end of the registration slot. +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens + in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. #### Calculations -- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: + +- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - Calculate `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) - Calculate the `Profit Margin` for the whole epoch according to [Profit Margin](#profit-margins)`. - - Let `Aux` be `((Pool Stake << Accuracy Reward Exponent)/Total Stake) + (Validator Stake(i) << Accuracy Reward Exponent) / Total Validator Stake` + - Let `Aux` be + `((Pool Stake << Accuracy Reward Exponent)/Total Stake) + (Validator Stake(i) << Accuracy Reward Exponent) / Total Validator Stake` - TODO: Is there a better name for this value? - Let `Aux2` be `Aux * Initial Reward * Performance Factor`, which is smaller than `2^(104)`. - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I guess it's important to communicate that the value is `< 2^104`? - Let `Pool Reward` be `(Aux2 >> Another Exponent) - Fixed Cost`, which is smaller than `2^(64)`. - // TODO the following is no longer needed, maybe we still need to scale down with some shift operation of 32? + - To combine the `Slot Pool Rewards(n)` for each slot index `n` in the epoch into an epoch's `Pool Rewards`: - Otherwise: - Let `Pool Rewards` be defined by the following decaying algorithm: @@ -776,15 +792,18 @@ transaction validation rules for removing the feature are defined in TIP-42. Upo that can be claimed is defined as follows. #### Parameters + `ProfitMarginExponent` = 8 #### Input Values + - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. #### Calulations + - Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking @@ -792,10 +811,9 @@ that can be claimed is defined as follows. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. -- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: -`Profit Margin Complement` = (2 << ProfitMarginExponent) - Profit Margin(n) -`Undecayed Rewards(n)` = - `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent) + ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. +- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Profit Margin Complement` = + (2 << ProfitMarginExponent) - Profit Margin(n) `Undecayed Rewards(n)` = + `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent) + ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. - Decay rewards according to [Mana Decay](//TODO mana decay calulations) - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. @@ -806,10 +824,13 @@ conditions for claiming rewards apply. An output destroyed in _Delegating State_ for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. + #### Parameters -`ProfitMarginExponent` = 8 -`DecayExponent` = 32 + +`ProfitMarginExponent` = 8 `DecayExponent` = 32 + #### Input Values + - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. @@ -830,12 +851,11 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: -`Undecayed Rewards(n)` = - `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. -- Decay rewards according to [Mana Decay](//TODO mana decay calulations) -// TODO define 8640 as paramete -`Rewards (n)` = `(Undecayed Rewards(n) * decay(d * 8640)) >> DecayExponent`, where `d = Future Bounded Epoch Index - n`. +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Undecayed Rewards(n)` = +`(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. + +- Decay rewards according to [Mana Decay](//TODO mana decay calulations) // TODO define 8640 as paramete `Rewards (n)` = + `(Undecayed Rewards(n) * decay(d * 8640)) >> DecayExponent`, where `d = Future Bounded Epoch Index - n`. # Rationale & Design From 54204be83a7339cec6bd17aae7a233f9e18be3b1 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 23 Jul 2023 19:20:25 +0100 Subject: [PATCH 036/124] Update rewards calculations --- tips/TIP-0040/tip-0040.md | 172 ++++++++++++++++++++------------------ 1 file changed, 89 insertions(+), 83 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 04d676872..7589c2466 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -79,7 +79,7 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA ## Common Parameters and Functions -- Let `decay(n)` be calculated with the algorithm and lookup table in [TIP-39](../TIP-0039/tip-0039.md). +- Let `decay(value, n)` be calculated with the algorithm and lookup table in [TIP-39](../TIP-0039/tip-0039.md). # Staking @@ -626,7 +626,7 @@ fields: Performance Factor uint8 - The performance factor of the validator. + The slot performance factor of the validator, scaled to TargetValidationBlocks. @@ -640,13 +640,35 @@ This performance factor for a slot is defined as follows. #### Input values -- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in each slot on an - epoch. +- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. +- Let `TargetValidationBlocks` be a protocol parameter, representing the number of validation blocks a validator is supposed to issue per slot. + +#### Calculations + +- Then `Slot Perfomance Factor` is given by the number of blocks issued in the slot. +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into `Epoch Perfomance Factors`. + +==TO DO: decide with daria between the alg above or the one below== +==To do: check if a round number belongs to the slot i or i+1== +==To do: check if it's better to set the PF to TargetValidationBlocks+1 or to null or something like that== + +- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of legth `subslotLenght = slotDuration/TargetValidationBlocks` given by `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. +- Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be the `Slot Perfomance Factor`. +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into `Epoch Perfomance Factors`. + + +## Epoch Level + +### Epoch performance factor + +#### Input values + +- Let `Slot Performance Factor Array` be the array of _Slot Perfomance Factors_ of a given validator in each slot on an epoch. #### Calculations -- Then `Perfomance Factor` is given by the average number of blocks issued per slot, rounded down to the nearest - integer. Additionally if validator did not issue any validation blocks in any slot, the performance factor for the +- Then `Perfomance Factor` is given by the average between these values, rounded down to the nearest + integer. Additionally if validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance factor for the whole epoch is set to 0 as a form of punishment. Let `m` and `M` be the first and last slot of the epoch, respectively. @@ -655,43 +677,14 @@ Let `m` and `M` be the first and last slot of the epoch, respectively. Performance Factor = 0 sum = 0 for n = m, ..., M: - if Validation Blocks Issued(n) == 0: + if Slot Performance Factor Array(n) > TargetValidationBlocks: Performance Factor = 0 break sum += Validation Blocks Issued(n) end - Performance Factor = floor(sum / (M - m + 1)) + Performance Factor = sum >> slotsPerEpochExponent ``` - -## Epoch Level - -### Epoch Rewards - -The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the -values being a list of objects consisting of these fields: - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stakeuint64The total amount of IOTA tokens staked by the validator and all its delegators.
Pool RewardsTODO: Decide on data type. uint32The total amount of rewards the validator pool received, without the fixed cost of the validator.
+Note that the value of `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. ### Profit Margins @@ -703,10 +696,10 @@ values being a list of objects consisting of these fields: #### Parameters -- Let ProfitMarginExponent be 8. +- Let `ProfitMarginExponent` be 8. #### Calculations - +==to do (optional): try to come up with some magic so we don't have the integer division== `Profit Margin = (Total Validator Stake<Profit Margin uint8 - An integer representing the epoch profit margin. + An integer representing the epoch profit margin, scaled to `2^ProfitMarginExponent`. -### Slot-Epoch Conversion + +### Epoch Rewards + +The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the +values being a list of objects consisting of these fields: + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stakeuint64The total amount of IOTA tokens staked by the validator and all its delegators.
Pool Rewardsuint64The total amount of rewards the validator pool received, without the fixed cost of the validator.
+ +In the next section, we define how these values can be obtained from the slot-level data, after commitment of the last slot of that epoch. + +### Slot-Epoch Conversion of the Rewards The following section specifies how to convert the slot-level data into epoch-level data. #### Parameters needed for calculations: -- `Initial Reward` = 233373068869021000 // TODO update with the correct value for epoch // TODO do we still need two - different init reward values depending on the slot/epoch index if we do not decay per slot? Like it was below: // - `233373068869021000 * decay(n)` if `n <= 9460800`. // `85853149583786000` if `n > 9460800`. - -- `Accuracy Reward Exponent` = 31 // TODO explain why did we choose those values -- `Another Exponent` = 40 +- `Initial Reward` = 1424540707677 (parameter to calculate the reward per epoch in the bootstrapping phase) +- `Final Reward` = 524006067871 (constant reward per epoch after the bootstrapping phase) +- `Bootstrapping Duration` = 1154 (approximately 3 years) +- `Pool Coefficient Exponent` = 31 // TODO explain why did we choose those values #### Input values @@ -759,31 +781,14 @@ The following section specifies how to convert the slot-level data into epoch-le #### Calculations - The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - - Calculate `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) - - Calculate the `Profit Margin` for the whole epoch according to [Profit Margin](#profit-margins)`. - - Let `Aux` be - `((Pool Stake << Accuracy Reward Exponent)/Total Stake) + (Validator Stake(i) << Accuracy Reward Exponent) / Total Validator Stake` - - TODO: Is there a better name for this value? - - Let `Aux2` be `Aux * Initial Reward * Performance Factor`, which is smaller than `2^(104)`. - - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I - guess it's important to communicate that the value is `< 2^104`? - - Let `Pool Reward` be `(Aux2 >> Another Exponent) - Fixed Cost`, which is smaller than `2^(64)`. - -// TODO the following is no longer needed, maybe we still need to scale down with some shift operation of 32? - -- To combine the `Slot Pool Rewards(n)` for each slot index `n` in the epoch into an epoch's `Pool Rewards`: - - Otherwise: - - Let `Pool Rewards` be defined by the following decaying algorithm: - - Let `m` and `M` be the first and last slot of the epoch, respectively. - - TODO: I think we have to state this in non-pseudocode as the semantics are not 100% clearly defined. - ``` - Pool Rewards = 0 - for n = m, ..., M-1: - Pool Rewards = Pool Rewards + Slot Pool Rewards(n) - Pool Rewards = Pool Rewards * 4294966388 - Pool Rewards = Pool Rewards >> 32 - Pool Rewards = Pool Rewards + Slot Pool Rewards(M) - ``` + - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. + - `Final Reward` if `n > Bootstrapping Duration`. +- The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: + - Let `Pool Coefficient` be + `((Pool Stake << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. Notice that, since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most `Pool Coefficient Exponent + 1` bits. + - Take the `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) + - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Performance Factor`. Since `Pool Coefficient` uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. + - Let `Pool Reward` be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1)) - Fixed Cost`. If this value is smaller than zero, no reward is stored for this epoch (notice that if this value is equal to zero, a pool reward of zero would be stored in the epoch, meaning that delegators would not receive rewards, but the validator would receive `Fixed Cost`). ## Validator Rewards @@ -802,7 +807,7 @@ that can be claimed is defined as follows. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. -#### Calulations +#### Calculations - Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. @@ -811,11 +816,14 @@ that can be claimed is defined as follows. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. -- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Profit Margin Complement` = - (2 << ProfitMarginExponent) - Profit Margin(n) `Undecayed Rewards(n)` = - `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent) + ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. - - Decay rewards according to [Mana Decay](//TODO mana decay calulations) - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. +- Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` + - `Residual Validator Factor = ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). +- Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. + ## Delegation Rewards @@ -852,10 +860,8 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Undecayed Rewards(n)` = -`(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. - -- Decay rewards according to [Mana Decay](//TODO mana decay calulations) // TODO define 8640 as paramete `Rewards (n)` = - `(Undecayed Rewards(n) * decay(d * 8640)) >> DecayExponent`, where `d = Future Bounded Epoch Index - n`. +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). +Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. # Rationale & Design From 843618978a580c4883239a326e6e0a28442e8bdf Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Mon, 24 Jul 2023 20:57:23 +0100 Subject: [PATCH 037/124] parametrisation of the rewards --- tips/TIP-0040/tip-0040.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7589c2466..b456b255c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -755,7 +755,7 @@ values being a list of objects consisting of these fields: -In the next section, we define how these values can be obtained from the slot-level data, after commitment of the last slot of that epoch. +In the next section, we define how these values can be obtained from the slot-level data, after the commitment of the last slot of that epoch. ### Slot-Epoch Conversion of the Rewards @@ -763,9 +763,13 @@ The following section specifies how to convert the slot-level data into epoch-le #### Parameters needed for calculations: -- `Initial Reward` = 1424540707677 (parameter to calculate the reward per epoch in the bootstrapping phase) -- `Final Reward` = 524006067871 (constant reward per epoch after the bootstrapping phase) - `Bootstrapping Duration` = 1154 (approximately 3 years) +- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with $\theta = 2/3$) +- `Final Reward` = `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent) ` (constant reward per epoch after the bootstrapping phase) +- `Decay Balancing Constant Coefficient` = ==TO DO: choose a value, this is arbitrary, just make sure it does not overflow== +- `Decay Balancing Constant = ` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). ==TO DO: discuss about approximating this to e== +- `Initial Reward` = `Final Reward * Decay Balancing Constant >> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) + - `Pool Coefficient Exponent` = 31 // TODO explain why did we choose those values #### Input values From 8b09456a6e772f9790e369362b4796e93fe4f33a Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 27 Jul 2023 10:28:29 +0100 Subject: [PATCH 038/124] add a to do --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index b456b255c..73b29faab 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -783,7 +783,7 @@ The following section specifies how to convert the slot-level data into epoch-le - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. #### Calculations - +==to do: re check if this works for any number of bits== - The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. - `Final Reward` if `n > Bootstrapping Duration`. From b9c522c427971a5d0373827ccf27262274b16916 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 2 Aug 2023 09:41:32 +0200 Subject: [PATCH 039/124] Fix typo Co-authored-by: Alexandcoats --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 73b29faab..3f738abff 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -910,7 +910,7 @@ delegation. #### Start and End Epoch -This figure showcases how epochs are set when createing and transitioning Delegation Outputs. Note that the length of +This figure showcases how epochs are set when creating and transitioning Delegation Outputs. Note that the length of epochs in slots is not accurately depicted here. What matters for epoch setting is 1) what the current epoch is and 2) whether the creation or transition happens before or after the registration slot for the following epoch. From 135174ec24115a6e1faae7531c512f9a43d22af4 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 2 Aug 2023 09:41:53 +0200 Subject: [PATCH 040/124] Fix typo Co-authored-by: Alexandcoats --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 3f738abff..0ee8e7937 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -117,7 +117,7 @@ its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042. ![](./assets/selection-timing.png) -_This figures gives an overview of the timing around committee selection in epochs. Note that the exact length of those +_This figure gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and instead depends on the value of the corresponding Protocol Parameters._ To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the From bf40255d0a2273d9d6e9e1be2c47001ba1cd1b49 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 15 Aug 2023 11:12:54 +0200 Subject: [PATCH 041/124] Add offset to delegatin output storage calculation --- tips/TIP-0040/tip-0040.md | 661 +++++++++++++------------------------- 1 file changed, 225 insertions(+), 436 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 0ee8e7937..d761a3917 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -418,455 +418,244 @@ The following table shows the Delegation Output including the possible fields an - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + - - + +
FieldField typeLength MinimumLength MaximumDescription
Output Typedelegation11Offset - Set to value 7 to denote a Delegation Output. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldField typeLength MinimumLength MaximumDescription
OutputIDkey3434The ID of the output.
Block ID (included)data4040The ID of the block in which the transaction payload that created this output was included.
Slot Bookeddata88The index of the slot in which the transaction that created it was booked.
Slot Createddata88The index of the slot in which the transaction was created.
Amountdelegation88The amount of IOTA coins held by the output.
Delegated Amountdelegation88The amount of delegated IOTA coins.
Delegation IDdelegation3232Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDdelegation3232The Account ID of the validator to which this output is delegating.
Start Epochdelegation88The index of the first epoch for which this output delegates.
End Epochdelegation88The index of the last epoch for which this output delegates.Fields + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldField typeLength MinimumLength MaximumDescription
Output Typedelegation11 + Set to value 7 to denote a Delegation Output. +
Amountdelegation88The amount of IOTA coins held by the output.
Delegated Amountdelegation88The amount of delegated IOTA coins.
Delegation IDdelegation3232Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDdelegation3232The Account ID of the validator to which this output is delegating.
Start Epochdelegation88The index of the first epoch for which this output delegates.
End Epochdelegation88The index of the last epoch for which this output delegates.
Unlock Conditions Countdata11The number of unlock conditions following.
Unlock Conditions atMostOneOfEach +
+ Address Unlock Condition + + + + + + + + + + + + + + + + + +
NameTypeDescription
Unlock Condition Typedata11 + Set to value 0 to denote an Address Unlock Condition. +
Address +
+ Ed25519 Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 0 to denote an Ed25519 Address. +
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 8 to denote an Account Address. +
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 16 to denote an NFT Address. +
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+
+
+
Unlock Conditions Countdata11The number of unlock conditions following.v_byte Minimum (TODO: Recalculate)0
Unlock Conditions atMostOneOfEach -
- Address Unlock Condition - - - - - - - - - - - - - - - - - -
NameTypeDescription
Unlock Condition Typedata11 - Set to value 0 to denote an Address Unlock Condition. -
Address -
- Ed25519 Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 0 to denote an Ed25519 Address. -
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 8 to denote an Account Address. -
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 16 to denote an NFT Address. -
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
-
-
v_byte Maximum (TODO: Recalculate)0
-# Mana Rewards - -Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot -level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when -the epoch ends, that is, when its last slot is committed. - -## Slot Level - -For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this -results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map -with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these -fields: - - - - - - - - - - - - - - - - - -
NameTypeDescription
Slot Indexuint64The slot index for which the performance factor is tracked.
Performance Factoruint8The slot performance factor of the validator, scaled to TargetValidationBlocks.
- -TODO: Do we have to state the following or can we just include it in the calculations? - -Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. - -### Performance Factor - -This performance factor for a slot is defined as follows. - -#### Input values - -- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. -- Let `TargetValidationBlocks` be a protocol parameter, representing the number of validation blocks a validator is supposed to issue per slot. - -#### Calculations - -- Then `Slot Perfomance Factor` is given by the number of blocks issued in the slot. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into `Epoch Perfomance Factors`. - -==TO DO: decide with daria between the alg above or the one below== -==To do: check if a round number belongs to the slot i or i+1== -==To do: check if it's better to set the PF to TargetValidationBlocks+1 or to null or something like that== - -- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of legth `subslotLenght = slotDuration/TargetValidationBlocks` given by `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. -- Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be the `Slot Perfomance Factor`. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into `Epoch Perfomance Factors`. - - -## Epoch Level - -### Epoch performance factor - -#### Input values - -- Let `Slot Performance Factor Array` be the array of _Slot Perfomance Factors_ of a given validator in each slot on an epoch. - -#### Calculations - -- Then `Perfomance Factor` is given by the average between these values, rounded down to the nearest - integer. Additionally if validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance factor for the - whole epoch is set to 0 as a form of punishment. - -Let `m` and `M` be the first and last slot of the epoch, respectively. - -``` - Performance Factor = 0 - sum = 0 - for n = m, ..., M: - if Slot Performance Factor Array(n) > TargetValidationBlocks: - Performance Factor = 0 - break - sum += Validation Blocks Issued(n) - end - Performance Factor = sum >> slotsPerEpochExponent -``` -Note that the value of `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. - -### Profit Margins - -#### Input values - -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens - in the selected committee. -- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. - -#### Parameters - -- Let `ProfitMarginExponent` be 8. - -#### Calculations -==to do (optional): try to come up with some magic so we don't have the integer division== -`Profit Margin = (Total Validator Stake< - - Name - Type - Description - - - Epoch Index - uint64 - - The epoch index for which the profit margin is tracked. - - - - Profit Margin - uint8 - - An integer representing the epoch profit margin, scaled to `2^ProfitMarginExponent`. - - - - - -### Epoch Rewards - -The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the -values being a list of objects consisting of these fields: - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stakeuint64The total amount of IOTA tokens staked by the validator and all its delegators.
Pool Rewardsuint64The total amount of rewards the validator pool received, without the fixed cost of the validator.
- -In the next section, we define how these values can be obtained from the slot-level data, after the commitment of the last slot of that epoch. - -### Slot-Epoch Conversion of the Rewards - -The following section specifies how to convert the slot-level data into epoch-level data. - -#### Parameters needed for calculations: - -- `Bootstrapping Duration` = 1154 (approximately 3 years) -- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with $\theta = 2/3$) -- `Final Reward` = `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent) ` (constant reward per epoch after the bootstrapping phase) -- `Decay Balancing Constant Coefficient` = ==TO DO: choose a value, this is arbitrary, just make sure it does not overflow== -- `Decay Balancing Constant = ` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). ==TO DO: discuss about approximating this to e== -- `Initial Reward` = `Final Reward * Decay Balancing Constant >> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) - -- `Pool Coefficient Exponent` = 31 // TODO explain why did we choose those values - -#### Input values - -- Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the - `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. -- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at - the time of the pool stake calculation, i.e. the end of the registration slot. -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens - in the selected committee. -- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. - -#### Calculations -==to do: re check if this works for any number of bits== -- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. - - `Final Reward` if `n > Bootstrapping Duration`. -- The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: - - Let `Pool Coefficient` be - `((Pool Stake << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. Notice that, since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most `Pool Coefficient Exponent + 1` bits. - - Take the `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) - - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Performance Factor`. Since `Pool Coefficient` uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - - Let `Pool Reward` be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1)) - Fixed Cost`. If this value is smaller than zero, no reward is stored for this epoch (notice that if this value is equal to zero, a pool reward of zero would be stored in the epoch, meaning that delegators would not receive rewards, but the validator would receive `Fixed Cost`). - -## Validator Rewards - -An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The -transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards -that can be claimed is defined as follows. - -#### Parameters - -`ProfitMarginExponent` = 8 - -#### Input Values - -- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. -- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. - -#### Calculations - -- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the - slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking - Feature_ on the input or output side. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that - removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and - `Epoch Index < Future Bounded Epoch Index`. -- Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` - - `Residual Validator Factor = ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). -- Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. - - -## Delegation Rewards - -To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different -conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards -for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They -are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for -that epoch. - -#### Parameters - -`ProfitMarginExponent` = 8 `DecayExponent` = 32 - -#### Input Values - -- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. -- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - -#### Calculations - -The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. - -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field - in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, - where: - - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`, where: - - `Future Bounded Epoch Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the - slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation - Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. - - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous - epoch became available, thus forfeiting the potential rewards of that previous epoch. - - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. - -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Undecayed Rewards(n)` = -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). -Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. - # Rationale & Design This section describes the rationale behind some of the design choices and explains how the introduced concepts fit From 2d913ffafb6a9dbe7e63e6b3bc8169899b117861 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 18 Aug 2023 10:04:46 +0200 Subject: [PATCH 042/124] Readd Mana Rewards The section was deleted by accident in a previous commit. --- tips/TIP-0040/tip-0040.md | 306 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 306 insertions(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index d761a3917..e01843292 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -656,6 +656,312 @@ The following table shows the Delegation Output including the possible fields an +# Mana Rewards + +Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot +level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when +the epoch ends, that is, when its last slot is committed. + +## Slot Level + +For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this +results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map +with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these +fields: + + + + + + + + + + + + + + + + + +
NameTypeDescription
Slot Indexuint64The slot index for which the performance factor is tracked.
Performance Factoruint8The slot performance factor of the validator, scaled to TargetValidationBlocks.
+ +TODO: Do we have to state the following or can we just include it in the calculations? + +Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. + +### Performance Factor + +This performance factor for a slot is defined as follows. + +#### Input values + +- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. +- Let `TargetValidationBlocks` be a protocol parameter, representing the number of validation blocks a validator is + supposed to issue per slot. + +#### Calculations + +- Then `Slot Perfomance Factor` is given by the number of blocks issued in the slot. +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, + set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation + blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into + `Epoch Perfomance Factors`. + +==TO DO: decide with daria between the alg above or the one below== ==To do: check if a round number belongs to the slot +i or i+1== ==To do: check if it's better to set the PF to TargetValidationBlocks+1 or to null or something like that== + +- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of legth + `subslotLenght = slotDuration/TargetValidationBlocks` given by + `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. +- Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be + the `Slot Perfomance Factor`. +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, + set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation + blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into + `Epoch Perfomance Factors`. + +## Epoch Level + +### Epoch performance factor + +#### Input values + +- Let `Slot Performance Factor Array` be the array of _Slot Perfomance Factors_ of a given validator in each slot on an + epoch. + +#### Calculations + +- Then `Perfomance Factor` is given by the average between these values, rounded down to the nearest integer. + Additionally if validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance + factor for the whole epoch is set to 0 as a form of punishment. + +Let `m` and `M` be the first and last slot of the epoch, respectively. + +``` + Performance Factor = 0 + sum = 0 + for n = m, ..., M: + if Slot Performance Factor Array(n) > TargetValidationBlocks: + Performance Factor = 0 + break + sum += Validation Blocks Issued(n) + end + Performance Factor = sum >> slotsPerEpochExponent +``` + +Note that the value of `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. + +### Profit Margins + +#### Input values + +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens + in the selected committee. +- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. + +#### Parameters + +- Let `ProfitMarginExponent` be 8. + +#### Calculations + +==to do (optional): try to come up with some magic so we don't have the integer division== +`Profit Margin = (Total Validator Stake< + + Name + Type + Description + + + Epoch Index + uint64 + + The epoch index for which the profit margin is tracked. + + + + Profit Margin + uint8 + + An integer representing the epoch profit margin, scaled to `2^ProfitMarginExponent`. + + + + +### Epoch Rewards + +The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the +values being a list of objects consisting of these fields: + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stakeuint64The total amount of IOTA tokens staked by the validator and all its delegators.
Pool Rewardsuint64The total amount of rewards the validator pool received, without the fixed cost of the validator.
+ +In the next section, we define how these values can be obtained from the slot-level data, after the commitment of the +last slot of that epoch. + +### Slot-Epoch Conversion of the Rewards + +The following section specifies how to convert the slot-level data into epoch-level data. + +#### Parameters needed for calculations: + +- `Bootstrapping Duration` = 1154 (approximately 3 years) +- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with + $\theta = 2/3$) +- `Final Reward` = + `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent) ` + (constant reward per epoch after the bootstrapping phase) +- `Decay Balancing Constant Coefficient` = ==TO DO: choose a value, this is arbitrary, just make sure it does not + overflow== +- `Decay Balancing Constant = ` (integer approximation of + $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch + duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). ==TO DO: discuss about approximating this to e== +- `Initial Reward` = `Final Reward * Decay Balancing Constant >> Decay Balancing Constant Coefficient` (parameter to + calculate the reward per epoch in the bootstrapping phase) + +- `Pool Coefficient Exponent` = 31 // TODO explain why did we choose those values + +#### Input values + +- Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the + `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. +- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at + the time of the pool stake calculation, i.e. the end of the registration slot. +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens + in the selected committee. +- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. + +#### Calculations + +==to do: re check if this works for any number of bits== + +- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: + - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. + - `Final Reward` if `n > Bootstrapping Duration`. +- The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: + - Let `Pool Coefficient` be + `((Pool Stake << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. + Notice that, since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow + the calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most + `Pool Coefficient Exponent + 1` bits. + - Take the `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) + - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Performance Factor`. Since `Pool Coefficient` + uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this + multiplication will not overflow using uint64 variables. + - Let `Pool Reward` be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1)) - Fixed Cost`. + If this value is smaller than zero, no reward is stored for this epoch (notice that if this value is equal to zero, + a pool reward of zero would be stored in the epoch, meaning that delegators would not receive rewards, but the + validator would receive `Fixed Cost`). + +## Validator Rewards + +An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The +transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards +that can be claimed is defined as follows. + +#### Parameters + +`ProfitMarginExponent` = 8 + +#### Input Values + +- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. +- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. + +#### Calculations + +- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking + Feature_ on the input or output side. +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that + removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and + `Epoch Index < Future Bounded Epoch Index`. +- Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` + - `Residual Validator Factor = ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. + Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 + bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 + bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be + used). +- Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where + the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator + `i` will be, then, the sum of `Rewards(n)` for n in the validation period. + +## Delegation Rewards + +To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different +conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards +for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They +are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for +that epoch. + +#### Parameters + +`ProfitMarginExponent` = 8 `DecayExponent` = 32 + +#### Input Values + +- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. +- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. + +#### Calculations + +The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. + +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field + in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, + where: + - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`, where: + - `Future Bounded Epoch Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation + Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. + - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous + epoch became available, thus forfeiting the potential rewards of that previous epoch. + - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. + +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Undecayed Rewards(n)` = +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and +`Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it +should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). Then, we decay the +rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` +is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for +n in the validation period. + # Rationale & Design This section describes the rationale behind some of the design choices and explains how the introduced concepts fit From a7f02120aa53e0b40bdc72f6da5fcc361a405a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Thu, 31 Aug 2023 16:07:35 +0200 Subject: [PATCH 043/124] Calculation fixes --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index e01843292..ff9452ece 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -842,10 +842,10 @@ The following section specifies how to convert the slot-level data into epoch-le - `Decay Balancing Constant = ` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). ==TO DO: discuss about approximating this to e== -- `Initial Reward` = `Final Reward * Decay Balancing Constant >> Decay Balancing Constant Coefficient` (parameter to +- `Initial Reward` = `(Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) -- `Pool Coefficient Exponent` = 31 // TODO explain why did we choose those values +- `Pool Coefficient Exponent` = 11 #### Input values From eaab6b80d351a1a7e870db46db3decb5eb2280a1 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 10 Sep 2023 20:37:33 +0100 Subject: [PATCH 044/124] minor things --- tips/TIP-0040/tip-0040.md | 93 ++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 54 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index ff9452ece..eea9516f4 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -30,34 +30,34 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 # Summary Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are -rewarded. Stakers lock IOTA tokens in order to become eligible to be selected into the validator committee. Delegators -delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it total stake +rewarded. Stakers lock IOTA tokens in order to become eligible to be selected for the validator committee. Delegators +delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives its total stake from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool performs -its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly proportional to +its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while receiving rewards for their contribution. -This TIP specifies the details of staking, delegation, committee selection and Mana rewards. +This TIP specifies the details of staking, delegation, committee selection, and Mana rewards. # Motivation In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions are confirmed. The Coordinator was always intended as a temporary solution and is removed with the upgrade to IOTA 2.0 (a.k.a. _Coordicide_). In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and -finalize transactions. Each such vote needs to have a weight associated to it, which is determined by the identity that -cast the vote. Determining the weight of an identity is done through a sybil protection mechanism. +finalize transactions. Each such vote needs to have a weight associated with it, which is determined by the identity that +cast the vote. Determining the weight of an identity is done through a Sybil protection mechanism. -In this TIP, Proof-of-Stake is used as the sybil protection mechanism. Proof-of-Stake assigns every participant weight +In this TIP, Proof-of-Stake is used as the Sybil protection mechanism. Proof-of-Stake assigns every participant weight proportional to the amount of tokens they hold. Owning tokens serves as proof of owning a scarce resource. It is much more efficient than relying on scarce resources external to the system, such as hardware or electricity, as it is used -in sybil protection mechanisms based on Proof-of-Work. +in Sybil protection mechanisms based on Proof-of-Work. TODO: Additionall motivate using seat-based committees where every seat has the same weight rather than using the weight proportional to the staked and delegated tokens. Using Proof-of-Stake in IOTA 2.0 results in a system with low barriers to entry. The technical requirements for -participation are low and allow everyone to contribute to the security of the network. Those that can not or do not want -to vote (i.e. stake) themselves can delegate stake instead and still add to the security of the network. Proof-of-Stake +participation are low and allow everyone to contribute to the network's security. Those who cannot or do not want +to vote (i.e., stake) themselves can delegate stake instead and still add to the network's security. Proof-of-Stake is moreover energy efficient and environmentally friendly. In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of-Stake a good choice. @@ -86,20 +86,20 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The following gives a high-level idea of the selection process, with the details specified in the rest of the section. -Stakers, or interchangeably also called _registered validators_, lock their IOTA tokens to _stake_ them. By locking the +Stakers, or interchangeably called _registered validators_, lock their IOTA tokens to _stake_ them. By locking the tokens, the stakers prove control over them so the protocol assigns them a proportional amount of stake in exchange. -Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase its stake +Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase their stake further. A staker and all its delegators are called a staking or validator pool. Such a pool is eligible to be selected into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to -determine the ledger state. Stake is only used to determine who is selected into the committee. Once selected, every +determine the ledger state. Stake is only used to determine who is selected for the committee. Once selected, every validator in the committee occupies a _seat_ and every seat has the same voting weight. The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch -ends, the current activity of all registered validators as well as the pool's stake is determined. Through a selection -procedure, a committee is selected out of all the registered pools who have a large enough stake and enough block -issuance activity. Once selected, it is each pool's responsibility to issue _Validation Blocks_ across the epoch through +ends, the current activity of all registered validators, as well as the pool's stake, is determined. Through a selection +procedure, a committee is selected out of all the registered pools that have a significant enough stake and enough block +issuance activity. Once selected, each validator is responsible for issuing _Validation Blocks_ across the epoch through which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the validator's pool receives. @@ -110,7 +110,7 @@ IOTA tokens and claim their Mana rewards. ## Registration -Accounts are considered registered for validaton if they have a _Staking Feature_ in their _Features_. This feature and +Accounts are considered registered for validation if they have a _Staking Feature_ in their _Features_. This feature and its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). ## Committee Selection @@ -131,8 +131,7 @@ following steps must be taken. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the - following condition holds, otherwise it is inactive: +- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the following condition holds; otherwise, it is inactive: - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following conditions: @@ -144,10 +143,9 @@ following steps must be taken. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` field is equal to `i`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by pool - stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is the preliminary - committee for Epoch `n`. + stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is Epoch `n`'s preliminary committee. - The preliminary committee becomes the selected committee if the `Activity Window Slot(n)` is finalized before the - `Cutoff Slot(n)` is committed, otherwise the committee of the current epoch becomes the selected committee of the next + `Cutoff Slot(n)` is committed; otherwise, the committee of the current epoch becomes the selected committee of the next epoch. ### Committee Tasks @@ -160,8 +158,8 @@ Blocks and affects the validator pool's Mana rewards. # Delegation -By delegating IOTA tokens, a user adds to a validator's stake proportional to the amount of tokens they delegate, -without having to become a validator themself. In order to delegate, a _Delegation Output_ must be created. The +By delegating IOTA tokens, a user adds to a validator's stake proportional to the number of tokens they delegate +without becoming a validator themselves. In order to delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. ## Delegation Output @@ -363,7 +361,7 @@ output, while the next state is defined as the Delegation output with the same e side. There are thus two types of transitions: delayed claiming transition and destruction transition. - Delayed Claiming Transition - - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output + - Is identified by a zeroed-out `Delegation ID` on the input side and a non-zeroed-out `Delegation ID` on the output side. - The fields `Delegated Amount`, `Start Epoch` and `Validator ID` must not be changed. - `End Epoch` on the output must be set as follows. @@ -664,7 +662,7 @@ the epoch ends, that is, when its last slot is committed. ## Slot Level -For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this +For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch, this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: @@ -687,10 +685,6 @@ fields: -TODO: Do we have to state the following or can we just include it in the calculations? - -Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. - ### Performance Factor This performance factor for a slot is defined as follows. @@ -698,29 +692,20 @@ This performance factor for a slot is defined as follows. #### Input values - Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. -- Let `TargetValidationBlocks` be a protocol parameter, representing the number of validation blocks a validator is +- Let `TargetValidationBlocks` be a protocol parameter representing the number of validation blocks a validator is supposed to issue per slot. #### Calculations -- Then `Slot Perfomance Factor` is given by the number of blocks issued in the slot. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, - set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation - blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into - `Epoch Perfomance Factors`. - -==TO DO: decide with daria between the alg above or the one below== ==To do: check if a round number belongs to the slot -i or i+1== ==To do: check if it's better to set the PF to TargetValidationBlocks+1 or to null or something like that== - -- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of legth +- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of length `subslotLenght = slotDuration/TargetValidationBlocks` given by `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. - Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be - the `Slot Perfomance Factor`. + the `Slot Performance Factor`. - Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, - set `Slot Perfomance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation - blocks than it was supposed to and it should be punished when combining the `Slot Perfomance Factors` into - `Epoch Perfomance Factors`. + set `Slot Performance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation + blocks than it was supposed to and it should be punished when combining the `Slot Performance Factors` into + `Epoch Performance Factors`. ## Epoch Level @@ -728,13 +713,13 @@ i or i+1== ==To do: check if it's better to set the PF to TargetValidationBlocks #### Input values -- Let `Slot Performance Factor Array` be the array of _Slot Perfomance Factors_ of a given validator in each slot on an +- Let `Slot Performance Factor Array` be the array of _Slot Performance Factors_ of a given validator in each slot on an epoch. #### Calculations -- Then `Perfomance Factor` is given by the average between these values, rounded down to the nearest integer. - Additionally if validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance +- Then `Performance Factor` is given by the average between these values, rounded down to the nearest integer. + Additionally, if the validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance factor for the whole epoch is set to 0 as a form of punishment. Let `m` and `M` be the first and last slot of the epoch, respectively. @@ -981,10 +966,10 @@ Feature would only allow for Delegation from an account. Mana Rewards for some epoch `X` only become available after that epoch ends. At that point, the pool stake for the following epoch `X+1` has already been calculated. That means, if one waits until the rewards for `X` are available and -consumes their Delegation Output to claim rewards, they have already delegated for `X+1` but will loose out on the +consumes their Delegation Output to claim rewards, they have already delegated for `X+1` but will lose out on the rewards they would get for that delegation. -With delayed claiming however, a user can delegate for `X` and then transition to delayed claiming. At that point, the +With delayed claiming, however, a user can delegate for `X` and then transition to delayed claiming. At that point, the output only needs to contain the minimum storage deposit. The remaining funds can be put in a new Delegation Output to delegate for `X+1`, which can repeat this procedure. In this manner, one can delegate for one epoch at a time and never lose out on any rewards. The following figure exemplifies this procedure. @@ -993,7 +978,7 @@ lose out on any rewards. The following figure exemplifies this procedure. Delayed Claiming also allows for a high degree of liquidity while delegating. Even without delayed claiming, this delegation mechanism implements _liquid delegation_ as Delegation Outputs are never locked and can be accessed anytime. -However, one might loose out on rewards. Delayed Claiming fixes this: If one delegated for the current epoch but needs +However, one might lose out on rewards. Delayed Claiming fixes this: If one delegated for the current epoch but needs to access the funds immediately, one can transition to delayed claiming and access all the funds (minus the small storage deposit), and still claim rewards later. @@ -1026,7 +1011,7 @@ whether the creation or transition happens before or after the registration slot 21 but before the Registration Slot of Epoch 22. Therefore its `Start Epoch` is set to `22`, as that is the earliest epoch for which it could receive rewards. It is however transitioned before the Registration Slot of Epoch 22, so it will not be included in the pool stake calculation for said epoch. Its `End Epoch` is thus set to `21`, as that may be - the last epoch for which it could get rewards. Simlar to Output X, the delegation output will not be able to claim any + the last epoch for which it could get rewards. Similar to Output X, the delegation output will not be able to claim any rewards as it was never included in any pool stake calculation and no epoch index `A` satisfies `A >= 22 && A <= 21`. These examples show that transitioning a Delegation Output without crossing a Registration Slot boundary does not yield @@ -1040,10 +1025,10 @@ the range of epochs for which they can claim rewards as large as possible. Thus, `Start Epoch` as early or low as possible and `End Epoch` as high or late as possible. To prevent malicious behavior, like setting `Start Epoch` to the current epoch when the block itself, that contained the transaction in which the delegation started, was issued past the registration slot of the next epoch, the boundaries must be set appropriately. -Thus, `Start Epoch` must be set to or compared against the past-bounded slot index, which prevent faking the past. A +Thus, `Start Epoch` must be set to or compared against the past-bounded slot index, which prevents faking the past. A past-bounded slot index is always at least equal to the slot to which the block belongs, based on its `Issuing Time`, since the oldest, valid commitment that can be picked is `Max Committable Age` slots old. Analogously, `End Epoch` must -be set to or compared against the future-bounded slot index, which prevent faking the future. A future-bounded slot +be set to or compared against the future-bounded slot index, which prevents faking the future. A future-bounded slot index is always at most equal to the slot to which the block belongs, based on its `Issuing Time`, since the newest, valid commitment that can be picked is `Min Committable Age` slots old. From a2170d0a761883ced1c0500ebf2e2c4a77c97035 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 21 Sep 2023 10:26:41 +0200 Subject: [PATCH 045/124] Format schema tables (no content changes) --- tips/TIP-0040/tip-0040.md | 955 ++++++++++++++++++++++---------------- 1 file changed, 544 insertions(+), 411 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index eea9516f4..b86a75274 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -31,11 +31,11 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are rewarded. Stakers lock IOTA tokens in order to become eligible to be selected for the validator committee. Delegators -delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives its total stake -from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool performs -its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to -the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the -security and well-functioning of the network while receiving rewards for their contribution. +delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives its total +stake from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool +performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly +proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to +contribute to the security and well-functioning of the network while receiving rewards for their contribution. This TIP specifies the details of staking, delegation, committee selection, and Mana rewards. @@ -44,8 +44,8 @@ This TIP specifies the details of staking, delegation, committee selection, and In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions are confirmed. The Coordinator was always intended as a temporary solution and is removed with the upgrade to IOTA 2.0 (a.k.a. _Coordicide_). In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and -finalize transactions. Each such vote needs to have a weight associated with it, which is determined by the identity that -cast the vote. Determining the weight of an identity is done through a Sybil protection mechanism. +finalize transactions. Each such vote needs to have a weight associated with it, which is determined by the identity +that cast the vote. Determining the weight of an identity is done through a Sybil protection mechanism. In this TIP, Proof-of-Stake is used as the Sybil protection mechanism. Proof-of-Stake assigns every participant weight proportional to the amount of tokens they hold. Owning tokens serves as proof of owning a scarce resource. It is much @@ -56,9 +56,9 @@ TODO: Additionall motivate using seat-based committees where every seat has the proportional to the staked and delegated tokens. Using Proof-of-Stake in IOTA 2.0 results in a system with low barriers to entry. The technical requirements for -participation are low and allow everyone to contribute to the network's security. Those who cannot or do not want -to vote (i.e., stake) themselves can delegate stake instead and still add to the network's security. Proof-of-Stake -is moreover energy efficient and environmentally friendly. +participation are low and allow everyone to contribute to the network's security. Those who cannot or do not want to +vote (i.e., stake) themselves can delegate stake instead and still add to the network's security. Proof-of-Stake is +moreover energy efficient and environmentally friendly. In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of-Stake a good choice. @@ -131,7 +131,8 @@ following steps must be taken. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the following condition holds; otherwise, it is inactive: +- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the + following condition holds; otherwise, it is inactive: - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following conditions: @@ -143,10 +144,11 @@ following steps must be taken. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` field is equal to `i`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by pool - stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is Epoch `n`'s preliminary committee. + stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is Epoch `n`'s + preliminary committee. - The preliminary committee becomes the selected committee if the `Activity Window Slot(n)` is finalized before the - `Cutoff Slot(n)` is committed; otherwise, the committee of the current epoch becomes the selected committee of the next - epoch. + `Cutoff Slot(n)` is committed; otherwise, the committee of the current epoch becomes the selected committee of the + next epoch. ### Committee Tasks @@ -158,9 +160,9 @@ Blocks and affects the validator pool's Mana rewards. # Delegation -By delegating IOTA tokens, a user adds to a validator's stake proportional to the number of tokens they delegate -without becoming a validator themselves. In order to delegate, a _Delegation Output_ must be created. The -following section specifies how delegation is implemented. +By delegating IOTA tokens, a user adds to a validator's stake proportional to the number of tokens they delegate without +becoming a validator themselves. In order to delegate, a _Delegation Output_ must be created. The following section +specifies how delegation is implemented. ## Delegation Output @@ -169,155 +171,171 @@ Delegation is implemented with a special output type, the so-called Delegation O Each Delegation output gets assigned a unique identifier `Delegation ID` upon creation by the protocol. `Delegation ID` is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. +
+ Delegation Output +
Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.
+
-
- Delegation Output -
- Describes a Delegation Output, which delegates its contained IOTA tokens to a validator. -
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Output Typeuint8Set to value 7 to denote a Delegation Output.
Amountuint64The amount of IOTA coins held by the output.
Delegated Amountuint64The amount of delegated IOTA coins.
Delegation IDByteArray[32]Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDByteArray[32]The Account ID of the validator to which this output is delegating.
Start Epochuint64The index of the first epoch for which this output delegates.
End Epochuint64The index of the last epoch for which this output delegates.
Unlock Conditions Countuint8The number of unlock conditions following.
Unlock Conditions atMostOneOfEach +
+ Address Unlock Condition - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + +
NameTypeDescription
Output Typeuint8 - Set to value 7 to denote a Delegation Output. -
Amountuint64The amount of IOTA coins held by the output.
Delegated Amountuint64The amount of delegated IOTA coins.
Delegation IDByteArray[32]Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDByteArray[32]The Account ID of the validator to which this output is delegating.
Start Epochuint64The index of the first epoch for which this output delegates.
End Epochuint64The index of the last epoch for which this output delegates.
Unlock Conditions Countuint8The number of unlock conditions following.
Unlock Conditions atMostOneOfEach -
- Address Unlock Condition - - - - - - - - - - - - - - - -
NameTypeDescription
Unlock Condition Typeuint8 - Set to value 0 to denote an Address Unlock Condition. -
Address -
- Ed25519 Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 0 to denote an Ed25519 Address. -
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Alias Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 8 to denote an Alias Address. -
Alias IDByteArray[32]The raw bytes of the Alias ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - -
NameTypeDescription
Address Typeuint8 - Set to value 16 to denote an NFT Address. -
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
-
-
+ Name + + Type + + Description +
Unlock Condition Typeuint8Set to value 0 to denote an Address Unlock Condition.
Address oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
-
+ +
### Additional Transaction Syntactic Validation Rules @@ -408,250 +426,364 @@ calculation of these outputs defines an additional corresponding field type. The following table shows the Delegation Output including the possible fields and their specific weight. +
+ Delegation Output +
Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.
+
-
- Delegation Output -
- Describes a Delegation Output, which delegates its contained IOTA tokens to a validator. -
-
- - - + + + + + + + +
Offset +
Offset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
OutputID + key + 3434The ID of the output.
Block ID (included) + data + 4040The ID of the block in which the transaction payload that created this output was included.
Slot Booked + data + 88The index of the slot in which the transaction that created it was booked.
Slot Created + data + 88The index of the slot in which the transaction was created.
+
Fields + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
Output Type + delegation + 11Set to value 7 to denote a Delegation Output.
Amount + delegation + 88The amount of IOTA coins held by the output.
Delegated Amount + delegation + 88The amount of delegated IOTA coins.
Delegation ID + delegation + 3232Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator ID + delegation + 3232The Account ID of the validator to which this output is delegating.
Start Epoch + delegation + 88The index of the first epoch for which this output delegates.
End Epoch + delegation + 88The index of the last epoch for which this output delegates.
Unlock Conditions Count + data + 11The number of unlock conditions following.
Unlock Conditions atMostOneOfEach +
+ Address Unlock Condition + + + + - - - - - - - - - - - - - -
Fields - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
FieldField typeLength MinimumLength MaximumDescription
OutputIDkey3434The ID of the output.
Block ID (included)data4040The ID of the block in which the transaction payload that created this output was included.
Slot Bookeddata88The index of the slot in which the transaction that created it was booked.
Slot Createddata88The index of the slot in which the transaction was created.
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
Unlock Condition Type + data + 11Set to value 0 to denote an Address Unlock Condition.
Address oneOf +
+ Ed25519 Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
Address Type + data + 11Set to value 0 to denote an Ed25519 Address.
PubKeyHash + data + 3232The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
+
+
+ Account Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
Address Type + data + 11Set to value 8 to denote an Account Address.
Account ID + data + 3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+
+ NFT Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum + + Description +
Address Type + data + 11Set to value 16 to denote an NFT Address.
NFT ID + data + 3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+
-
Fields - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldField typeLength MinimumLength MaximumDescription
Output Typedelegation11 - Set to value 7 to denote a Delegation Output. -
Amountdelegation88The amount of IOTA coins held by the output.
Delegated Amountdelegation88The amount of delegated IOTA coins.
Delegation IDdelegation3232Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDdelegation3232The Account ID of the validator to which this output is delegating.
Start Epochdelegation88The index of the first epoch for which this output delegates.
End Epochdelegation88The index of the last epoch for which this output delegates.
Unlock Conditions Countdata11The number of unlock conditions following.
Unlock Conditions atMostOneOfEach -
- Address Unlock Condition - - - - - - - - - - - - - - - - - -
NameTypeDescription
Unlock Condition Typedata11 - Set to value 0 to denote an Address Unlock Condition. -
Address -
- Ed25519 Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 0 to denote an Ed25519 Address. -
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 8 to denote an Account Address. -
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - - - - - - - -
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 - Set to value 16 to denote an NFT Address. -
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
-
-
-
-
-
v_byte Minimum (TODO: Recalculate)0
v_byte Maximum (TODO: Recalculate)0
-
+
+ +
+ + + + v_byte Minimum + TODO + + + v_byte Maximum + TODO + # Mana Rewards @@ -719,8 +851,8 @@ This performance factor for a slot is defined as follows. #### Calculations - Then `Performance Factor` is given by the average between these values, rounded down to the nearest integer. - Additionally, if the validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance - factor for the whole epoch is set to 0 as a form of punishment. + Additionally, if the validator issued more than `TargetValidationBlocks` validation blocks in any slot, the + performance factor for the whole epoch is set to 0 as a form of punishment. Let `m` and `M` be the first and last slot of the epoch, respectively. @@ -978,9 +1110,9 @@ lose out on any rewards. The following figure exemplifies this procedure. Delayed Claiming also allows for a high degree of liquidity while delegating. Even without delayed claiming, this delegation mechanism implements _liquid delegation_ as Delegation Outputs are never locked and can be accessed anytime. -However, one might lose out on rewards. Delayed Claiming fixes this: If one delegated for the current epoch but needs -to access the funds immediately, one can transition to delayed claiming and access all the funds (minus the small -storage deposit), and still claim rewards later. +However, one might lose out on rewards. Delayed Claiming fixes this: If one delegated for the current epoch but needs to +access the funds immediately, one can transition to delayed claiming and access all the funds (minus the small storage +deposit), and still claim rewards later. Additionally, Delayed Claiming enables Layer 2 Smart Contract Chains to hold their funds in Delegation Outputs and delegate the tokens of their users for them, while they can use those wrapped tokens on Layer 2. Since an Account Output @@ -1011,8 +1143,9 @@ whether the creation or transition happens before or after the registration slot 21 but before the Registration Slot of Epoch 22. Therefore its `Start Epoch` is set to `22`, as that is the earliest epoch for which it could receive rewards. It is however transitioned before the Registration Slot of Epoch 22, so it will not be included in the pool stake calculation for said epoch. Its `End Epoch` is thus set to `21`, as that may be - the last epoch for which it could get rewards. Similar to Output X, the delegation output will not be able to claim any - rewards as it was never included in any pool stake calculation and no epoch index `A` satisfies `A >= 22 && A <= 21`. + the last epoch for which it could get rewards. Similar to Output X, the delegation output will not be able to claim + any rewards as it was never included in any pool stake calculation and no epoch index `A` satisfies + `A >= 22 && A <= 21`. These examples show that transitioning a Delegation Output without crossing a Registration Slot boundary does not yield any rewards. At least one such boundary must be crossed for any rewards to be claimable. From 355e9b9f11ff49ee6a60c62bde96dcba055155c6 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 21 Sep 2023 12:09:43 +0100 Subject: [PATCH 046/124] Update summary --- tips/TIP-0040/tip-0040.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index b86a75274..0bcfded6d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -29,13 +29,13 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 # Summary -Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are -rewarded. Stakers lock IOTA tokens in order to become eligible to be selected for the validator committee. Delegators -delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives its total -stake from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool -performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly -proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to -contribute to the security and well-functioning of the network while receiving rewards for their contribution. +Staking and delegation are mechanisms by which users contribute to the network's security and for which they are rewarded. +Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give weight to blocks and transactions. +On the other hand, delegators delegate IOTA tokens (which does not imply locking these tokens) to a validator, forming a validator pool. +The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators). +If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to +the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the +security and well-functioning of the network while receiving rewards for their contribution. This TIP specifies the details of staking, delegation, committee selection, and Mana rewards. From 2bcb212f2ea6337ac0201b99c4451940d727ce32 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 22 Sep 2023 13:59:33 +0200 Subject: [PATCH 047/124] Add new address types in Delegation Output --- tips/TIP-0040/tip-0040.md | 370 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 370 insertions(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 0bcfded6d..6c7a03d29 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -232,6 +232,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
Address Unlock Condition +
Defines the Address that owns this output. It can unlock the output with the proper Unlock in a transaction.
@@ -330,6 +331,375 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
+
+ Multi Address + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 32 to denote a Multi Address.
Addresses anyOf +
+ Address with Weight + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
Weightuint8The weight of the unlocked address.
+
+
+
+
+ Restricted Address + + + + + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 40 to denote a Restricted Address.
Address oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+ Multi Address + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 32 to denote a Multi Address.
Addresses anyOf +
+ Address with Weight + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+
Weightuint8The weight of the unlocked address.
+
+
+
+
Allowed Capabilities(uint8)ByteArrayBitflags expressed as a series of bytes. A leading uint8 denotes its length.
+
From e27aa4845d5e650c36e1186537ca8bc5b8d3dc1e Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 22 Sep 2023 14:02:12 +0200 Subject: [PATCH 048/124] Update storage deposit with new addr types --- tips/TIP-0040/tip-0040.md | 638 +++++++++++++++++++++++++++++++++++--- 1 file changed, 597 insertions(+), 41 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 6c7a03d29..2d3ab9991 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -779,6 +779,9 @@ side. There are thus two types of transitions: delayed claiming transition and d The storage deposit of a Delegation Output is higher than for other output types. Therefore, the storage deposit calculation of these outputs defines an additional corresponding field type. +| :warning: Preliminary values | +|------------------------------| + @@ -789,7 +792,7 @@ calculation of these outputs defines an additional corresponding field type. - +
Name
delegation Fields contained in a Delegation Output.TODO: TBD100 (preliminary value for testing) Delegation requires additional bookkeeping in nodes for committee selection and mana rewards tracking.
@@ -818,9 +821,6 @@ The following table shows the Delegation Output including the possible fields an Length Maximum - - Description - OutputID @@ -829,7 +829,6 @@ The following table shows the Delegation Output including the possible fields an 34 34 - The ID of the output. Block ID (included) @@ -838,7 +837,6 @@ The following table shows the Delegation Output including the possible fields an 40 40 - The ID of the block in which the transaction payload that created this output was included. Slot Booked @@ -847,7 +845,6 @@ The following table shows the Delegation Output including the possible fields an 8 8 - The index of the slot in which the transaction that created it was booked. Slot Created @@ -856,7 +853,6 @@ The following table shows the Delegation Output including the possible fields an 8 8 - The index of the slot in which the transaction was created. @@ -878,9 +874,6 @@ The following table shows the Delegation Output including the possible fields an Length Maximum - - Description - Output Type @@ -889,16 +882,14 @@ The following table shows the Delegation Output including the possible fields an 1 1 - Set to value 7 to denote a Delegation Output. Amount - delegation + data 8 8 - The amount of IOTA coins held by the output. Delegated Amount @@ -907,7 +898,6 @@ The following table shows the Delegation Output including the possible fields an 8 8 - The amount of delegated IOTA coins. Delegation ID @@ -916,7 +906,6 @@ The following table shows the Delegation Output including the possible fields an 32 32 - Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. Validator ID @@ -925,7 +914,6 @@ The following table shows the Delegation Output including the possible fields an 32 32 - The Account ID of the validator to which this output is delegating. Start Epoch @@ -934,7 +922,6 @@ The following table shows the Delegation Output including the possible fields an 8 8 - The index of the first epoch for which this output delegates. End Epoch @@ -943,7 +930,6 @@ The following table shows the Delegation Output including the possible fields an 8 8 - The index of the last epoch for which this output delegates. Unlock Conditions Count @@ -952,13 +938,13 @@ The following table shows the Delegation Output including the possible fields an 1 1 - The number of unlock conditions following. Unlock Conditions atMostOneOfEach
Address Unlock Condition +
Defines the Address that owns this output. It can unlock the output with the proper Unlock in a transaction.
@@ -977,9 +963,6 @@ The following table shows the Delegation Output including the possible fields an - @@ -988,7 +971,6 @@ The following table shows the Delegation Output including the possible fields an - @@ -1013,9 +995,6 @@ The following table shows the Delegation Output including the possible fields an - @@ -1024,7 +1003,6 @@ The following table shows the Delegation Output including the possible fields an - @@ -1033,7 +1011,6 @@ The following table shows the Delegation Output including the possible fields an -
Fields Length Maximum - Description -
Unlock Condition Type 1 1Set to value 0 to denote an Address Unlock Condition.
Address oneOf Length Maximum - Description -
Address Type 1 1Set to value 0 to denote an Ed25519 Address.
PubKeyHash 32 32The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
@@ -1060,9 +1037,6 @@ The following table shows the Delegation Output including the possible fields an Length Maximum - - Description - Address Type @@ -1071,7 +1045,6 @@ The following table shows the Delegation Output including the possible fields an 1 1 - Set to value 8 to denote an Account Address. Account ID @@ -1080,7 +1053,6 @@ The following table shows the Delegation Output including the possible fields an 32 32 - The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it. @@ -1107,9 +1079,6 @@ The following table shows the Delegation Output including the possible fields an Length Maximum - - Description - Address Type @@ -1118,7 +1087,6 @@ The following table shows the Delegation Output including the possible fields an 1 1 - Set to value 16 to denote an NFT Address. NFT ID @@ -1127,7 +1095,595 @@ The following table shows the Delegation Output including the possible fields an 32 32 - The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it. + + + + + +
+
+ Multi Address + + + + + +
Fields + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Addresses anyOf +
+ Address with Weight + + + + + +
Fields + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address oneOf +
+ Ed25519 Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
PubKeyHash + data + 3232
+
+
+
+ Account Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Account ID + data + 3232
+
+
+
+ NFT Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
NFT ID + data + 3232
+
+
+
Weight + data + 11
+
+
+
+
+
+
+ Restricted Address + + + + @@ -1148,11 +1704,11 @@ The following table shows the Delegation Output including the possible fields an - + - +
Fields + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Address oneOf +
+ Ed25519 Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
PubKeyHash + data + 3232
+
+
+
+ Account Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Account ID + data + 3232
+
+
+
+ NFT Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
NFT ID + data + 3232
+
+
+
+ Multi Address + + + + + +
Fields + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Addresses anyOf +
+ Address with Weight + + + + + +
Fields + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address oneOf +
+ Ed25519 Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
PubKeyHash + data + 3232
+
+
+
+ Account Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
Account ID + data + 3232
+
+
+
+ NFT Address + + + + + +
Fields + + + + + + + + + + + + + + + + + + + +
+ Field + + Field type + + Length Minimum + + Length Maximum +
Address Type + data + 11
NFT ID + data + 3232
+
+
+
Weight + data + 11
+
+
+
+
+
+
Allowed Capabilities Length + data + 11
Allowed Capabilities + data + 01
v_byte MinimumTODO9339
v_byte MaximumTODO9650
From 7c19645210018fd9b0564d38a20b66d8a71a1bc9 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:19:26 +0100 Subject: [PATCH 049/124] motivation --- tips/TIP-0040/tip-0040.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 2d3ab9991..da19d554a 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -41,24 +41,24 @@ This TIP specifies the details of staking, delegation, committee selection, and # Motivation -In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions are -confirmed. The Coordinator was always intended as a temporary solution and is removed with the upgrade to IOTA 2.0 -(a.k.a. _Coordicide_). In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and -finalize transactions. Each such vote needs to have a weight associated with it, which is determined by the identity -that cast the vote. Determining the weight of an identity is done through a Sybil protection mechanism. - -In this TIP, Proof-of-Stake is used as the Sybil protection mechanism. Proof-of-Stake assigns every participant weight -proportional to the amount of tokens they hold. Owning tokens serves as proof of owning a scarce resource. It is much -more efficient than relying on scarce resources external to the system, such as hardware or electricity, as it is used -in Sybil protection mechanisms based on Proof-of-Work. - -TODO: Additionall motivate using seat-based committees where every seat has the same weight rather than using the weight +In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions they should consider confirmed. +The Coordinator was always intended as a temporary solution; thus, it is removed with the upgrade to IOTA 2.0 (a.k.a. Coordicide). +In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and finalize transactions. +Each of those votes must have a weight associated with it, which depends on the identity that cast the vote. +Determining the weight of an identity is closely related to the type of Sybil protection mechanism used. + +In IOTA 2.0, we use Proof-of-Stake as the Sybil protection mechanism. +Proof-of-Stake assigns to every participant a weight proportional to the number of tokens they hold. +Since tokens are a scarce resource, they can be used as a base for a Sybil protection mechanism, being much more efficient +than relying on scarce resources external to the system, such as hardware or electricity, as in Proof-of-Work-based systems. + +TODO: Additionally, motivate using seat-based committees where every seat has the same weight rather than using the weight proportional to the staked and delegated tokens. -Using Proof-of-Stake in IOTA 2.0 results in a system with low barriers to entry. The technical requirements for -participation are low and allow everyone to contribute to the network's security. Those who cannot or do not want to -vote (i.e., stake) themselves can delegate stake instead and still add to the network's security. Proof-of-Stake is -moreover energy efficient and environmentally friendly. +Using Proof-of-Stake in IOTA 2.0 results in a system with low financial barriers to entry. +The technical requirements for participation are also low and allow everyone to contribute to the network's security. +Those who cannot or do not want to vote (i.e., stake) can delegate stake instead while still adding to the network's security. +Proof-of-Stake is, moreover, energy efficient and environmentally friendly. In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of-Stake a good choice. From 274c75539609105ff009834bb072154f8f03f1b6 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:20:08 +0100 Subject: [PATCH 050/124] Update tips/TIP-0040/tip-0040.md Co-authored-by: Thibault Martinez --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index da19d554a..508fe7cc6 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1967,7 +1967,7 @@ that can be claimed is defined as follows. To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They -are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for +are _potential_ since the validator to which the output is delegating may not have been selected into the committee for that epoch. #### Parameters From e85c303753f718895a94f78a3e361ff77c9d8984 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:40:48 +0100 Subject: [PATCH 051/124] staking1 --- tips/TIP-0040/tip-0040.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 508fe7cc6..d93329a01 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -83,17 +83,17 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA # Staking -The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The -following gives a high-level idea of the selection process, with the details specified in the rest of the section. - -Stakers, or interchangeably called _registered validators_, lock their IOTA tokens to _stake_ them. By locking the -tokens, the stakers prove control over them so the protocol assigns them a proportional amount of stake in exchange. -Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase their stake -further. A staker and all its delegators are called a staking or validator pool. Such a pool is eligible to be selected -into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of blocks, and _Approval -Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to -determine the ledger state. Stake is only used to determine who is selected for the committee. Once selected, every -validator in the committee occupies a _seat_ and every seat has the same voting weight. +The IOTA protocol accepts blocks and transactions after they reach a certain weight through voting. +The voters are a selected validator committee. +The following gives a high-level idea of the selection process, while we specify its details in the rest of the section. + +Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. +By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of voting power in exchange. +Other users - the so-called delegators - can delegate their IOTA tokens to a staker to further increase their voting power. +A staker plus all its delegators are called a staking or validator pool. Stakers are eligible to be selected into a committee for a certain duration. +Only the voting power of those selected into the committee is considered to determine the Witness Weight, used for the acceptance of blocks, +and Approval Weight, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. +Once selected, every validator in the committee occupies a seat, and every seat has the same voting weight. The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch From d4540cfce2c4ba1735a7490d7471c4b7f8beed34 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:41:55 +0100 Subject: [PATCH 052/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index d93329a01..037ba24cd 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -89,10 +89,10 @@ The following gives a high-level idea of the selection process, while we specify Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of voting power in exchange. -Other users - the so-called delegators - can delegate their IOTA tokens to a staker to further increase their voting power. -A staker plus all its delegators are called a staking or validator pool. Stakers are eligible to be selected into a committee for a certain duration. -Only the voting power of those selected into the committee is considered to determine the Witness Weight, used for the acceptance of blocks, -and Approval Weight, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. +Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their voting power. +A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be selected into a committee for a certain duration. +Only the voting power of those selected into the committee is considered to determine the _Witness Weight_, used for the acceptance of blocks, +and _Approval Weight_, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. Once selected, every validator in the committee occupies a seat, and every seat has the same voting weight. The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a From ad3b21607c0ebaeef3e76333e59b619e5292ccbc Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:43:44 +0100 Subject: [PATCH 053/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 037ba24cd..87e6ba002 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -88,7 +88,7 @@ The voters are a selected validator committee. The following gives a high-level idea of the selection process, while we specify its details in the rest of the section. Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. -By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of voting power in exchange. +By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their voting power. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be selected into a committee for a certain duration. Only the voting power of those selected into the committee is considered to determine the _Witness Weight_, used for the acceptance of blocks, From ac9993227c190055d58c98686be7fcc639e56358 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:47:58 +0100 Subject: [PATCH 054/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 87e6ba002..0cb8512af 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -89,9 +89,9 @@ The following gives a high-level idea of the selection process, while we specify Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. -Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their voting power. +Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their influence in the system. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be selected into a committee for a certain duration. -Only the voting power of those selected into the committee is considered to determine the _Witness Weight_, used for the acceptance of blocks, +Only the votes of those selected into the committee are considered to determine the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. Once selected, every validator in the committee occupies a seat, and every seat has the same voting weight. From 7b34adb1647d37ed463a81c1a4e36644c3fef9ab Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 11:55:57 +0100 Subject: [PATCH 055/124] staking2 --- tips/TIP-0040/tip-0040.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 0cb8512af..a71b1eb20 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -95,18 +95,16 @@ Only the votes of those selected into the committee are considered to determine and _Approval Weight_, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. Once selected, every validator in the committee occupies a seat, and every seat has the same voting weight. -The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a -protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch -ends, the current activity of all registered validators, as well as the pool's stake, is determined. Through a selection -procedure, a committee is selected out of all the registered pools that have a significant enough stake and enough block -issuance activity. Once selected, each validator is responsible for issuing _Validation Blocks_ across the epoch through -which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they -were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the -validator's pool receives. - -After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its -stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their -IOTA tokens and claim their Mana rewards. +The IOTA protocol slices time into slots and epochs. An epoch is simply a specified number of slots, and a slot has a protocol-defined duration in seconds. +A new validator committee is selected for each epoch. Shortly before an epoch ends, the current activity of all registered validators, as well as the pools' stakes, are determined. +Then, a committee is selected out of all the registered stakers with enough block issuance activity, depending on their pool stake. +Once selected, each validator is responsible for issuing _Validation Blocks_ across the epoch through which they vote on conflicts. +A performance factor is calculated based on how many such blocks they issued for each slot and how many they were expected to issue. +This factor determines the amount of _Mana rewards_ the validator's pool receives. + +After an epoch ends, the delegators of the pool can claim their rewards. +The validator may continue to stake or end its stake by going through an unbonding period of its locked tokens. +After this period ends, the validator can unlock their IOTA tokens and claim their Mana rewards. ## Registration From 36ab5b9be6d028e6b2c42498cf04f6b124de41b5 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 12:32:09 +0100 Subject: [PATCH 056/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index a71b1eb20..39c0a7526 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -121,10 +121,10 @@ windows is not accurately depicted here and instead depends on the value of the To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the following steps must be taken. -- Let `Registration Slot(n)` be the registration slot with index - `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. -- Let `Activity Window Slot(n)` be the last slot of the activity window with index - `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. +- Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. + To be eligible to the committee selection of epoch `n`, a potential validator must register until to this slot. +- Let `Activity Window Slot(n)` be the slot of `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. + To be eligible to the committee selection of epoch `n`, a potential validator must issue at least one block between `Registration Slot(n)`+1. and this slot. - Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. From 41f2632fc2934f7fbea90c1dda7d1fb0762572c3 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 14:18:02 +0100 Subject: [PATCH 057/124] committee selection --- tips/TIP-0040/tip-0040.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 39c0a7526..7dc5754c1 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -118,15 +118,18 @@ its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042. _This figure gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and instead depends on the value of the corresponding Protocol Parameters._ -To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the -following steps must be taken. +Below, we explain how the committee selection for a certain epoch `n` works; first, let's define certain time boundaries used in the algorithm: +- Let `Epoch Start Slot(n))` be the first slot index of epoch `n`. - Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. - To be eligible to the committee selection of epoch `n`, a potential validator must register until to this slot. + To be eligible for the committee selection of epoch `n`, a potential validator must register until this slot. - Let `Activity Window Slot(n)` be the slot of `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. - To be eligible to the committee selection of epoch `n`, a potential validator must issue at least one block between `Registration Slot(n)`+1. and this slot. -- Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. -- The set of _registered validators_ are all account outputs satisfying all of the following conditions: + To be eligible for the committee selection of epoch `n`, a potential validator must issue at least one block between `Registration Slot(n)`+1. and this slot. +- Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. This slot is used in checks to decide whether the committee will be rotated or not in the epoch. + +The committee will be a subset of the active _registered validators_. To define this subset, the following steps are taken: + +- We define the set of _registered validators_ by taking all account outputs that satisfy all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. - For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the From db166e1c135312dc86928a28e3bbcdcb9226884c Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 14:22:26 +0100 Subject: [PATCH 058/124] coins->tokens --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7dc5754c1..70206def2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -196,12 +196,12 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. Amount uint64 - The amount of IOTA coins held by the output. + The amount of IOTA tokens held by the output. Delegated Amount uint64 - The amount of delegated IOTA coins. + The amount of delegated IOTA tokens. Delegation ID From eaf0a278eafbcb12f2880fe6caf96eecdecce254 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 14:28:35 +0100 Subject: [PATCH 059/124] committee tasks --- tips/TIP-0040/tip-0040.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 70206def2..803c2f03d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -154,10 +154,10 @@ The committee will be a subset of the active _registered validators_. To define ### Committee Tasks The selected members of the committee are expected to issue _Validation Blocks_, defined in -[TIP-46](../TIP-0046/tip-0046.md). Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, -used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine -the ledger state. The [performance](#performance-factor) of a validator is determined through the issuance of Validation -Blocks and affects the validator pool's Mana rewards. +[TIP-46](../TIP-0046/tip-0046.md). Only the votes of those selected into the committee are considered to determine the Witness Weight, used for the acceptance of blocks, and Approval Weight, used for conflict resolution and transaction acceptance. +The [performance](#performance-factor) of a validator is determined by the issued Validation +Blocks, and affects the validator pool's Mana rewards. + # Delegation From a5cf8c13b7d1d52283959edd674128ab73c4d5dc Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 15:03:02 +0100 Subject: [PATCH 060/124] delegation --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 803c2f03d..1bb2a57a9 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -161,8 +161,8 @@ Blocks, and affects the validator pool's Mana rewards. # Delegation -By delegating IOTA tokens, a user adds to a validator's stake proportional to the number of tokens they delegate without -becoming a validator themselves. In order to delegate, a _Delegation Output_ must be created. The following section +By delegating IOTA tokens, a user increases a validator's stake proportionally to the number of tokens they delegate without +becoming a validator themselves. To delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. ## Delegation Output From 82595c9bed9be927f1cf981c28223e41fbf09bd6 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 15:15:42 +0100 Subject: [PATCH 061/124] delegId --- tips/TIP-0040/tip-0040.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1bb2a57a9..6989f6603 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -169,7 +169,8 @@ specifies how delegation is implemented. Delegation is implemented with a special output type, the so-called Delegation Output. -Each Delegation output gets assigned a unique identifier `Delegation ID` upon creation by the protocol. `Delegation ID` +Upon the creation of a Delegation Output, the protocol assigns to it a unique identifier called `Delegation ID`. +The `Delegation ID` is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
From 1e43feea625c6306d28896f1484d5ecb2eae4cf4 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 17:26:35 +0100 Subject: [PATCH 062/124] Epoch performance factor calculations --- tips/TIP-0040/tip-0040.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 6989f6603..e4b87afb7 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1782,21 +1782,7 @@ This performance factor for a slot is defined as follows. Additionally, if the validator issued more than `TargetValidationBlocks` validation blocks in any slot, the performance factor for the whole epoch is set to 0 as a form of punishment. -Let `m` and `M` be the first and last slot of the epoch, respectively. - -``` - Performance Factor = 0 - sum = 0 - for n = m, ..., M: - if Slot Performance Factor Array(n) > TargetValidationBlocks: - Performance Factor = 0 - break - sum += Validation Blocks Issued(n) - end - Performance Factor = sum >> slotsPerEpochExponent -``` - -Note that the value of `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. +Note that the value of the `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. ### Profit Margins From fad3dc728199db190725954c2bd3587fd17a4d7b Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 17:29:35 +0100 Subject: [PATCH 063/124] solve to do --- tips/TIP-0040/tip-0040.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index e4b87afb7..e7b81f876 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1798,8 +1798,7 @@ Note that the value of the `Performance Factor` will be an integer between 0 and #### Calculations -==to do (optional): try to come up with some magic so we don't have the integer division== -`Profit Margin = (Total Validator Stake< Date: Sun, 24 Sep 2023 17:33:17 +0100 Subject: [PATCH 064/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index e7b81f876..c468ae916 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1753,7 +1753,7 @@ This performance factor for a slot is defined as follows. - Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. - Let `TargetValidationBlocks` be a protocol parameter representing the number of validation blocks a validator is - supposed to issue per slot. + supposed to issue per slot. Note that, when using an `uint8` to store `Performance Factor`, `TargetValidationBlocks` must be strictly smaller than `2^8`, otherwise the performance of a well behaved validator would overflow the variable. #### Calculations From bfc9cd9db48894cbe89ac608facfe027919371fc Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 17:36:58 +0100 Subject: [PATCH 065/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index c468ae916..9a1abdbc2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1762,10 +1762,11 @@ This performance factor for a slot is defined as follows. `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. - Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be the `Slot Performance Factor`. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. If yes, - set `Slot Performance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation - blocks than it was supposed to and it should be punished when combining the `Slot Performance Factors` into - `Epoch Performance Factors`. +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. + In the case that `TargetValidationBlocks` is strictly smaller than `2^8-1`, one could set `Slot Performance Factor` to + `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and + it should be punished when combining the `Slot Performance Factors` into `Epoch Performance Factors`. + In the case that `TargetValidationBlocks` is larger or equal than `2^8-1`, this "tricky" can overflow the variables used. ## Epoch Level From 9e8a9748e2dde9c92e5805130ef3bfe5a5ae791b Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 17:37:39 +0100 Subject: [PATCH 066/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 9a1abdbc2..7de940792 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1766,7 +1766,7 @@ This performance factor for a slot is defined as follows. In the case that `TargetValidationBlocks` is strictly smaller than `2^8-1`, one could set `Slot Performance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and it should be punished when combining the `Slot Performance Factors` into `Epoch Performance Factors`. - In the case that `TargetValidationBlocks` is larger or equal than `2^8-1`, this "tricky" can overflow the variables used. + In the case that `TargetValidationBlocks` is larger or equal than `2^8-1`, this "trick" can overflow the variables used. ## Epoch Level From b25ba9c4a6cbb0822a20bc5ca5d84d55010ea98d Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 17:41:42 +0100 Subject: [PATCH 067/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7de940792..ba08686e6 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1799,7 +1799,7 @@ Note that the value of the `Performance Factor` will be an integer between 0 and #### Calculations -- Given the values defined above, then `Profit Margin = (Total Validator Stake< Date: Sun, 24 Sep 2023 17:48:26 +0100 Subject: [PATCH 068/124] add link --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index ba08686e6..1e0ec26a4 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -2002,7 +2002,7 @@ together. It is however not part of the formal specification and thus non-normat Using dedicated Delegation Outputs over a Delegation Feature in an Account has some advantages. First, it makes it easily possible to delegate to multiple validators from the same account, by creating multiple outputs. In the Stardust -Design (TIP-18), Features are assumed to be unique in an output, and thus having multiple Delegation Features to allow +Design ([TIP-18](../TIP-0018/tip-0018.md)), Features are assumed to be unique in an output, and thus having multiple Delegation Features to allow for multiple delegation targets would require changing that assumption. Second, it decouples the delegation logic from the Account. Delegation, in contrast to staking, does not require that an account must be the delegator. A Delegation Output can be owned by a plain Ed25519 address or an NFT or Account Address, making it more flexible. A Delegation From 2ba22c683b603f57e522fd9b9226b32190fde25a Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:33:08 +0100 Subject: [PATCH 069/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1e0ec26a4..64f0c8bed 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1849,7 +1849,7 @@ values being a list of objects consisting of these fields: Pool Rewards uint64 - The total amount of rewards the validator pool received, without the fixed cost of the validator. + The total amount of rewards the validator pool received. From 406087c3fa599c3a61a29855440a1c839bf1823a Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:52:25 +0100 Subject: [PATCH 070/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 64f0c8bed..63775e955 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1905,7 +1905,7 @@ The following section specifies how to convert the slot-level data into epoch-le - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Performance Factor`. Since `Pool Coefficient` uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - - Let `Pool Reward` be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1)) - Fixed Cost`. + - Finally, `Pool Reward` will be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1))`. If this value is smaller than zero, no reward is stored for this epoch (notice that if this value is equal to zero, a pool reward of zero would be stored in the epoch, meaning that delegators would not receive rewards, but the validator would receive `Fixed Cost`). From 0db5beb59e76ad3c7632dbd2e823411ecf42d820 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:52:42 +0100 Subject: [PATCH 071/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 63775e955..b56fd7e21 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1906,9 +1906,7 @@ The following section specifies how to convert the slot-level data into epoch-le uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - Finally, `Pool Reward` will be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1))`. - If this value is smaller than zero, no reward is stored for this epoch (notice that if this value is equal to zero, - a pool reward of zero would be stored in the epoch, meaning that delegators would not receive rewards, but the - validator would receive `Fixed Cost`). + Note that if this value is smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This is done to incentivize validators to define reasonable values for their fixed cost. ## Validator Rewards From f9d394c391e4826bbd5d4358161bad1ec645e3f7 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:52:52 +0100 Subject: [PATCH 072/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index b56fd7e21..421013081 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1939,7 +1939,7 @@ that can be claimed is defined as follows. - `Undecayed Rewards(n)` = `Fixed Cost + Profit Margin Factor + Residual Validator Factor` where - `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n) ` - `Profit Margin Factor = (Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent` - - `Residual Validator Factor = ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. + - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be From 5b6ec35ac91869d0242f9c56d35b7a6ef787eaa7 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:53:07 +0100 Subject: [PATCH 073/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 421013081..4b6859bc2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1944,7 +1944,8 @@ that can be claimed is defined as follows. bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). -- Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where +Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. +- Finally, we then decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. From 74c4d2f317ab8c122f254ed2c9cb8c0edd954e86 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:53:18 +0100 Subject: [PATCH 074/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 4b6859bc2..d9f2a4822 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1935,7 +1935,7 @@ that can be claimed is defined as follows. removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. - Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` From e98e68e295877eb2913e2fd09cfbae8620e94942 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:53:29 +0100 Subject: [PATCH 075/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index d9f2a4822..aaf15771a 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1938,7 +1938,7 @@ that can be claimed is defined as follows. begin by calculating the `Undecayed Rewards(n)` for each epoch `n` in the validation period. If `Pool Rewards(n)-Fixed Cost≥0`, it will be given by: - `Undecayed Rewards(n)` = `Fixed Cost + Profit Margin Factor + Residual Validator Factor` where - `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n) ` - - `Profit Margin Factor = (Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent` + - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent` - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 From 7bbe75f656a8cf689a25c2916f987ad3fc0eb871 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:53:38 +0100 Subject: [PATCH 076/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index aaf15771a..1ddeb5254 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1911,7 +1911,7 @@ The following section specifies how to convert the slot-level data into epoch-le ## Validator Rewards An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The -transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards +transaction validation rules for removing the feature are defined in [TIP-42](../TIP-0042/tip-0042.md). Upon removal, the amount of Mana Rewards that can be claimed is defined as follows. #### Parameters From d42db8c2f7481a66d2c0cac70b304836c462d621 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:56:12 +0100 Subject: [PATCH 077/124] Update tips/TIP-0040/tip-0040.md --- tips/TIP-0040/tip-0040.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1ddeb5254..bc5ba0109 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1959,7 +1959,8 @@ that epoch. #### Parameters -`ProfitMarginExponent` = 8 `DecayExponent` = 32 +`ProfitMarginExponent` = 8 +`DecayExponent` = 32 #### Input Values From eb09633f2faf3e57a124a548bfa618848ca90dd2 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:57:12 +0100 Subject: [PATCH 078/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index bc5ba0109..b3c7ecd2c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1960,6 +1960,7 @@ that epoch. #### Parameters `ProfitMarginExponent` = 8 + `DecayExponent` = 32 #### Input Values From a00306cb6af7ee2b75d04bbbe097dc2a61839fd2 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 18:59:18 +0100 Subject: [PATCH 079/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index b3c7ecd2c..a039e9f75 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1959,9 +1959,7 @@ that epoch. #### Parameters -`ProfitMarginExponent` = 8 - -`DecayExponent` = 32 +`ProfitMarginExponent` = 8 and `DecayExponent` = 32 #### Input Values From 4452b3851cc02aada682277e93111574f2dd391a Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 19:05:11 +0100 Subject: [PATCH 080/124] Update tip-0040.md --- tips/TIP-0040/tip-0040.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index a039e9f75..8212a826d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1966,6 +1966,7 @@ that epoch. - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Fixed Cost` be the `Fixed Cost` of the Validator, as defined in its Staking Feature. #### Calculations @@ -1983,11 +1984,14 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: `Undecayed Rewards(n)` = -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. We first calculate the undecayed rewards +for each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, we have that `Undecayed Rewards(n)` = +`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that +`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it -should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). Then, we decay the +should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), +we set the undecayed rewards as `Undecayed Rewards(n)` = +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, we decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. From 73eca997a67728b818208f89827d5058de77c0e7 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 19:21:54 +0100 Subject: [PATCH 081/124] solve do tos --- tips/TIP-0040/tip-0040.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8212a826d..ad2718c24 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1868,14 +1868,12 @@ The following section specifies how to convert the slot-level data into epoch-le - `Final Reward` = `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent) ` (constant reward per epoch after the bootstrapping phase) -- `Decay Balancing Constant Coefficient` = ==TO DO: choose a value, this is arbitrary, just make sure it does not - overflow== +- `Decay Balancing Constant Coefficient` = 8 - `Decay Balancing Constant = ` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch - duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). ==TO DO: discuss about approximating this to e== + duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). For `Decay Balancing Constant Coefficient` = 8, `Decay Balancing Constant` = 696. - `Initial Reward` = `(Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) - - `Pool Coefficient Exponent` = 11 #### Input values From 20a9a275206d60ca6358726a756fe16bbafd70dc Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Sun, 24 Sep 2023 19:40:06 +0100 Subject: [PATCH 082/124] solve to do --- tips/TIP-0040/tip-0040.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index ad2718c24..24f3f1345 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -1888,8 +1888,6 @@ The following section specifies how to convert the slot-level data into epoch-le #### Calculations -==to do: re check if this works for any number of bits== - - The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. - `Final Reward` if `n > Bootstrapping Duration`. From 4c648a021e3a6dbee91c6f60344785ab3ada7e11 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 25 Sep 2023 14:40:27 +0200 Subject: [PATCH 083/124] Rename `ValidatorId` to `ValidatorAddress` --- tips/TIP-0040/tip-0040.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 24f3f1345..13e1d7236 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -197,12 +197,12 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. Amount uint64 - The amount of IOTA tokens held by the output. + The amount of IOTA coins held by the output. Delegated Amount uint64 - The amount of delegated IOTA tokens. + The amount of delegated IOTA coins. Delegation ID @@ -210,9 +210,9 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. - Validator ID + Validator Address ByteArray[32] - The Account ID of the validator to which this output is delegating. + The Account Address of the validator to which this output is delegating. Start Epoch @@ -910,7 +910,7 @@ The following table shows the Delegation Output including the possible fields an 32 - Validator ID + Validator Address delegation From edb331d2ee6a987236c8443216d6a969d212fd91 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 25 Sep 2023 15:45:40 +0200 Subject: [PATCH 084/124] Motivate seat-based committees Co-authored-by: Nikita Polianskii <91725722+polinikita@users.noreply.github.com> --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 13e1d7236..498ffe0f4 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -52,7 +52,7 @@ Proof-of-Stake assigns to every participant a weight proportional to the number Since tokens are a scarce resource, they can be used as a base for a Sybil protection mechanism, being much more efficient than relying on scarce resources external to the system, such as hardware or electricity, as in Proof-of-Work-based systems. -TODO: Additionally, motivate using seat-based committees where every seat has the same weight rather than using the weight +The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of seats, with each seat exclusively assigned to a single validator. The rules governing acceptance, confirmation, and finalization are contingent on the number of seats that have endorsed (cast their votes in favor of) a block (transaction). This voting mechanism inherently enables decentralization, as a single entity can, at most, occupy one seat within the committee and, thus, have a restricted level of influence in the voting process. proportional to the staked and delegated tokens. Using Proof-of-Stake in IOTA 2.0 results in a system with low financial barriers to entry. From a92dd478c3a4b01d3e5b39669f034d7e94e6a7bd Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 25 Sep 2023 15:57:26 +0200 Subject: [PATCH 085/124] Update tips/TIP-0040/tip-0040.md Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 498ffe0f4..f0425b2ed 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -52,7 +52,7 @@ Proof-of-Stake assigns to every participant a weight proportional to the number Since tokens are a scarce resource, they can be used as a base for a Sybil protection mechanism, being much more efficient than relying on scarce resources external to the system, such as hardware or electricity, as in Proof-of-Work-based systems. -The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of seats, with each seat exclusively assigned to a single validator. The rules governing acceptance, confirmation, and finalization are contingent on the number of seats that have endorsed (cast their votes in favor of) a block (transaction). This voting mechanism inherently enables decentralization, as a single entity can, at most, occupy one seat within the committee and, thus, have a restricted level of influence in the voting process. +The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of seats, with each seat exclusively assigned to a single validator. The rules governing acceptance, confirmation, and finalization are contingent on the number of seats that have endorsed (cast their votes in favor of) a block (transaction). This voting mechanism inherently enables decentralization, as a single entity can, at most, occupy one seat within the committee and, thus, have a restricted level of influence in the voting process, proportional to the staked and delegated tokens. Using Proof-of-Stake in IOTA 2.0 results in a system with low financial barriers to entry. From 060977bc500ecdd43cfc74539c99a97f8fc877f9 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Mon, 25 Sep 2023 15:59:24 +0100 Subject: [PATCH 086/124] add nikita's suggestions --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index f0425b2ed..9957c8725 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -32,10 +32,10 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 Staking and delegation are mechanisms by which users contribute to the network's security and for which they are rewarded. Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give weight to blocks and transactions. On the other hand, delegators delegate IOTA tokens (which does not imply locking these tokens) to a validator, forming a validator pool. -The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators). +The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the total combined skate among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the -security and well-functioning of the network while receiving rewards for their contribution. +security and well-functioning of the network while receiving rewards for their contribution. Note that the size of the committee is bounded, so not all pools might get rewards for a given epoch. This TIP specifies the details of staking, delegation, committee selection, and Mana rewards. From 12eaf1fa5c21d2337698e37bdf113bb7879acd44 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 25 Sep 2023 17:08:59 +0200 Subject: [PATCH 087/124] Update tips/TIP-0040/tip-0040.md Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 9957c8725..347ef6b34 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -32,7 +32,7 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 Staking and delegation are mechanisms by which users contribute to the network's security and for which they are rewarded. Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give weight to blocks and transactions. On the other hand, delegators delegate IOTA tokens (which does not imply locking these tokens) to a validator, forming a validator pool. -The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the total combined skate among pools. +The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the total combined stake among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while receiving rewards for their contribution. Note that the size of the committee is bounded, so not all pools might get rewards for a given epoch. From 41471bf5ffbfeb67c491c643f607350eec55b77a Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 29 Sep 2023 17:31:40 +0200 Subject: [PATCH 088/124] Use protocol parameter Token Supply in amount rule --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 347ef6b34..348bf981c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -714,8 +714,8 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. #### Output Syntactic Validation -- `Amount` field must fulfill the dust protection requirements and must not be `0`. -- `Amount` field must be ≤ `Max IOTA Supply`. +- `Amount` field must fulfill the [storage deposit requirements](../TIP-0047/tip-0047.md) and must not be `0`. +- `Amount` field must be ≤ `Token Supply`. - It must hold true that `1` ≤ `Unlock Conditions Count` ≤ `1`. - `Unlock Condition Type` of an Unlock Condition must define one of the following types: - Address Unlock Condition From 916d483a00ff51ae5819bd249c5219c1537c359d Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 4 Oct 2023 15:00:06 +0200 Subject: [PATCH 089/124] Remove nested address duplication --- tips/TIP-0040/tip-0040.md | 439 +------------------------------------- 1 file changed, 6 insertions(+), 433 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 348bf981c..9c1447a9b 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -234,7 +234,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
Address Unlock Condition -
Defines the Address that owns this output. It can unlock the output with the proper Unlock in a transaction.
+
Defines the Address that owns this output. It can unlock the output with the proper Unlock in a transaction. Defined in TIP-38 (Address Unlock Condition).
From b333daf301d4906f64b24414dfe3fbc9582cbdde Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Mon, 16 Oct 2023 09:43:38 +0100 Subject: [PATCH 090/124] add author --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 9c1447a9b..dafa0cddb 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -2,7 +2,7 @@ tip: 40 title: Staking & Delegation description: Staking, Delegation and Mana Rewards -author: TODO +author: TODO, Olivia Saa (@oliviasaa) discussions-to: TODO status: Draft type: Standards From c710573abd8048d40a45c7f150fb96f0dd7bf6ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Tue, 17 Oct 2023 09:55:31 +0200 Subject: [PATCH 091/124] Add author --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index dafa0cddb..5be34d007 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -2,7 +2,7 @@ tip: 40 title: Staking & Delegation description: Staking, Delegation and Mana Rewards -author: TODO, Olivia Saa (@oliviasaa) +author: TODO, Olivia Saa (@oliviasaa) , Daria Dziubałtowska (@daria305) discussions-to: TODO status: Draft type: Standards From 7673c9a33132f0d41225ea8da76b3c09689a99f6 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 17 Oct 2023 14:51:20 +0100 Subject: [PATCH 092/124] Set new Delegation Output type prefix --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 5be34d007..518e6b34d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -192,7 +192,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - + From 7728aab6934a2f809ceeaa999ef81cb9c860f5c2 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 17 Oct 2023 14:52:59 +0100 Subject: [PATCH 093/124] Add author --- tips/TIP-0040/tip-0040.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 518e6b34d..232ba479c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -2,7 +2,9 @@ tip: 40 title: Staking & Delegation description: Staking, Delegation and Mana Rewards -author: TODO, Olivia Saa (@oliviasaa) , Daria Dziubałtowska (@daria305) +author: + Philipp Gackstatter (@PhilippGackstatter) , Olivia Saa (@oliviasaa) + , Daria Dziubałtowska (@daria305) discussions-to: TODO status: Draft type: Standards From faa21f5eaec74e7ba8ff04366391ebe1f7b961d0 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 17 Oct 2023 14:53:36 +0100 Subject: [PATCH 094/124] Format TIP --- tips/TIP-0040/tip-0040.md | 237 +++++++++++++++++++++----------------- 1 file changed, 131 insertions(+), 106 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 232ba479c..268e9ae93 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -31,36 +31,45 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 # Summary -Staking and delegation are mechanisms by which users contribute to the network's security and for which they are rewarded. -Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give weight to blocks and transactions. -On the other hand, delegators delegate IOTA tokens (which does not imply locking these tokens) to a validator, forming a validator pool. -The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the total combined stake among pools. -If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to -the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the -security and well-functioning of the network while receiving rewards for their contribution. Note that the size of the committee is bounded, so not all pools might get rewards for a given epoch. +Staking and delegation are mechanisms by which users contribute to the network's security and for which they are +rewarded. Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give +weight to blocks and transactions. On the other hand, delegators delegate IOTA tokens (which does not imply locking +these tokens) to a validator, forming a validator pool. The weight that validators give to blocks is derived from the +total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and +the total combined stake among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. +Each participant in the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. This +results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while +receiving rewards for their contribution. Note that the size of the committee is bounded, so not all pools might get +rewards for a given epoch. This TIP specifies the details of staking, delegation, committee selection, and Mana rewards. # Motivation -In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions they should consider confirmed. -The Coordinator was always intended as a temporary solution; thus, it is removed with the upgrade to IOTA 2.0 (a.k.a. Coordicide). -In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and finalize transactions. -Each of those votes must have a weight associated with it, which depends on the identity that cast the vote. -Determining the weight of an identity is closely related to the type of Sybil protection mechanism used. - -In IOTA 2.0, we use Proof-of-Stake as the Sybil protection mechanism. -Proof-of-Stake assigns to every participant a weight proportional to the number of tokens they hold. -Since tokens are a scarce resource, they can be used as a base for a Sybil protection mechanism, being much more efficient -than relying on scarce resources external to the system, such as hardware or electricity, as in Proof-of-Work-based systems. - -The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of seats, with each seat exclusively assigned to a single validator. The rules governing acceptance, confirmation, and finalization are contingent on the number of seats that have endorsed (cast their votes in favor of) a block (transaction). This voting mechanism inherently enables decentralization, as a single entity can, at most, occupy one seat within the committee and, thus, have a restricted level of influence in the voting process, -proportional to the staked and delegated tokens. - -Using Proof-of-Stake in IOTA 2.0 results in a system with low financial barriers to entry. -The technical requirements for participation are also low and allow everyone to contribute to the network's security. -Those who cannot or do not want to vote (i.e., stake) can delegate stake instead while still adding to the network's security. -Proof-of-Stake is, moreover, energy efficient and environmentally friendly. +In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions they should +consider confirmed. The Coordinator was always intended as a temporary solution; thus, it is removed with the upgrade to +IOTA 2.0 (a.k.a. Coordicide). In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve +conflicts and finalize transactions. Each of those votes must have a weight associated with it, which depends on the +identity that cast the vote. Determining the weight of an identity is closely related to the type of Sybil protection +mechanism used. + +In IOTA 2.0, we use Proof-of-Stake as the Sybil protection mechanism. Proof-of-Stake assigns to every participant a +weight proportional to the number of tokens they hold. Since tokens are a scarce resource, they can be used as a base +for a Sybil protection mechanism, being much more efficient than relying on scarce resources external to the system, +such as hardware or electricity, as in Proof-of-Work-based systems. + +The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and +committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of +seats, with each seat exclusively assigned to a single validator. The rules governing acceptance, confirmation, and +finalization are contingent on the number of seats that have endorsed (cast their votes in favor of) a block +(transaction). This voting mechanism inherently enables decentralization, as a single entity can, at most, occupy one +seat within the committee and, thus, have a restricted level of influence in the voting process, proportional to the +staked and delegated tokens. + +Using Proof-of-Stake in IOTA 2.0 results in a system with low financial barriers to entry. The technical requirements +for participation are also low and allow everyone to contribute to the network's security. Those who cannot or do not +want to vote (i.e., stake) can delegate stake instead while still adding to the network's security. Proof-of-Stake is, +moreover, energy efficient and environmentally friendly. In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of-Stake a good choice. @@ -85,28 +94,30 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA # Staking -The IOTA protocol accepts blocks and transactions after they reach a certain weight through voting. -The voters are a selected validator committee. -The following gives a high-level idea of the selection process, while we specify its details in the rest of the section. - -Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. -By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. -Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their influence in the system. -A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be selected into a committee for a certain duration. -Only the votes of those selected into the committee are considered to determine the _Witness Weight_, used for the acceptance of blocks, -and _Approval Weight_, used for conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. -Once selected, every validator in the committee occupies a seat, and every seat has the same voting weight. - -The IOTA protocol slices time into slots and epochs. An epoch is simply a specified number of slots, and a slot has a protocol-defined duration in seconds. -A new validator committee is selected for each epoch. Shortly before an epoch ends, the current activity of all registered validators, as well as the pools' stakes, are determined. -Then, a committee is selected out of all the registered stakers with enough block issuance activity, depending on their pool stake. -Once selected, each validator is responsible for issuing _Validation Blocks_ across the epoch through which they vote on conflicts. -A performance factor is calculated based on how many such blocks they issued for each slot and how many they were expected to issue. -This factor determines the amount of _Mana rewards_ the validator's pool receives. - -After an epoch ends, the delegators of the pool can claim their rewards. -The validator may continue to stake or end its stake by going through an unbonding period of its locked tokens. -After this period ends, the validator can unlock their IOTA tokens and claim their Mana rewards. +The IOTA protocol accepts blocks and transactions after they reach a certain weight through voting. The voters are a +selected validator committee. The following gives a high-level idea of the selection process, while we specify its +details in the rest of the section. + +Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. By locking the +tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. +Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their +influence in the system. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible +to be selected into a committee for a certain duration. Only the votes of those selected into the committee are +considered to determine the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for +conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. Once +selected, every validator in the committee occupies a seat, and every seat has the same voting weight. + +The IOTA protocol slices time into slots and epochs. An epoch is simply a specified number of slots, and a slot has a +protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch +ends, the current activity of all registered validators, as well as the pools' stakes, are determined. Then, a committee +is selected out of all the registered stakers with enough block issuance activity, depending on their pool stake. Once +selected, each validator is responsible for issuing _Validation Blocks_ across the epoch through which they vote on +conflicts. A performance factor is calculated based on how many such blocks they issued for each slot and how many they +were expected to issue. This factor determines the amount of _Mana rewards_ the validator's pool receives. + +After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its +stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their +IOTA tokens and claim their Mana rewards. ## Registration @@ -120,18 +131,24 @@ its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042. _This figure gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and instead depends on the value of the corresponding Protocol Parameters._ -Below, we explain how the committee selection for a certain epoch `n` works; first, let's define certain time boundaries used in the algorithm: +Below, we explain how the committee selection for a certain epoch `n` works; first, let's define certain time boundaries +used in the algorithm: - Let `Epoch Start Slot(n))` be the first slot index of epoch `n`. -- Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. - To be eligible for the committee selection of epoch `n`, a potential validator must register until this slot. -- Let `Activity Window Slot(n)` be the slot of `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. - To be eligible for the committee selection of epoch `n`, a potential validator must issue at least one block between `Registration Slot(n)`+1. and this slot. -- Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. This slot is used in checks to decide whether the committee will be rotated or not in the epoch. - -The committee will be a subset of the active _registered validators_. To define this subset, the following steps are taken: - -- We define the set of _registered validators_ by taking all account outputs that satisfy all of the following conditions: +- Let `Registration Slot(n)` be the registration slot with index + `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. To be eligible for the committee + selection of epoch `n`, a potential validator must register until this slot. +- Let `Activity Window Slot(n)` be the slot of `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. To be eligible for + the committee selection of epoch `n`, a potential validator must issue at least one block between + `Registration Slot(n)`+1. and this slot. +- Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. This slot is used in + checks to decide whether the committee will be rotated or not in the epoch. + +The committee will be a subset of the active _registered validators_. To define this subset, the following steps are +taken: + +- We define the set of _registered validators_ by taking all account outputs that satisfy all of the following + conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. - For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the @@ -156,24 +173,23 @@ The committee will be a subset of the active _registered validators_. To define ### Committee Tasks The selected members of the committee are expected to issue _Validation Blocks_, defined in -[TIP-46](../TIP-0046/tip-0046.md). Only the votes of those selected into the committee are considered to determine the Witness Weight, used for the acceptance of blocks, and Approval Weight, used for conflict resolution and transaction acceptance. -The [performance](#performance-factor) of a validator is determined by the issued Validation -Blocks, and affects the validator pool's Mana rewards. - +[TIP-46](../TIP-0046/tip-0046.md). Only the votes of those selected into the committee are considered to determine the +Witness Weight, used for the acceptance of blocks, and Approval Weight, used for conflict resolution and transaction +acceptance. The [performance](#performance-factor) of a validator is determined by the issued Validation Blocks, and +affects the validator pool's Mana rewards. # Delegation -By delegating IOTA tokens, a user increases a validator's stake proportionally to the number of tokens they delegate without -becoming a validator themselves. To delegate, a _Delegation Output_ must be created. The following section +By delegating IOTA tokens, a user increases a validator's stake proportionally to the number of tokens they delegate +without becoming a validator themselves. To delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. ## Delegation Output Delegation is implemented with a special output type, the so-called Delegation Output. -Upon the creation of a Delegation Output, the protocol assigns to it a unique identifier called `Delegation ID`. -The `Delegation ID` -is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. +Upon the creation of a Delegation Output, the protocol assigns to it a unique identifier called `Delegation ID`. The +`Delegation ID` is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
Delegation Output @@ -357,7 +373,7 @@ The storage deposit of a Delegation Output is higher than for other output types calculation of these outputs defines an additional corresponding field type. | :warning: Preliminary values | -|------------------------------| +| ---------------------------- |
@@ -257,450 +257,23 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
Ed25519 Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
+
An Address derived from an Ed25519 Public Key. Defined in TIP-38 (Ed25519 Address).
Account Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
An Address derived from an Account ID which can be unlocked by unlocking the corresponding Account. Defined in TIP-38 (Account Address).
NFT Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
An Address derived from an NFT ID which can be unlocked by unlocking the corresponding NFT. Defined in TIP-38 (NFT Address).
Multi Address - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 32 to denote a Multi Address.
Addresses anyOf -
- Address with Weight - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address oneOf -
- Ed25519 Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
Weightuint8The weight of the unlocked address.
-
-
+
Defines a Multi Address that consists of addresses with weights and a threshold value. The Multi Address can be unlocked if the cumulative weight of all unlocked addresses is equal to or exceeds the threshold. Defined in TIP-52 (Multi Address).
Restricted Address - - - - - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 40 to denote a Restricted Address.
Address oneOf -
- Ed25519 Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
- Multi Address - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 32 to denote a Multi Address.
Addresses anyOf -
- Address with Weight - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address oneOf -
- Ed25519 Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 0 to denote an Ed25519 Address.
PubKeyHashByteArray[32]The raw bytes of the Ed25519 address which is the BLAKE2b-256 hash of the Ed25519 public key.
-
-
- Account Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
- NFT Address - - - - - - - - - - - - - - - - -
- Name - - Type - - Description -
Address Typeuint8Set to value 16 to denote an NFT Address.
NFT IDByteArray[32]The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the Output ID that created it.
-
-
Weightuint8The weight of the unlocked address.
-
-
-
-
Allowed Capabilities(uint8)ByteArrayBitflags expressed as a series of bytes. A leading uint8 denotes its length.
+
An address that contains another address and allows for configuring its capabilities. Defined in TIP-50 (Restricted Address).
Output Type uint8Set to value 7 to denote a Delegation Output.Set to value 4 to denote a Delegation Output.
Amount
@@ -1328,7 +1344,9 @@ This performance factor for a slot is defined as follows. - Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. - Let `TargetValidationBlocks` be a protocol parameter representing the number of validation blocks a validator is - supposed to issue per slot. Note that, when using an `uint8` to store `Performance Factor`, `TargetValidationBlocks` must be strictly smaller than `2^8`, otherwise the performance of a well behaved validator would overflow the variable. + supposed to issue per slot. Note that, when using an `uint8` to store `Performance Factor`, `TargetValidationBlocks` + must be strictly smaller than `2^8`, otherwise the performance of a well behaved validator would overflow the + variable. #### Calculations @@ -1337,11 +1355,11 @@ This performance factor for a slot is defined as follows. `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. - Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be the `Slot Performance Factor`. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. - In the case that `TargetValidationBlocks` is strictly smaller than `2^8-1`, one could set `Slot Performance Factor` to +- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. In the + case that `TargetValidationBlocks` is strictly smaller than `2^8-1`, one could set `Slot Performance Factor` to `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and - it should be punished when combining the `Slot Performance Factors` into `Epoch Performance Factors`. - In the case that `TargetValidationBlocks` is larger or equal than `2^8-1`, this "trick" can overflow the variables used. + it should be punished when combining the `Slot Performance Factors` into `Epoch Performance Factors`. In the case that + `TargetValidationBlocks` is larger or equal than `2^8-1`, this "trick" can overflow the variables used. ## Epoch Level @@ -1374,7 +1392,10 @@ Note that the value of the `Performance Factor` will be an integer between 0 and #### Calculations -- Given the values defined above, then `Profit Margin = (Total Validator Stake<> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) - `Pool Coefficient Exponent` = 11 @@ -1477,13 +1499,14 @@ The following section specifies how to convert the slot-level data into epoch-le uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - Finally, `Pool Reward` will be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1))`. - Note that if this value is smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This is done to incentivize validators to define reasonable values for their fixed cost. + Note that if this value is smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This + is done to incentivize validators to define reasonable values for their fixed cost. ## Validator Rewards An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The -transaction validation rules for removing the feature are defined in [TIP-42](../TIP-0042/tip-0042.md). Upon removal, the amount of Mana Rewards -that can be claimed is defined as follows. +transaction validation rules for removing the feature are defined in [TIP-42](../TIP-0042/tip-0042.md). Upon removal, +the amount of Mana Rewards that can be claimed is defined as follows. #### Parameters @@ -1506,19 +1529,20 @@ that can be claimed is defined as follows. removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. - Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` - - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. - Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 - bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 - bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be - used). -Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. -- Finally, we then decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where - the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator - `i` will be, then, the sum of `Rewards(n)` for n in the validation period. + begin by calculating the `Undecayed Rewards(n)` for each epoch `n` in the validation period. If + `Pool Rewards(n)-Fixed Cost≥0`, it will be given by: + - `Undecayed Rewards(n)` = `Fixed Cost + Profit Margin Factor + Residual Validator Factor` where - + `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n) ` - + `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent` - + `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. + Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 + bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits + integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). + Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. +- Finally, we then decay the rewards according to [Mana Decay], meaning that + `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in + [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of + `Rewards(n)` for n in the validation period. ## Delegation Rewards @@ -1555,17 +1579,18 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. We first calculate the undecayed rewards -for each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, we have that `Undecayed Rewards(n)` = -`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that -`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and -`Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it -should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), -we set the undecayed rewards as `Undecayed Rewards(n)` = -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, we decay the -rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` -is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for -n in the validation period. +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. We first calculate the undecayed +rewards for each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, we have that +`Undecayed Rewards(n)` = +`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. +Note that `((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount` uses +up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 +bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). +Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), we set the undecayed rewards as `Undecayed Rewards(n)` = +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, we +decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the +function `decay` is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of +`Rewards(n)` for n in the validation period. # Rationale & Design @@ -1576,11 +1601,11 @@ together. It is however not part of the formal specification and thus non-normat Using dedicated Delegation Outputs over a Delegation Feature in an Account has some advantages. First, it makes it easily possible to delegate to multiple validators from the same account, by creating multiple outputs. In the Stardust -Design ([TIP-18](../TIP-0018/tip-0018.md)), Features are assumed to be unique in an output, and thus having multiple Delegation Features to allow -for multiple delegation targets would require changing that assumption. Second, it decouples the delegation logic from -the Account. Delegation, in contrast to staking, does not require that an account must be the delegator. A Delegation -Output can be owned by a plain Ed25519 address or an NFT or Account Address, making it more flexible. A Delegation -Feature would only allow for Delegation from an account. +Design ([TIP-18](../TIP-0018/tip-0018.md)), Features are assumed to be unique in an output, and thus having multiple +Delegation Features to allow for multiple delegation targets would require changing that assumption. Second, it +decouples the delegation logic from the Account. Delegation, in contrast to staking, does not require that an account +must be the delegator. A Delegation Output can be owned by a plain Ed25519 address or an NFT or Account Address, making +it more flexible. A Delegation Feature would only allow for Delegation from an account. ### Delayed Claiming From 4770f7c75abc3384be1a375653215c7e5a119075 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 17 Oct 2023 15:33:56 +0100 Subject: [PATCH 095/124] Add `Storage Score Offset Delegation` --- tips/TIP-0040/tip-0040.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 268e9ae93..705f82c06 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -367,6 +367,10 @@ side. There are thus two types of transitions: delayed claiming transition and d - Set `Delegated Amount` to the value of the `Amount` field. - Set `End Epoch` to `0`. +### Storage Score + +A Delegation Output incurs additional computational cost in order to compute the total stake of a validator. Due to this, such an output has an additional storage score offset, the `Rent Parameters::Storage Score Offset Delegation` as defined in [TIP-49](../TIP-0049/tip-0049.md). + ### Storage Deposit Calculation The storage deposit of a Delegation Output is higher than for other output types. Therefore, the storage deposit From 16ccd5e6b4236c4b72e6476430270b4c9142df86 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 17 Oct 2023 15:34:27 +0100 Subject: [PATCH 096/124] Remove storage deposit table --- tips/TIP-0040/tip-0040.md | 938 -------------------------------------- 1 file changed, 938 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 705f82c06..8d436c30d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -371,944 +371,6 @@ side. There are thus two types of transitions: delayed claiming transition and d A Delegation Output incurs additional computational cost in order to compute the total stake of a validator. Due to this, such an output has an additional storage score offset, the `Rent Parameters::Storage Score Offset Delegation` as defined in [TIP-49](../TIP-0049/tip-0049.md). -### Storage Deposit Calculation - -The storage deposit of a Delegation Output is higher than for other output types. Therefore, the storage deposit -calculation of these outputs defines an additional corresponding field type. - -| :warning: Preliminary values | -| ---------------------------- | - -
- - - - - - - - - - - - -
NameDescriptionWeightReasoning
delegationFields contained in a Delegation Output.100 (preliminary value for testing)Delegation requires additional bookkeeping in nodes for committee selection and mana rewards tracking.
- -The following table shows the Delegation Output including the possible fields and their specific weight. - -
- Delegation Output -
Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.
-
- - - - - - - - - - - - - - - - - -
Offset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
OutputID - key - 3434
Block ID (included) - data - 4040
Slot Booked - data - 88
Slot Created - data - 88
-
Fields - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Output Type - delegation - 11
Amount - data - 88
Delegated Amount - delegation - 88
Delegation ID - delegation - 3232
Validator Address - delegation - 3232
Start Epoch - delegation - 88
End Epoch - delegation - 88
Unlock Conditions Count - data - 11
Unlock Conditions atMostOneOfEach -
- Address Unlock Condition -
Defines the Address that owns this output. It can unlock the output with the proper Unlock in a transaction.
- - - - - -
Fields - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Unlock Condition Type - data - 11
Address oneOf -
- Ed25519 Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
PubKeyHash - data - 3232
-
-
-
- Account Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Account ID - data - 3232
-
-
-
- NFT Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
NFT ID - data - 3232
-
-
-
- Multi Address - - - - - -
Fields - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Addresses anyOf -
- Address with Weight - - - - - -
Fields - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address oneOf -
- Ed25519 Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
PubKeyHash - data - 3232
-
-
-
- Account Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Account ID - data - 3232
-
-
-
- NFT Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
NFT ID - data - 3232
-
-
-
Weight - data - 11
-
-
-
-
-
-
- Restricted Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Address oneOf -
- Ed25519 Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
PubKeyHash - data - 3232
-
-
-
- Account Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Account ID - data - 3232
-
-
-
- NFT Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
NFT ID - data - 3232
-
-
-
- Multi Address - - - - - -
Fields - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Addresses anyOf -
- Address with Weight - - - - - -
Fields - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address oneOf -
- Ed25519 Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
PubKeyHash - data - 3232
-
-
-
- Account Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
Account ID - data - 3232
-
-
-
- NFT Address - - - - - -
Fields - - - - - - - - - - - - - - - - - - - -
- Field - - Field type - - Length Minimum - - Length Maximum -
Address Type - data - 11
NFT ID - data - 3232
-
-
-
Weight - data - 11
-
-
-
-
-
-
Allowed Capabilities Length - data - 11
Allowed Capabilities - data - 01
-
-
-
-
-
-
-
v_byte Minimum9339
v_byte Maximum9650
- # Mana Rewards Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot From 28661b4c1dafff1cd22b2a33c7e452502c135435 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 23 Oct 2023 12:01:09 +0100 Subject: [PATCH 097/124] Remove manually added Table of Contents GitHub and the Wiki both auto-generate a ToC, so it's unnecessary to maintain it. --- tips/TIP-0040/tip-0040.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8d436c30d..98ffc7fde 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -13,22 +13,6 @@ created: 2023-05-03 requires: TIP-19, TIP-20, TIP-21 and TIP-22 --- -# Table of Contents - -1. [Summary](#summary) -2. [Motivation](#motivation) -3. [Building Blocks](#building-blocks) -4. [Staking](#staking) -5. [Delegation](#delegation) - - [Delegation Output](#delegation-output) - - [Storage Deposit](#storage-deposit-calculation) -6. [Mana Rewards](#mana-rewards) - - [Validator Rewards](#validator-rewards) - - [Delegation Rewards](#delegation-rewards) -7. [Rationale & Design](#rationale--design) - - [Delegation Output](#delegation-output-1) -8. [Copyright](#copyright) - # Summary Staking and delegation are mechanisms by which users contribute to the network's security and for which they are From 6045fd3e9d210253207037ae6b3acf50a6b2572a Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 23 Oct 2023 12:09:45 +0100 Subject: [PATCH 098/124] Use passive voice everywhere --- tips/TIP-0040/tip-0040.md | 47 ++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 98ffc7fde..7358f4615 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -37,10 +37,10 @@ conflicts and finalize transactions. Each of those votes must have a weight asso identity that cast the vote. Determining the weight of an identity is closely related to the type of Sybil protection mechanism used. -In IOTA 2.0, we use Proof-of-Stake as the Sybil protection mechanism. Proof-of-Stake assigns to every participant a -weight proportional to the number of tokens they hold. Since tokens are a scarce resource, they can be used as a base -for a Sybil protection mechanism, being much more efficient than relying on scarce resources external to the system, -such as hardware or electricity, as in Proof-of-Work-based systems. +IOTA 2.0 uses Proof-of-Stake as the Sybil protection mechanism. Proof-of-Stake assigns to every participant a weight +proportional to the number of tokens they hold. Since tokens are a scarce resource, they can be used as a base for a +Sybil protection mechanism, being much more efficient than relying on scarce resources external to the system, such as +hardware or electricity, as in Proof-of-Work-based systems. The IOTA 2.0 consensus protocol is founded upon the principle of seat-based committees, determined through staking and committee-selection mechanisms. At any given point in time, the validator committee is composed of a limited number of @@ -79,8 +79,8 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA # Staking The IOTA protocol accepts blocks and transactions after they reach a certain weight through voting. The voters are a -selected validator committee. The following gives a high-level idea of the selection process, while we specify its -details in the rest of the section. +selected validator committee. The following gives a high-level idea of the selection process, while the rest of the +section specifies its normative details. Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. @@ -115,7 +115,7 @@ its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042. _This figure gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and instead depends on the value of the corresponding Protocol Parameters._ -Below, we explain how the committee selection for a certain epoch `n` works; first, let's define certain time boundaries +The following explains how the committee selection for a certain epoch `n` works, with the following time boundaries used in the algorithm: - Let `Epoch Start Slot(n))` be the first slot index of epoch `n`. @@ -131,8 +131,7 @@ used in the algorithm: The committee will be a subset of the active _registered validators_. To define this subset, the following steps are taken: -- We define the set of _registered validators_ by taking all account outputs that satisfy all of the following - conditions: +- The set of _registered validators_ is defined as all Account Outputs that satisfy all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. - For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the @@ -353,7 +352,9 @@ side. There are thus two types of transitions: delayed claiming transition and d ### Storage Score -A Delegation Output incurs additional computational cost in order to compute the total stake of a validator. Due to this, such an output has an additional storage score offset, the `Rent Parameters::Storage Score Offset Delegation` as defined in [TIP-49](../TIP-0049/tip-0049.md). +A Delegation Output incurs additional computational cost in order to compute the total stake of a validator. Due to +this, such an output has an additional storage score offset, the `Rent Parameters::Storage Score Offset Delegation` as +defined in [TIP-49](../TIP-0049/tip-0049.md). # Mana Rewards @@ -499,8 +500,8 @@ values being a list of objects consisting of these fields: -In the next section, we define how these values can be obtained from the slot-level data, after the commitment of the -last slot of that epoch. +The next section defines how these values can be obtained from the slot-level data, after the commitment of the last +slot of that epoch. ### Slot-Epoch Conversion of the Rewards @@ -578,9 +579,9 @@ the amount of Mana Rewards that can be claimed is defined as follows. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. -- Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` - @@ -589,7 +590,7 @@ the amount of Mana Rewards that can be claimed is defined as follows. bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. -- Finally, we then decay the rewards according to [Mana Decay], meaning that +- Finally, decay the rewards according to [Mana Decay](../TIP-0039/tip-0039.md#mana-decay), meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of `Rewards(n)` for n in the validation period. @@ -629,18 +630,18 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. We first calculate the undecayed -rewards for each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, we have that +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. Calculate the undecayed rewards for +each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, the following holds: `Undecayed Rewards(n)` = `((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount` uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). -Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), we set the undecayed rewards as `Undecayed Rewards(n)` = -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, we -decay the rewards according to [Mana Decay], meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the -function `decay` is defined in MANA TIP. The total claimable decayed reward for validator `i` will be, then, the sum of -`Rewards(n)` for n in the validation period. +Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), set the undecayed rewards as `Undecayed Rewards(n)` = +`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, decay +the rewards according to [Mana Decay](../TIP-0039/tip-0039.md#mana-decay), meaning that +`Rewards(n)=decay(Undecayed Rewards(n),m-n)`. The total claimable decayed reward for validator `i` will then be the sum +of `Rewards(n)` for n in the validation period. # Rationale & Design From b2c0cdd0077c4294218a8da665d8b268cee0088b Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 23 Oct 2023 12:11:04 +0100 Subject: [PATCH 099/124] Replace `IOTA Tokens` -> `IOTA coins` --- tips/TIP-0040/tip-0040.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7358f4615..60927c052 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -16,8 +16,8 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 # Summary Staking and delegation are mechanisms by which users contribute to the network's security and for which they are -rewarded. Stakers lock IOTA tokens to become eligible to be selected for the validator committee and consequently give -weight to blocks and transactions. On the other hand, delegators delegate IOTA tokens (which does not imply locking +rewarded. Stakers lock IOTA coins to become eligible to be selected for the validator committee and consequently give +weight to blocks and transactions. On the other hand, delegators delegate IOTA coins (which does not imply locking these tokens) to a validator, forming a validator pool. The weight that validators give to blocks is derived from the total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the total combined stake among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. @@ -82,9 +82,9 @@ The IOTA protocol accepts blocks and transactions after they reach a certain wei selected validator committee. The following gives a high-level idea of the selection process, while the rest of the section specifies its normative details. -Stakers, or interchangeably called _registered validators_, must lock their IOTA tokens to stake them. By locking the +Stakers, or interchangeably called _registered validators_, must lock their IOTA coins to stake them. By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. -Other users - the so-called delegators - can _delegate_ their IOTA tokens to a staker to further increase their +Other users - the so-called delegators - can _delegate_ their IOTA coins to a staker to further increase their influence in the system. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be selected into a committee for a certain duration. Only the votes of those selected into the committee are considered to determine the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for @@ -101,7 +101,7 @@ were expected to issue. This factor determines the amount of _Mana rewards_ the After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their -IOTA tokens and claim their Mana rewards. +IOTA coins and claim their Mana rewards. ## Registration @@ -143,7 +143,7 @@ taken: - `Block Slot Index <= Activity Window Slot(n)`. - For any validator `i` in the set of _registered validators_ the pool stake is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: - - `Stake_i` is the `Staked Amount` of IOTA tokens of the validator's _Staking Feature_. + - `Stake_i` is the `Staked Amount` of IOTA coins of the validator's _Staking Feature_. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` field is equal to `i`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by pool @@ -163,7 +163,7 @@ affects the validator pool's Mana rewards. # Delegation -By delegating IOTA tokens, a user increases a validator's stake proportionally to the number of tokens they delegate +By delegating IOTA coins, a user increases a validator's stake proportionally to the number of tokens they delegate without becoming a validator themselves. To delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. @@ -176,7 +176,7 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id
Delegation Output -
Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.
+
Describes a Delegation Output, which delegates its contained IOTA coins to a validator.
@@ -433,7 +433,7 @@ Note that the value of the `Performance Factor` will be an integer between 0 and #### Input values -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA coins in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. @@ -491,7 +491,7 @@ values being a list of objects consisting of these fields: - + @@ -526,11 +526,11 @@ The following section specifies how to convert the slot-level data into epoch-le #### Input values -- Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the +- Let `Validator Stake(i)` be the amount of IOTA coins staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. -- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at +- Let `Pool Stake` be the total amount of delegated and staked IOTA coins by the validator pool which was determined at the time of the pool stake calculation, i.e. the end of the registration slot. -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA coins in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. From 60ad6454581c73bc08f73146e9064cc01260b2d4 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 23 Oct 2023 12:13:55 +0100 Subject: [PATCH 100/124] Capitalize `Mana` --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 60927c052..7511095a8 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -337,7 +337,7 @@ side. There are thus two types of transitions: delayed claiming transition and d - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` that corresponds to the `Delegation ID` of the one on the input side, which may be an implicit or explicit Delegation ID. The next state is the empty state. - - During this transition, Mana rewards may be added to the total sum of mana on the output side of the transaction, + - During this transition, Mana rewards may be added to the total sum of Mana on the output side of the transaction, according to [delegation rewards](#delegation-rewards). #### Created Outputs From 5e7c84c7545edc937a74f3be75cd659438086429 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 23 Oct 2023 12:14:51 +0100 Subject: [PATCH 101/124] Point protocol params to TIP-49 --- tips/TIP-0040/tip-0040.md | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7511095a8..444745b7c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -17,10 +17,10 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 Staking and delegation are mechanisms by which users contribute to the network's security and for which they are rewarded. Stakers lock IOTA coins to become eligible to be selected for the validator committee and consequently give -weight to blocks and transactions. On the other hand, delegators delegate IOTA coins (which does not imply locking -these tokens) to a validator, forming a validator pool. The weight that validators give to blocks is derived from the -total stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and -the total combined stake among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. +weight to blocks and transactions. On the other hand, delegators delegate IOTA coins (which does not imply locking these +tokens) to a validator, forming a validator pool. The weight that validators give to blocks is derived from the total +stake of the pool (i.e., from the locked tokens of the staker and the delegated tokens of all its delegators) and the +total combined stake among pools. If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant in the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while receiving rewards for their contribution. Note that the size of the committee is bounded, so not all pools might get @@ -63,10 +63,9 @@ In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of- Data types and subschemas used throughout this TIP are defined in [TIP-21](../TIP-0021/tip-0021.md). -## Global Protocol Parameters +## Protocol Parameters -Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA)](../TIP-0022/tip-0022.md) and -[TIP-32 (Shimmer)](../TIP-0032/tip-0032.md). +Protocol parameters used throughout this TIP are defined in [TIP-49](../TIP-0049/tip-0049.md). ## Transaction Payload @@ -84,12 +83,12 @@ section specifies its normative details. Stakers, or interchangeably called _registered validators_, must lock their IOTA coins to stake them. By locking the tokens, the stakers prove control over them, so the protocol assigns them a proportional amount of _stake_ in exchange. -Other users - the so-called delegators - can _delegate_ their IOTA coins to a staker to further increase their -influence in the system. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible -to be selected into a committee for a certain duration. Only the votes of those selected into the committee are -considered to determine the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for -conflict resolution and transaction acceptance. Stake is only used to determine who is selected for the committee. Once -selected, every validator in the committee occupies a seat, and every seat has the same voting weight. +Other users - the so-called delegators - can _delegate_ their IOTA coins to a staker to further increase their influence +in the system. A staker plus all its delegators are called a _staking or validator pool_. Stakers are eligible to be +selected into a committee for a certain duration. Only the votes of those selected into the committee are considered to +determine the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution +and transaction acceptance. Stake is only used to determine who is selected for the committee. Once selected, every +validator in the committee occupies a seat, and every seat has the same voting weight. The IOTA protocol slices time into slots and epochs. An epoch is simply a specified number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch From 29e329bcbace736a09b76092cccb942506494bad Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 2 Nov 2023 16:54:27 +0100 Subject: [PATCH 102/124] Update type prefix & add anchor address --- tips/TIP-0040/tip-0040.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 444745b7c..5eb9ded54 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -192,7 +192,7 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id - + @@ -267,6 +267,10 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id NFT Address
An Address derived from an NFT ID which can be unlocked by unlocking the corresponding NFT. Defined in TIP-38 (NFT Address).
+
+ Anchor Address +
An Address derived from an Anchor ID which can be unlocked by unlocking the corresponding Anchor. Defined in TIP-38 (Anchor Address).
+
Multi Address
Defines a Multi Address that consists of addresses with weights and a threshold value. The Multi Address can be unlocked if the cumulative weight of all unlocked addresses is equal to or exceeds the threshold. Defined in TIP-52 (Multi Address).
From c1e83cc5d4a4310540a9503871a882673595bcf2 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 3 Nov 2023 11:05:35 +0100 Subject: [PATCH 103/124] Format Markdown --- tips/TIP-0040/tip-0040.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 5eb9ded54..92866f3aa 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -513,16 +513,15 @@ The following section specifies how to convert the slot-level data into epoch-le #### Parameters needed for calculations: - `Bootstrapping Duration` = 1154 (approximately 3 years) -- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with - $\theta = 2/3$) +- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with $\theta = + 2/3$) - `Final Reward` = - `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent) ` + `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent)` (constant reward per epoch after the bootstrapping phase) - `Decay Balancing Constant Coefficient` = 8 -- `Decay Balancing Constant = ` (integer approximation of - $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch - duration in years, $T=$ `Bootstrapping Duration`, and $\beta=1/3$). For `Decay Balancing Constant Coefficient` = 8, - `Decay Balancing Constant` = 696. +- `Decay Balancing Constant =` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e + \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and + $\beta=1/3$). For `Decay Balancing Constant Coefficient` = 8, `Decay Balancing Constant` = 696. - `Initial Reward` = `(Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient` (parameter to calculate the reward per epoch in the bootstrapping phase) - `Pool Coefficient Exponent` = 11 @@ -586,7 +585,7 @@ the amount of Mana Rewards that can be claimed is defined as follows. Calculate the `Undecayed Rewards(n)` for each epoch `n` in the validation period. If `Pool Rewards(n)-Fixed Cost≥0`, it will be given by: - `Undecayed Rewards(n)` = `Fixed Cost + Profit Margin Factor + Residual Validator Factor` where - - `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n) ` - + `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n)` - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent` - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 From 55cff3ac9b149622ba3f9300ba49a7f9df294a43 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 8 Nov 2023 13:42:19 +0100 Subject: [PATCH 104/124] Remove `Amount <= Token Supply` check --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 92866f3aa..1dd90eb62 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -291,8 +291,8 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id #### Output Syntactic Validation -- `Amount` field must fulfill the [storage deposit requirements](../TIP-0047/tip-0047.md) and must not be `0`. -- `Amount` field must be ≤ `Token Supply`. +- `Amount` field must not be `0`. +- `Amount` field must fulfill the [storage deposit requirements](../TIP-0047/tip-0047.md). - It must hold true that `1` ≤ `Unlock Conditions Count` ≤ `1`. - `Unlock Condition Type` of an Unlock Condition must define one of the following types: - Address Unlock Condition From 90e1bcc8a44f3992ba004ea5fbfd86fec89849bc Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 8 Nov 2023 14:53:44 +0100 Subject: [PATCH 105/124] Fix incorrect epoch index calculation --- tips/TIP-0040/tip-0040.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1dd90eb62..8c22186d3 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -574,10 +574,11 @@ the amount of Mana Rewards that can be claimed is defined as follows. #### Calculations -- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the - slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. +- Let `Future Bounded Slot Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking Feature_ on the input or output side. +- Let `Future Bounded Epoch Index` be the epoch index corresponding to the slot index `Future Bounded Slot Index`. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`. @@ -624,10 +625,11 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`, where: - - `Future Bounded Epoch Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the - slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - `Future Bounded Slot Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. + - `Future Bounded Epoch Index` is the epoch index corresponding to the slot index `Future Bounded Slot Index`. - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. From b635840582ece3c555a8b756524502f38a353973 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 8 Nov 2023 15:43:06 +0100 Subject: [PATCH 106/124] Remove `Amount` rules (moved to TIP-45) --- tips/TIP-0040/tip-0040.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8c22186d3..f13a1e6ba 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -291,8 +291,6 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id #### Output Syntactic Validation -- `Amount` field must not be `0`. -- `Amount` field must fulfill the [storage deposit requirements](../TIP-0047/tip-0047.md). - It must hold true that `1` ≤ `Unlock Conditions Count` ≤ `1`. - `Unlock Condition Type` of an Unlock Condition must define one of the following types: - Address Unlock Condition From 9110ac3d21d53b01e959dba2362bb3d8ed677c46 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 27 Nov 2023 10:39:33 +0100 Subject: [PATCH 107/124] Apply suggestions from code review Co-authored-by: Thibault Martinez --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index f13a1e6ba..4b4bf100d 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -403,8 +403,8 @@ This performance factor for a slot is defined as follows. #### Calculations - First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of length - `subslotLenght = slotDuration/TargetValidationBlocks` given by - `[beginningSlot+(i-1)*subslotLenght, beginningSlot+i*subslotLenght)`, for `i=1,...,TargetValidationBlocks`. + `subslotLength = slotDuration/TargetValidationBlocks` given by + `[beginningSlot+(i-1)*subslotLength, beginningSlot+i*subslotLength)`, for `i=1,...,TargetValidationBlocks`. - Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be the `Slot Performance Factor`. - Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. In the From d277435be81da6a13ff2a50975155afacb54d367 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 30 Nov 2023 13:50:55 +0100 Subject: [PATCH 108/124] Update registration conditions to latest code --- tips/TIP-0040/tip-0040.md | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 4b4bf100d..bed1000ca 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -104,8 +104,41 @@ IOTA coins and claim their Mana rewards. ## Registration -Accounts are considered registered for validation if they have a _Staking Feature_ in their _Features_. This feature and -its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). +Accounts are considered registered as committee candidates for epoch `Candidate Epoch` if they satisfy all of the +following conditions: + +- The account has a [_Staking Feature_](../TIP-0042/tip-0042.md#staking-feature) in their _Features_ where + `End Epoch >= Candidate Epoch`. +- The account issues a block with a _Candidacy Announcement Payload_ before/or in (TODO: Clarify) the + `Registration Slot(Candidate Epoch)` as defined in [committee selection](#committee-selection). + +### Candidacy Announcement + +A _Candidacy Announcement Payload_ does not contain any data as it is only used to signal candidacy. It is serialized as +follows: + +
+ Candidacy Announcement +
Signals candidacy for committee selection for the epoch after the one in which it is issued.
+
+
Pool Stake uint64The total amount of IOTA tokens staked by the validator and all its delegators.The total amount of IOTA coins staked by the validator and all its delegators.
Pool Rewards
Output Type uint8Set to value 4 to denote a Delegation Output.Set to value 5 to denote a Delegation Output.
Amount
+ + + + + + + + + + +
+ Name + + Type + + Description +
Payload Typeuint8Set to value 2 to denote a Candidacy Announcement Payload.
## Committee Selection From 80b37c9ca9049a692d879c3c35726a02557852da Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 6 Dec 2023 11:53:19 +0100 Subject: [PATCH 109/124] Fix markdown formatting --- tips/TIP-0040/tip-0040.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index bed1000ca..3e78007cf 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -616,14 +616,14 @@ the amount of Mana Rewards that can be claimed is defined as follows. - Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` - - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. - Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 - bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 bits - integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). - Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. + - `Undecayed Rewards(n)` = `Fixed Cost + Profit Margin Factor + Residual Validator Factor` where + - `Profit Margin Complement = (1 << ProfitMarginExponent) - Profit Margin(n)` + - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent` + - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)` + - Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 + bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 + bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be + used). Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. - Finally, decay the rewards according to [Mana Decay](../TIP-0039/tip-0039.md#mana-decay), meaning that `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of From 8e82bc44e4b9e4c308839dcb1e6d03b35d08381c Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 14 Dec 2023 11:41:32 +0100 Subject: [PATCH 110/124] Overhaul committee selection & rewards --- tips/TIP-0040/assets/selection-timing.png | Bin 618321 -> 736908 bytes tips/TIP-0040/tip-0040.md | 297 +++++++++++----------- 2 files changed, 152 insertions(+), 145 deletions(-) mode change 100755 => 100644 tips/TIP-0040/assets/selection-timing.png diff --git a/tips/TIP-0040/assets/selection-timing.png b/tips/TIP-0040/assets/selection-timing.png old mode 100755 new mode 100644 index 7646dd04326e8097cf63cd30af1cda46e92af046..e37d733a6cf11bb4be8c04bf26fe9b0c1fd9f029 GIT binary patch delta 102118 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

<-#M&>g${;g5gH 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 S@e54g$JEfm;J%(m;{O0zuPR9Z diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 3e78007cf..490ae6c9c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -73,7 +73,7 @@ Protocol parameters used throughout this TIP are defined in [TIP-49](../TIP-0049 ## Common Parameters and Functions -- Let `decay(value, n)` be calculated with the algorithm and lookup table in [TIP-39](../TIP-0039/tip-0039.md). +- Let `Decay(value, epochIndexDiff)` be defined as in [TIP-39 (Decay Function)](../TIP-0039/tip-0039.md#decay-function). # Staking @@ -102,15 +102,16 @@ After an epoch ends, the delegators of the pool can claim their rewards. The val stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their IOTA coins and claim their Mana rewards. -## Registration +## Validator Registration Accounts are considered registered as committee candidates for epoch `Candidate Epoch` if they satisfy all of the following conditions: - The account has a [_Staking Feature_](../TIP-0042/tip-0042.md#staking-feature) in their _Features_ where `End Epoch >= Candidate Epoch`. -- The account issues a block with a _Candidacy Announcement Payload_ before/or in (TODO: Clarify) the - `Registration Slot(Candidate Epoch)` as defined in [committee selection](#committee-selection). +- The account issues a Basic Block in a slot `Block Slot` with a _Candidacy Announcement Payload_ where + `Start Slot(Candidate Epoch - 1) <= Block Slot <= Registration Slot(Candidate Epoch)`. `Epoch Start Slot` and + `Registration Slot` are defined in [committee selection](#committee-selection). ### Candidacy Announcement @@ -150,38 +151,35 @@ windows is not accurately depicted here and instead depends on the value of the The following explains how the committee selection for a certain epoch `n` works, with the following time boundaries used in the algorithm: -- Let `Epoch Start Slot(n))` be the first slot index of epoch `n`. -- Let `Registration Slot(n)` be the registration slot with index - `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. To be eligible for the committee - selection of epoch `n`, a potential validator must register until this slot. -- Let `Activity Window Slot(n)` be the slot of `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. To be eligible for - the committee selection of epoch `n`, a potential validator must issue at least one block between - `Registration Slot(n)`+1. and this slot. +- Let `Epoch Start Slot(n)` be the first slot index of epoch `n`. +- Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. To + be eligible for the committee selection of epoch `n`, a potential validator must register until this slot, as defined + in [validator registration](#validator-registration). - Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. This slot is used in checks to decide whether the committee will be rotated or not in the epoch. The committee will be a subset of the active _registered validators_. To define this subset, the following steps are taken: -- The set of _registered validators_ is defined as all Account Outputs that satisfy all of the following conditions: - - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - - The account's Staking Feature's `End Epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the - following condition holds; otherwise, it is inactive: - - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, - and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following - conditions: - - `Block Slot Index > Registration Slot(n)`. - - `Block Slot Index <= Activity Window Slot(n)`. +- The set of _registered validators_ is defined as all Account Outputs that + [registered for Epoch n](#validator-registration). - For any validator `i` in the set of _registered validators_ the pool stake is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: - - `Stake_i` is the `Staked Amount` of IOTA coins of the validator's _Staking Feature_. - - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` - field is equal to `i`. -- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by pool - stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is Epoch `n`'s - preliminary committee. -- The preliminary committee becomes the selected committee if the `Activity Window Slot(n)` is finalized before the + - `Stake_i` is the `Staked Amount` of the validator's _Staking Feature_. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator Address` + field is equal to the Account Address of `i`. +- The set of _registered validators_ is sorted as follows and with decreasing priority in the sort condition. To compare + two validators from the set: + - If pool stakes are not equal, sort by pool stake in descending order. + - If validator stakes are not equal, sort by validator stake in descending order. + - If stake end epochs are not equal, sort by stake end epoch in descending order. + - If fixed costs are not equal, sort by fixed cost in ascending order. + - Otherwise sort by Account ID in descending order. + - Since two validators never have the same Account ID, this ensures a selection criteria as a last resort. +- The size of the committee `Committee Size` is set to the minimum of the `Target Committee Size` and the number of + registered validators. +- The first `Committee Size` entries in the _registered validators_ set is Epoch `n`'s preliminary committee. +- The preliminary committee becomes the selected committee if the `Registration Slot(n)` is finalized before the `Cutoff Slot(n)` is committed; otherwise, the committee of the current epoch becomes the selected committee of the next epoch. @@ -400,8 +398,8 @@ the epoch ends, that is, when its last slot is committed. For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch, this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map -with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these -fields: +of slot indices to a map of the validator's activity in that slot, identified by the `Validator ID`. The activity is +thus tracked per slot, per validator with objects consisting of these data: @@ -410,58 +408,61 @@ fields: - - - + + + - + - +
Description
Slot Indexuint64The slot index for which the performance factor is tracked.Slot Activity Vectoruint32A bitmap where each bit corresponds to a subslot in the slot for which the performance factor is tracked. Hence, the number of subslots (equal to Validation Blocks Per Slot) cannot be greater than 32.
Performance FactorBlocks Issued Count uint8The slot performance factor of the validator, scaled to TargetValidationBlocks.The total number of blocks issued by the validator in the slot.
-### Performance Factor +### Slot Performance Factor This performance factor for a slot is defined as follows. #### Input values -- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in a certain slot. -- Let `TargetValidationBlocks` be a protocol parameter representing the number of validation blocks a validator is - supposed to issue per slot. Note that, when using an `uint8` to store `Performance Factor`, `TargetValidationBlocks` - must be strictly smaller than `2^8`, otherwise the performance of a well behaved validator would overflow the - variable. +- Let `Validation Blocks Per Slot` be a protocol parameter representing the number of validation blocks a validator is + supposed to issue per slot. `Validation Blocks Per Slot` must be less or equal than 32 in order for all subslots to + fit into the `Slot Activity Vector` bitmap. #### Calculations -- First, divide the slot representing times `[beginningSlot, endSlot)` into `TargetValidationBlocks` subslots of length - `subslotLength = slotDuration/TargetValidationBlocks` given by - `[beginningSlot+(i-1)*subslotLength, beginningSlot+i*subslotLength)`, for `i=1,...,TargetValidationBlocks`. -- Then, count how many of these subslots have at least one validation block issued in them. In principle, this will be - the `Slot Performance Factor`. -- Check if the total number of validation blocks issued in this slot is larger than `TargetValidationBlocks`. In the - case that `TargetValidationBlocks` is strictly smaller than `2^8-1`, one could set `Slot Performance Factor` to - `TargetValidationBlocks + 1`, to signal that the validator issued more validation blocks than it was supposed to and - it should be punished when combining the `Slot Performance Factors` into `Epoch Performance Factors`. In the case that - `TargetValidationBlocks` is larger or equal than `2^8-1`, this "trick" can overflow the variables used. +- Divide the slot representing times `[Slot Start, Slot End)` into `Validation Blocks Per Slot` subslots of length + `Subslot Duration = Slot Duration In Seconds/Validation Blocks Per Slot` given by + `[Slot Start + (i - 1) * Subslot Duration, Slot Start + i * Subslot Duration)`, for + `i = 1,...,Validation Blocks Per Slot`. +- Determine how many of these subslots have at least one validation block issued in them and set the bit with the + subslot index in the `Slot Activity Vector`. This is the `Slot Performance Factor`. +- Count the number of validation blocks issued in this slot as `Blocks Issued Count`. This value should be capped at + `Validation Blocks Per Slot`. If the number of blocks issued in this slot is greater than + `Validation Blocks Per Slot`, set `Blocks Issued Count` to `Validation Blocks Per Slot + 1` to signal that the + validator issued more validation blocks than it was supposed to and that it should be punished when combining the slot + performance factors into an epoch performance factor. + - Since `Validation Blocks Per Slot` must be less or equal than 32, this approach will not overflow + `Blocks Issued Count`. ## Epoch Level -### Epoch performance factor +### Epoch Performance Factor #### Input values -- Let `Slot Performance Factor Array` be the array of _Slot Performance Factors_ of a given validator in each slot on an +- Let `Slot Performance Factor Array` be the array of _Slot Performance Factors_ of a given validator in each slot of an epoch. #### Calculations -- Then `Performance Factor` is given by the average between these values, rounded down to the nearest integer. - Additionally, if the validator issued more than `TargetValidationBlocks` validation blocks in any slot, the - performance factor for the whole epoch is set to 0 as a form of punishment. - -Note that the value of the `Performance Factor` will be an integer between 0 and `TargetValidationBlocks`. +- Then `Epoch Performance Factor` is given by the average between these values, rounded down to the nearest integer. + This can be calculated as the sum of bits set to `1` in each `Slot Activity Vector` with a subsequent _zero-fill + right-shift_ operation by `Slots Per Epoch Exponent`. +- If the validator issued more than `Validation Blocks Per Slot` validation blocks in any slot, that is, if + `Blocks Issued Count > Validation Blocks Per Slot`, then `Epoch Performance Factor` is set to 0 as a form of + punishment. + - Note that the value of the `Epoch Performance Factor` will be an integer between 0 and `Validation Blocks Per Slot`. ### Profit Margins @@ -473,16 +474,16 @@ Note that the value of the `Performance Factor` will be an integer between 0 and #### Parameters -- Let `ProfitMarginExponent` be 8. +- Let `Profit Margin Exponent` be 8. #### Calculations - Given the values defined above, then - `Profit Margin = (Total Validator Stake<2Profit Margin Exponent, so `Profit Margin` can + be set to use `Profit Margin Exponent` bits. -Additionally, the profit margins must be tracked for each epoch. +The `Profit Margin` must be tracked for each epoch: @@ -490,26 +491,19 @@ Additionally, the profit margins must be tracked for each epoch. - - - - -
Type Description
Epoch Indexuint64 - The epoch index for which the profit margin is tracked. -
Profit Margin uint8 - An integer representing the epoch profit margin, scaled to `2^ProfitMarginExponent`. + An integer representing the epoch profit margin, scaled to 2Profit Margin Exponent.
### Epoch Rewards -The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the -values being a list of objects consisting of these fields: +The rewards of an epoch are tracked by keeping a map from epoch indices to a map from `Validator ID`s to values +consisting of these fields: @@ -517,11 +511,6 @@ values being a list of objects consisting of these fields: - - - - - @@ -532,6 +521,11 @@ values being a list of objects consisting of these fields: + + + + +
Type Description
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stake uint64uint64 The total amount of rewards the validator pool received.
Fixed Costuint64The fixed cost of the validator in that epoch.
The next section defines how these values can be obtained from the slot-level data, after the commitment of the last @@ -544,18 +538,17 @@ The following section specifies how to convert the slot-level data into epoch-le #### Parameters needed for calculations: - `Bootstrapping Duration` = 1154 (approximately 3 years) -- `Rewards Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the Whitepaper, with $\theta = - 2/3$) -- `Final Reward` = - `(Total Supply * Rewards Mana Share Coefficient * generationRate) >> (generationRateExponent - slotsPerEpochExponent)` - (constant reward per epoch after the bootstrapping phase) -- `Decay Balancing Constant Coefficient` = 8 -- `Decay Balancing Constant =` (integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e +- `Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the _IOTA 2.0 Incentives and Tokenomics + Whitepaper_, with $\theta = 2/3$) +- `Final Reward = (Total Supply * Mana Share Coefficient * Generation Rate) >> (Generation Rate Exponent - Slots Per Epoch Exponent)`. + - This is the constant reward per epoch after the bootstrapping phase. +- `Decay Balancing Constant` is an integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and - $\beta=1/3$). For `Decay Balancing Constant Coefficient` = 8, `Decay Balancing Constant` = 696. -- `Initial Reward` = `(Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient` (parameter to - calculate the reward per epoch in the bootstrapping phase) -- `Pool Coefficient Exponent` = 11 + $\beta=1/3$. + - This is the parameter to calculate the reward per epoch in the bootstrapping phase. +- For `Decay Balancing Constant Coefficient = 8`, `Decay Balancing Constant = 696`. +- `Initial Reward = (Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient`. +- `Pool Coefficient Exponent = 11`. #### Input values @@ -570,21 +563,23 @@ The following section specifies how to convert the slot-level data into epoch-le #### Calculations - The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - - `Initial Reward * decay(n)` if `n <= Bootstrapping Duration`. + - `Initial Reward * Decay(n)` if `n <= Bootstrapping Duration`. - `Final Reward` if `n > Bootstrapping Duration`. - The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: - Let `Pool Coefficient` be `((Pool Stake << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. - Notice that, since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow - the calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most - `Pool Coefficient Exponent + 1` bits. - - Take the `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) - - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Performance Factor`. Since `Pool Coefficient` - uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and `Performance Factor` uses at most 8 bits, this - multiplication will not overflow using uint64 variables. - - Finally, `Pool Reward` will be `((Scaled Pool Reward/TargetValidationBlocks) >> (Pool Coefficient Exponent+1))`. - Note that if this value is smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This - is done to incentivize validators to define reasonable values for their fixed cost. + - Since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the + calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most + `Pool Coefficient Exponent + 1` bits. + - Take the `Epoch Performance Factor` for the whole epoch `n` according to + [Epoch Performance Factor](#epoch-performance-factor). + - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Epoch Performance Factor`. + - Since `Pool Coefficient` uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and + `Epoch Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. + - Finally, `Pool Reward` will be + `((Scaled Pool Reward/Validation Blocks Per Slot) >> (Pool Coefficient Exponent + 1))`. Note that if this value is + smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This is done to incentivize + validators to define reasonable values for their fixed cost. ## Validator Rewards @@ -594,89 +589,101 @@ the amount of Mana Rewards that can be claimed is defined as follows. #### Parameters -`ProfitMarginExponent` = 8 +- Let `Profit Margin Exponent` be 8. #### Input Values - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. +- Let `Fixed Cost(n)` be the `Fixed Cost` defined in the _Staking Feature_ at epoch `n`. #### Calculations +- Calculate the rewards of a validator at epoch `n` as `Rewards(Decay End Epoch, n)`: + - Calculate the `Undecayed Rewards(n)` for a given epoch `n`. + - If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Rewards(n)` is zero. + - If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Rewards(n)` is + `Fixed Cost(n) + Profit Margin Factor + Residual Validator Factor`, where: + - `Profit Margin Complement = (1 << Profit Margin Exponent) - Profit Margin(n)`. + - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent`. + - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Staked Amount/Pool Stake(n)`. + - Note that `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Staked Amount` uses up + to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as + a 128 bits integer or it should be stored as 2 `uint64` variables (and the proper 128 by 64 division algorithm + must be used). + - `Rewards(Decay End Epoch, n)` is the decayed reward for epoch `n`, that is: + - `Rewards(Decay End Epoch, n) = Decay(Undecayed Rewards(n), Decay End Epoch - n)`. - Let `Future Bounded Slot Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking Feature_ on the input or output side. - Let `Future Bounded Epoch Index` be the epoch index corresponding to the slot index `Future Bounded Slot Index`. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that - removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and - `Epoch Index < Future Bounded Epoch Index`. -- Let the total claimable rewards at epoch `m` be the sum of `Rewards(n)` for a certain set of epoch indexes `n> ProfitMarginExponent` - - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)` - - Note that `((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount` uses up to 94 - bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 - bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be - used). Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), `Undecayed Rewards(n)` must be set to zero. -- Finally, decay the rewards according to [Mana Decay](../TIP-0039/tip-0039.md#mana-decay), meaning that - `Rewards(n)=decay(Undecayed Rewards(n),m-n)`, where the function `decay` is defined in - [TIP-39](../TIP-0039/tip-0039.md). The total claimable decayed reward for validator `i` will be, then, the sum of - `Rewards(n)` for n in the validation period. +- Let the `Claimable Rewards(id)` be all reward entries for the validator identified by the Account ID `id` of the + account that removes the Staking Feature, where the reward entry's epoch index `Epoch Index` satisfies all of the + following conditions: + - `Epoch Index >= Start Epoch + 1`. + - `Epoch Index < Last Reward Epoch` where `Last Reward Epoch` is the minimum of `Future Bounded Epoch Index` and + `End Epoch + 1`. +- The total claimable decayed rewards for a validator `id` is the sum of `Rewards(Decay End Epoch, n)` for each epoch + `n` in `Claimable Rewards(id)` where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` (or `0` if + that would underflow) and `Last Reward Epoch`. + - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. ## Delegation Rewards To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards -for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They -are _potential_ since the validator to which the output is delegating may not have been selected into the committee for -that epoch. +for the epoch in which it is destroyed, since the rewards for that epoch only become available in the subsequent epoch. +They are _potential_ since the validator to which the output is delegating may not have been selected into the committee +for that epoch. #### Parameters -`ProfitMarginExponent` = 8 and `DecayExponent` = 32 +- Let `Profit Margin Exponent` be 8. #### Input Values - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. -- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. -- Let `Fixed Cost` be the `Fixed Cost` of the Validator, as defined in its Staking Feature. +- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards(id)` with epoch index `n` for validator + `id`. +- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards(id)` with epoch index `n` for validator + `id`. +- Let `Fixed Cost(n)` be the `Fixed Cost` defined in the _Staking Feature_ at epoch `n`. #### Calculations The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field - in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, - where: +- Calculate the rewards of a delegator at epoch `n` as `Rewards(Decay End Epoch, n)`: + - Calculate the `Undecayed Rewards(n)` for a given epoch `n`. + - If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Rewards(n)` is + `((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Delegated Amount/Pool Stake(n)`. + - Note that + `((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Delegated Amount` + uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either + stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division + algorithm must be used). + - If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Rewards(n)` is + `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Delegated Amount/Pool Stake(n)`. + - `Rewards(Decay End Epoch, n)` is the decayed reward for epoch `n`, that is: + - `Rewards(Decay End Epoch, n) = Decay(Undecayed Rewards(n), Decay End Epoch - n)`. +- Let the `Claimable Rewards(address)` be all reward entries for the validator identified by the Account ID + corresponding to the `address`, which is the `Validator Address` field in the Delegation Output, where the entry's + epoch index `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`, where: - `Future Bounded Slot Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. - `Future Bounded Epoch Index` is the epoch index corresponding to the slot index `Future Bounded Slot Index`. - - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous - epoch became available, thus forfeiting the potential rewards of that previous epoch. + - Note that no transaction validation rule exists to prevent claiming rewards too early, that is, before the rewards + of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. - -Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`. Calculate the undecayed rewards for -each epoch `n` `Undecayed Rewards(n)`. In the case where `Pool Rewards(n)-Fixed Cost≥0`, the following holds: -`Undecayed Rewards(n)` = -`((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. -Note that `((Profit Margin Complement * (Pool Rewards(n)-Fixed Cost)) >> ProfitMarginExponent) * Delegated Amount` uses -up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as a 128 -bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division algorithm must be used). -Otherwise (i.e., if `Pool Rewards(n)-Fixed Cost<0`), set the undecayed rewards as `Undecayed Rewards(n)` = -`((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. Then, decay -the rewards according to [Mana Decay](../TIP-0039/tip-0039.md#mana-decay), meaning that -`Rewards(n)=decay(Undecayed Rewards(n),m-n)`. The total claimable decayed reward for validator `i` will then be the sum -of `Rewards(n)` for n in the validation period. +- The total claimable decayed rewards for a Delegation Output with `address` set to the `Validator Address`, be the sum + of `Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(address)`, where `Decay End Epoch` is the + maximum of `Future Bounded Epoch Index - 1` (or `0` if that would underflow) and `Delegation End`. + - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. # Rationale & Design From 4bf2f676b624c957aa0f4f1183dfd87a4d8e4a71 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 14 Dec 2023 11:45:30 +0100 Subject: [PATCH 111/124] Change `Validator ID` occurences to `Address` --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 490ae6c9c..de2cca77c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -328,7 +328,7 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id - Unlock Conditions must be sorted in ascending order based on their `Unlock Condition Type`. - Syntactic validation of all present unlock conditions must pass. - Address Unlock Condition must be present. -- `Validator ID` must not be zeroed out. +- The underlying `Account ID` of `Validator Address` must not be zeroed out. ### Additional Transaction Semantic Validation Rules @@ -359,7 +359,7 @@ side. There are thus two types of transitions: delayed claiming transition and d - Delayed Claiming Transition - Is identified by a zeroed-out `Delegation ID` on the input side and a non-zeroed-out `Delegation ID` on the output side. - - The fields `Delegated Amount`, `Start Epoch` and `Validator ID` must not be changed. + - The fields `Delegated Amount`, `Start Epoch` and `Validator Address` must not be changed. - `End Epoch` on the output must be set as follows. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection), where `n` is equal to `Future Bounded Epoch Index`. From 38b1803edd5e5ae249b8b81eea15fd332fddc412 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 14 Dec 2023 11:59:23 +0100 Subject: [PATCH 112/124] Parameterize `Pool Stake` --- tips/TIP-0040/tip-0040.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index de2cca77c..1824ee488 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -554,10 +554,10 @@ The following section specifies how to convert the slot-level data into epoch-le - Let `Validator Stake(i)` be the amount of IOTA coins staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. -- Let `Pool Stake` be the total amount of delegated and staked IOTA coins by the validator pool which was determined at - the time of the pool stake calculation, i.e. the end of the registration slot. -- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA coins - in the selected committee. +- Let `Pool Stake(i)` be the total amount of delegated and staked IOTA coins by the validator pool `i`, identified by + the validator's `Account ID`, which was determined at the time of the pool stake calculation, i.e. the end of the + registration slot. +- Let `Total Stake` be the sum of all `Pool Stake(i)` where validator `i` is in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. #### Calculations @@ -567,8 +567,8 @@ The following section specifies how to convert the slot-level data into epoch-le - `Final Reward` if `n > Bootstrapping Duration`. - The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: - Let `Pool Coefficient` be - `((Pool Stake << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. - - Since both `Pool Stake` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the + `((Pool Stake(i) << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. + - Since both `Pool Stake(i)` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most `Pool Coefficient Exponent + 1` bits. - Take the `Epoch Performance Factor` for the whole epoch `n` according to From 593e050f6e15c3e399c1e65d3ccd1caf310cc587 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 14 Dec 2023 12:22:59 +0100 Subject: [PATCH 113/124] Correct storage score offset parameter name --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1824ee488..2bfb6bde2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -385,7 +385,7 @@ side. There are thus two types of transitions: delayed claiming transition and d ### Storage Score A Delegation Output incurs additional computational cost in order to compute the total stake of a validator. Due to -this, such an output has an additional storage score offset, the `Rent Parameters::Storage Score Offset Delegation` as +this, such an output has an additional storage score offset, the `Storage Score Parameters::Offset Delegation` as defined in [TIP-49](../TIP-0049/tip-0049.md). # Mana Rewards From 8a78c71ca83b9ef274424fe4b818fa672fb570e5 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 14 Dec 2023 14:08:24 +0100 Subject: [PATCH 114/124] Add names of Validator & Delegator Reward funcs --- tips/TIP-0040/tip-0040.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 2bfb6bde2..30fed7e67 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -370,7 +370,7 @@ side. There are thus two types of transitions: delayed claiming transition and d corresponds to the `Delegation ID` of the one on the input side, which may be an implicit or explicit Delegation ID. The next state is the empty state. - During this transition, Mana rewards may be added to the total sum of Mana on the output side of the transaction, - according to [delegation rewards](#delegation-rewards). + according to [delegator rewards](#delegator-rewards). #### Created Outputs @@ -625,12 +625,13 @@ the amount of Mana Rewards that can be claimed is defined as follows. - `Epoch Index >= Start Epoch + 1`. - `Epoch Index < Last Reward Epoch` where `Last Reward Epoch` is the minimum of `Future Bounded Epoch Index` and `End Epoch + 1`. -- The total claimable decayed rewards for a validator `id` is the sum of `Rewards(Decay End Epoch, n)` for each epoch - `n` in `Claimable Rewards(id)` where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` (or `0` if - that would underflow) and `Last Reward Epoch`. +- Let `Validator Rewards(Account ID)` be the total claimable decayed rewards for the Account Output identified by + `Account ID`. It is the sum of `Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(Account ID)` + where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` (or `0` if that would underflow) and + `Last Reward Epoch`. - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. -## Delegation Rewards +## Delegator Rewards To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards @@ -680,9 +681,10 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - Note that no transaction validation rule exists to prevent claiming rewards too early, that is, before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -- The total claimable decayed rewards for a Delegation Output with `address` set to the `Validator Address`, be the sum - of `Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(address)`, where `Decay End Epoch` is the - maximum of `Future Bounded Epoch Index - 1` (or `0` if that would underflow) and `Delegation End`. +- Let `Delegator Rewards(Delegation ID)` be the total claimable decayed rewards for the Delegation Output identified by + `Delegation ID` with `address` set to the `Validator Address`. It is the sum of `Rewards(Decay End Epoch, n)` for each + epoch `n` in `Claimable Rewards(address)`, where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` + (or `0` if that would underflow) and `Delegation End`. - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. # Rationale & Design From 9bd48fd04301174c6c60a4deee914e021754130e Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 21 Dec 2023 13:52:19 +0100 Subject: [PATCH 115/124] Add storage score test vector --- tips/TIP-0040/tip-0040.md | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 30fed7e67..f5b4c2bd6 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -773,6 +773,49 @@ be set to or compared against the future-bounded slot index, which prevents faki index is always at most equal to the slot to which the block belongs, based on its `Issuing Time`, since the newest, valid commitment that can be picked is `Min Committable Age` slots old. +# Test Vectors + +The protocol parameters used in the following test vectors are the same as in +[TIP-49 (Protocol Parameters Hash)](../TIP-0049/tip-0049.md#protocol-parameters-hash). + +## Storage Score + +The following test vector shows the calculation of the storage score according to [TIP-47](../TIP-0047/tip-0047.md). + +Delegation Output (json-encoded): + +```json +{ + "type": 5, + "amount": "200000000", + "delegatedAmount": "500000000", + "delegationId": "0x08b987baffaacb9da156734275ee01a42a35fe06653823be654821a7ddf92380", + "validatorAddress": { + "type": 8, + "accountId": "0x17432c5a7a672503480241125e3952414a7a320441080c624c264b004e09614a" + }, + "startEpoch": 30, + "endEpoch": 50, + "unlockConditions": [ + { + "type": 0, + "address": { + "type": 0, + "pubKeyHash": "0xed1484f4d1f7d8c037087fed661dd92faccae1eed3c01182d6fdd6828cea144a" + } + } + ] +} +``` + +Delegation Output (hex-encoded binary serialization): + +``` +0x0500c2eb0b000000000065cd1d0000000008b987baffaacb9da156734275ee01a42a35fe06653823be654821a7ddf923800817432c5a7a672503480241125e3952414a7a320441080c624c264b004e09614a1e00000032000000010000ed1484f4d1f7d8c037087fed661dd92faccae1eed3c01182d6fdd6828cea144a +``` + +Delegation Output Storage Score: `313`. + # Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From 9ddcd13f94507306e6e56d65ab525b6c67e6ff4e Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 21 Dec 2023 14:53:16 +0100 Subject: [PATCH 116/124] Change Validator Address type to Account Address --- tips/TIP-0040/tip-0040.md | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index f5b4c2bd6..40b1cfd4f 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -241,9 +241,36 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. - Validator Address - ByteArray[32] - The Account Address of the validator to which this output is delegating. + Validator Address oneOf + +

+ Account Address +
An Address derived from an Account ID which can be unlocked by unlocking the corresponding Account. Defined in TIP-38 (Account Address).
+ + + + + + + + + + + + + + + + +
+ Name + + Type + + Description +
Address Typeuint8Set to value 8 to denote an Account Address.
Account IDByteArray[32]The raw bytes of the Account ID which is the BLAKE2b-256 hash of the Output ID that created it.
+
+ Start Epoch From d47dc73dd33377559024001d2a07fdba78b24d2a Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 15 Feb 2024 16:30:23 +0000 Subject: [PATCH 117/124] update target rewards calculations --- tips/TIP-0040/tip-0040.md | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 40b1cfd4f..bceb09df2 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -564,17 +564,11 @@ The following section specifies how to convert the slot-level data into epoch-le #### Parameters needed for calculations: -- `Bootstrapping Duration` = 1154 (approximately 3 years) -- `Mana Share Coefficient` = 2 (relative to the term $\theta/(1-\theta)$ from the _IOTA 2.0 Incentives and Tokenomics - Whitepaper_, with $\theta = 2/3$) -- `Final Reward = (Total Supply * Mana Share Coefficient * Generation Rate) >> (Generation Rate Exponent - Slots Per Epoch Exponent)`. +- `Bootstrapping Duration` = 1154 epochs (approximately 3 years) +- `Reward To Generation Ratio` = 2 (the ratio of final target rewards rate to Mana generation rate) +- `Final Target Rewards Rate = (Total Supply * Reward To Generation Ratio * Generation Rate) >> (Generation Rate Exponent - Slots Per Epoch Exponent)`. - This is the constant reward per epoch after the bootstrapping phase. -- `Decay Balancing Constant` is an integer approximation of $2^{\text{Decay Balancing Constant Coefficient}}\frac{e - \Delta}{T(1-\exp{(-\beta \Delta)})}$, for $Delta =$ epoch duration in years, $T=$ `Bootstrapping Duration`, and - $\beta=1/3$. - - This is the parameter to calculate the reward per epoch in the bootstrapping phase. -- For `Decay Balancing Constant Coefficient = 8`, `Decay Balancing Constant = 696`. -- `Initial Reward = (Final Reward * Decay Balancing Constant) >> Decay Balancing Constant Coefficient`. +- `Initial Target Rewards Rate = Final Target Rewards Rate / ((Annual Decay Factor Percentage / 100) ^ Bootstrapping Duration In Years)`. - `Pool Coefficient Exponent = 11`. #### Input values @@ -589,9 +583,9 @@ The following section specifies how to convert the slot-level data into epoch-le #### Calculations -- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: - - `Initial Reward * Decay(n)` if `n <= Bootstrapping Duration`. - - `Final Reward` if `n > Bootstrapping Duration`. +- The total target rewards rate `Target Rewards Rate(n)` for an epoch index `n` is defined as: + - `Initial Target Rewards Rate * Decay(n)` if `n <= Bootstrapping Duration`. + - `Final Target Rewards Rate` if `n > Bootstrapping Duration`. - The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: - Let `Pool Coefficient` be `((Pool Stake(i) << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. @@ -600,8 +594,8 @@ The following section specifies how to convert the slot-level data into epoch-le `Pool Coefficient Exponent + 1` bits. - Take the `Epoch Performance Factor` for the whole epoch `n` according to [Epoch Performance Factor](#epoch-performance-factor). - - Let `Scaled Pool Reward` be `Pool Coefficient * Target Reward(n) * Epoch Performance Factor`. - - Since `Pool Coefficient` uses at most 12 bits, `Target Reward(n)` uses at most 41 bits, and + - Let `Scaled Pool Reward` be `Pool Coefficient * Target Rewards Rate(n) * Epoch Performance Factor`. + - Since `Pool Coefficient` uses at most 12 bits, `Target Rewards Rate(n)` uses at most 41 bits, and `Epoch Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - Finally, `Pool Reward` will be `((Scaled Pool Reward/Validation Blocks Per Slot) >> (Pool Coefficient Exponent + 1))`. Note that if this value is From 95a526c635ab6ba9212906b9ffd85afcbd32fdbb Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 5 Mar 2024 08:41:36 +0800 Subject: [PATCH 118/124] Add Commitment Input syntactic requirement --- tips/TIP-0040/tip-0040.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index bceb09df2..90ccc6ae8 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -347,15 +347,13 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id ### Additional Transaction Syntactic Validation Rules -#### Output Syntactic Validation - -- It must hold true that `1` ≤ `Unlock Conditions Count` ≤ `1`. -- `Unlock Condition Type` of an Unlock Condition must define one of the following types: - - Address Unlock Condition -- Unlock Conditions must be sorted in ascending order based on their `Unlock Condition Type`. +- It must hold true that `Unlock Conditions Count = 1`. +- `Unlock Condition Type` of an _Unlock Condition_ must define one of the following types: + - _Address Unlock Condition_ +- _Unlock Conditions_ must be sorted in ascending order based on their `Unlock Condition Type`. - Syntactic validation of all present unlock conditions must pass. -- Address Unlock Condition must be present. - The underlying `Account ID` of `Validator Address` must not be zeroed out. +- A _Commitment Input_ must be present. ### Additional Transaction Semantic Validation Rules From 58eea3481b5af71e3a08b152355d7d50926fd7f4 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 5 Mar 2024 11:31:15 +0800 Subject: [PATCH 119/124] Correct Commitment Input requirement statement --- tips/TIP-0040/tip-0040.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 90ccc6ae8..0c8862edb 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -357,6 +357,7 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id ### Additional Transaction Semantic Validation Rules +- A _Commitment Input_ must be present when a _Delegation Output_ is on the input side of a transaction. - Explicit `Delegation ID`: `Delegation ID` is taken as the value of the `Delegation ID` field in the Delegation output. - Implicit `Delegation ID`: When a Delegation output is consumed as an input in a transaction and `Delegation ID` field is zeroed out, take the BLAKE2b-256 hash of the `Output ID` of the input as `Delegation ID`. @@ -369,9 +370,6 @@ Upon the creation of a Delegation Output, the protocol assigns to it a unique id - Let `Future Bounded Slot Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the commitment input. - Let `Future Bounded Epoch Index` be the epoch index corresponding to the slot index `Future Bounded Slot Index`. -- If the past bounded indices are required for transaction validation, a _Commitment Input_ must be present. This is the - case for any transaction containing a _Delegation Output_ on the input or output side except when it is destroyed in - _Delayed Claiming State_. #### Consumed Outputs @@ -695,7 +693,7 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - `Future Bounded Slot Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation - Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. + Output_ on the input or output side. - `Future Bounded Epoch Index` is the epoch index corresponding to the slot index `Future Bounded Slot Index`. - Note that no transaction validation rule exists to prevent claiming rewards too early, that is, before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. From 2e32ec82f5a9234886df7302c766c86122c5f256 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 28 Mar 2024 15:14:20 +0000 Subject: [PATCH 120/124] add parameter contraints --- tips/TIP-0040/constraints.md | 187 +++++++++++++++++++++++++++++ tips/TIP-0040/tip-0040.md | 222 +++++++++++++++++------------------ 2 files changed, 296 insertions(+), 113 deletions(-) create mode 100644 tips/TIP-0040/constraints.md diff --git a/tips/TIP-0040/constraints.md b/tips/TIP-0040/constraints.md new file mode 100644 index 000000000..bb50c7369 --- /dev/null +++ b/tips/TIP-0040/constraints.md @@ -0,0 +1,187 @@ +# Parameters constraints + +Due to the use of fixed point arithmetics, some contraints on the rewards parameters are needed to prevent overflowing of the variables used for the calculations. + +## Constraints on the Mana Supply + +The first and most straighforward contraint is that the total maximum theoretical Mana in the system should not use more than $\text{Bits Count}$ bits. + +Let's start by calculating the Mana in the system generated by holding tokens $\text{Mana Holders}(n)$ until epoch $n$. + +$$ + \text{Mana Holders}(n)=\frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}* 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} (1-\text{Decay per Epoch}^{n+1}) +$$ +with $\text{Decay per Epoch}=\text{Decay per Year}^{\frac{\text{Seconds per Epoch}}{\text{Seconds per Year}}}$. + +The maximum Mana in the system generated by holding tokens $\text{Max Mana Holders}$ is equivalent to the potential Mana generated by an output holding $\text{Token Supply}$ IOTA coins until epoch $n$, for $n$ large enough. This results: + +$$ +\begin{align*} +\text{Max Mana Holders} = \frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} +\end{align*} +$$ + +We denote by $\text{Max Reward Rate}(n) = \text{Max to Target Ratio} * \text{Target Rewards Rate}(n)$ the theoretical maximum reward distributed at epoch $n$. +In the case of fixed or top stakers based committees, the actual reward distributed per epoch is at most $\text{Target Rewards Rate}(n)$, i.e., $\text{Max to Target Ratio} = 1$. +For random committees, see [Random committees](#random-committees). + +### Mana Supply in the bootstrapping Phase + +In the bootstrapping Phase, the target reward decreases each epoch until reaching $\text{Final Target Rewards Rate}$. +The maximum amount of Mana distributed as rewards until epoch $n$ is: + +$$ +\sum_{i=1}^{n} \text{Decay}(\text{Max Reward Rate}(i),n-i) +$$ + +Since $\text{Max Reward Rate}(i)$ is proportional to the epoch target reward, this is equivalent to + +$$ +\begin{align*} +&\sum_{i=1}^{n} \text{Decay}(\text{Decay}(\text{Max Reward Rate}(1),i-1),n-i)\\ +=&n \text{Decay}(\text{Max Reward Rate}(1),n-1)\\ +=&n \text{Decay per Epoch}^{n-1} \text{Max Reward Rate}(1) +\end{align*} +$$ + + + +the function above is increasing if $n\leq \frac{-1}{\log(\text{Decay per Epoch})}$ and decreasing otherwise (i.e., it is a concave function). However, since the $\text{Bootstrapping Duration}$ is set such that $\text{Bootstrapping Duration in Years}*\text{Beta per Year}=1$, we have that $\text{Bootstrapping Duration in Years} = \frac{1}{\text{Beta per Year}}=\frac{-1}{\log(\text{Decay per Year})}$. Then, the maximum amount of Mana distributed as rewards in the bootstrapping Phase is achieved at $\text{Bootstrapping Duration}$, i.e., the maximum is + +$$ +\begin{align*} +&\text{Max Mana Supply Bootstrapping}\\ +&=\frac{1}{-\log(\text{Decay per Epoch})}* \text{Max to Target Ratio}*\text{Final Target Rewards Rate} +\end{align*} +$$ + +By definition, we have that $\text{Final Target Rewards Rate}$ is + +$$ +\begin{align*} +&\text{Final Target Rewards Rate}=\text{Token Supply}*\text{Reward To Generation Ratio}\\ +*&\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} +\end{align*} +$$ + +Then, the Maximum Mana supply in the bootstrapping phase is + + + +$$ +\begin{align*} +&\text{Max Mana Supply Bootstrapping}\\ +&=\text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\left(\text{Reward To Generation Ratio}*\frac{1}{-\log(\text{Decay per Epoch})}* \text{Max to Target Ratio}\right.\\ ++&\left.\frac{1}{1-\text{Decay per Epoch}}\right)\\ +&\leq \text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\frac{1+\text{Reward To Generation Ratio}*\text{Max to Target Ratio}}{1-\text{Decay per Epoch}} +\end{align*} +$$ + +### Mana Supply after the bootstrapping Phase + +By construction, $\text{Final Target Rewards Rate}$ is such that the target reward per epoch is $\text{Reward To Generation Ratio}$ times the generation by holding tokens in that epoch. + +Then, we have that the total Mana in the system will never be larger than $\text{Max Mana Holders} (1 + \text{Max to Target Ratio} * \text{Reward To Generation Ratio})$, i.e. the Mana circulating Supply will be always smaller than : + +$$ +\begin{align*} +&\text{Max Mana Supply}\\ +&=\text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\frac{1+\text{Reward To Generation Ratio}*\text{Max to Target Ratio}}{1-\text{Decay per Epoch}} +\end{align*} +$$ + +which is the same bound found for the bootstrapping Phase. +Thus, the protocol parameters should be set so that the $\text{Max Mana Supply}$ above is at most $2^{\text{Bits Count}}-1$. + +### Mana Supply for Random committees + +In the case of random commitees, we cap the individual pool reward such that no pool will receive more than $\text{Max Pool Reward}(n) = \text{Max Reward Coeff} * \text{Target Rewards Rate}(n)$ per epoch. +Then, in a single epoch, no more than $\text{Target Committee Size} * \text{Max Reward Coeff} * \text{Target Rewards Rate}(n)$ Mana will be distributed, i.e., in this case, $\text{Max to Target Ratio} = \text{Target Committee Size} * \text{Max Reward Coeff}$. +Since, in general, $\text{Target Committee Size} * \text{Max Reward Coeff}$ might be larger than 1, we must alredy set proper maximim values for $\text{Max to Target Ratio}$ to prevent overflowing in case of a future change in the committee selection. +Here, we set $\text{Max to Target Ratio}=20$. +Note that, for fixed committees, this ratio is naturally respected, without the need to add any type of cap in the rewards. +However, in the case of a future protocol upgrade such that the committee selection becomes random, a cap respecting a maximum of $\text{Max to Target Ratio}=20$ must be introduced. + +## Constraints due to fixed point arithmetics + +Additionally to the parameter constraints to prevent the Mana supply from overflowing, other parameter constraints must be introduced to that the function defined in TIP 40 do not overflow using 64 bits variables. + +In particular, in this TIP we define the following operations: +- `Token Supply << Profit Margin Exponent`: this value must be smaller than 264, +- `Pool Coefficient = ((Pool Stake(i) << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`: +Since both `Pool Stake(i)` and `Validator Stake(i)` are at most `Token Supply`, to not overflow the calculation, `Pool Coefficient Exponent` must be such that (Token Supply << Pool Coefficient Exponent)< 264. +`Pool Coefficient` will then use at most `Pool Coefficient Exponent + 1` bits. +- `res = (Pool Coefficient * Target Rewards Rate(n))>>PoolCoefficientExponent`: this implies that `Pool Coefficient * Target Rewards Rate(n))` must always be smaller than 264, which is guaranteed by the condition Initial Target Rewards Rate <263-Pool Coefficient Exponent. +- `Pool Reward = ((res * Epoch Performance Factor)/Validation Blocks Per Slot)>>1`: since `res` is at most two times `Initial Target Rewards Rate`, and `Epoch Performance Factor` is at most `Validation Blocks Per Slot <= 32`, this imples that Initial Target Rewards Rate * Validation Blocks Per Slot < 263. + +- `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent`: this implies that `Initial Target Rewards Rate<2^(64-Profit Margin Exponent) ` + +## Constraints due to parameter compatibility + +To avoid locally calculating the parameters, some of them are provided in the snapshot file, even thought they not are defined independently in the Whitepaper. +To avoid problems in the parameter setting, we define some sanity checks for these parameters below: + +## Lookup Table and Annual Decay + +Let `Seconds In An Epoch = Slot Duration In Seconds << Slots Per Epoch Exponent` and `Seconds In A Year = 60 * 60 * 24* 365`. +Then the epoch duration in years is given by `Epoch Duration In Years = Seconds In An Epoch/Seconds In A Year`. +Additionally, let `Annual Decay Factor = Annual Decay Factor Percentage/100`. + +The entry `Lookup Table(epochDiff)` in the Lookup table relative to `epochDiff` should be such that + +`0 <= delta < 1`, where + +`delta = (Annual Decay Factor)^(epochDiff*Epoch Duration In Years)*(2**decay Factor Exp) - Lookup Table(epochDiff)` + +## Initial and Final rewards + +Let `Seconds In An Epoch = Slot Duration In Seconds << Slots Per Epoch Exponent` and `Seconds In A Year = 60 * 60 * 24* 365`. +Then the epoch duration in years is given by `Epoch Duration In Years = Seconds In An Epoch/Seconds In A Year`. +The bootstrapping duration in years is, then: +`Bootstrapping Duration In Years = Epoch Duration In Years * Bootstrapping Duration` +Additionally, let `Annual Decay Factor = Annual Decay Factor Percentage/100`. + +Let `Expected Final Target Rewards Rate = (Total Supply * Reward To Generation Ratio * Generation Rate) >> (Generation Rate Exponent - Slots Per Epoch Exponent)` and `Expected Initial Target Rewards Rate = Final Target Rewards Rate / (Annual Decay Factor ^ Bootstrapping Duration In Years)`. + +Then, we need + +`0 <= Expected Final Target Rewards Rate - Final Target Rewards Rate < 1` +and +`0 <= Expected Initial Target Rewards Rate - Initial Target Rewards Rate < 1` + +## Bootstrapping Duration and Decay + +Let `Seconds In An Epoch = Slot Duration In Seconds << Slots Per Epoch Exponent` and `Seconds In A Year = 60 * 60 * 24 * 365`. +Then the number of epochs in a years is given by `Epochs In An Year = Seconds In A Year/Seconds In An Epoch`. +Additionally, let `Annual Decay Factor = Annual Decay Factor Percentage/100`. +Translating this to an exponential decay (as in the Whitepaper), we have that `Beta Per Year = -log(Annual Decay Factor)`. + +The bootstrapping duration should be an integer approximation of `Epochs In An Year/Beta Per Year` + +## Decay Factor Epoch Sum and Decay + +Decay Factor Epoch Sum should be an integer approximation of + +`2^Decay Factor Epoch Sum Exponent* Decay per Epoch/(1-Decay per Epoch)` diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 0c8862edb..372440846 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -143,7 +143,7 @@ follows: ## Committee Selection -![](./assets/selection-timing.png) +![Overview of the timing around committee selection in epochs](./assets/selection-timing.png) _This figure gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and instead depends on the value of the corresponding Protocol Parameters._ @@ -188,7 +188,7 @@ taken: The selected members of the committee are expected to issue _Validation Blocks_, defined in [TIP-46](../TIP-0046/tip-0046.md). Only the votes of those selected into the committee are considered to determine the Witness Weight, used for the acceptance of blocks, and Approval Weight, used for conflict resolution and transaction -acceptance. The [performance](#performance-factor) of a validator is determined by the issued Validation Blocks, and +acceptance. The [performance](#epoch-performance-factor) of a validator is determined by the issued Validation Blocks, and affects the validator pool's Mana rewards. # Delegation @@ -413,15 +413,18 @@ defined in [TIP-49](../TIP-0049/tip-0049.md). # Mana Rewards -Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot -level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when -the epoch ends, that is, when its last slot is committed. +Mana Rewards are claimed and tracked for past epochs on an epoch level. +For an ongoing epoch, they are tracked on a slot level and are then combined into an epoch rewards entry when the +epoch ends (i.e., when its last slot is committed). +Rewards for an epoch become claimable only after the epoch ends. +In the following sections, we define how the rewards are calculated and tracked at the slot level (i.e., for a +still unfinished epoch) and how they are combined and tracked at the epoch level (i.e., after the epoch ends). -## Slot Level +## Calculations done at the Slot Level -For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch, this -results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map -of slot indices to a map of the validator's activity in that slot, identified by the `Validator ID`. The activity is +For each slot, the performance factor of each validator in the selected committee must be tracked. For an ongoing epoch, +this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a +map of slot indices to a map of the validator's activity in that slot, identified by the `Validator ID`. The activity is thus tracked per slot, per validator with objects consisting of these data: @@ -433,7 +436,7 @@ thus tracked per slot, per validator with objects consisting of these data: - + @@ -458,53 +461,58 @@ This performance factor for a slot is defined as follows. `Subslot Duration = Slot Duration In Seconds/Validation Blocks Per Slot` given by `[Slot Start + (i - 1) * Subslot Duration, Slot Start + i * Subslot Duration)`, for `i = 1,...,Validation Blocks Per Slot`. -- Determine how many of these subslots have at least one validation block issued in them and set the bit with the - subslot index in the `Slot Activity Vector`. This is the `Slot Performance Factor`. -- Count the number of validation blocks issued in this slot as `Blocks Issued Count`. This value should be capped at - `Validation Blocks Per Slot`. If the number of blocks issued in this slot is greater than - `Validation Blocks Per Slot`, set `Blocks Issued Count` to `Validation Blocks Per Slot + 1` to signal that the - validator issued more validation blocks than it was supposed to and that it should be punished when combining the slot - performance factors into an epoch performance factor. - - Since `Validation Blocks Per Slot` must be less or equal than 32, this approach will not overflow - `Blocks Issued Count`. - -## Epoch Level +- Determine which of these subslots have at least one validation block issued in them. + Set `Slot Activity Vector` such that: + - If subslot `i` has at least one validation block issued in it, set the bit in `Slot Activity Vector` with the index `i` to 1. + - Otherwise, set the bit in `Slot Activity Vector` with the index `i` to 0. +- Set `Blocks Issued Count` to the total number of validation blocks issued in this slot. + Validators are supposed to issue at most `Validation Blocks Per Slot` validation blocks per slot. + If the number of blocks issued in this slot is greater than `Validation Blocks Per Slot`, + set `Blocks Issued Count` to `Validation Blocks Per Slot + 1` to signal that the + validator issued more validation blocks than it was supposed to and that it should be punished + when combining the slot performance factors into an epoch performance factor. + Since `Validation Blocks Per Slot` must be less or equal than 32, this approach will not overflow `Blocks Issued Count`. +- The `Slot Performance Factor` is then defined as + - The sum of the bits in `Slot Activity Vector`, if `Blocks Issued Count ≤ Validation Blocks Per Slot`. + - 0, otherwise. + +The `Slot Performance Factor` is then an integer between 0 and `Validation Blocks Per Slot`. +Note that there is no need to explicitly calculate the `Slot Performance Factor` for each slot, since they will all be aggregated +as an single `Epoch Performance Factor` after the epoch ends. +Instead, one should simply store all `Slot Activity Vector` and `Blocks Issued Count` (one pair for each slot) until the epoch ends. + +## Mana Rewards at a Epoch Level + +After an epoch has ended, the performance factors tracked at the slot level can be combined into a single performance factor for the whole epoch. +The profit margin of the epoch (which is common for all pools) is also calculated. +With those values determined, the rewards for the whole pool are calculated. +We define the procedure to do so in the next sections. ### Epoch Performance Factor -#### Input values - -- Let `Slot Performance Factor Array` be the array of _Slot Performance Factors_ of a given validator in each slot of an - epoch. - -#### Calculations +The `Epoch Performance Factor` is given by the average between the values of `Slot Performance Factor`, rounded down to the nearest integer. +This can be calculated as the sum of bits set to `1` in each `Slot Activity Vector` with a subsequent _zero-fill right-shift_ operation by +`Slots Per Epoch Exponent`. If the validator issued more than `Validation Blocks Per Slot` validation blocks in any slot, that is, if +`Blocks Issued Count > Validation Blocks Per Slot` in any of the slots in the epoch, then `Epoch Performance Factor` is set to 0 as a form of +punishment. +Note that the value of the `Epoch Performance Factor` will be an integer between 0 and `Validation Blocks Per Slot`. -- Then `Epoch Performance Factor` is given by the average between these values, rounded down to the nearest integer. - This can be calculated as the sum of bits set to `1` in each `Slot Activity Vector` with a subsequent _zero-fill - right-shift_ operation by `Slots Per Epoch Exponent`. -- If the validator issued more than `Validation Blocks Per Slot` validation blocks in any slot, that is, if - `Blocks Issued Count > Validation Blocks Per Slot`, then `Epoch Performance Factor` is set to 0 as a form of - punishment. - - Note that the value of the `Epoch Performance Factor` will be an integer between 0 and `Validation Blocks Per Slot`. +### Profit Margin -### Profit Margins - -#### Input values +#### Input values for the Profit Margin calculation - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA coins in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. -#### Parameters - -- Let `Profit Margin Exponent` be 8. - -#### Calculations +#### Profit Margin calculation +- Let `Profit Margin Exponent` be as definced in [TIP-49](../TIP-0049/tip-0049.md). - Given the values defined above, then `Profit Margin = (Total Validator Stake << Profit Margin Exponent)/(Total Validator Stake + Total Stake)`. Note that this will be an integer strictly smaller than 2Profit Margin Exponent, so `Profit Margin` can be set to use `Profit Margin Exponent` bits. +- To prevent overflows in the calculation above, (Token Supply << Profit Margin Exponent)< 264, where `Token Supply` is the current token supply on the network, as defined in [TIP-49](../TIP-0049/tip-0049.md). The `Profit Margin` must be tracked for each epoch: @@ -523,9 +531,9 @@ The `Profit Margin` must be tracked for each epoch:
Slot Activity Vector uint32A bitmap where each bit corresponds to a subslot in the slot for which the performance factor is tracked. Hence, the number of subslots (equal to Validation Blocks Per Slot) cannot be greater than 32.A bitmap where each bit corresponds to a subslot in the slot for which the performance factor is tracked.
Blocks Issued Count
-### Epoch Rewards +### Pool Rewards for an Epoch -The rewards of an epoch are tracked by keeping a map from epoch indices to a map from `Validator ID`s to values +The pool rewards of an epoch are tracked by keeping a map from epoch indices to a map from `Validator ID`s to values consisting of these fields: @@ -551,52 +559,36 @@ consisting of these fields:
-The next section defines how these values can be obtained from the slot-level data, after the commitment of the last +The present section defines how `Pool Rewards` can be obtained from the slot-level data, after the commitment of the last slot of that epoch. -### Slot-Epoch Conversion of the Rewards - -The following section specifies how to convert the slot-level data into epoch-level data. - -#### Parameters needed for calculations: - -- `Bootstrapping Duration` = 1154 epochs (approximately 3 years) -- `Reward To Generation Ratio` = 2 (the ratio of final target rewards rate to Mana generation rate) -- `Final Target Rewards Rate = (Total Supply * Reward To Generation Ratio * Generation Rate) >> (Generation Rate Exponent - Slots Per Epoch Exponent)`. - - This is the constant reward per epoch after the bootstrapping phase. -- `Initial Target Rewards Rate = Final Target Rewards Rate / ((Annual Decay Factor Percentage / 100) ^ Bootstrapping Duration In Years)`. -- `Pool Coefficient Exponent = 11`. - -#### Input values +#### Input values for Pool Rewards calculations +- Let `Bootstrapping Duration`, `Reward To Generation Ratio`, `Final Target Rewards Rate`, `Initial Target Rewards Rate`, and `Pool Coefficient Exponent` be as defined in [TIP-49](../TIP-0049/tip-0049.md). - Let `Validator Stake(i)` be the amount of IOTA coins staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. - Let `Pool Stake(i)` be the total amount of delegated and staked IOTA coins by the validator pool `i`, identified by - the validator's `Account ID`, which was determined at the time of the pool stake calculation, i.e. the end of the - registration slot. -- Let `Total Stake` be the sum of all `Pool Stake(i)` where validator `i` is in the selected committee. -- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. +the validator's `Account ID`, which was determined at the time of the pool stake calculation, i.e. the end of the +registration slot. +- Let `Total Stake` be the sum of `Pool Stake(i)` for all validators `i` in the selected committee. +- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for all validators `i` in the selected committee. -#### Calculations +#### Pool Rewards calculations - The total target rewards rate `Target Rewards Rate(n)` for an epoch index `n` is defined as: - - `Initial Target Rewards Rate * Decay(n)` if `n <= Bootstrapping Duration`. + - `Decay(Initial Target Rewards Rate, n)` if `n <= Bootstrapping Duration`. - `Final Target Rewards Rate` if `n > Bootstrapping Duration`. - The Pool Reward `Pool Reward` for an epoch index `n`, and pool `i` is calculated as follows: - Let `Pool Coefficient` be `((Pool Stake(i) << Pool Coefficient Exponent)/Total Stake) + (Validator Stake(i) << Pool Coefficient Exponent) / Total Validator Stake`. - - Since both `Pool Stake(i)` and `Validator Stake(i)` use at most 53 bits of the variable, to not overflow the - calculation, `Pool Coefficient Exponent` must be at most 11. `Pool Coefficient` will then use at most + - Since both `Pool Stake(i)` and `Validator Stake(i)` are at most `Token Supply`, to not overflow the + calculation, `Pool Coefficient Exponent` must be such that (Token Supply << Pool Coefficient Exponent)< 264. `Pool Coefficient` will then use at most `Pool Coefficient Exponent + 1` bits. - Take the `Epoch Performance Factor` for the whole epoch `n` according to [Epoch Performance Factor](#epoch-performance-factor). - - Let `Scaled Pool Reward` be `Pool Coefficient * Target Rewards Rate(n) * Epoch Performance Factor`. - - Since `Pool Coefficient` uses at most 12 bits, `Target Rewards Rate(n)` uses at most 41 bits, and - `Epoch Performance Factor` uses at most 8 bits, this multiplication will not overflow using uint64 variables. - - Finally, `Pool Reward` will be - `((Scaled Pool Reward/Validation Blocks Per Slot) >> (Pool Coefficient Exponent + 1))`. Note that if this value is - smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. This is done to incentivize - validators to define reasonable values for their fixed cost. + - To calculate `Pool Reward`, we first calculate `res = (Pool Coefficient * Target Rewards Rate(n))>>PoolCoefficientExponent`. Then, `Pool Reward = ((res * Epoch Performance Factor)/Validation Blocks Per Slot)>>1`. + Note that if this value is smaller than `Fixed Cost`, the validator will not receive rewards from this epoch. + This is done to incentivize validators to define reasonable values for their fixed cost. ## Validator Rewards @@ -604,33 +596,37 @@ An account with a _Staking Feature_ can claim rewards in the same transaction wh transaction validation rules for removing the feature are defined in [TIP-42](../TIP-0042/tip-0042.md). Upon removal, the amount of Mana Rewards that can be claimed is defined as follows. -#### Parameters +### Parameters for Validator Rewards calculation -- Let `Profit Margin Exponent` be 8. +- Let `Profit Margin Exponent` be as defined in [TIP-49](../TIP-0049/tip-0049.md). -#### Input Values +### Input Values for Validator Rewards calculation - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Fixed Cost(n)` be the `Fixed Cost` defined in the _Staking Feature_ at epoch `n`. -#### Calculations +### Validator Rewards calculation + +To calculate the claimable rewards of a validator relative to a past epoch `n`, we must first calculate `Undecayed Validator Rewards(n)`. +This value corresponds to the claimable reward if the validator claimed them right after the epoch ended. +If the claiming epoch is larger than `n+1`, this value has to be decayed to account for this epoch difference. +To calculate the `Undecayed Validator Rewards(n)` for a given epoch `n`, we proceed as follows: + +- If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Validator Rewards(n)` is zero. +- If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Validator Rewards(n)` is + `Fixed Cost(n) + Profit Margin Factor + Residual Validator Factor`, where: + - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent`. + - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Staked Amount/Pool Stake(n)` + where `Profit Margin Complement = (1 << Profit Margin Exponent) - Profit Margin(n)`. + - Note that `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Staked Amount` can use more than 64 bits. Then, to prevent overflowing, this factor should be either stored as + a 128 bits integer or it should be stored as 2 `uint64` variables (and the proper 128 by 64 division algorithm must be used). + +Finally, given `Undecayed Validator Rewards(n)`, we can calculate the decayed rewards relative to epoch `n`, by applying `Validator Rewards(Decay End Epoch, n) = Decay(Undecayed Validator Rewards(n), Decay End Epoch - n)`. + +Given the values of `Validator Rewards(Decay End Epoch, n)`, we calculate the total claimable reward for a validator as follows: -- Calculate the rewards of a validator at epoch `n` as `Rewards(Decay End Epoch, n)`: - - Calculate the `Undecayed Rewards(n)` for a given epoch `n`. - - If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Rewards(n)` is zero. - - If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Rewards(n)` is - `Fixed Cost(n) + Profit Margin Factor + Residual Validator Factor`, where: - - `Profit Margin Complement = (1 << Profit Margin Exponent) - Profit Margin(n)`. - - `Profit Margin Factor = (Profit Margin(n) * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent`. - - `Residual Validator Factor = ((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Staked Amount/Pool Stake(n)`. - - Note that `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Staked Amount` uses up - to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either stored as - a 128 bits integer or it should be stored as 2 `uint64` variables (and the proper 128 by 64 division algorithm - must be used). - - `Rewards(Decay End Epoch, n)` is the decayed reward for epoch `n`, that is: - - `Rewards(Decay End Epoch, n) = Decay(Undecayed Rewards(n), Decay End Epoch - n)`. - Let `Future Bounded Slot Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the commitment input. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking @@ -643,7 +639,7 @@ the amount of Mana Rewards that can be claimed is defined as follows. - `Epoch Index < Last Reward Epoch` where `Last Reward Epoch` is the minimum of `Future Bounded Epoch Index` and `End Epoch + 1`. - Let `Validator Rewards(Account ID)` be the total claimable decayed rewards for the Account Output identified by - `Account ID`. It is the sum of `Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(Account ID)` + `Account ID`. It is the sum of `Validator Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(Account ID)` where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` (or `0` if that would underflow) and `Last Reward Epoch`. - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. @@ -656,11 +652,11 @@ for the epoch in which it is destroyed, since the rewards for that epoch only be They are _potential_ since the validator to which the output is delegating may not have been selected into the committee for that epoch. -#### Parameters +### Parameters for Delegator Rewards calculation -- Let `Profit Margin Exponent` be 8. +- Let `Profit Margin Exponent` be as defined in [TIP-49](../TIP-0049/tip-0049.md). -#### Input Values +### Input Values for Delegator Rewards calculation - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards(id)` with epoch index `n` for validator @@ -669,23 +665,23 @@ for that epoch. `id`. - Let `Fixed Cost(n)` be the `Fixed Cost` defined in the _Staking Feature_ at epoch `n`. -#### Calculations +### Delegator Rewards calculation -The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. +Similarly to the validator rewards calculation, the amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. We begin by calculating the undecayed claimable rewards relative to a past epoch `n`, denoted by `Undecayed Delegator Rewards(n)`. +This value corresponds to the claimable reward if the delegator claimed them right after the epoch ended. +If the claiming epoch is larger than `n+1`, this value has to be decayed to account for this epoch difference. +To calculate the `Undecayed Delegator Rewards(n)` for a given epoch `n`, we proceed as follows: -- Calculate the rewards of a delegator at epoch `n` as `Rewards(Decay End Epoch, n)`: - - Calculate the `Undecayed Rewards(n)` for a given epoch `n`. - - If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Rewards(n)` is - `((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Delegated Amount/Pool Stake(n)`. - - Note that - `((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Delegated Amount` - uses up to 94 bits and `Pool Stake(n)` up to 53, so to prevent overflowing the first factor should be either - stored as a 128 bits integer or it should be stored as 2 uint64 variables (and the proper 128 by 64 division - algorithm must be used). - - If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Rewards(n)` is +- If `Pool Rewards(n) - Fixed Cost(n) < 0`, then `Undecayed Delegator Rewards(n)` is `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Delegated Amount/Pool Stake(n)`. - - `Rewards(Decay End Epoch, n)` is the decayed reward for epoch `n`, that is: - - `Rewards(Decay End Epoch, n) = Decay(Undecayed Rewards(n), Decay End Epoch - n)`. +- If `Pool Rewards(n) - Fixed Cost(n) >= 0`, then `Undecayed Delegator Rewards(n)` is + `((Profit Margin Complement * (Pool Rewards(n) - Fixed Cost(n))) >> Profit Margin Exponent) * Delegated Amount/Pool Stake(n)`. + - Note that `((Profit Margin Complement * Pool Rewards(n)) >> Profit Margin Exponent) * Delegated Amount` can use more than 64 bits. Then, to prevent overflowing, this factor should be either stored as + a 128 bits integer or it should be stored as 2 `uint64` variables (and the proper 128 by 64 division algorithm must be used). + +Finally, given `Undecayed Delegator Rewards(n)`, we can calculate the decayed rewards relative to epoch `n`, by applying `Delegator Rewards(Decay End Epoch, n) = Decay(Undecayed Delegator Rewards(n), Decay End Epoch - n)`. +Given the values of `Delegator Rewards(Decay End Epoch, n)`, we calculate the total claimable reward for a delegator as follows: + - Let the `Claimable Rewards(address)` be all reward entries for the validator identified by the Account ID corresponding to the `address`, which is the `Validator Address` field in the Delegation Output, where the entry's epoch index `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: @@ -699,7 +695,7 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. - Let `Delegator Rewards(Delegation ID)` be the total claimable decayed rewards for the Delegation Output identified by - `Delegation ID` with `address` set to the `Validator Address`. It is the sum of `Rewards(Decay End Epoch, n)` for each + `Delegation ID` with `address` set to the `Validator Address`. It is the sum of `Delegator Rewards(Decay End Epoch, n)` for each epoch `n` in `Claimable Rewards(address)`, where `Decay End Epoch` is the maximum of `Future Bounded Epoch Index - 1` (or `0` if that would underflow) and `Delegation End`. - Note: The `- 1` is applied to allow claiming the full, undecayed reward for an epoch `n - 1` in epoch `n`. @@ -731,7 +727,7 @@ output only needs to contain the minimum storage deposit. The remaining funds ca delegate for `X+1`, which can repeat this procedure. In this manner, one can delegate for one epoch at a time and never lose out on any rewards. The following figure exemplifies this procedure. -![](./assets/delayed-claiming.png) +![Example of delayed claiming](./assets/delayed-claiming.png) Delayed Claiming also allows for a high degree of liquidity while delegating. Even without delayed claiming, this delegation mechanism implements _liquid delegation_ as Delegation Outputs are never locked and can be accessed anytime. @@ -751,7 +747,7 @@ This figure showcases how epochs are set when creating and transitioning Delegat epochs in slots is not accurately depicted here. What matters for epoch setting is 1) what the current epoch is and 2) whether the creation or transition happens before or after the registration slot for the following epoch. -![](./assets/delegation-epochs.png) +![How epochs are set when creating and transitioning Delegation Outputs](./assets/delegation-epochs.png) - Delegation Output X is created before the end of the Registration Slot. Therefore its `Start Epoch` is set to `21`, as that is the earliest epoch for which it could receive rewards. However, it is also transitioned before the end of the From 510f8e29963cf8992d75aa1d42edc6b8267f669a Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 28 Mar 2024 15:16:39 +0000 Subject: [PATCH 121/124] fix equation --- tips/TIP-0040/constraints.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/constraints.md b/tips/TIP-0040/constraints.md index bb50c7369..c2407ed41 100644 --- a/tips/TIP-0040/constraints.md +++ b/tips/TIP-0040/constraints.md @@ -9,8 +9,9 @@ The first and most straighforward contraint is that the total maximum theoretica Let's start by calculating the Mana in the system generated by holding tokens $\text{Mana Holders}(n)$ until epoch $n$. $$ - \text{Mana Holders}(n)=\frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}* 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} (1-\text{Decay per Epoch}^{n+1}) +\text{Mana Holders}(n)=\frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}* 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} (1-\text{Decay per Epoch}^{n+1}) $$ + with $\text{Decay per Epoch}=\text{Decay per Year}^{\frac{\text{Seconds per Epoch}}{\text{Seconds per Year}}}$. The maximum Mana in the system generated by holding tokens $\text{Max Mana Holders}$ is equivalent to the potential Mana generated by an output holding $\text{Token Supply}$ IOTA coins until epoch $n$, for $n$ large enough. This results: From fb8742f0aa0c9d9565043bc65b8ef7e17d4d15f7 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 28 Mar 2024 15:17:36 +0000 Subject: [PATCH 122/124] fix eq --- tips/TIP-0040/constraints.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/constraints.md b/tips/TIP-0040/constraints.md index c2407ed41..1c72916e4 100644 --- a/tips/TIP-0040/constraints.md +++ b/tips/TIP-0040/constraints.md @@ -9,7 +9,7 @@ The first and most straighforward contraint is that the total maximum theoretica Let's start by calculating the Mana in the system generated by holding tokens $\text{Mana Holders}(n)$ until epoch $n$. $$ -\text{Mana Holders}(n)=\frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}* 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} (1-\text{Decay per Epoch}^{n+1}) +\text{Mana Holders}(n)=\frac{\text{Token Supply} * \text{Generation Rate}}{1-\text{Decay per Epoch}} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} (1-\text{Decay per Epoch}^{n+1}) $$ with $\text{Decay per Epoch}=\text{Decay per Year}^{\frac{\text{Seconds per Epoch}}{\text{Seconds per Year}}}$. From 0c5d91ffefbba30aa18d704e06a4fbb362d67fb8 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 28 Mar 2024 15:20:03 +0000 Subject: [PATCH 123/124] fix LaTeX --- tips/TIP-0040/constraints.md | 43 +++++++++--------------------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/tips/TIP-0040/constraints.md b/tips/TIP-0040/constraints.md index 1c72916e4..e0f2be1f4 100644 --- a/tips/TIP-0040/constraints.md +++ b/tips/TIP-0040/constraints.md @@ -18,7 +18,7 @@ The maximum Mana in the system generated by holding tokens $\text{Max Mana Holde $$ \begin{align*} -\text{Max Mana Holders} = \frac{\text{Token Supply}*\text{Generation Rate}}{1-\text{Decay per Epoch}}2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} +\text{Max Mana Holders} = \frac{\text{Token Supply} * \text{Generation Rate}}{1-\text{Decay per Epoch}}2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} \end{align*} $$ @@ -45,22 +45,12 @@ $$ \end{align*} $$ - - the function above is increasing if $n\leq \frac{-1}{\log(\text{Decay per Epoch})}$ and decreasing otherwise (i.e., it is a concave function). However, since the $\text{Bootstrapping Duration}$ is set such that $\text{Bootstrapping Duration in Years}*\text{Beta per Year}=1$, we have that $\text{Bootstrapping Duration in Years} = \frac{1}{\text{Beta per Year}}=\frac{-1}{\log(\text{Decay per Year})}$. Then, the maximum amount of Mana distributed as rewards in the bootstrapping Phase is achieved at $\text{Bootstrapping Duration}$, i.e., the maximum is $$ \begin{align*} &\text{Max Mana Supply Bootstrapping}\\ -&=\frac{1}{-\log(\text{Decay per Epoch})}* \text{Max to Target Ratio}*\text{Final Target Rewards Rate} +&=\frac{1}{-\log(\text{Decay per Epoch})} * \text{Max to Target Ratio} * \text{Final Target Rewards Rate} \end{align*} $$ @@ -68,34 +58,21 @@ By definition, we have that $\text{Final Target Rewards Rate}$ is $$ \begin{align*} -&\text{Final Target Rewards Rate}=\text{Token Supply}*\text{Reward To Generation Ratio}\\ -*&\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} +&\text{Final Target Rewards Rate}=\text{Token Supply} * \text{Reward To Generation Ratio}\\ +* &\text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} \end{align*} $$ Then, the Maximum Mana supply in the bootstrapping phase is - - $$ \begin{align*} &\text{Max Mana Supply Bootstrapping}\\ -&=\text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ -&\left(\text{Reward To Generation Ratio}*\frac{1}{-\log(\text{Decay per Epoch})}* \text{Max to Target Ratio}\right.\\ +&=\text{Token Supply}*\text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\left(\text{Reward To Generation Ratio} * \frac{1}{-\log(\text{Decay per Epoch})} * \text{Max to Target Ratio}\right.\\ +&\left.\frac{1}{1-\text{Decay per Epoch}}\right)\\ -&\leq \text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ -&\frac{1+\text{Reward To Generation Ratio}*\text{Max to Target Ratio}}{1-\text{Decay per Epoch}} +&\leq \text{Token Supply} * \text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\frac{1+\text{Reward To Generation Ratio} * \text{Max to Target Ratio}}{1-\text{Decay per Epoch}} \end{align*} $$ @@ -108,8 +85,8 @@ Then, we have that the total Mana in the system will never be larger than $\text $$ \begin{align*} &\text{Max Mana Supply}\\ -&=\text{Token Supply}*\text{Generation Rate}*2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ -&\frac{1+\text{Reward To Generation Ratio}*\text{Max to Target Ratio}}{1-\text{Decay per Epoch}} +&=\text{Token Supply} * \text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&\frac{1+\text{Reward To Generation Ratio} * \text{Max to Target Ratio}}{1-\text{Decay per Epoch}} \end{align*} $$ From 2de6e17a5fc29070275d89374c08802510e4c797 Mon Sep 17 00:00:00 2001 From: oliviasaa Date: Thu, 28 Mar 2024 15:22:01 +0000 Subject: [PATCH 124/124] fix LaTeX --- tips/TIP-0040/constraints.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/constraints.md b/tips/TIP-0040/constraints.md index e0f2be1f4..e19985e13 100644 --- a/tips/TIP-0040/constraints.md +++ b/tips/TIP-0040/constraints.md @@ -58,8 +58,8 @@ By definition, we have that $\text{Final Target Rewards Rate}$ is $$ \begin{align*} -&\text{Final Target Rewards Rate}=\text{Token Supply} * \text{Reward To Generation Ratio}\\ -* &\text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} +& \text{Final Target Rewards Rate} = \text{Token Supply} * \text{Reward To Generation Ratio}\\ +& * \text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}} \end{align*} $$ @@ -68,7 +68,7 @@ Then, the Maximum Mana supply in the bootstrapping phase is $$ \begin{align*} &\text{Max Mana Supply Bootstrapping}\\ -&=\text{Token Supply}*\text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ +&=\text{Token Supply} * \text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\ &\left(\text{Reward To Generation Ratio} * \frac{1}{-\log(\text{Decay per Epoch})} * \text{Max to Target Ratio}\right.\\ +&\left.\frac{1}{1-\text{Decay per Epoch}}\right)\\ &\leq \text{Token Supply} * \text{Generation Rate} * 2^{\text{Slots per Epoch Exp}-\text{Generation Rate Exp}}\\

y{$K@;BfL68Pn`3M!xcJ{t_Zw8P`^?9 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 F{ud4SwFLkG delta 73406 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 b{y@hdn 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 Xr6OjO>P>P1{85xulPQ;a^y2>meLq<~ diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8b64cf2a2..883b42385 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -76,16 +76,14 @@ To select a committee for an epoch with epoch index `n`, whose first slot index - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. - For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: - - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's slot index `Block Slot Index`, corresponding to its `Issuing Time` field, satisfies all of the following conditions: + - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following conditions: - `Block Slot Index > Registration Slot(n)`. - `Block Slot Index <= Activity Window Slot(n)`. -- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i`, where: - - `Stake_i` is the `Staked Amount` of IOTA tokens of the validator's _Staking Feature_ at the end of the slot with index `Registration Slot(n)`. - - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i` at the end of the slot with index `Activity Window Slot(n)`. +- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: + - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. -Note: The order of these operations is deliberate. Filtering out all inactive registered validators before computing the delegated stake for each validator pool avoids unnecessary computations. - **Open Questions** - How exactly are we committing to the committee and its voting power? From 279591421d83149fccc5a1d2fa6abf08b7daca29 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 14 Jun 2023 15:00:37 +0200 Subject: [PATCH 008/124] Add delegation rewards calculation --- tips/TIP-0040/tip-0040.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 883b42385..c1671e016 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -47,6 +47,10 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA [TIP-45](../TIP-0045/tip-0045.md) is the basis for output validation in this TIP. +## Common Parameters + +- Let `Current Transaction Epoch Index` be the index of the epoch to which the transaction belongs. + # Staking The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The following gives a high-level idea of the selection process, with the details specified in the rest of the section. @@ -381,7 +385,7 @@ Each Delegation output gets assigned a unique identifier `Delegation ID` upon cr #### Consumed Outputs -Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. From its initial state, a Delegation Output can either be destroyed or transitioned to a _Delayed Claiming_ state, from which it can then be destroyed. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. +Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. From its initial state, the _Delegating State_, a Delegation Output can either be destroyed or transitioned to a _Delayed Claiming_ state, from which it can then be destroyed. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. - Delayed Claiming Transition - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output side. @@ -405,10 +409,25 @@ Whenever a Delegation output is consumed in a transaction, it means that the out # Mana Rewards +- TODO: When do rewards become available exactly? -> With the slot committment of the last slot of an epoch. + ## Staking Rewards ## Delegation Rewards +To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. Note that since rewards do not become available immediately at the end of an epoch, but with a delay (TODO: link to where this is defined.). This is not considered explicitly in the conditions here, since the rewards tracking data would not contain an entry for that epoch yet, meaning those rewards would be forfeited. A Delegation Output in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. + +The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. + +- Let `Reward Entries` be all entries in the rewards tracking data from the pool identified by the account ID `Validator` and with `Epoch Index >= Start Epoch && Epoch Index <= Delegation End`, where:. + - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index`. + - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. + - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. +- Let the total claimable rewards be the sum of `Rewards(n)` for each epoch with index `n` satisfying `n >= Start Epoch && n < Current Transaction Epoch Index`, where: + - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. + - Let `Undecayed Rewards(n)` be `(((2^8 - Profit Margin(n)) * Pool Rewards) >> 8) * Delegated Amount/Pool Stake`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Current Transaction Epoch Index - n`. + # Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From 27ca8d5e4ddb307c9ffc18e42cd033ec40db4f69 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 15 Jun 2023 09:19:30 +0200 Subject: [PATCH 009/124] Update Delegation Rewards calculation --- tips/TIP-0040/tip-0040.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index c1671e016..19fcd094c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -70,7 +70,7 @@ Accounts are considered registered for validaton if they have a _Staking Feature ![](./assets/selection-timing.png) -_This figures details the timing around committee selection in epochs._ +_This figures gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and depends on the value of the corresponding Protocol Parameters._ To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the following steps must be taken. @@ -410,22 +410,25 @@ Whenever a Delegation output is consumed in a transaction, it means that the out # Mana Rewards - TODO: When do rewards become available exactly? -> With the slot committment of the last slot of an epoch. +Rewards do not become available immediately at the end of an epoch, but with a delay (TODO: link to where this is defined). Claiming in an epoch before this point in time forfeits the rewards for the previous epoch. Thus, if possible, rewards should always be claimed after the rewards of the previous epoch became available. -## Staking Rewards +## Validator Rewards ## Delegation Rewards -To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. Note that since rewards do not become available immediately at the end of an epoch, but with a delay (TODO: link to where this is defined.). This is not considered explicitly in the conditions here, since the rewards tracking data would not contain an entry for that epoch yet, meaning those rewards would be forfeited. A Delegation Output in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. +To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. -- Let `Reward Entries` be all entries in the rewards tracking data from the pool identified by the account ID `Validator` and with `Epoch Index >= Start Epoch && Epoch Index <= Delegation End`, where:. - - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index`. +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in the output, where its `Epoch Index` satisfies: `Epoch Index >= Start Epoch && Epoch Index < Delegation End`, where: + - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could do without `-1`, technically). - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -- Let the total claimable rewards be the sum of `Rewards(n)` for each epoch with index `n` satisfying `n >= Start Epoch && n < Current Transaction Epoch Index`, where: +- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - - Let `Undecayed Rewards(n)` be `(((2^8 - Profit Margin(n)) * Pool Rewards) >> 8) * Delegated Amount/Pool Stake`. + - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. + - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. + - Let `Undecayed Rewards(n)` be `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Delegated Amount/Pool Stake(n)`. - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Current Transaction Epoch Index - n`. # Copyright From fb1586b0bfc50a6b531a9a9a6701c76e7edc2956 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 15 Jun 2023 09:48:11 +0200 Subject: [PATCH 010/124] Add Validator Rewards calculation --- tips/TIP-0040/tip-0040.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 19fcd094c..1c7732a65 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -18,7 +18,10 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 3. [Building Blocks](#building-blocks) 4. [Staking](#staking) 5. [Delegation](#delegation) -6. [Copyright](#copyright) +6. [Mana Rewards](#mana-rewards) + - [Validator Rewards](#validator-rewards) + - [Delegation Rewards](#delegation-rewards) +7. [Copyright](#copyright) # Summary @@ -50,6 +53,7 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA ## Common Parameters - Let `Current Transaction Epoch Index` be the index of the epoch to which the transaction belongs. +- TODO: Let `decay(n)` be the decay factor (?) defined in TIP-39. # Staking @@ -410,17 +414,27 @@ Whenever a Delegation output is consumed in a transaction, it means that the out # Mana Rewards - TODO: When do rewards become available exactly? -> With the slot committment of the last slot of an epoch. -Rewards do not become available immediately at the end of an epoch, but with a delay (TODO: link to where this is defined). Claiming in an epoch before this point in time forfeits the rewards for the previous epoch. Thus, if possible, rewards should always be claimed after the rewards of the previous epoch became available. ## Validator Rewards +An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana that can be claimed is defined as follows. + +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Current Transaction Epoch Index`, where: +- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: + - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. + - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. + - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. + - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. + - Let `Undecayed Rewards(n)` be `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> 8) + (((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Staked Amount/Pool Stake(n)`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Current Transaction Epoch Index - n`. + ## Delegation Rewards To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in the output, where its `Epoch Index` satisfies: `Epoch Index >= Start Epoch && Epoch Index < Delegation End`, where: +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, where: - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could do without `-1`, technically). - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. From 95b64801943620e62ea97cc955f4b240dd713076 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 15 Jun 2023 17:16:14 +0200 Subject: [PATCH 011/124] Add Tracking Data schemas --- tips/TIP-0040/tip-0040.md | 126 +++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1c7732a65..77a221f84 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -50,10 +50,10 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA [TIP-45](../TIP-0045/tip-0045.md) is the basis for output validation in this TIP. -## Common Parameters +## Common Parameters and Functions - Let `Current Transaction Epoch Index` be the index of the epoch to which the transaction belongs. -- TODO: Let `decay(n)` be the decay factor (?) defined in TIP-39. +- Let `decay(n)` be calculated with the algorithm and lookup table in [TIP-39](../TIP-0039/tip-0039.md). # Staking @@ -413,7 +413,127 @@ Whenever a Delegation output is consumed in a transaction, it means that the out # Mana Rewards -- TODO: When do rewards become available exactly? -> With the slot committment of the last slot of an epoch. +Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when the epoch ends, that is, when its last slot is committed. + +## Slot Level + +For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: + + + + + + + + + + + + + + + + + +
NameTypeDescription
Slot Indexuint64The slot index for which the performance factor is tracked.
Performance Factoruint64The performance factor of the validator.
+ +TODO: Do we have to state the following or can we just include it in the calculations? +Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. + +### Performance Factor + +TODO: The performance factor is determined as follows... + +## Epoch Level + +### Epoch Rewards + +The rewards of an epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
Epoch Indexuint64The epoch index for which the rewards can be claimed.
Pool Stakeuint64The total amount of IOTA tokens staked by the validator and all its delegators.
Pool RewardsTODO: Decide on data type. uint32The total amount of rewards the validator pool received, without the fixed cost of the validator.
+ +### Profit Margins + +Additionally, the profit margins must be tracked for each epoch. + + + + + + + + + + + + + + + + + +
NameTypeDescription
Epoch Indexuint64 + The epoch index for which the profit margin is tracked. +
Profit Marginuint8 + An integer representing the epoch profit margin. +
+ +### Slot-Epoch Conversion + +The following section specifies how to convert the slot-level data into epoch-level data. + +- The total target reward `Target Reward(n)` for a slot index `n` is defined as: + - `233373068869021000 * decay(n)` if `n <= 9460800`. + - `85853149583786000` if `n > 9460800`. + - TODO: Is this index `9460800` relative to the start slot index of the IOTA 2.0 network, since it doesn't start at `1`? +- For each slot index `n` in the epoch, the rewards are calculated as follows. + - Let `Performance Factor(n)` be the `Performance Factor` with slot index `n`. + - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator. + - Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at the time of the voting power calculation. (TODO: Update after we've defined how we keep track of validators and their voting power in slot committments.) + - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens in the selected committee. + - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. + - Let the `Profit Margin` be `2^8 * Total Validator Stake/(Total Validator Stake + Total Stake)`. + - Let `Aux` be `((2^31 * Pool Stake)/Total Stake) + (2^31 * Validator Stake(i)) / Total Validator Stake` + - TODO: Is there a better name for this value? + - Let `Aux2` be `Aux * Target Reward(n) * Performance Factor(n)`, which is smaller than `2^(104)`. + - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I guess it's important to communicate that the value is `< 2^104`? + - Let `Slot Pool Reward(n)` be `(Aux2 >> 40) - Fixed Cost`, which is smaller than `2^(64)`. +- To combine the `Slot Pool Rewards(n)` for each slot index `n` in the epoch into an epoch's `Pool Rewards`: + - If any `Slot Pool Rewards(n) < 0` no entry for the epoch is added to the `Epoch Rewards`. + - Otheriwse: + - Let `Pool Rewards` be defined by the following decaying algorithm: + - Let `m` and `M` be the first and last slot of the epoch, respectively. + - TODO: I think we have to state this in non-pseudocode as the semantics are not 100% clearly defined. + ``` + Pool Rewards = 0 + for n = m, ..., M-1: + Pool Rewards = Pool Rewards + Slot Pool Rewards(n) + Pool Rewards = Pool Rewards * 4294966388 + Pool Rewards = Pool Rewards >> 32 + Pool Rewards = Pool Rewards + Slot Pool Rewards(M) + ``` + ## Validator Rewards From ed3e611bd69c4c32f759e85432954734ea1d5828 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 15 Jun 2023 17:17:45 +0200 Subject: [PATCH 012/124] Format Markdown --- tips/TIP-0040/tip-0040.md | 196 ++++++++++++++++++++++++++------------ 1 file changed, 135 insertions(+), 61 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 77a221f84..ff5b6dddd 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -19,16 +19,19 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 4. [Staking](#staking) 5. [Delegation](#delegation) 6. [Mana Rewards](#mana-rewards) - - [Validator Rewards](#validator-rewards) - - [Delegation Rewards](#delegation-rewards) + - [Validator Rewards](#validator-rewards) + - [Delegation Rewards](#delegation-rewards) 7. [Copyright](#copyright) # Summary -Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are rewarded. -Stakers lock IOTA tokens in order to become eligible to be selected into the validator committee. Delegators delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it voting weight from the locked tokens of the staker and the delegated tokens of all its delegators. -If the validator of a pool performs its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly proportional to the amount of staked or delegated tokens. -This results in a mechanism that incentivizes users to contribute to the security and well-functioning of the network while receiving rewards for their contribution. +Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are +rewarded. Stakers lock IOTA tokens in order to become eligible to be selected into the validator committee. Delegators +delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it voting +weight from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool +performs its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly +proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to +contribute to the security and well-functioning of the network while receiving rewards for their contribution. This TIP specifies the details of staking, delegation, committee selection, validation and Mana rewards. @@ -44,7 +47,8 @@ Data types and subschemas used throughout this TIP are defined in [TIP-21](../TI ## Global Protocol Parameters -Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA)](../TIP-0022/tip-0022.md) and [TIP-32 (Shimmer)](../TIP-0032/tip-0032.md). +Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA)](../TIP-0022/tip-0022.md) and +[TIP-32 (Shimmer)](../TIP-0032/tip-0032.md). ## Transaction Payload @@ -57,55 +61,86 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA # Staking -The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The following gives a high-level idea of the selection process, with the details specified in the rest of the section. - -Stakers, or interchangeably also called _registered validators_, get voting weight by locking IOTA tokens. By locking the tokens, the stakers prove control over them so the protocol assigns them a proportional amount of voting weight in exchange. Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase its voting weight further. A staker and all its delegators are called a staking or validator pool. Such a pool is eligible to be selected into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine the ledger state. - -The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch ends, the current activity of all registered validators as well as the pool's stake is determined. Through a selection procedure, a committee is selected out of all the registered pools who have a large enough voting power and enough block issuance activity. -Once selected, it is each pool's responsibility to issue _Validation Blocks_ across the epoch through which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the validator's pool receives. - -After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their IOTA tokens and claim their Mana rewards. +The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The +following gives a high-level idea of the selection process, with the details specified in the rest of the section. + +Stakers, or interchangeably also called _registered validators_, get voting weight by locking IOTA tokens. By locking +the tokens, the stakers prove control over them so the protocol assigns them a proportional amount of voting weight in +exchange. Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase +its voting weight further. A staker and all its delegators are called a staking or validator pool. Such a pool is +eligible to be selected into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of +blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the +committee is considered to determine the ledger state. + +The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a +protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch +ends, the current activity of all registered validators as well as the pool's stake is determined. Through a selection +procedure, a committee is selected out of all the registered pools who have a large enough voting power and enough block +issuance activity. Once selected, it is each pool's responsibility to issue _Validation Blocks_ across the epoch through +which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they +were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the +validator's pool receives. + +After an epoch ends, the delegators of the pool can claim their rewards. The validator may continue to stake or end its +stake by going through an unbonding period of its locked tokens. After this period ends, the validator can unlock their +IOTA tokens and claim their Mana rewards. ## Registration -Accounts are considered registered for validaton if they have a _Staking Feature_ in their _Features_. This feature and its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). +Accounts are considered registered for validaton if they have a _Staking Feature_ in their _Features_. This feature and +its transaction validation rules are specified in [TIP-42](../TIP-0042/tip-0042.md). ## Committee Selection ![](./assets/selection-timing.png) -_This figures gives an overview of the timing around committee selection in epochs. Note that the exact length of those windows is not accurately depicted here and depends on the value of the corresponding Protocol Parameters._ +_This figures gives an overview of the timing around committee selection in epochs. Note that the exact length of those +windows is not accurately depicted here and depends on the value of the corresponding Protocol Parameters._ -To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the following steps must be taken. +To select a committee for an epoch with epoch index `n`, whose first slot index is denoted by `Epoch Start Slot(n)`, the +following steps must be taken. -- Let `Registration Slot(n)` be the registration slot with index `Epoch Start Slot(n) - Maximum Committable Age - Activity Window Duration - 1`. -- Let `Activity Window Slot(n)` be the last slot of the activity window with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. +- Let `Registration Slot(n)` be the registration slot with index + `Epoch Start Slot(n) - Maximum Committable Age - Activity Window Duration - 1`. +- Let `Activity Window Slot(n)` be the last slot of the activity window with index + `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `end_epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: - - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following conditions: +- For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The + validator is active if the following condition holds, otherwise it is inactive: + - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, + and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following + conditions: - `Block Slot Index > Registration Slot(n)`. - `Block Slot Index <= Activity Window Slot(n)`. -- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: +- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` + at the end of the slot with index `Registration Slot(n)`, where: - `Stake_i` is the `staked_amount` of IOTA tokens of the validator's _Staking Feature_. - - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field is equal to `i`. -- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `validator` field + is equal to `i`. +- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by + voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected + committee. **Open Questions** - How exactly are we committing to the committee and its voting power? -- Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified on the protocol level or is this an implementation detail for the node software? +- Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified + on the protocol level or is this an implementation detail for the node software? # Delegation -By delegating, a user adds voting weight in the form of IOTA tokens to a validator's voting power without having to become a validator themself. In order to delegate, a _Delegation Output_ must be created. The following section specifies how delegation is implemented. +By delegating, a user adds voting weight in the form of IOTA tokens to a validator's voting power without having to +become a validator themself. In order to delegate, a _Delegation Output_ must be created. The following section +specifies how delegation is implemented. ## Delegation Output Delegation is implemented with a special output type, the so-called Delegation Output. -Each Delegation output gets assigned a unique identifier `Delegation ID` upon creation by the protocol. `Delegation ID` is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. +Each Delegation output gets assigned a unique identifier `Delegation ID` upon creation by the protocol. `Delegation ID` +is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.
@@ -383,41 +418,60 @@ Each Delegation output gets assigned a unique identifier `Delegation ID` upon cr ### Additional Transaction Semantic Validation Rules - Explicit `Delegation ID`: `Delegation ID` is taken as the value of the `Delegation ID` field in the NFT output. -- Implicit `Delegation ID`: When a Delegation output is consumed as an input in a transaction and `Delegation ID` field is zeroed out, take the BLAKE2b-256 hash of the `Output ID` of the input as `Delegation ID`. -- For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the input side. The - corresponding Delegation output has the explicit or implicit `Delegation ID` equal to that of the Delegation output on the output side. +- Implicit `Delegation ID`: When a Delegation output is consumed as an input in a transaction and `Delegation ID` field + is zeroed out, take the BLAKE2b-256 hash of the `Output ID` of the input as `Delegation ID`. +- For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the + input side. The corresponding Delegation output has the explicit or implicit `Delegation ID` equal to that of the + Delegation output on the output side. #### Consumed Outputs -Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. From its initial state, the _Delegating State_, a Delegation Output can either be destroyed or transitioned to a _Delayed Claiming_ state, from which it can then be destroyed. The current state is defined as the consumed Delegation output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output side. There are thus two types of transitions: delayed claiming transition and destruction transition. +Whenever a Delegation output is consumed in a transaction, it means that the output is transitioned into its next state. +From its initial state, the _Delegating State_, a Delegation Output can either be destroyed or transitioned to a +_Delayed Claiming_ state, from which it can then be destroyed. The current state is defined as the consumed Delegation +output, while the next state is defined as the Delegation output with the same explicit `Delegation ID` on the output +side. There are thus two types of transitions: delayed claiming transition and destruction transition. - Delayed Claiming Transition - - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output side. + - Is identified by a zeroed out `Delegation ID` on the input side and a non-zeroed out `Delegation ID` on the output + side. - The fields `Delegated Amount`, `Start Epoch` and `Validator` must not be changed. - `End Epoch` on the output must be set as follows. - - Let `Output Transition Slot Index` be the slot index of the transaction in which the Delegation Output is transitioned. + - Let `Output Transition Slot Index` be the slot index of the transaction in which the Delegation Output is + transitioned. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Transition Slot Index < Registration Slot(n+1)` then `End Epoch` must be set to the epoch index resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to `Output Transition Slot Index / Epoch Slot Duration + 1`. + - If `Output Transition Slot Index < Registration Slot(n+1)` then `End Epoch` must be set to the epoch index + resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to + `Output Transition Slot Index / Epoch Slot Duration + 1`. - Destruction Transition - - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` as the Delegation Output on the input side. The next state is the empty state. - - During this transition, Mana rewards may be added to the total sum of mana on the input side of the transaction, according to [delegation rewards](#delegation-rewards). + - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` as the + Delegation Output on the input side. The next state is the empty state. + - During this transition, Mana rewards may be added to the total sum of mana on the input side of the transaction, + according to [delegation rewards](#delegation-rewards). #### Created Outputs - When `Delegation ID` is zeroed out certain fields of the Delegation Output must be set as follows. - Let `Output Creation Slot Index` be the slot index of the transaction in which the Delegation Output is created. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Creation Slot Index < Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index resulting from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to `Output Creation Slot Index / Epoch Slot Duration + 2`. + - If `Output Creation Slot Index < Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index resulting + from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to + `Output Creation Slot Index / Epoch Slot Duration + 2`. - Set `Delegated Amount` to the value of the `Amount` field. - Set `End Epoch` to `0`. # Mana Rewards -Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when the epoch ends, that is, when its last slot is committed. +Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot +level and are then combined into an epoch rewards entry when the epoch ends. Rewards for an epoch become claimable when +the epoch ends, that is, when its last slot is committed. ## Slot Level -For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: +For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this +results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map +with `Validator Account ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of +these fields:
@@ -437,8 +491,8 @@ For each slot, the performance factor of each validator in the selected committe
-TODO: Do we have to state the following or can we just include it in the calculations? -Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. +TODO: Do we have to state the following or can we just include it in the calculations? Since the `Performance Factor` is +a uint8, a right-shift of 8 bits should be later applied to the sum. ### Performance Factor @@ -448,7 +502,8 @@ TODO: The performance factor is determined as follows... ### Epoch Rewards -The rewards of an epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: +The rewards of an epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and +the values being a list of objects consisting of these fields: @@ -506,24 +561,30 @@ The following section specifies how to convert the slot-level data into epoch-le - The total target reward `Target Reward(n)` for a slot index `n` is defined as: - `233373068869021000 * decay(n)` if `n <= 9460800`. - `85853149583786000` if `n > 9460800`. - - TODO: Is this index `9460800` relative to the start slot index of the IOTA 2.0 network, since it doesn't start at `1`? + - TODO: Is this index `9460800` relative to the start slot index of the IOTA 2.0 network, since it doesn't start at + `1`? - For each slot index `n` in the epoch, the rewards are calculated as follows. - Let `Performance Factor(n)` be the `Performance Factor` with slot index `n`. - - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator. - - Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined at the time of the voting power calculation. (TODO: Update after we've defined how we keep track of validators and their voting power in slot committments.) - - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens in the selected committee. + - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the + `Staked Amount` in the _Staking Feature_ of the validator. + - Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined + at the time of the voting power calculation. (TODO: Update after we've defined how we keep track of validators and + their voting power in slot committments.) + - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA + tokens in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. - Let the `Profit Margin` be `2^8 * Total Validator Stake/(Total Validator Stake + Total Stake)`. - Let `Aux` be `((2^31 * Pool Stake)/Total Stake) + (2^31 * Validator Stake(i)) / Total Validator Stake` - TODO: Is there a better name for this value? - Let `Aux2` be `Aux * Target Reward(n) * Performance Factor(n)`, which is smaller than `2^(104)`. - - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I guess it's important to communicate that the value is `< 2^104`? + - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I + guess it's important to communicate that the value is `< 2^104`? - Let `Slot Pool Reward(n)` be `(Aux2 >> 40) - Fixed Cost`, which is smaller than `2^(64)`. - To combine the `Slot Pool Rewards(n)` for each slot index `n` in the epoch into an epoch's `Pool Rewards`: - If any `Slot Pool Rewards(n) < 0` no entry for the epoch is added to the `Epoch Rewards`. - Otheriwse: - Let `Pool Rewards` be defined by the following decaying algorithm: - - Let `m` and `M` be the first and last slot of the epoch, respectively. + - Let `m` and `M` be the first and last slot of the epoch, respectively. - TODO: I think we have to state this in non-pseudocode as the semantics are not 100% clearly defined. ``` Pool Rewards = 0 @@ -534,38 +595,51 @@ The following section specifies how to convert the slot-level data into epoch-le Pool Rewards = Pool Rewards + Slot Pool Rewards(M) ``` - ## Validator Rewards -An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana that can be claimed is defined as follows. +An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The +transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana that can +be claimed is defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Current Transaction Epoch Index`, where: +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that + removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and + `Epoch Index < Current Transaction Epoch Index`, where: - Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. - - Let `Undecayed Rewards(n)` be `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> 8) + (((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Staked Amount/Pool Stake(n)`. - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Current Transaction Epoch Index - n`. + - Let `Undecayed Rewards(n)` be + `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> 8) + (((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Staked Amount/Pool Stake(n)`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where + `d = Current Transaction Epoch Index - n`. ## Delegation Rewards -To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. +To claim rewards, a _Delegation Output_ must be destroyed. Depending on the state it is in at that point, different +conditions for claiming rewards apply. An output destroyed in _Delegating State_ will always forfeit _potential_ rewards +for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They +are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for +that epoch. The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, where: - - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could do without `-1`, technically). - - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in + the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, where: + - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could + do without `-1`, technically). + - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous + epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. - Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - - Let `Undecayed Rewards(n)` be `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Delegated Amount/Pool Stake(n)`. - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Current Transaction Epoch Index - n`. + - Let `Undecayed Rewards(n)` be + `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Delegated Amount/Pool Stake(n)`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where + `d = Current Transaction Epoch Index - n`. # Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). - From 91d57a68b63ea5060e305047107003061c6e1d07 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 16 Jun 2023 08:52:12 +0200 Subject: [PATCH 013/124] Add preliminaries on performance factor --- tips/TIP-0040/tip-0040.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index ff5b6dddd..d517a7320 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -123,6 +123,11 @@ following steps must be taken. voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected committee. +### Committee Tasks + +The selected members of the committee are expected to issue _Validation Blocks_, defined in [TIP-46](../TIP-0046/tip-0046.md). +Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine the ledger state. The [performance](#performance-factor) of a validator is determined through the issuance of Validation Blocks and affects the validator pool's Mana rewards. + **Open Questions** - How exactly are we committing to the committee and its voting power? @@ -491,12 +496,18 @@ these fields:
-TODO: Do we have to state the following or can we just include it in the calculations? Since the `Performance Factor` is -a uint8, a right-shift of 8 bits should be later applied to the sum. +TODO: Do we have to state the following or can we just include it in the calculations? + +Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be later applied to the sum. ### Performance Factor -TODO: The performance factor is determined as follows... +This performance factor for a slot is defined as follows. + - Let `Validation Blocks Issued` be the number of _Validation Blocks_ issued by a given validator in a slot. + - Then `Perfomance Factor` is given by ... TODO. + +From the Draft TIP: +- Not issuing enough Validation blocks will decrease the validator rewards (and even completely decreasing the reward to zero), even if the same validator issued other block types. ## Epoch Level From 717ae923d89b78a85edc74d8997434822a7230ad Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 16 Jun 2023 13:22:25 +0200 Subject: [PATCH 014/124] Fix `End Epoch` capitalization and format --- tips/TIP-0040/tip-0040.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index d517a7320..8468e1fa7 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -106,7 +106,7 @@ following steps must be taken. `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - - The account's Staking Feature's `end_epoch` is greater or equal to `n`. + - The account's Staking Feature's `End Epoch` is greater or equal to `n`. - For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The validator is active if the following condition holds, otherwise it is inactive: - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, @@ -125,8 +125,11 @@ following steps must be taken. ### Committee Tasks -The selected members of the committee are expected to issue _Validation Blocks_, defined in [TIP-46](../TIP-0046/tip-0046.md). -Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine the ledger state. The [performance](#performance-factor) of a validator is determined through the issuance of Validation Blocks and affects the validator pool's Mana rewards. +The selected members of the committee are expected to issue _Validation Blocks_, defined in +[TIP-46](../TIP-0046/tip-0046.md). Only the _Witness Weight_, used for the acceptance of blocks, and _Approval Weight_, +used for conflict resolution and transaction acceptance, of those selected into the committee is considered to determine +the ledger state. The [performance](#performance-factor) of a validator is determined through the issuance of Validation +Blocks and affects the validator pool's Mana rewards. **Open Questions** @@ -503,11 +506,14 @@ Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be lat ### Performance Factor This performance factor for a slot is defined as follows. - - Let `Validation Blocks Issued` be the number of _Validation Blocks_ issued by a given validator in a slot. - - Then `Perfomance Factor` is given by ... TODO. + +- Let `Validation Blocks Issued` be the number of _Validation Blocks_ issued by a given validator in a slot. +- Then `Perfomance Factor` is given by ... TODO. From the Draft TIP: -- Not issuing enough Validation blocks will decrease the validator rewards (and even completely decreasing the reward to zero), even if the same validator issued other block types. + +- Not issuing enough Validation blocks will decrease the validator rewards (and even completely decreasing the reward to + zero), even if the same validator issued other block types. ## Epoch Level From e58cd085f841fbba56ae683d42e1e4a09d1b8cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Tue, 20 Jun 2023 14:58:21 +0200 Subject: [PATCH 015/124] Small fixes --- tips/TIP-0040/tip-0040.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 8468e1fa7..403c0f4c4 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -454,7 +454,7 @@ side. There are thus two types of transitions: delayed claiming transition and d - Destruction Transition - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` as the Delegation Output on the input side. The next state is the empty state. - - During this transition, Mana rewards may be added to the total sum of mana on the input side of the transaction, + - During this transition, Mana rewards may be added to the total sum of mana on the output side of the transaction, according to [delegation rewards](#delegation-rewards). #### Created Outputs @@ -494,7 +494,7 @@ these fields: Performance Factor - uint64 + uint8 The performance factor of the validator. From 1cceb0111d9382ebd43a1fe72c64b80a4b0fd49b Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 21 Jun 2023 14:11:19 +0200 Subject: [PATCH 016/124] Update field order --- tips/TIP-0040/tip-0040.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 403c0f4c4..3f6ff1372 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -169,18 +169,23 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. Set to value 7 to denote a Delegation Output. - - Delegation ID - ByteArray[32] - Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. - Amount uint64 The amount of IOTA coins held by the output. - Validator + Delegated Amount + uint64 + The amount of delegated IOTA coins. + + + Delegation ID + ByteArray[32] + Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. + + + Validator ID ByteArray[32] The Account ID of the validator to which this output is delegating. @@ -194,11 +199,6 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. uint64 The index of the last epoch for which this output delegates. - - Delegated Amount - uint64 - The amount of delegated IOTA coins. - Unlock Conditions Count uint8 @@ -420,7 +420,6 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - Features must be sorted in ascending order based on their `Feature Type` both in the `Immutable Features` fields. - Syntactic validation of all present features must pass. -- If `Delegation ID` is zeroed out, `Delegated Amount` must be `0`. - If `Delegation ID` is not zeroed out, `Delegated Amount` must not be `0`. ### Additional Transaction Semantic Validation Rules @@ -448,7 +447,7 @@ side. There are thus two types of transitions: delayed claiming transition and d - Let `Output Transition Slot Index` be the slot index of the transaction in which the Delegation Output is transitioned. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Transition Slot Index < Registration Slot(n+1)` then `End Epoch` must be set to the epoch index + - If `Output Transition Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to the epoch index resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to `Output Transition Slot Index / Epoch Slot Duration + 1`. - Destruction Transition @@ -462,8 +461,8 @@ side. There are thus two types of transitions: delayed claiming transition and d - When `Delegation ID` is zeroed out certain fields of the Delegation Output must be set as follows. - Let `Output Creation Slot Index` be the slot index of the transaction in which the Delegation Output is created. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Creation Slot Index < Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index resulting - from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to + - If `Output Creation Slot Index <= Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index + resulting from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to `Output Creation Slot Index / Epoch Slot Duration + 2`. - Set `Delegated Amount` to the value of the `Amount` field. - Set `End Epoch` to `0`. From 8692b6984c90b0506a2c90ec3c8d3bd69fd24683 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 21 Jun 2023 21:23:27 +0200 Subject: [PATCH 017/124] Update delegation output syntax rules --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 3f6ff1372..20b6d0d85 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -420,7 +420,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - Features must be sorted in ascending order based on their `Feature Type` both in the `Immutable Features` fields. - Syntactic validation of all present features must pass. -- If `Delegation ID` is not zeroed out, `Delegated Amount` must not be `0`. +- `Validator ID` must not be zeroed out. ### Additional Transaction Semantic Validation Rules From 0390f4ee6bdac8daca8f78e6148d5cc07dde3de5 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 3 Jul 2023 11:34:28 +0200 Subject: [PATCH 018/124] Add Storage Deposit for Delegation Output --- tips/TIP-0040/tip-0040.md | 338 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 20b6d0d85..004479c20 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -18,6 +18,8 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 3. [Building Blocks](#building-blocks) 4. [Staking](#staking) 5. [Delegation](#delegation) + - [Delegation Output](#delegation-output) + - [Storage Deposit](#storage-deposit-calculation) 6. [Mana Rewards](#mana-rewards) - [Validator Rewards](#validator-rewards) - [Delegation Rewards](#delegation-rewards) @@ -467,6 +469,342 @@ side. There are thus two types of transitions: delayed claiming transition and d - Set `Delegated Amount` to the value of the `Amount` field. - Set `End Epoch` to `0`. +### Storage Deposit Calculation + +The storage deposit of a Delegation Output is higher than for other output types. Therefore, the storage deposit +calculation of these outputs defines an additional corresponding field type. + + + + + + + + + + + + + + +
NameDescriptionWeightReasoning
delegationFields contained in a Delegation Output.TODO: TBDDelegation requires additional bookkeeping in nodes for committee selection and mana rewards tracking.
+ +The following table shows the Delegation Output including the possible fields and their specific weight. + + +
+ Delegation Output +
+ Describes a Delegation output, which delegates its contained IOTA tokens as voting power to a validator. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldField typeLength MinimumLength MaximumDescription
Output Typedelegation11 + Set to value 7 to denote a Delegation Output. +
Amountdelegation88The amount of IOTA coins held by the output.
Delegated Amountdelegation88The amount of delegated IOTA coins.
Delegation IDdelegation3232Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it.
Validator IDdelegation3232The Account ID of the validator to which this output is delegating.
Start Epochdelegation88The index of the first epoch for which this output delegates.
End Epochdelegation88The index of the last epoch for which this output delegates.
Unlock Conditions Countdata11The number of unlock conditions following.
Unlock Conditions atMostOneOfEach +
+ Address Unlock Condition + + + + + + + + + + + + + + + + + +
NameTypeDescription
Unlock Condition Typedata11 + Set to value 0 to denote an Address Unlock Condition. +
Address +
+ Ed25519 Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 0 to denote an Ed25519 Address. +
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 8 to denote an Account Address. +
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 16 to denote an NFT Address. +
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+
+
Immutable Features Countdata11The number of immutable features following. Immutable features are defined upon deployment of the UTXO state machine and are not allowed to change in any future state transition.
Immutable Features atMostOneOfEach +
+ Issuer Feature +
+ Identifies the validated issuer of the UTXO state machine. +
+ + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Feature Typedata11 + Set to value 1 to denote an Issuer Feature. +
Issuer oneOf +
+ Ed25519 Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 0 to denote an Ed25519 Address. +
PubKeyHashdata3232The raw bytes of the Ed25519 address which is a BLAKE2b-256 hash of the Ed25519 public key.
+
+
+ Account Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 8 to denote an Account Address. +
Account IDdata3232The raw bytes of the Account ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+ NFT Address + + + + + + + + + + + + + + + + + + + + + + +
NameField typeLength MinimumLength MaximumDescription
Address Typedata11 + Set to value 16 to denote an NFT Address. +
NFT IDdata3232The raw bytes of the NFT ID which is the BLAKE2b-256 hash of the outputID that created it.
+
+
+
+
+ + + # Mana Rewards Mana Rewards are claimed and tracked for past epochs on an epoch level. For an ongoing epoch, they are tracked on a slot From 40a89746abc88523d65962cc4f7bc9272986fe35 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 4 Jul 2023 10:39:35 +0200 Subject: [PATCH 019/124] Update tips/TIP-0040/tip-0040.md Co-authored-by: Thibault Martinez --- tips/TIP-0040/tip-0040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 004479c20..c2098948b 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -426,7 +426,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. ### Additional Transaction Semantic Validation Rules -- Explicit `Delegation ID`: `Delegation ID` is taken as the value of the `Delegation ID` field in the NFT output. +- Explicit `Delegation ID`: `Delegation ID` is taken as the value of the `Delegation ID` field in the Delegation output. - Implicit `Delegation ID`: When a Delegation output is consumed as an input in a transaction and `Delegation ID` field is zeroed out, take the BLAKE2b-256 hash of the `Output ID` of the input as `Delegation ID`. - For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the From 4028da8097d4d554e661bf10cd333074a16d2141 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 4 Jul 2023 15:28:44 +0200 Subject: [PATCH 020/124] Clarify destruction transition --- tips/TIP-0040/tip-0040.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index c2098948b..437717b99 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -453,8 +453,9 @@ side. There are thus two types of transitions: delayed claiming transition and d resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to `Output Transition Slot Index / Epoch Slot Duration + 1`. - Destruction Transition - - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` as the - Delegation Output on the input side. The next state is the empty state. + - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` that + corresponds to the `Delegation ID` of the one on the input side, which may be an implicit or explicit Delegation ID. + The next state is the empty state. - During this transition, Mana rewards may be added to the total sum of mana on the output side of the transaction, according to [delegation rewards](#delegation-rewards). From ef6f48014b33748e96d7521fcd1e2cc06313ff65 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 6 Jul 2023 11:48:10 +0200 Subject: [PATCH 021/124] Use `Validator ID` instead of `Validator` --- tips/TIP-0040/assets/selection-timing.png | Bin 611349 -> 618321 bytes tips/TIP-0040/tip-0040.md | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tips/TIP-0040/assets/selection-timing.png b/tips/TIP-0040/assets/selection-timing.png index 03b15e52225d2709181720a84fec51499c84e234..7646dd04326e8097cf63cd30af1cda46e92af046 100755 GIT binary patch delta 80658 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 n+F!@#_V;1_eN delta 74096 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
HQGL&)sG}x?f@Rw?YA|rJ1r#*Y3QJw}Nl{ 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 rK+|6 @@ -857,7 +857,7 @@ From the Draft TIP: ### Epoch Rewards -The rewards of an epoch are tracked by keeping a map with `Validator Account ID`s as keys, of type `ByteArray[32]`, and +The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these fields: @@ -979,7 +979,7 @@ that epoch. The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator` field in +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, where: - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could do without `-1`, technically). From 69a8295fbcc91f40158864a927d9681a5cb4beb3 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 6 Jul 2023 11:54:43 +0200 Subject: [PATCH 022/124] Update committee selection procedure --- tips/TIP-0040/tip-0040.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 0951c1426..b961dad49 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -106,11 +106,12 @@ following steps must be taken. `Epoch Start Slot(n) - Epoch Nearing Threshold - Activity Window Duration - 1`. - Let `Activity Window Slot(n)` be the last slot of the activity window with index `Epoch Start Slot(n) - Epoch Nearing Threshold - 1`. +- Let `Cutoff Slot(n)` be the slot with index `Epoch Start Slot(n) - Maximum Committable Age - 1`. - The set of _registered validators_ are all account outputs satisfying all of the following conditions: - The account has a _Staking Feature_ at the end of the `Registration Slot(n)`. - The account's Staking Feature's `End Epoch` is greater or equal to `n`. -- For any validator `i` in the set of _registered validators_ the activity is determined as a boolean value. The - validator is active if the following condition holds, otherwise it is inactive: +- For any validator `i` in the set of _registered validators_ the activity is determined. The validator is active if the + following condition holds, otherwise it is inactive: - The account with `Account ID` issues at least one block whose `Account ID` field is equal to that of the account, and the block's `Issuing Time` field converted to a slot index `Block Slot Index`, satisfies all of the following conditions: @@ -119,11 +120,14 @@ following steps must be taken. - For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` at the end of the slot with index `Registration Slot(n)`, where: - `Stake_i` is the `Staked Amount` of IOTA tokens of the validator's _Staking Feature_. - - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` field - is equal to `i`. + - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` + field is equal to `i`. - The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by - voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the selected - committee. + voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the + preliminary committee for Epoch `n`. +- The preliminary committee becomes the selected committee if the `Activity Window Slot(n)` is finalized before the + `Cutoff Slot(n)` is committed, otherwise the committee of the current epoch becomes the selected committee of the next + epoch. ### Committee Tasks @@ -816,8 +820,8 @@ the epoch ends, that is, when its last slot is committed. For each slot, the performance factor of each validator in the selected committee must be tracked. For an epoch this results in a list of performance factors for a validator. The rewards for an ongoing epoch are tracked by keeping a map -with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of -these fields: +with `Validator ID`s as keys, of type `ByteArray[32]`, and the values being a list of objects consisting of these +fields:
@@ -857,8 +861,8 @@ From the Draft TIP: ### Epoch Rewards -The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and -the values being a list of objects consisting of these fields: +The rewards of an epoch are tracked by keeping a map with `Validator ID`s as keys, of type `ByteArray[32]`, and the +values being a list of objects consisting of these fields:
@@ -979,8 +983,9 @@ that epoch. The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. -- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field in - the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, where: +- Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field + in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, + where: - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could do without `-1`, technically). - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous From d2d99873ca25ac8416286da61b2ddf1c28663590 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 6 Jul 2023 11:55:48 +0200 Subject: [PATCH 023/124] Remove open questions --- tips/TIP-0040/tip-0040.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index b961dad49..30643efbb 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -137,12 +137,6 @@ used for conflict resolution and transaction acceptance, of those selected into the ledger state. The [performance](#performance-factor) of a validator is determined through the issuance of Validation Blocks and affects the validator pool's Mana rewards. -**Open Questions** - -- How exactly are we committing to the committee and its voting power? -- Do we have to keep track of the activity data in the slot committment? In other words, does this need to be specified - on the protocol level or is this an implementation detail for the node software? - # Delegation By delegating, a user adds voting weight in the form of IOTA tokens to a validator's voting power without having to From 43f5b0fea61b45b859f67a246801fddf58408bc8 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 7 Jul 2023 09:18:36 +0200 Subject: [PATCH 024/124] Use `<=` instead of `<` for delegator rewards --- tips/TIP-0040/tip-0040.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 30643efbb..00b9ab0bd 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -951,8 +951,8 @@ The following section specifies how to convert the slot-level data into epoch-le ## Validator Rewards An account with a _Staking Feature_ can claim rewards in the same transaction where the feature is removed. The -transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana that can -be claimed is defined as follows. +transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards +that can be claimed is defined as follows. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and @@ -975,13 +975,12 @@ for the epoch in which it is destroyed, since the rewards for that epoch only be are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. -The amount of Mana that can be claimed for a _Delegation Output_ which is destroyed are defined as follows. +The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field - in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index < Delegation End`, + in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: - - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1` (TODO: We could - do without `-1`, technically). + - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1`. - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. From ef5c8fb4737055a4ef86121a060272aaa3fb6335 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 7 Jul 2023 09:19:12 +0200 Subject: [PATCH 025/124] Add Rationale section --- tips/TIP-0040/assets/delayed-claiming.png | Bin 0 -> 641856 bytes tips/TIP-0040/assets/delegation-epochs.png | Bin 0 -> 606133 bytes tips/TIP-0040/tip-0040.md | 71 +++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100755 tips/TIP-0040/assets/delayed-claiming.png create mode 100755 tips/TIP-0040/assets/delegation-epochs.png diff --git a/tips/TIP-0040/assets/delayed-claiming.png b/tips/TIP-0040/assets/delayed-claiming.png new file mode 100755 index 0000000000000000000000000000000000000000..5335261f70ed818a8a16958f24031cccd519695c GIT binary patch literal 641856 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 F69C5+mhb=o literal 0 HcmV?d00001 diff --git a/tips/TIP-0040/assets/delegation-epochs.png b/tips/TIP-0040/assets/delegation-epochs.png new file mode 100755 index 0000000000000000000000000000000000000000..f694163e0eccdf8ea0d709e8236bae621e0fbd08 GIT binary patch literal 606133 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

I}uILGWz6D6GV+~FpfRrOcdDSG61Qd|=68M9e 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

Delegation Output
- Describes a Delegation output, which delegates its contained IOTA tokens as voting power to a validator. + Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.

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%0DvEU8!>;Rs{#Y_yT-^H8lTX8f* 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 32`, where `d = Current Transaction Epoch Index - n`. +# Rationale & Design + +This section describes the rationale behind some of the design choices and explains how the introduced concepts fit +together. It is however not part of the formal specification and thus non-normative. + +## Delegation Output + +Using dedicated Delegation Outputs over a Delegation Feature in an Account has some advantages. First, it makes it +easily possible to delegate to multiple validators from the same account, by creating multiple outputs. In the Stardust +Design (TIP-18), Features are assumed to be unique in an output, and thus having multiple Delegation Features to allow +for multiple delegation targets would require changing that assumption. Second, it decouples the delegation logic from +the Account. Delegation, in contrast to staking, does not require that an account must be the delegator. A Delegation +Output can be owned by a plain Ed25519 address or an NFT or Account Address, making it more flexible. A Delegation +Feature would only allow for Delegation from an account. + +## Delayed Claiming + +Mana Rewards for some epoch `X` only become available after that epoch ends. At that point, the voting power for the +following epoch `X+1` has already been calculated. That means, if one waits until the rewards for `X` are available and +consumes their Delegation Output to claim rewards, they have already delegated for `X+1` but will loose out on the +rewards they would get for that delegation. + +With delayed claiming however, a user can delegate for `X` and then transition to delayed claiming. At that point, the +output only needs to contain the minimum storage deposit. The remaining funds can be put in a new Delegation Output to +delegate for `X+1`, which can repeat this procedure. In this manner, one can delegate for one epoch at a time and never +lose out on any rewards. The following figure exemplifies this procedure. + +![](./assets/delayed-claiming.png) + +Delayed Claiming also allows for a high degree of liquidity while delegating. Even without delayed claiming, this +delegation mechanism implements _liquid delegation_ as Delegation Outputs are never locked and can be accessed anytime. +However, one might loose out on rewards. Delayed Claiming fixes this: If one delegated for the current epoch but needs +to access the funds immediately, one can transition to delayed claiming and access all the funds (minus the small +storage deposit), and still claim rewards later. + +Additionally, Delayed Claiming enables Layer 2 Smart Contract Chains to hold their funds in Delegation Outputs and +delegate the tokens of their users for them, while they can use those wrapped tokens on Layer 2. Since an Account Output +belonging to an SC chain is transitioned very frequently, without Delayed Claiming, they would never hold the Delegation +Output long enough for it to be able to claim rewards. With Delayed Claiming SC chains can implement this kind of +delegation. + +### Start and End Epoch + +This figure showcases how epochs are set when createing and transitioning Delegation Outputs. Note that the length of +epochs in slots is not accurately depicted here. What matters for epoch setting is 1) what the current epoch is and 2) +whether the creation or transition happens before or after the registration slot for the following epoch. + +![](./assets/delegation-epochs.png) + +- Delegation Output X is created before the end of the Registration Slot. Therefore its `Start Epoch` is set to `21`, as + that is the earliest epoch for which it could receive rewards. However, it is also transitioned before the end of the + slot, so its `End Epoch` is set to `20`, as that is the last epoch for which it could receive rewards. However, the + condition for claiming rewards is not satisfied for any epoch index. There will be no epoch index `A` that satisfies + `A >= 21 && A <= 20`. This Delegation Output will consequently not be able to claim any rewards at all, as it was + never included in any voting power calculation. +- Delegation Output Y is created before the end of the Registration Slot. Therefore its `Start Epoch` is set to `21`, as + that is the earliest epoch for which it could receive rewards. It is transitioned after the end of the Registration + Slot, so it was included in the voting power calculation. Therefore the last epoch for which it could get rewards is + `21`, which is the value of `End Epoch`. In sum, the delegation output will therefore be able to claim rewards for + epoch `21` only. +- Delegation Output Z is analogous to X, only shifted by one epoch. It is created after the Registration Slot of Epoch + 21 but before the Registration Slot of Epoch 22. Therefore its `Start Epoch` is set to `22`, as that is the earliest + epoch for which it could receive rewards. It is however transitioned before the Registration Slot of Epoch 22, so it + will not be included in the voting power calculation for said epoch. Its `End Epoch` is thus set to `21`, as that may + be the last epoch for which it could get rewards. Simlar to Output X, the delegation output will not be able to claim + any rewards as it was never included in any voting power calculation and no epoch index `A` satisfies + `A >= 22 && A <= 21`. + +These examples show that transitioning a Delegation Output without crossing a Registration Slot boundary does not yield +any rewards. At least one such boundary must be crossed for any rewards to be claimable. + # Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From 22418a3c179abfae9c1be83f4f10c23868eb6e63 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Fri, 7 Jul 2023 10:06:16 +0200 Subject: [PATCH 026/124] Replace `voting power` with `pool stake` Since we switched to a seat-based committee, the voting power is no longer a relevant concept. --- tips/TIP-0040/tip-0040.md | 73 ++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1d857fad1..394901982 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -23,19 +23,21 @@ requires: TIP-19, TIP-20, TIP-21 and TIP-22 6. [Mana Rewards](#mana-rewards) - [Validator Rewards](#validator-rewards) - [Delegation Rewards](#delegation-rewards) -7. [Copyright](#copyright) +7. [Rationale & Design](#rationale--design) + - [Delegation Output](#delegation-output-1) +8. [Copyright](#copyright) # Summary Staking and Delegation are a mechanism by which users contribute to the security of the network for which they are rewarded. Stakers lock IOTA tokens in order to become eligible to be selected into the validator committee. Delegators -delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it voting -weight from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool -performs its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly -proportional to the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to -contribute to the security and well-functioning of the network while receiving rewards for their contribution. +delegate IOTA tokens to a validator, forming a validator pool. Such a pool votes on conflicts and derives it total stake +from the locked tokens of the staker and the delegated tokens of all its delegators. If the validator of a pool performs +its task well, the pool is rewarded with Mana. Each participant of the pool can claim rewards roughly proportional to +the amount of staked or delegated tokens. This results in a mechanism that incentivizes users to contribute to the +security and well-functioning of the network while receiving rewards for their contribution. -This TIP specifies the details of staking, delegation, committee selection, validation and Mana rewards. +This TIP specifies the details of staking, delegation, committee selection and Mana rewards. # Motivation @@ -66,18 +68,19 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA The IOTA protocol accepts blocks and transactions through voting. The voters are a selected validator committee. The following gives a high-level idea of the selection process, with the details specified in the rest of the section. -Stakers, or interchangeably also called _registered validators_, get voting weight by locking IOTA tokens. By locking -the tokens, the stakers prove control over them so the protocol assigns them a proportional amount of voting weight in -exchange. Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase -its voting weight further. A staker and all its delegators are called a staking or validator pool. Such a pool is -eligible to be selected into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of -blocks, and _Approval Weight_, used for conflict resolution and transaction acceptance, of those selected into the -committee is considered to determine the ledger state. +Stakers, or interchangeably also called _registered validators_, lock their IOTA tokens to _stake_ them. By locking the +tokens, the stakers prove control over them so the protocol assigns them a proportional amount of stake in exchange. +Additionally, other users - so-called delegators - can _delegate_ their IOTA tokens to a staker to increase its stake +further. A staker and all its delegators are called a staking or validator pool. Such a pool is eligible to be selected +into a committee for a certain duration. Only the _Witness Weight_, used for the acceptance of blocks, and _Approval +Weight_, used for conflict resolution and transaction acceptance, of those selected into the committee is considered to +determine the ledger state. Stake is only used to determine who is selected into the committee. Once selected, every +validator in the committee occupies a _seat_ and every seat has the same voting weight. The IOTA protocol slices time into slots and epochs. An epoch is simply a number of slots, and a slot has a protocol-defined duration in seconds. A new validator committee is selected for each epoch. Shortly before an epoch ends, the current activity of all registered validators as well as the pool's stake is determined. Through a selection -procedure, a committee is selected out of all the registered pools who have a large enough voting power and enough block +procedure, a committee is selected out of all the registered pools who have a large enough stake and enough block issuance activity. Once selected, it is each pool's responsibility to issue _Validation Blocks_ across the epoch through which they vote on conflicts. Depending on how many such blocks they issued for each slot in an epoch and how many they were expected to issue, a _performance factor_ is calculated. This factor determines the amount of _Mana rewards_ the @@ -117,14 +120,14 @@ following steps must be taken. conditions: - `Block Slot Index > Registration Slot(n)`. - `Block Slot Index <= Activity Window Slot(n)`. -- For any validator `i` in the set of _registered validators_ the voting power is equal to `Stake_i + DelegatedStake_i` - at the end of the slot with index `Registration Slot(n)`, where: +- For any validator `i` in the set of _registered validators_ the pool stake is equal to `Stake_i + DelegatedStake_i` at + the end of the slot with index `Registration Slot(n)`, where: - `Stake_i` is the `Staked Amount` of IOTA tokens of the validator's _Staking Feature_. - `DelegatedStake_i` is the sum of all _Delegation Output's_ `Amount` field where the value of the `Validator ID` field is equal to `i`. -- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by - voting power in descending order. The first `Committee Size` entries in the _eligible validators_ set is the - preliminary committee for Epoch `n`. +- The set of _registered validators_ who are active constitute the set of _eligible validators_, which is sorted by pool + stake in descending order. The first `Committee Size` entries in the _eligible validators_ set is the preliminary + committee for Epoch `n`. - The preliminary committee becomes the selected committee if the `Activity Window Slot(n)` is finalized before the `Cutoff Slot(n)` is committed, otherwise the committee of the current epoch becomes the selected committee of the next epoch. @@ -139,9 +142,9 @@ Blocks and affects the validator pool's Mana rewards. # Delegation -By delegating, a user adds voting weight in the form of IOTA tokens to a validator's voting power without having to -become a validator themself. In order to delegate, a _Delegation Output_ must be created. The following section -specifies how delegation is implemented. +By delegating IOTA tokens, a user adds to a validator's stake proportional to the amount of tokens they delegate, +without having to become a validator themself. In order to delegate, a _Delegation Output_ must be created. The +following section specifies how delegation is implemented. ## Delegation Output @@ -154,7 +157,7 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output.

@@ -494,7 +497,7 @@ The following table shows the Delegation Output including the possible fields an
Delegation Output
- Describes a Delegation output, which delegates its contained IOTA tokens as voting power to a validator. + Describes a Delegation Output, which delegates its contained IOTA tokens to a validator.
@@ -921,8 +924,7 @@ The following section specifies how to convert the slot-level data into epoch-le - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the `Staked Amount` in the _Staking Feature_ of the validator. - Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined - at the time of the voting power calculation. (TODO: Update after we've defined how we keep track of validators and - their voting power in slot committments.) + at the time of the pool stake calculation, i.e. the end of the registration slot. - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA tokens in the selected committee. - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. @@ -1008,9 +1010,9 @@ the Account. Delegation, in contrast to staking, does not require that an accoun Output can be owned by a plain Ed25519 address or an NFT or Account Address, making it more flexible. A Delegation Feature would only allow for Delegation from an account. -## Delayed Claiming +### Delayed Claiming -Mana Rewards for some epoch `X` only become available after that epoch ends. At that point, the voting power for the +Mana Rewards for some epoch `X` only become available after that epoch ends. At that point, the pool stake for the following epoch `X+1` has already been calculated. That means, if one waits until the rewards for `X` are available and consumes their Delegation Output to claim rewards, they have already delegated for `X+1` but will loose out on the rewards they would get for that delegation. @@ -1034,7 +1036,7 @@ belonging to an SC chain is transitioned very frequently, without Delayed Claimi Output long enough for it to be able to claim rewards. With Delayed Claiming SC chains can implement this kind of delegation. -### Start and End Epoch +#### Start and End Epoch This figure showcases how epochs are set when createing and transitioning Delegation Outputs. Note that the length of epochs in slots is not accurately depicted here. What matters for epoch setting is 1) what the current epoch is and 2) @@ -1047,19 +1049,18 @@ whether the creation or transition happens before or after the registration slot slot, so its `End Epoch` is set to `20`, as that is the last epoch for which it could receive rewards. However, the condition for claiming rewards is not satisfied for any epoch index. There will be no epoch index `A` that satisfies `A >= 21 && A <= 20`. This Delegation Output will consequently not be able to claim any rewards at all, as it was - never included in any voting power calculation. + never included in any pool stake calculation. - Delegation Output Y is created before the end of the Registration Slot. Therefore its `Start Epoch` is set to `21`, as that is the earliest epoch for which it could receive rewards. It is transitioned after the end of the Registration - Slot, so it was included in the voting power calculation. Therefore the last epoch for which it could get rewards is + Slot, so it was included in the pool stake calculation. Therefore the last epoch for which it could get rewards is `21`, which is the value of `End Epoch`. In sum, the delegation output will therefore be able to claim rewards for epoch `21` only. - Delegation Output Z is analogous to X, only shifted by one epoch. It is created after the Registration Slot of Epoch 21 but before the Registration Slot of Epoch 22. Therefore its `Start Epoch` is set to `22`, as that is the earliest epoch for which it could receive rewards. It is however transitioned before the Registration Slot of Epoch 22, so it - will not be included in the voting power calculation for said epoch. Its `End Epoch` is thus set to `21`, as that may - be the last epoch for which it could get rewards. Simlar to Output X, the delegation output will not be able to claim - any rewards as it was never included in any voting power calculation and no epoch index `A` satisfies - `A >= 22 && A <= 21`. + will not be included in the pool stake calculation for said epoch. Its `End Epoch` is thus set to `21`, as that may be + the last epoch for which it could get rewards. Simlar to Output X, the delegation output will not be able to claim any + rewards as it was never included in any pool stake calculation and no epoch index `A` satisfies `A >= 22 && A <= 21`. These examples show that transitioning a Delegation Output without crossing a Registration Slot boundary does not yield any rewards. At least one such boundary must be crossed for any rewards to be claimable. From 22e1bed50a55cab25525fb234f17bc45dc010cc1 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Wed, 12 Jul 2023 11:22:17 +0200 Subject: [PATCH 027/124] Add motivation section --- tips/TIP-0040/tip-0040.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 394901982..853e2c52b 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -41,7 +41,26 @@ This TIP specifies the details of staking, delegation, committee selection and M # Motivation -TODO +In IOTA 1.5, nodes use the milestones issued by the Coordinator to reach a consensus on which transactions are +confirmed. The Coordinator was always intended as a temporary solution and is removed with the upgrade to IOTA 2.0 +(a.k.a. _Coordicide_). In IOTA 2.0, the Coordinator is replaced by a weight-based voting scheme to resolve conflicts and +finalize transactions. Each such vote needs to have a weight associated to it, which is determined by the identity that +cast the vote. Determining the weight of an identity is done through a sybil protection mechanism. + +In this TIP, Proof-of-Stake is used as the sybil protection mechanism. Proof-of-Stake assigns every participant weight +proportional to the amount of tokens they hold. Owning tokens serves as proof of owning a scarce resource. It is much +more efficient than relying on scarce resources external to the system, such as hardware or electricity, as it is used +in sybil protection mechanisms based on Proof-of-Work. + +TODO: Additionall motivate using seat-based committees where every seat has the same weight rather than using the weight +proportional to the staked and delegated tokens. + +Using Proof-of-Stake in IOTA 2.0 results in a system with low barriers to entry. The technical requirements for +participation are low and allow everyone to contribute to the security of the network. Those that can not or do not want +to vote (i.e. stake) themselves can delegate stake instead and still add to the security of the network. Proof-of-Stake +is moreover energy efficient and environmentally friendly. + +In line with IOTA's goal for _Digital Autonomy_, these properties make Proof-of-Stake a good choice. # Building Blocks From be70eedbc4977c10237be97f3df21eab4d3250af Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Mon, 17 Jul 2023 13:20:36 +0200 Subject: [PATCH 028/124] Add time boundaries for Delegation Output --- tips/TIP-0040/tip-0040.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 853e2c52b..9e354e584 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -452,6 +452,10 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the input side. The corresponding Delegation output has the explicit or implicit `Delegation ID` equal to that of the Delegation output on the output side. +- A _Commitment Input_ must be present. +- Let `Past Bounded Slot Index` be given by `Commitment Index + Max Committable Age` where `Commitment Index` is the + slot index of the commitment input. +- Let `Past Bounded Epoch Index` be the epoch index corresponding to the slot index `Past Bounded Slot Index`. #### Consumed Outputs @@ -466,12 +470,9 @@ side. There are thus two types of transitions: delayed claiming transition and d side. - The fields `Delegated Amount`, `Start Epoch` and `Validator ID` must not be changed. - `End Epoch` on the output must be set as follows. - - Let `Output Transition Slot Index` be the slot index of the transaction in which the Delegation Output is - transitioned. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Transition Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to the epoch index - resulting from the integer division of `Output Transition Slot Index / Epoch Slot Duration`, otherwise to - `Output Transition Slot Index / Epoch Slot Duration + 1`. + - If `Past Bounded Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to `Past Bounded Epoch Index`, + otherwise to `Past Bounded Epoch Index + 1`. - Destruction Transition - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` that corresponds to the `Delegation ID` of the one on the input side, which may be an implicit or explicit Delegation ID. @@ -482,11 +483,9 @@ side. There are thus two types of transitions: delayed claiming transition and d #### Created Outputs - When `Delegation ID` is zeroed out certain fields of the Delegation Output must be set as follows. - - Let `Output Creation Slot Index` be the slot index of the transaction in which the Delegation Output is created. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). - - If `Output Creation Slot Index <= Registration Slot(n+1)` then `Start Epoch` must be set to the epoch index - resulting from the integer division of `Output Creation Slot Index / Epoch Slot Duration + 1`, otherwise to - `Output Creation Slot Index / Epoch Slot Duration + 2`. + - If `Past Bounded Slot Index <= Registration Slot(n+1)` then `Start Epoch` must be set to + `Past Bounded Epoch Index + 1`, otherwise to `Past Bounded Epoch Index + 2`. - Set `Delegated Amount` to the value of the `Amount` field. - Set `End Epoch` to `0`. From 8fd05ae4752975d8d827c768a1410fec4e59a420 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 18 Jul 2023 08:49:53 +0200 Subject: [PATCH 029/124] Use Commitment input for rewards calculation --- tips/TIP-0040/tip-0040.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 9e354e584..a27e6070c 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -79,7 +79,6 @@ Global protocol parameters used throughout this TIP are defined in [TIP-22 (IOTA ## Common Parameters and Functions -- Let `Current Transaction Epoch Index` be the index of the epoch to which the transaction belongs. - Let `decay(n)` be calculated with the algorithm and lookup table in [TIP-39](../TIP-0039/tip-0039.md). # Staking @@ -974,9 +973,12 @@ An account with a _Staking Feature_ can claim rewards in the same transaction wh transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards that can be claimed is defined as follows. +- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking Feature_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and - `Epoch Index < Current Transaction Epoch Index`, where: + `Epoch Index < Future Bounded Epoch Index`, where: - Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. @@ -984,8 +986,7 @@ that can be claimed is defined as follows. - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. - Let `Undecayed Rewards(n)` be `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> 8) + (((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Staked Amount/Pool Stake(n)`. - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where - `d = Current Transaction Epoch Index - n`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. ## Delegation Rewards @@ -997,10 +998,13 @@ that epoch. The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. +- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation Output_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: - - If the output is in _Delegating State_ let `Delegation End` be `Current Transaction Epoch Index - 1`. + - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`. - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. @@ -1010,8 +1014,7 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - Let `Undecayed Rewards(n)` be `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Delegated Amount/Pool Stake(n)`. - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where - `d = Current Transaction Epoch Index - n`. + - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. # Rationale & Design From 4c20df038e67962d3d4ff78e7e5f5b29c432de19 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 18 Jul 2023 10:38:12 +0200 Subject: [PATCH 030/124] Specify `n` in registration slot calculation --- tips/TIP-0040/tip-0040.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index a27e6070c..e05f29fb4 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -469,7 +469,8 @@ side. There are thus two types of transitions: delayed claiming transition and d side. - The fields `Delegated Amount`, `Start Epoch` and `Validator ID` must not be changed. - `End Epoch` on the output must be set as follows. - - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). + - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection), where `n` is equal to + `Past Bounded Epoch Index`. - If `Past Bounded Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to `Past Bounded Epoch Index`, otherwise to `Past Bounded Epoch Index + 1`. - Destruction Transition @@ -482,7 +483,8 @@ side. There are thus two types of transitions: delayed claiming transition and d #### Created Outputs - When `Delegation ID` is zeroed out certain fields of the Delegation Output must be set as follows. - - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection). + - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection), where `n` is equal to + `Past Bounded Epoch Index`. - If `Past Bounded Slot Index <= Registration Slot(n+1)` then `Start Epoch` must be set to `Past Bounded Epoch Index + 1`, otherwise to `Past Bounded Epoch Index + 2`. - Set `Delegated Amount` to the value of the `Amount` field. @@ -975,7 +977,8 @@ that can be claimed is defined as follows. - Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking Feature_ on the input or output side. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking + Feature_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and `Epoch Index < Future Bounded Epoch Index`, where: @@ -1000,7 +1003,8 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation Output_ on the input or output side. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation + Output_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: From f89a55f2b8f9315bd36eadd38996884caf8226b3 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 18 Jul 2023 13:38:20 +0200 Subject: [PATCH 031/124] Be more loose with Commitment Input requirements --- tips/TIP-0040/tip-0040.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index e05f29fb4..65530bbf9 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -451,10 +451,12 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - For every non-zero explicit `Delegation ID` on the output side there must be a corresponding Delegation Output on the input side. The corresponding Delegation output has the explicit or implicit `Delegation ID` equal to that of the Delegation output on the output side. -- A _Commitment Input_ must be present. - Let `Past Bounded Slot Index` be given by `Commitment Index + Max Committable Age` where `Commitment Index` is the slot index of the commitment input. - Let `Past Bounded Epoch Index` be the epoch index corresponding to the slot index `Past Bounded Slot Index`. +- If the past bounded indices are required for transaction validation, a _Commitment Input_ must be present. This is the + case for any transaction containing a _Delegation Output_ on the input or output side except when it is destroyed in + _Delayed Claiming State_. #### Consumed Outputs @@ -1001,14 +1003,14 @@ that epoch. The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. -- Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the - slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation - Output_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID `Validator ID` field in the output, where its `Epoch Index` satisfies `Epoch Index >= Start Epoch` and `Epoch Index <= Delegation End`, where: - - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`. + - If the output is in _Delegating State_ let `Delegation End` be `Future Bounded Epoch Index - 1`, where: + - `Future Bounded Epoch Index` is given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. + - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Delegation + Output_ on the input or output side, except when it is destroyed in the _Delayed Claiming State_. - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. From da35385221e5ae94e645c2be6e2463a2869eb53d Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Tue, 18 Jul 2023 13:57:58 +0200 Subject: [PATCH 032/124] Use future bounded idx for end epoch + rationale --- tips/TIP-0040/tip-0040.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 65530bbf9..7d0a7c629 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -454,6 +454,9 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - Let `Past Bounded Slot Index` be given by `Commitment Index + Max Committable Age` where `Commitment Index` is the slot index of the commitment input. - Let `Past Bounded Epoch Index` be the epoch index corresponding to the slot index `Past Bounded Slot Index`. +- Let `Future Bounded Slot Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the + slot index of the commitment input. +- Let `Future Bounded Epoch Index` be the epoch index corresponding to the slot index `Future Bounded Slot Index`. - If the past bounded indices are required for transaction validation, a _Commitment Input_ must be present. This is the case for any transaction containing a _Delegation Output_ on the input or output side except when it is destroyed in _Delayed Claiming State_. @@ -472,9 +475,9 @@ side. There are thus two types of transitions: delayed claiming transition and d - The fields `Delegated Amount`, `Start Epoch` and `Validator ID` must not be changed. - `End Epoch` on the output must be set as follows. - Let `Registration Slot(n)` be defined as in [committee selection](#committee-selection), where `n` is equal to - `Past Bounded Epoch Index`. - - If `Past Bounded Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to `Past Bounded Epoch Index`, - otherwise to `Past Bounded Epoch Index + 1`. + `Future Bounded Epoch Index`. + - If `Future Bounded Slot Index <= Registration Slot(n+1)` then `End Epoch` must be set to + `Future Bounded Epoch Index`, otherwise to `Future Bounded Epoch Index + 1`. - Destruction Transition - Is identified by the absence of a Delegation Output on the output side with an explicit `Delegation ID` that corresponds to the `Delegation ID` of the one on the input side, which may be an implicit or explicit Delegation ID. @@ -1092,6 +1095,21 @@ whether the creation or transition happens before or after the registration slot These examples show that transitioning a Delegation Output without crossing a Registration Slot boundary does not yield any rewards. At least one such boundary must be crossed for any rewards to be claimable. +### Time Boundaries + +When designing transaction validation rules, a choice must be made between choosing to bound the past or the future, +that is, whether to prevent faking the past or faking the future. To maximize rewards, users are incentivized to make +the range of epochs for which they can claim rewards as large as possible. Thus, there's an incentive to set +`Start Epoch` as early or low as possible and `End Epoch` as high or late as possible. To prevent malicious behavior, +like setting `Start Epoch` to the current epoch when the block itself, that contained the transaction in which the +delegation started, was issued past the registration slot of the next epoch, the boundaries must be set appropriately. +Thus, `Start Epoch` must be set to or compared against the past-bounded slot index, which prevent faking the past. A +past-bounded slot index is always at least equal to the slot to which the block belongs, based on its `Issuing Time`, +since the oldest, valid commitment that can be picked is `Max Committable Age` slots old. Analogously, `End Epoch` must +be set to or compared against the future-bounded slot index, which prevent faking the future. A future-bounded slot +index is always at most equal to the slot to which the block belongs, based on its `Issuing Time`, since the newest, +valid commitment that can be picked is `Min Committable Age` slots old. + # Copyright Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From e3d10d82a93d2fbefbd5ee289af96a2d22d74760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daria=20Dziuba=C5=82towska?= Date: Wed, 19 Jul 2023 12:27:15 +0200 Subject: [PATCH 033/124] Calculate mana rewards per epoch, not slot --- tips/TIP-0040/tip-0040.md | 130 +++++++++++++++++++++++++------------- 1 file changed, 87 insertions(+), 43 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 7d0a7c629..1cc40eda6 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -869,14 +869,24 @@ Since the `Performance Factor` is a uint8, a right-shift of 8 bits should be lat ### Performance Factor This performance factor for a slot is defined as follows. - -- Let `Validation Blocks Issued` be the number of _Validation Blocks_ issued by a given validator in a slot. -- Then `Perfomance Factor` is given by ... TODO. - -From the Draft TIP: - -- Not issuing enough Validation blocks will decrease the validator rewards (and even completely decreasing the reward to - zero), even if the same validator issued other block types. +#### Input values +- Let `Validation Blocks Issued` be the array of _Validation Blocks_ issued by a given validator in each slot on an epoch. + +#### Calculations +- Then `Perfomance Factor` is given by the average number of blocks issued per slot, rounded down to the nearest integer. Additionally if validator did not issue any validation blocks in any slot, the performance factor for the whole epoch is set to 0 as a form of punishment. + +Let `m` and `M` be the first and last slot of the epoch, respectively. +``` + Performance Factor = 0 + sum = 0 + for n = m, ..., M: + if Validation Blocks Issued(n) == 0: + Performance Factor = 0 + break + sum += Validation Blocks Issued(n) + end + Performance Factor = floor(sum / (M - m + 1)) +``` ## Epoch Level @@ -909,6 +919,16 @@ values being a list of objects consisting of these fields:
### Profit Margins +#### Input values +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA + tokens in the selected committee. +- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. + +#### Parameters +- Let ProfitMarginExponent be 8. + +#### Calculations +`Profit Margin = (Total Validator Stake< 9460800`. - - TODO: Is this index `9460800` relative to the start slot index of the IOTA 2.0 network, since it doesn't start at - `1`? -- For each slot index `n` in the epoch, the rewards are calculated as follows. - - Let `Performance Factor(n)` be the `Performance Factor` with slot index `n`. - - Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the - `Staked Amount` in the _Staking Feature_ of the validator. - - Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined - at the time of the pool stake calculation, i.e. the end of the registration slot. - - Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA - tokens in the selected committee. - - Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. - - Let the `Profit Margin` be `2^8 * Total Validator Stake/(Total Validator Stake + Total Stake)`. - - Let `Aux` be `((2^31 * Pool Stake)/Total Stake) + (2^31 * Validator Stake(i)) / Total Validator Stake` +#### Parameters needed for calculations: + - `Initial Reward` = 233373068869021000 // TODO update with the correct value for epoch +// TODO do we still need two different init reward values depending on the slot/epoch index if we do not decay per slot? Like it was below: +// `233373068869021000 * decay(n)` if `n <= 9460800`. +// `85853149583786000` if `n > 9460800`. + +- `Accuracy Reward Exponent` = 31 // TODO explain why did we choose those values +- `Another Exponent` = 40 +#### Input values +- Let `Validator Stake(i)` be the amount of IOTA tokens staked by the validator with Account ID `i`, i.e. the + `Staked Amount` in the _Staking Feature_ of the validator at the end of the registration slot. +- Let `Pool Stake` be the total amount of delegated and staked IOTA tokens by the validator pool which was determined + at the time of the pool stake calculation, i.e. the end of the registration slot. +- Let `Total Stake` be the sum of all `Pool Stake` values, that is, the total amount of delegated and staked IOTA + tokens in the selected committee. +- Let `Total Validator Stake` be the sum of `Validator Stake(i)` for each validator `i` in the selected committee. + +#### Calculations +- The total target reward `Target Reward(n)` for an epoch index `n` is defined as: + - Calculate `Performance Factor` for the whole epoch `n` according to [Performance Factor](#performance-factor) + - Calculate the `Profit Margin` for the whole epoch according to [Profit Margin](#profit-margins)`. + - Let `Aux` be `((Pool Stake << Accuracy Reward Exponent)/Total Stake) + (Validator Stake(i) << Accuracy Reward Exponent) / Total Validator Stake` - TODO: Is there a better name for this value? - - Let `Aux2` be `Aux * Target Reward(n) * Performance Factor(n)`, which is smaller than `2^(104)`. + - Let `Aux2` be `Aux * Initial Reward * Performance Factor`, which is smaller than `2^(104)`. - TODO: Is there a better name for this value? Or could we combine both of the aux values into a single formula? I guess it's important to communicate that the value is `< 2^104`? - - Let `Slot Pool Reward(n)` be `(Aux2 >> 40) - Fixed Cost`, which is smaller than `2^(64)`. + - Let `Pool Reward` be `(Aux2 >> Another Exponent) - Fixed Cost`, which is smaller than `2^(64)`. + + +// TODO the following is no longer needed, maybe we still need to scale down with some shift operation of 32? - To combine the `Slot Pool Rewards(n)` for each slot index `n` in the epoch into an epoch's `Pool Rewards`: - - If any `Slot Pool Rewards(n) < 0` no entry for the epoch is added to the `Epoch Rewards`. - - Otheriwse: + - Otherwise: - Let `Pool Rewards` be defined by the following decaying algorithm: - Let `m` and `M` be the first and last slot of the epoch, respectively. - TODO: I think we have to state this in non-pseudocode as the semantics are not 100% clearly defined. @@ -980,20 +1007,28 @@ An account with a _Staking Feature_ can claim rewards in the same transaction wh transaction validation rules for removing the feature are defined in TIP-42. Upon removal, the amount of Mana Rewards that can be claimed is defined as follows. +#### Parameters +`ProfitMarginExponent` = 8 + +#### Input Values +- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. +- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. + +#### Calulations - Let `Future Bounded Epoch Index` be given by `Commitment Index + Min Committable Age` where `Commitment Index` is the slot index of the _Commitment Input_. If no _Commitment Input_ is present, the transaction is invalid. - Note that the presence of a _Commitment Input_ is already required for any transaction containing a _Staking Feature_ on the input or output side. - Let the `Claimable Rewards` be all reward entries for the validator identified by the Account ID of the account that removes the Staking Feature, where the entry's `Epoch Index` satisfies `Epoch Index >= Start Epoch + 1` and - `Epoch Index < Future Bounded Epoch Index`, where: + `Epoch Index < Future Bounded Epoch Index`. - Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - - Let `Fixed Cost` be the `Fixed Cost` defined in the _Staking Feature_. - - Let `Undecayed Rewards(n)` be - `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> 8) + (((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Staked Amount/Pool Stake(n)`. +`Profit Margin Complement` = (2 << ProfitMarginExponent) - Profit Margin(n) +`Undecayed Rewards(n)` = + `Fixed Cost + ((Profit Margin(n) * Pool Rewards(n)) >> ProfitMarginExponent) + ((Profit Margin Complement * Pool Rewards(n)) >> ProfitMarginExponent) * Staked Amount/Pool Stake(n)`. + - Decay rewards according to [Mana Decay](//TODO mana decay calulations) - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. ## Delegation Rewards @@ -1003,6 +1038,15 @@ conditions for claiming rewards apply. An output destroyed in _Delegating State_ for the epoch in which it is destroyed, since the rewards for that epoch only become available in the next epoch. They are _potential_ since the validator to which the output is delegating may not have been selected into the commitee for that epoch. +#### Parameters +`ProfitMarginExponent` = 8 +`DecayExponent` = 32 +#### Input Values +- Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. +- Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. +- Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. + +#### Calculations The amount of Mana Rewards that can be claimed for a _Delegation Output_ which is destroyed is defined as follows. @@ -1017,13 +1061,13 @@ The amount of Mana Rewards that can be claimed for a _Delegation Output_ which i - Note that no transaction validation rule exists to prevent claiming rewards before the rewards of the previous epoch became available, thus forfeiting the potential rewards of that previous epoch. - If the output is in _Delayed Claiming State_ let `Delegation End` be `End Epoch`. -- Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: - - Let `Profit Margin(n)` be the `Profit Margin` for epoch index `n`. - - Let `Pool Rewards(n)` be the `Pool Rewards` of the entry in `Claimable Rewards` with epoch index `n`. - - Let `Pool Stake(n)` be the `Pool Stake` of the entry in `Claimable Rewards` with epoch index `n`. - - Let `Undecayed Rewards(n)` be - `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> 8) * Delegated Amount/Pool Stake(n)`. - - Let `Rewards (n)` be `(Undecayed Rewards(n) * decay(d * 8640)) >> 32`, where `d = Future Bounded Epoch Index - n`. + +Let the total claimable rewards be the sum of `Rewards(n)` for an epoch index `n`, where: +`Undecayed Rewards(n)` = + `(((2^8 - Profit Margin(n)) * Pool Rewards(n)) >> ProfitMarginExponent) * Delegated Amount/Pool Stake(n)`. +- Decay rewards according to [Mana Decay](//TODO mana decay calulations) +// TODO define 8640 as paramete +`Rewards (n)` = `(Undecayed Rewards(n) * decay(d * 8640)) >> DecayExponent`, where `d = Future Bounded Epoch Index - n`. # Rationale & Design From 5f8755d5e8caf08296b80ec3dc77dc4cdee387f0 Mon Sep 17 00:00:00 2001 From: Philipp Gackstatter Date: Thu, 20 Jul 2023 15:44:49 +0200 Subject: [PATCH 034/124] Remove immutable features from Delegation Output --- tips/TIP-0040/tip-0040.md | 232 -------------------------------------- 1 file changed, 232 deletions(-) diff --git a/tips/TIP-0040/tip-0040.md b/tips/TIP-0040/tip-0040.md index 1cc40eda6..20cd73ed0 100644 --- a/tips/TIP-0040/tip-0040.md +++ b/tips/TIP-0040/tip-0040.md @@ -318,107 +318,6 @@ is the BLAKE2b-256 hash of the `Output ID` that created the Delegation Output. - - Immutable Features Count - uint8 - The number of immutable features following. Immutable features are defined upon deployment of the UTXO state machine and are not allowed to change in any future state transition. - - - Immutable Features atMostOneOfEach - -