From 0ba7528056cec427ac88c14bc17dc91848194042 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Thu, 17 Nov 2022 09:31:16 +0100 Subject: [PATCH 01/30] Skeleton of Tiered Protocol CIP --- CIP-XXXX/README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 CIP-XXXX/README.md diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md new file mode 100644 index 0000000000..eb4dbc84b5 --- /dev/null +++ b/CIP-XXXX/README.md @@ -0,0 +1,30 @@ +--- +CIP: ???? +Title: Tiered Pricing Protocol +Status: Draft +Category: Fees +Authors: + - Giorgos Panagiotakos + - Philip Lazos +Implementors: N/A +Discussions: + - https://github.com/cardano-foundation/cips/pulls/1 +Created: 2022-11-17 +License: CC-BY-4.0 +--- + +# Abstract + +# Motivation + +# Specification + +# Rationale + +# Path to Active + +## Acceptance Criteria + +## Implementation Plan + +# Copyright From 03322a8b8cd2e1e778965b693dd19f2763ce9971 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 11:23:39 +0200 Subject: [PATCH 02/30] minor --- CIP-XXXX/README.md | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index eb4dbc84b5..cecb764639 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -1,6 +1,6 @@ --- CIP: ???? -Title: Tiered Pricing Protocol +Title: Increase Cardano service diversity by implementing Tiered Pricing Status: Draft Category: Fees Authors: @@ -13,17 +13,41 @@ Created: 2022-11-17 License: CC-BY-4.0 --- -# Abstract +# Abstract -# Motivation -# Specification -# Rationale +# Motivation + +Due to the introduction of smart contracts and the general increase in traffic in Cardano, the system is bound to face congestion issues at some point. +Fees are currently fixed and transactions are included in blocks in a FIFO order. +Unfortunately such an approach is ill-suited to handle congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Even with the introduction of Ouroboros Leios which will substantially increase throughput, the system needs a better way of prioritizing transaction inclusion in the face of congestion. + +Ideally, we would like the system to offer a multitude of options, and have users decide how much they want to pay based on their urgency. +The system should offer options ranging from fast service with high fees to slower service with lower fees. +The current fee system cannot provide such flexibility as it does not allow users to signify their urgency, and thus changes are required. + + +# Specification + + +Tiered pricing works by dynamically separating available throughput to multiple tiers that are expected to serve different needs, ranging from DeFi to low-cost applications. Users are then given the choice of selecting which tier better accommodates their needs, which also determines how much they want to wait and how much they want to pay. + +In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When demand is generally low, a single high speed/low price/small size tier remains available, with the system behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options are available to users. + +More specifically, to accommodate users that want to publish transactions as fast as possible, there is always a tier available whose delay is set to the minimum level. Tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time significantly higher than that of the previous tier, to ensure that users with different needs are targeted. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated ledger space unused. + +Leios Integration +Tiered pricing naturally integrates with Leios by randomly associating each input block (IB) with a single tier, and restricting its contents to transactions of this tier type. Tier parameters are adjusted in a commonly agreed manner, by observing how full are the IBs of different tiers that make it to the main chain. Moreover, to be sure that transactions of a certain tier are delayed according to the price they have paid, each IB is delayed for the time dictated by its tier before being eligible to be included in an EB and later on on the main chain. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Finally, given that tier parameters (price, delay, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. + + + + +# Rationale # Path to Active -## Acceptance Criteria +## Acceptance Criteria ## Implementation Plan From 6775d116021fc46128999c28b2a47b5530eafc39 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 11:41:46 +0200 Subject: [PATCH 03/30] spec --- CIP-XXXX/README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index cecb764639..50fdff1357 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -31,16 +31,14 @@ The current fee system cannot provide such flexibility as it does not allow user # Specification -Tiered pricing works by dynamically separating available throughput to multiple tiers that are expected to serve different needs, ranging from DeFi to low-cost applications. Users are then given the choice of selecting which tier better accommodates their needs, which also determines how much they want to wait and how much they want to pay. +Tiered pricing works by dynamically separating available throughput to multiple tiers that are expected to serve different needs, ranging from DeFi to low-cost applications. Users are then given the choice of selecting which tier better accommodates their needs, which also determines how much they want to wait until their transaction makes it to the chain and how much they want to pay. -In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When demand is generally low, a single high speed/low price/small size tier remains available, with the system behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options are available to users. - -More specifically, to accommodate users that want to publish transactions as fast as possible, there is always a tier available whose delay is set to the minimum level. Tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time significantly higher than that of the previous tier, to ensure that users with different needs are targeted. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated ledger space unused. - -Leios Integration -Tiered pricing naturally integrates with Leios by randomly associating each input block (IB) with a single tier, and restricting its contents to transactions of this tier type. Tier parameters are adjusted in a commonly agreed manner, by observing how full are the IBs of different tiers that make it to the main chain. Moreover, to be sure that transactions of a certain tier are delayed according to the price they have paid, each IB is delayed for the time dictated by its tier before being eligible to be included in an EB and later on on the main chain. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Finally, given that tier parameters (price, delay, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. +In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options are available to users. +Further, to accommodate users that want to publish transactions as fast as possible, e.g., as in DeFi applications, a tier whose delay is set to the minimum level is always available. Given the observed demand, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times, ensuring that substantially different service options are offered to the users. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. By appropriately setting the relevant parameters it can be guaranteed that a low cost service option will remain available. +Tiered pricing naturally integrates with Ouroboros Leios by randomly associating each input block (IB) with a single tier, and restricting its contents to transactions that have selected this tier. Demand for different tiers is tracked in a commonly agreed manner, by observing the level of fulness of IBs that were recently introduced into the main chain. Consequently, tier parameters are also adjusted in a commonly agreed manner. +Transactions in IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional their tier has passed. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Finally, given that tier parameters (price, delay, size, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. # Rationale From 85159e5f331e5e1a88c8c8e8997d91d5f6087b28 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 11:51:54 +0200 Subject: [PATCH 04/30] minor --- CIP-XXXX/README.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 50fdff1357..4654efbf8f 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -30,19 +30,34 @@ The current fee system cannot provide such flexibility as it does not allow user # Specification +## Tiered Pricing Tiered pricing works by dynamically separating available throughput to multiple tiers that are expected to serve different needs, ranging from DeFi to low-cost applications. Users are then given the choice of selecting which tier better accommodates their needs, which also determines how much they want to wait until their transaction makes it to the chain and how much they want to pay. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options are available to users. -Further, to accommodate users that want to publish transactions as fast as possible, e.g., as in DeFi applications, a tier whose delay is set to the minimum level is always available. Given the observed demand, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times, ensuring that substantially different service options are offered to the users. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. By appropriately setting the relevant parameters it can be guaranteed that a low cost service option will remain available. +Further, to accommodate users that want to publish transactions as fast as possible, e.g., as in DeFi applications, a tier whose delay is set to the minimum level is always available. Given the observed demand, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times, ensuring that substantially different service options are offered to the users. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. By appropriately setting the relevant parameters it can be guaranteed that a low cost service option always remains available. + + +## Integration with Ouroboros Leios Tiered pricing naturally integrates with Ouroboros Leios by randomly associating each input block (IB) with a single tier, and restricting its contents to transactions that have selected this tier. Demand for different tiers is tracked in a commonly agreed manner, by observing the level of fulness of IBs that were recently introduced into the main chain. Consequently, tier parameters are also adjusted in a commonly agreed manner. -Transactions in IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional their tier has passed. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Finally, given that tier parameters (price, delay, size, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. +Transactions in IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional their tier has passed. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Given that tier parameters (price, delay, size, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. + +Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. + + +The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. +On the other hand, delays are updated much less frequently than prices and depend on them. In particular, delays observe the average prices between each update and adjust up or down in small steps accordingly, to ensure that prices of consequent tiers are separated enough. + +In order to reduce the risk of not having enough funds to pay for a transaction targeting a specific tier due to price fluctuations, users are allowed to provide higher fees. In the end they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. + # Rationale +Traffic diversity refers to the ability of the system to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. + # Path to Active ## Acceptance Criteria From f190b76abd64565e77ab86f7c50e0f08dbcf3521 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 12:23:29 +0200 Subject: [PATCH 05/30] spec --- CIP-XXXX/README.md | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 4654efbf8f..f90fdab6d5 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -32,31 +32,49 @@ The current fee system cannot provide such flexibility as it does not allow user ## Tiered Pricing -Tiered pricing works by dynamically separating available throughput to multiple tiers that are expected to serve different needs, ranging from DeFi to low-cost applications. Users are then given the choice of selecting which tier better accommodates their needs, which also determines how much they want to wait until their transaction makes it to the chain and how much they want to pay. +Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. -In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options are available to users. +In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. -Further, to accommodate users that want to publish transactions as fast as possible, e.g., as in DeFi applications, a tier whose delay is set to the minimum level is always available. Given the observed demand, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times, ensuring that substantially different service options are offered to the users. Specifically, moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. In addition, if the demand on the last tier increases, i.e., the price becomes high enough, additional tiers are introduced. While, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. By appropriately setting the relevant parameters it can be guaranteed that a low cost service option always remains available. +More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times; moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. +Additional tiers are introduced, if the demand on the last (slowest) tier increases, i.e., its price becomes high enough. Similarly, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. + +The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. +On the other hand, delays are updated much less frequently than prices and depend on them. In particular, delays observe the average prices between each update and adjust up or down in small steps accordingly, to ensure that prices of consequent tiers are separated enough. Finally, tier additions and deletions happen even less frequently. + +Transactions are allowed to specify higher fees than those determined by the tier selected. In the end, they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. ## Integration with Ouroboros Leios -Tiered pricing naturally integrates with Ouroboros Leios by randomly associating each input block (IB) with a single tier, and restricting its contents to transactions that have selected this tier. Demand for different tiers is tracked in a commonly agreed manner, by observing the level of fulness of IBs that were recently introduced into the main chain. Consequently, tier parameters are also adjusted in a commonly agreed manner. -Transactions in IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional their tier has passed. To avoid attackers interfering with the tier selection process, the VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier. Given that tier parameters (price, delay, size, …) are part of the ledger state, the IB is expected to uphold the relevant parameters derived by the likely stable RB it references. +Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. + +Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the rankinkg block (RB) they reference. + +IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional to their tier delay has passed. + + + -Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. -The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. -On the other hand, delays are updated much less frequently than prices and depend on them. In particular, delays observe the average prices between each update and adjust up or down in small steps accordingly, to ensure that prices of consequent tiers are separated enough. -In order to reduce the risk of not having enough funds to pay for a transaction targeting a specific tier due to price fluctuations, users are allowed to provide higher fees. In the end they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. # Rationale -Traffic diversity refers to the ability of the system to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. +This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. + +By appropriately setting the relevant parameters it can be guaranteed that a low cost service option always remains available. + +parameters in order to reduce the risk of not having enough funds to pay for a transaction targeting a specific tier due to price fluctuations. + +To avoid attackers interfering with the tier selection process + +Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. + # Path to Active From 255438feb51682c3ff04fc6530ae764737d58203 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 12:44:30 +0200 Subject: [PATCH 06/30] rationale --- CIP-XXXX/README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index f90fdab6d5..46080c2ccd 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -56,24 +56,30 @@ IBs are prioritized for inclusion in the main chain based on their respective ti +# Rationale +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. +## Are we departing from a low-cost system? +While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. +This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. + +Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. +## Why not EIP-1559? +While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows for different types of users to be served by the system in a satisfactory manner. -# Rationale - -The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. -This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. + -By appropriately setting the relevant parameters it can be guaranteed that a low cost service option always remains available. +## Fee overshooting parameters in order to reduce the risk of not having enough funds to pay for a transaction targeting a specific tier due to price fluctuations. To avoid attackers interfering with the tier selection process -Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. # Path to Active From aca9b9e84281d274a09db2a931ded6acedc752bf Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 12:54:57 +0200 Subject: [PATCH 07/30] rationale --- CIP-XXXX/README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 46080c2ccd..8231214077 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -49,9 +49,9 @@ Transactions are allowed to specify higher fees than those determined by the tie Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. -Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the rankinkg block (RB) they reference. +Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. -IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsment block (EB) after time proportional to their tier delay has passed. +IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsement block (EB) after time proportional to their tier delay has passed. @@ -75,12 +75,13 @@ While our approach bares similarities with that of EIP-1559 on the way prices ar ## Fee overshooting -parameters in order to reduce the risk of not having enough funds to pay for a transaction targeting a specific tier due to price fluctuations. +Allowing users to offer higher funds for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change comes back to them in the form of reward. -To avoid attackers interfering with the tier selection process - -Tracking demand is necessary to properly adjust prices. We capture changes in demand by observing how full IBs included in the main chain are. Given that malicious parties may try to artificially adjust prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and thus make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +## Demand tracking +Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +## IB-Tier correspondence +Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced. # Path to Active From 5ae29f701ad8c5b7220d39d39f0eac60d0e59f6a Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 13:13:11 +0200 Subject: [PATCH 08/30] simulations --- CIP-XXXX/README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 8231214077..951716467d 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -31,7 +31,6 @@ The current fee system cannot provide such flexibility as it does not allow user # Specification ## Tiered Pricing - Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. @@ -46,7 +45,6 @@ Transactions are allowed to specify higher fees than those determined by the tie ## Integration with Ouroboros Leios - Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. @@ -61,20 +59,20 @@ IBs are prioritized for inclusion in the main chain based on their respective ti The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. ## Are we departing from a low-cost system? - While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. -This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. +This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. + -Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. ## Why not EIP-1559? +While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. -While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows for different types of users to be served by the system in a satisfactory manner. +In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect if there exists increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous one. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant. - +In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the result is similar, however during high congestion the Ethereum price is slightly lower than our Tier 1 price. This effect would diminish with higher demand. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. -## Fee overshooting +## Fee overshooting Allowing users to offer higher funds for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change comes back to them in the form of reward. ## Demand tracking From d88b1be5f9adae156e97c909b69ed8f358757572 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 13:19:31 +0200 Subject: [PATCH 09/30] simulations --- CIP-XXXX/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 951716467d..223c26c0ba 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -67,9 +67,11 @@ This option may come with a high expected delay when the system is congested. Ho ## Why not EIP-1559? While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. -In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect if there exists increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous one. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant. +In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect if there exists increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of tier 1 decreases. -In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the result is similar, however during high congestion the Ethereum price is slightly lower than our Tier 1 price. This effect would diminish with higher demand. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. +In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. + +![alt text](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/priceOurs.jpg?raw=true) ## Fee overshooting From 6e68c90d786f3ebbf81e386a541f25508dc932b8 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 13:23:53 +0200 Subject: [PATCH 10/30] images --- CIP-XXXX/blob/image1.png | Bin 0 -> 47392 bytes CIP-XXXX/blob/image2.png | Bin 0 -> 81276 bytes CIP-XXXX/blob/image3.png | Bin 0 -> 53964 bytes CIP-XXXX/blob/image4.png | Bin 0 -> 66493 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 CIP-XXXX/blob/image1.png create mode 100644 CIP-XXXX/blob/image2.png create mode 100644 CIP-XXXX/blob/image3.png create mode 100644 CIP-XXXX/blob/image4.png diff --git a/CIP-XXXX/blob/image1.png b/CIP-XXXX/blob/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..164d1748f658b6f70fc6258861ab74141064af3b GIT binary patch literal 47392 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 B0f_(r literal 0 HcmV?d00001 diff --git a/CIP-XXXX/blob/image3.png b/CIP-XXXX/blob/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..5362348fd073adcc8d126d73db4529eeeda62ced GIT binary patch literal 53964 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%0Ai$Bj(JzT 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 Date: Thu, 17 Nov 2022 13:27:54 +0200 Subject: [PATCH 11/30] images --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 223c26c0ba..db0230f5ab 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -71,7 +71,7 @@ In the following figures we present the evolution of the price, delay and size o In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. -![alt text](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/priceOurs.jpg?raw=true) +![alt text](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/image1.png?raw=true) ## Fee overshooting From 0087dc6fcc27fa67d8bed731ca12adec52ac5caf Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 13:33:21 +0200 Subject: [PATCH 12/30] images --- CIP-XXXX/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index db0230f5ab..13c400fe42 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -71,7 +71,10 @@ In the following figures we present the evolution of the price, delay and size o In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. -![alt text](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/image1.png?raw=true) +![Tiered pricing - prices](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image2.png) +![Tiered pricing - delays](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image4.png) +![Tiered pricing - sizes](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image1.png) +![Ethereuem - prices](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image3.png) ## Fee overshooting From 1a40302d1adad45fbc9635093002d49a3be585f0 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 13:48:48 +0200 Subject: [PATCH 13/30] abstract --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 13c400fe42..6e174b857a 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -14,7 +14,7 @@ License: CC-BY-4.0 --- # Abstract - +As Cardano adoption widens, the system is bound to face congestion issues. Tiered Pricing deals with this issue by offering users a multitude of service options to select from when the system is under congestion. Each choice consists of a price/delay trade-off, covering a wide spectum of use-cases ranging from DeFi to low urgency transactions. The mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. # Motivation From c5b26a4726227e2b3a244b19c1ce3eafcffc13b7 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 14:10:12 +0200 Subject: [PATCH 14/30] minor --- CIP-XXXX/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 6e174b857a..670a768ab3 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -1,6 +1,6 @@ --- CIP: ???? -Title: Increase Cardano service diversity by implementing Tiered Pricing +Title: Dealing with traffic congestion by implementing Tiered Pricing Status: Draft Category: Fees Authors: @@ -14,18 +14,18 @@ License: CC-BY-4.0 --- # Abstract -As Cardano adoption widens, the system is bound to face congestion issues. Tiered Pricing deals with this issue by offering users a multitude of service options to select from when the system is under congestion. Each choice consists of a price/delay trade-off, covering a wide spectum of use-cases ranging from DeFi to low urgency transactions. The mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. +As Cardano adoption widens the system is bound to face traffic congestion issues. Tiered Pricing deals with this issue by offering users a multitude of service options to select from when the system is under congestion. Each choice consists of a price/delay trade-off, covering a wide spectum of use-cases ranging from DeFi to low-urgency transactions. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. # Motivation -Due to the introduction of smart contracts and the general increase in traffic in Cardano, the system is bound to face congestion issues at some point. -Fees are currently fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Even with the introduction of Ouroboros Leios which will substantially increase throughput, the system needs a better way of prioritizing transaction inclusion in the face of congestion. +Due to the introduction of smart contracts and the general increase in traffic, Cardano is expected to face traffic congestion issues. +Fees in the current system are fixed and transactions are included in blocks in a FIFO order. +Unfortunately such an approach is ill-suited to handle congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Even with the introduction of Ouroboros Leios which is expected to substantially increase throughput, the system needs a better way of prioritizing transaction inclusion in the face of congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide how much they want to pay based on their urgency. -The system should offer options ranging from fast service with high fees to slower service with lower fees. -The current fee system cannot provide such flexibility as it does not allow users to signify their urgency, and thus changes are required. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. +The system should offer options ranging from fast service/high fees to slower service/lower fees. +The current fee system cannot provide such flexibility as it does not allow users to signify their urgency. Thus, changes are required. # Specification From 3f790122e27428b2314826f88c93e848b864928b Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 15:23:54 +0200 Subject: [PATCH 15/30] minor --- CIP-XXXX/README.md | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 670a768ab3..0d2ce5480c 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -13,24 +13,23 @@ Created: 2022-11-17 License: CC-BY-4.0 --- -# Abstract -As Cardano adoption widens the system is bound to face traffic congestion issues. Tiered Pricing deals with this issue by offering users a multitude of service options to select from when the system is under congestion. Each choice consists of a price/delay trade-off, covering a wide spectum of use-cases ranging from DeFi to low-urgency transactions. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. +# Dealing with traffic congestion by implementing Tiered Pricing +## Abstract +As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. -# Motivation + +## Motivation -Due to the introduction of smart contracts and the general increase in traffic, Cardano is expected to face traffic congestion issues. Fees in the current system are fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Even with the introduction of Ouroboros Leios which is expected to substantially increase throughput, the system needs a better way of prioritizing transaction inclusion in the face of congestion. +Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. The problem may only temporarily be solved with throughput scaling solutions, e.g., Ouroboros Leios, until traffic grows larger that available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit. Thus, Cardano needs a better way to prioritize transaction inclusion in the face of congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. -The system should offer options ranging from fast service/high fees to slower service/lower fees. -The current fee system cannot provide such flexibility as it does not allow users to signify their urgency. Thus, changes are required. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. The current fee system cannot provide such flexibility as there is no way for users to signify their urgency level. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences to prioritize transaction inclusion. -# Specification +## Specification -## Tiered Pricing +### Tiered Pricing Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. @@ -44,7 +43,7 @@ On the other hand, delays are updated much less frequently than prices and depen Transactions are allowed to specify higher fees than those determined by the tier selected. In the end, they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. -## Integration with Ouroboros Leios +### Integration with Ouroboros Leios Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. @@ -54,17 +53,17 @@ IBs are prioritized for inclusion in the main chain based on their respective ti -# Rationale +## Rationale The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. -## Are we departing from a low-cost system? +### Are we departing from a low-cost system? While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. -## Why not EIP-1559? +### Why not EIP-1559? While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect if there exists increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of tier 1 decreases. @@ -77,19 +76,19 @@ In the last figure we show how the Ethereum transaction fee mechanism would have ![Ethereuem - prices](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image3.png) -## Fee overshooting +### Fee overshooting Allowing users to offer higher funds for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change comes back to them in the form of reward. -## Demand tracking +### Demand tracking Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. -## IB-Tier correspondence +### IB-Tier correspondence Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced. -# Path to Active +## Path to Active -## Acceptance Criteria +### Acceptance Criteria -## Implementation Plan +### Implementation Plan -# Copyright +## Copyright From 8a48c868f9032296ddfdddddeefd7cd411fdc3cd Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Thu, 17 Nov 2022 15:37:14 +0100 Subject: [PATCH 16/30] Add copyright and comments for path to active --- CIP-XXXX/README.md | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 0d2ce5480c..4a8d46cfcb 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -13,40 +13,40 @@ Created: 2022-11-17 License: CC-BY-4.0 --- -# Dealing with traffic congestion by implementing Tiered Pricing +# Dealing with traffic congestion by implementing Tiered Pricing ## Abstract -As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. +As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. ## Motivation - -Fees in the current system are fixed and transactions are included in blocks in a FIFO order. + +Fees in the current system are fixed and transactions are included in blocks in a FIFO order. Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. The problem may only temporarily be solved with throughput scaling solutions, e.g., Ouroboros Leios, until traffic grows larger that available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit. Thus, Cardano needs a better way to prioritize transaction inclusion in the face of congestion. Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. The current fee system cannot provide such flexibility as there is no way for users to signify their urgency level. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences to prioritize transaction inclusion. - + ## Specification ### Tiered Pricing -Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. +Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. -In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. +In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. -More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times; moving from tier i to tier i+1 both the price must be substantially lower and the waiting time higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. -Additional tiers are introduced, if the demand on the last (slowest) tier increases, i.e., its price becomes high enough. Similarly, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. +More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times; moving from tier `i` to tier `i+1` both the price must be substantially lower and the waiting time higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. +Additional tiers are introduced, if the demand on the last (slowest) tier increases, i.e., its price becomes high enough. Similarly, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. -The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. +The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. On the other hand, delays are updated much less frequently than prices and depend on them. In particular, delays observe the average prices between each update and adjust up or down in small steps accordingly, to ensure that prices of consequent tiers are separated enough. Finally, tier additions and deletions happen even less frequently. Transactions are allowed to specify higher fees than those determined by the tier selected. In the end, they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. -### Integration with Ouroboros Leios +### Integration with Ouroboros Leios Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. -Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. +Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsement block (EB) after time proportional to their tier delay has passed. @@ -55,10 +55,10 @@ IBs are prioritized for inclusion in the main chain based on their respective ti ## Rationale -The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. ### Are we departing from a low-cost system? -While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. +While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. @@ -76,19 +76,22 @@ In the last figure we show how the Ethereum transaction fee mechanism would have ![Ethereuem - prices](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image3.png) -### Fee overshooting +### Fee overshooting Allowing users to offer higher funds for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change comes back to them in the form of reward. ### Demand tracking -Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. ### IB-Tier correspondence Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced. ## Path to Active -### Acceptance Criteria +### Acceptance Criteria -### Implementation Plan + +### Implementation Plan ## Copyright + +[CC-BY-4.0]: https://creativecommons.org/licenses/by/4.0/legalcode From 5461a9d3e9ec4db7fa6af2c456aec7096a733cf8 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 17:29:31 +0200 Subject: [PATCH 17/30] minor --- CIP-XXXX/README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 4a8d46cfcb..8e93a8ec0a 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -22,9 +22,9 @@ As Cardano adoption widens the system is bound to face traffic congestion. Durin ## Motivation Fees in the current system are fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. The problem may only temporarily be solved with throughput scaling solutions, e.g., Ouroboros Leios, until traffic grows larger that available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit. Thus, Cardano needs a better way to prioritize transaction inclusion in the face of congestion. +Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger that available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to prioritize transaction inclusion in the face of congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. The current fee system cannot provide such flexibility as there is no way for users to signify their urgency level. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences to prioritize transaction inclusion. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences to prioritize transaction inclusion. ## Specification @@ -44,9 +44,9 @@ Transactions are allowed to specify higher fees than those determined by the tie ### Integration with Ouroboros Leios -Tiered pricing naturally integrates with Ouroboros Leios by associating each input block (IB) with a single tier type, and restricting its contents to transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. +Tiered pricing naturally integrates with Ouroboros Leios by assigning to each input block (IB) a single tier type, and restricting its contents to only transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size, and possibly changes dynamically. -Demand for different tiers is tracked by observing the level of fullness of IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference. +Demand for different tiers is tracked by observing the level of fullness of the IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference, otherwise they are deemed invalid. IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsement block (EB) after time proportional to their tier delay has passed. @@ -55,20 +55,23 @@ IBs are prioritized for inclusion in the main chain based on their respective ti ## Rationale -The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users. +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users, resulting in lower prices. + ### Are we departing from a low-cost system? -While this proposal departs from the low fixed fees approach, for reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-fees service option will always be available. -This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system when the expected delayed can only be estimated by off-chain channels. +While this proposal departs from the low fixed fees approach for the reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-cost service option will always be available to users. + +This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system where the expected delay can only be estimated by off-chain channels. + ### Why not EIP-1559? -While our approach bares similarities with that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. +While our approach bares similarities to that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. -In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect if there exists increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of tier 1 decreases. +In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of tier 1 decreases. -In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low congestion the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. +In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low demand the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. ![Tiered pricing - prices](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image2.png) ![Tiered pricing - delays](https://github.com/abailly-iohk/CIPs/blob/tiered-pricing-protocol/CIP-XXXX/blob/image4.png) @@ -77,13 +80,13 @@ In the last figure we show how the Ethereum transaction fee mechanism would have ### Fee overshooting -Allowing users to offer higher funds for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change comes back to them in the form of reward. +Allowing users to allocate more funds than the observed tier price for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change will come back to them in the form of reward at the end of the epoch. ### Demand tracking -Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. ### IB-Tier correspondence -Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced. +Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced by adjusting the relevant target threshold. ## Path to Active From 3973c980e04df1e3bcf7d8dc46da5ac13a606ebf Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Thu, 17 Nov 2022 17:01:57 +0100 Subject: [PATCH 18/30] Add path to Active --- CIP-XXXX/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 8e93a8ec0a..cb30cb22f1 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -92,9 +92,20 @@ Assigning a single tier type to each IB at a random and verifiable way through t ### Acceptance Criteria +* Tiered Pricing is available on Cardano mainnet ### Implementation Plan +While crucially important to support Ouroboros Leios as the latter will generate much more traffic on the network and is more likely to induce congestion, Cardano running Ouroboros Praos protocol could still benefit from it at times when the network gets congested. A Tiered Pricing implementation should thuse be relatively agnostic of the actual protocol run. + +Should this CIP be accepted, the high-level implementation plan would be: +1. Publish a detailed pricing algorithm +2. Prototype executable implementation suitable for running simulations and formal analysis +3. Simulate the impact of Tiered Pricing on Cardano. This simulation should be able to demonstrate how this proposal impacts the distribution of fees under various conditions of the system, possibly using historical data +4. Implement and deploy on top of Ouroboros Praos (or whatever version of consensus is current on Cardano at that time) + **NOTE**: From this point on, the proposal will be _Active_ +5. Adapt as part of Ouroboros Leios deployment + ## Copyright [CC-BY-4.0]: https://creativecommons.org/licenses/by/4.0/legalcode From 98067d879e60720f8a38d79b05b86f3a4c21207d Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 18:15:15 +0200 Subject: [PATCH 19/30] minor --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index cb30cb22f1..45dec78778 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -96,7 +96,7 @@ Assigning a single tier type to each IB at a random and verifiable way through t ### Implementation Plan -While crucially important to support Ouroboros Leios as the latter will generate much more traffic on the network and is more likely to induce congestion, Cardano running Ouroboros Praos protocol could still benefit from it at times when the network gets congested. A Tiered Pricing implementation should thuse be relatively agnostic of the actual protocol run. +While the current proposal extends Ouroboros Leios, Cardano running Ouroboros Praos could still benefit from it at times when the network gets congested. A Tiered Pricing implementation should thus be as much as possible agnostic of the actual protocol run. Should this CIP be accepted, the high-level implementation plan would be: 1. Publish a detailed pricing algorithm From 1478a8ead2353509304e355eafab2c846dee6b1b Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 18:20:59 +0200 Subject: [PATCH 20/30] minor --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 45dec78778..cc371f4c48 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -96,7 +96,7 @@ Assigning a single tier type to each IB at a random and verifiable way through t ### Implementation Plan -While the current proposal extends Ouroboros Leios, Cardano running Ouroboros Praos could still benefit from it at times when the network gets congested. A Tiered Pricing implementation should thus be as much as possible agnostic of the actual protocol run. +While Tiered Pricing will have a deeper impact when deployed on top of Ouroboros Leios, due to the high level of throughput that can be directed to different use-cases, Cardano running Ouroboros Praos could still benefit from it during high congestion periods. A Tiered Pricing implementation should thus be as much as possible agnostic of the actual protocol run. Should this CIP be accepted, the high-level implementation plan would be: 1. Publish a detailed pricing algorithm From e8e9e3129978b940a062ab642e05dbb605849038 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Thu, 17 Nov 2022 18:32:21 +0200 Subject: [PATCH 21/30] Update README.md --- CIP-XXXX/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index cc371f4c48..345e0a3420 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -107,5 +107,7 @@ Should this CIP be accepted, the high-level implementation plan would be: 5. Adapt as part of Ouroboros Leios deployment ## Copyright +This CIP is licensed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode) + [CC-BY-4.0]: https://creativecommons.org/licenses/by/4.0/legalcode From 168f2b1983fd7e51ff530c1e5d1b13a601c6fdc5 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Fri, 18 Nov 2022 09:19:29 +0100 Subject: [PATCH 22/30] Add note on fees distribution --- CIP-XXXX/README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 345e0a3420..52adffbbc4 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -46,7 +46,7 @@ Transactions are allowed to specify higher fees than those determined by the tie ### Integration with Ouroboros Leios Tiered pricing naturally integrates with Ouroboros Leios by assigning to each input block (IB) a single tier type, and restricting its contents to only transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size, and possibly changes dynamically. -Demand for different tiers is tracked by observing the level of fullness of the IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference, otherwise they are deemed invalid. +Demand for different tiers is tracked by observing the level of fullness of the IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference, otherwise they are deemed invalid. IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsement block (EB) after time proportional to their tier delay has passed. @@ -55,7 +55,7 @@ IBs are prioritized for inclusion in the main chain based on their respective ti ## Rationale -The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users, resulting in lower prices. +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users, resulting in lower prices. ### Are we departing from a low-cost system? @@ -83,7 +83,7 @@ In the last figure we show how the Ethereum transaction fee mechanism would have Allowing users to allocate more funds than the observed tier price for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change will come back to them in the form of reward at the end of the epoch. ### Demand tracking -Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. ### IB-Tier correspondence Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced by adjusting the relevant target threshold. @@ -100,6 +100,7 @@ While Tiered Pricing will have a deeper impact when deployed on top of Ouroboros Should this CIP be accepted, the high-level implementation plan would be: 1. Publish a detailed pricing algorithm + **NOTE**: This includes fees calculation and distribution 2. Prototype executable implementation suitable for running simulations and formal analysis 3. Simulate the impact of Tiered Pricing on Cardano. This simulation should be able to demonstrate how this proposal impacts the distribution of fees under various conditions of the system, possibly using historical data 4. Implement and deploy on top of Ouroboros Praos (or whatever version of consensus is current on Cardano at that time) @@ -107,7 +108,5 @@ Should this CIP be accepted, the high-level implementation plan would be: 5. Adapt as part of Ouroboros Leios deployment ## Copyright -This CIP is licensed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode) - -[CC-BY-4.0]: https://creativecommons.org/licenses/by/4.0/legalcode +This CIP is licensed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode) From f968bad092cefd143f89c3453e7346226e557b00 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Fri, 18 Nov 2022 11:39:33 +0200 Subject: [PATCH 23/30] links --- CIP-XXXX/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 52adffbbc4..953e66eaa3 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -16,7 +16,7 @@ License: CC-BY-4.0 # Dealing with traffic congestion by implementing Tiered Pricing ## Abstract -As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced Ouroboros Leios proposal. +As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced [Ouroboros Leios](https://iohk.io/en/research/library/papers/ouroboros-leios-design-goals-and-concepts/) proposal. ## Motivation @@ -30,14 +30,14 @@ Ideally, we would like the system to offer a multitude of options, and have user ## Specification ### Tiered Pricing -Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay tradeoffs. Users are given the choice of selecting which tier better accommodates their needs. +Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times; moving from tier `i` to tier `i+1` both the price must be substantially lower and the waiting time higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. Additional tiers are introduced, if the demand on the last (slowest) tier increases, i.e., its price becomes high enough. Similarly, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. -The price of each tier is updated in similar fashion to EIP-1559, disregarding other tier prices. +The price of each tier is updated in similar fashion to [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md), disregarding other tier prices. On the other hand, delays are updated much less frequently than prices and depend on them. In particular, delays observe the average prices between each update and adjust up or down in small steps accordingly, to ensure that prices of consequent tiers are separated enough. Finally, tier additions and deletions happen even less frequently. Transactions are allowed to specify higher fees than those determined by the tier selected. In the end, they are only going to pay the actual tier price, and get back the change as a reward at the end of the epoch. The reward mechanism should be adjusted accordingly. From 2911e93fc5b2eb73064e802410a4a0686771720f Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Fri, 18 Nov 2022 11:52:50 +0200 Subject: [PATCH 24/30] editorial --- CIP-XXXX/README.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 953e66eaa3..b922706bcf 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -22,9 +22,9 @@ As Cardano adoption widens the system is bound to face traffic congestion. Durin ## Motivation Fees in the current system are fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger that available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to prioritize transaction inclusion in the face of congestion. +Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger than available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to handle traffic congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences to prioritize transaction inclusion. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences in prioritizing transactions. ## Specification @@ -32,9 +32,9 @@ Ideally, we would like the system to offer a multitude of options, and have user ### Tiered Pricing Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. -In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically, based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. +In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. -More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and waiting times; moving from tier `i` to tier `i+1` both the price must be substantially lower and the waiting time higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. +More specifically, tiers are introduced and modified to achieve at minimum a target ratio between consecutive prices and delays; moving from tier `i` to tier `i+1` both the price must be substantially lower and the delay higher than that of the previous tier. The first tier is always available and its delay is set to the minimum level. Additional tiers are introduced, if the demand on the last (slowest) tier increases, i.e., its price becomes high enough. Similarly, if the demand of the last tier falls below a certain level, the tier gets deleted and other tiers are resized accordingly, to avoid leaving the allocated space unused. The price of each tier is updated in similar fashion to [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md), disregarding other tier prices. @@ -44,32 +44,30 @@ Transactions are allowed to specify higher fees than those determined by the tie ### Integration with Ouroboros Leios -Tiered pricing naturally integrates with Ouroboros Leios by assigning to each input block (IB) a single tier type, and restricting its contents to only transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size, and possibly changes dynamically. +Tiered pricing naturally integrates with Ouroboros Leios by assigning to each input block (IB) a single tier type, and restricting its contents to only transactions of this type. The VRF output used to determine whether an SPO is eligible to create a new IB is also used to determine its tier type. The rate at which IBs of a certain type are produced is determined by the tier's size. Demand for different tiers is tracked by observing the level of fullness of the IBs that were recently added to the main chain in a large enough interval. As specified earlier, tier parameters are adjusted based on the observed demand. IBs are expected to uphold the relevant parameters derived by the ranking block (RB) they reference, otherwise they are deemed invalid. -IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only included in an endorsement block (EB) after time proportional to their tier delay has passed. +IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only allowed to be included in an endorsement block (EB), and subsequently to the main chain, after time proportional to their tier delay has passed. ## Rationale -The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users, resulting in lower prices. +The key idea of this proposal is that the fee system should be able to target multiple use cases at once, whenever this is possible. This is done through the use of tiers with varying delays and cannot be achieved by different prices alone. If a tier offers a specific quality of service, its price cannot be reduced to capture every user, because costs can be misreported and off-chain agreements can override the prescribed transaction order. By ensuring that the delay of every tier must be waited out, each tier is only useful to certain users, resulting in lower prices. ### Are we departing from a low-cost system? While this proposal departs from the low fixed fees approach for the reasons explained earlier, by appropriately setting the relevant parameters it can be guaranteed that a relatively low-cost service option will always be available to users. +This option may come with a high expected delay when the system is congested. Note, that this is also the case in the current system. Moreover, tiered pricing improves in that it offers users a clear view of the delay expected from each tier, compared to the current system where the expected delay can only be estimated by off-chain channels. -This option may come with a high expected delay when the system is congested. However, this is also the case in the current system. Moreover, tiered pricing clearly improves in that it offers users a clear view of the delay expected from each tier, compared to the current system where the expected delay can only be estimated by off-chain channels. - - ### Why not EIP-1559? While our approach bares similarities to that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. -In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of tier 1 decreases. +In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of Tier 1 decreases. In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low demand the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. @@ -82,7 +80,7 @@ In the last figure we show how the Ethereum transaction fee mechanism would have ### Fee overshooting Allowing users to allocate more funds than the observed tier price for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change will come back to them in the form of reward at the end of the epoch. -### Demand tracking +### Tracking demand Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. ### IB-Tier correspondence From 40c660beb3762d763e3581336e64695a5df4264d Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Fri, 18 Nov 2022 12:58:26 +0200 Subject: [PATCH 25/30] editorial --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index b922706bcf..5d9435f7cf 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -30,7 +30,7 @@ Ideally, we would like the system to offer a multitude of options, and have user ## Specification ### Tiered Pricing -Tiered pricing works by dynamically separating available throughput to multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. +Tiered pricing works by dynamically separating available throughput into multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. From 9240513e86d48a6c003dc79460638026d3a60e64 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Fri, 18 Nov 2022 13:01:55 +0200 Subject: [PATCH 26/30] editorial --- CIP-XXXX/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 5d9435f7cf..b44031023b 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -16,15 +16,15 @@ License: CC-BY-4.0 # Dealing with traffic congestion by implementing Tiered Pricing ## Abstract -As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experiene. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectum of use-cases. The exact mechanism is described as an extension of the recently introduced [Ouroboros Leios](https://iohk.io/en/research/library/papers/ouroboros-leios-design-goals-and-concepts/) proposal. +As Cardano adoption widens the system is bound to face traffic congestion. During such a situation the system should have predictable behavior, handling gracefully the unavoidable delays users are going to experience. Tiered Pricing deals with this issue by offering users a number of service options to select from when the system is under congestion. Each possible choice consists of a price/delay trade-off, covering a wide spectrum of use-cases. The exact mechanism is described as an extension of the recently introduced [Ouroboros Leios](https://iohk.io/en/research/library/papers/ouroboros-leios-design-goals-and-concepts/) proposal. ## Motivation Fees in the current system are fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger than available throughtput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to handle traffic congestion. +Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger than available throughput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to handle traffic congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dyncamicaly to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences in prioritizing transactions. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dynamically to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences in prioritizing transactions. ## Specification From b94fe1d7b859cf9f69636c302a5774356c196d54 Mon Sep 17 00:00:00 2001 From: Giorgos Panagiotakos Date: Fri, 18 Nov 2022 13:16:00 +0200 Subject: [PATCH 27/30] images position --- CIP-XXXX/README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index b44031023b..e12af6bf23 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -69,13 +69,28 @@ While our approach bares similarities to that of EIP-1559 on the way prices are In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of Tier 1 decreases. + +

+Tiered pricing - prices +Tiered pricing - delays +Tiered pricing - sizes +

+ + In the last figure we show how the Ethereum transaction fee mechanism would have fared against the same traffic. Notice that in periods of low demand the results are similar, while during high congestion the Ethereum price is slightly lower than our Tier 1 price. However, Ethereum is priced in such a way that only transactions with the highest value can make it through. In our proposal, the increased delays of different tiers could make them unattractive for certain applications (such as DeFi), reducing their prices and allowing a more diverse set of users to participate. + +

+Ethereum - prices +

+ + + ### Fee overshooting Allowing users to allocate more funds than the observed tier price for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change will come back to them in the form of reward at the end of the epoch. From dde196602c4d725d1a9640c32b971728ee306a9a Mon Sep 17 00:00:00 2001 From: Philip Lazos <33353135+plazos@users.noreply.github.com> Date: Fri, 18 Nov 2022 13:41:19 +0000 Subject: [PATCH 28/30] minor typos --- CIP-XXXX/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index e12af6bf23..6f4fdf03c4 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -22,15 +22,15 @@ As Cardano adoption widens the system is bound to face traffic congestion. Durin ## Motivation Fees in the current system are fixed and transactions are included in blocks in a FIFO order. -Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger than available throughput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to handle traffic congestion. +Unfortunately such an approach is ill-suited to handle traffic congestion, as it does not provide any means for users to signify their urgency and accommodate them based on their needs. Throughput scaling solutions, e.g., Ouroboros Leios, may only temporarily solve the problem, until peak traffic grows larger than the available throughput. Traffic congestion is also a possible attack vector that malicious actors may try to exploit to increase the average delay of the system at a moderate cost. Thus, Cardano needs a better way to handle traffic congestion. -Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dynamically to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes in account their preferences in prioritizing transactions. +Ideally, we would like the system to offer a multitude of options, and have users decide the price/delay trafe-off that suits them. These options should change dynamically to reflect current traffic levels. We would like to have a mechanism that informs users of the current congestion status, and takes into account their preferences in prioritizing transactions. ## Specification ### Tiered Pricing -Tiered pricing works by dynamically separating available throughput into multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. +Tiered pricing works by dynamically separating the available throughput into multiple tiers that offer different price/delay trade-offs. Users are given the choice of selecting which tier better accommodates their needs. In more detail, the price and delay associated with each tier as well as the number and size of different tiers are determined dynamically based on the demand observed in the ledger; the fuller the space allocated to a certain tier looks, the higher the demand. When the system is not congested, a single high speed/low price/small size tier remains available, with the system optimizing its resource use and behaving more or less as having fixed low fees and no extra delays. On the other hand, when congestion is detected, tier parameters are selected in such a way that a multitude of price/delay options become available to users. @@ -65,7 +65,7 @@ This option may come with a high expected delay when the system is congested. No ### Why not EIP-1559? -While our approach bares similarities to that of EIP-1559 on the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. +While our approach bares similarities to that of EIP-1559 regarding the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of Tier 1 decreases. From bbf84a8efecb7b6539120548f3ee1bfbaaf0fd27 Mon Sep 17 00:00:00 2001 From: Philip Lazos <33353135+plazos@users.noreply.github.com> Date: Fri, 18 Nov 2022 13:47:52 +0000 Subject: [PATCH 29/30] minor changes --- CIP-XXXX/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index 6f4fdf03c4..f9f3166a87 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -96,7 +96,7 @@ In the last figure we show how the Ethereum transaction fee mechanism would have Allowing users to allocate more funds than the observed tier price for fee payment serves as a way of reducing the risk of price fluctuations. This comes without additional costs to users, as change will come back to them in the form of reward at the end of the epoch. ### Tracking demand -Tracking demand is necessary to properly adjust prices. Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. +Tracking demand is necessary to properly adjust prices (and consequently delays and tiers). Given that malicious parties may try to artificially inflate or deflate prices by creating IBs that do not reflect the actual demand, we take advantage of the fact that IBs are created at a high rate, and make use of a “large” enough sample from which we can robustly deduce the actual demand for each tier. ### IB-Tier correspondence Assigning a single tier type to each IB at a random and verifiable way through the VRF mechanism, is an efficient way of avoiding meddling of malicious actors in the tier selection process. It also easily allows us to regulate the expected rate at which IBs of a certain tier type are produced by adjusting the relevant target threshold. From 6676c5343236f913dce564287043dcde0a91efbf Mon Sep 17 00:00:00 2001 From: Philip Lazos Date: Tue, 13 Dec 2022 15:22:49 +0000 Subject: [PATCH 30/30] added pseudocode and experiment details --- CIP-XXXX/README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/CIP-XXXX/README.md b/CIP-XXXX/README.md index f9f3166a87..952c2555e2 100644 --- a/CIP-XXXX/README.md +++ b/CIP-XXXX/README.md @@ -50,6 +50,78 @@ Demand for different tiers is tracked by observing the level of fullness of the IBs are prioritized for inclusion in the main chain based on their respective tier delay; IBs are only allowed to be included in an endorsement block (EB), and subsequently to the main chain, after time proportional to their tier delay has passed. +### Pseudocode + +We provide pseudocode outlining how the new prices, delays and tiers are determined given the previous parameters and the observed on-chain load. Notice the invariant that we trying to maintain: consecutive tiers should have a substantial difference in price and delay, whenever possible. The following parameters are needed to tune these updates. + +#### Parameters +* minPriceRatio: target price ratio between consecutive tiers +* minDelayRatio: target delay ratio between consecutive tiers +* addTierPrice: price to create a new tier +* removeTierPrice: price to collapse the last tier +* minPrice: minimum price +* k_tiers: maximum number of tiers +* k_update: number of ranking blocks between price updates +* k_delay_update: number of ranking blocks between delay updates +* targetLoad: desired 'fullness' of blocks +* newTierDelayFactor: new tier delay coefficient +* priceUpdateFactor: how quickly the price changes +* delayUpdateFactor: how quickly delay changes +* delaySearch: probability to reduce delay +* delayUpdateFreq: how often to update delays +* tierUpdateFreq: how often to update tiers +* tierSize: array with possible tier sizes, as fractions of the total throughput. The first value has the increments of the first tier in low congestion and must divide 1, while every other value is the size of that tier. The sum of all tier sizes should be 1. + +Before defining the function **updateTierParameters**, we briefly explain the role of the most important variables involved. + +#### Tier Parameters: +* numberOfTiers: number of active tiers +* size[k_tiers]: array of tier sizes, as a percentage to the total input production rate. Their sum should be smaller or equal to 1. +* price[k_tiers]: array of tier prices +* delay[k_tiers]: array of tier delays + +#### Arguments: +* par: current tier parameters +* (f)_i array indicating each tier's ‘fullness’, as a fraction of its maximum capacity +* updatesNum: total number of updates performed (e.g. at every ranking block) + + +**updateTierParameters(par, (f)_i, updatesNum ):** +* //* update prices *// +* price := par.price +* for i=1 to par.numberOfTiers: + - price’[i] := max(minPrice, price[i] * 2 ^ (priceUpdateFactor * (f_i - targetLoad) / targetLoad)) +* //* update delay *// +* delay := par.delay +* if updatesNum % delayUpdateFreq = 0 then: + - for i=2 to par.numberOfTiers: + + priceDiff := (price’[i-1]) - price’[i]) / price’[i-1] + + if priceDiff < minPriceRatio: + * delay’[i] := delay[i] + 1 + + else with probability delaySearch do: + * delay’[i] := delay[i] - 1 + + delay’[i] := max(delay’[i], minDelayRatio * delay’[i-1]) +* //* adjust tiers *// +* //* Either adjust the size of the first tier, or add/remove new tiers *// +* size’ = par.size +* if updatesNum % updateTierFreq = 0: + - if par.numberOfTiers > 1 and price’[par.numberOfTiers] < removeTierPrice: + + if sum(par.size) < 1 and par.size[1] > tierSize[1] : + * size’[1] := sum(par.size) - tierSize[1] + + else: + * numberOfTiers’ := par.numberOfTiers - 1 + * size’[par.numberOfTiers] := 0 + * size’[1] := par.size[1] + tierSize[par.numberOfTiers] + - else if par.numberOfTiers < k_tiers and price’[par.numberOfTiers] > addTierPrice: + + if sum(par.size) = 1: + * numberOfTiers’ := par.numberOfTiers + 1 + * size’[numberOfTiers’] := tierSize[numberOfTiers’] + * size’[1] := par.size[1] - tierSize[numberOfTiers’] + * price’[numberOfTiers’] := newTierPrice + * delay’[numberOfTiers’] := delay[numberOfTiers’ -1] * newTierDelayFactor + - else: + * size’[1] := par.size[1] + tierSize[1] +* return (numberOfTiers’, size’, price’, delay’) @@ -67,7 +139,7 @@ This option may come with a high expected delay when the system is congested. No ### Why not EIP-1559? While our approach bares similarities to that of EIP-1559 regarding the way prices are updated, our design is a lot more diverse in that it allows different types of use-cases to be served by the system in a satisfactory manner. We highlight this point further through simulation. -In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of Tier 1 decreases. +In the following figures we present the evolution of the price, delay and size of each tier of a simplified blockchain with three tiers of equal size. The urgency of each user is mathematically formalized by having the value they get from their transaction decrease exponentially with time. The highest the exponent, the more urgent the transaction becomes. The demand starts low, then changes to 3 clusters with different levels of urgency, then uniform urgency and finally becomes lower than the available throughput. During the low-demand periods, only tier 1 is available and its price and delay are minimal. Moreover, the size of tier 1 periodically fluctuates, in an effort to detect increased traffic. Next, in the 3 cluster period, all 3 tiers become available as the system detects increased traffic. Note, that the delays of Tiers 2 and 3 increase to maintain the price invariant; here the price of subsequent tiers must be at least half of the previous ones. Finally, during the uniform urgency segment, the delays of Tiers 2 and 3 again adjust to maintain the price invariant, as the price of Tier 1 decreases.