From 30ad3cbc5fc169cc1d833c6755177f2d5726be74 Mon Sep 17 00:00:00 2001
From: Tony Z
Date: Wed, 2 Nov 2022 09:40:09 -0700
Subject: [PATCH] [Governance] Refining FLIP for Dynamic Inclusion Fees
---
governance/20221005-dynamic-inclusion-fee.md | 177 ++++++++++++------
.../num-auth-tps-canary.png | Bin 0 -> 98340 bytes
.../num-auth-tps-localnet.png | Bin 0 -> 108431 bytes
3 files changed, 115 insertions(+), 62 deletions(-)
create mode 100644 governance/20221005-dynamic-inclusion-fee/num-auth-tps-canary.png
create mode 100644 governance/20221005-dynamic-inclusion-fee/num-auth-tps-localnet.png
diff --git a/governance/20221005-dynamic-inclusion-fee.md b/governance/20221005-dynamic-inclusion-fee.md
index 1edb90aa..f9a85a14 100644
--- a/governance/20221005-dynamic-inclusion-fee.md
+++ b/governance/20221005-dynamic-inclusion-fee.md
@@ -21,6 +21,16 @@ The goal of this proposal is to come up with a formula incentivizing developers
> 💬 We are not looking for perfectly precise math models this time, instead we are looking for a simple equation to calculate inclusion fees to reflect relative potential inclusion effort of a given transaction, including network transmission, memory usage etc.
+#### Proposal
+
+In this FLIP we propose to replace the existing consistent inclusion fee charge into a dynamic charging pattern, in which total size of a transaction and its number of authoriers(signatures) will be factored in:
+
+ = 287.1 * (6.39e-7 * **TxByteSize** + 3.29e-5 * **NumOfSignature** + 0.0023) * 1e-6 FLOW
+
+Details on how we collect metrics, how the final equation is derived and validated will be elaborated in the rest part of this FLIP.
+
+> 💬 Mathematical terms in this FLIP are from [this parent FLIP](https://github.com/onflow/flow/blob/master/flips/20211007-transaction-fees.md#terminology).
+
#### How Transactions are Created in Load Test
To get performance metrics with a batch of fixed-sized transactions, we need to compose such transactions that we can control each of their:
@@ -29,13 +39,13 @@ To get performance metrics with a batch of fixed-sized transactions, we need to
* Total transaction size
-* Number of authorizers
+* Number of signatures
* Number of keys of payer
* Argument size
* Comment size
-In [PR 2816](https://github.com/onflow/flow-go/pull/2816), we added this feature in the loader app. We first add all indicated number of authorizers and keys of payer, compose transaction argument string, and at last leave all remaining bytes as comments. When these transactions are ready, the loader app will submit them to a given access cluster with give TPS.
+In [PR 2816](https://github.com/onflow/flow-go/pull/2816), we added this feature in the loader app. We first add all indicated number of signatures and keys of payer, compose transaction argument string, and at last leave all remaining bytes as comments. When these transactions are ready, the loader app will submit them to a given access cluster with give TPS.
#### How Transaction Size is Calculated
@@ -45,7 +55,7 @@ According to our [code](https://github.com/onflow/flow-go/blob/master/engine/acc
* Byte size of transaction code
-* Number of authorizers
+* Number of Signatures
* Authorizer/payer keys
The above fields are the only available information of one transaction which we can use to calculate inclusion fees, because we have to calculate it without executing one transaction.
@@ -65,21 +75,33 @@ We checked localnet, benchnet and canary to collect metrics. Except that benchne
chart for metrics from canary
-#### Data Modeling
+Number of Signatures(one key for each authorizer) also demonstated a significant impact to TPS:
-Assuming that with given configuration, relative inclusion fee is simply the inverse of stable peak TPS, now we have below linear equation with transaction size as X and the resulting Inclusion Fee as Y:
+
+
+
+chart for metrics from localnet
+
+
+chart for metrics from canary
+
- Y = C1 * X + C2
+#### Data Modeling
-We used some existing math tool ([https://mycurvefit.com/](https://mycurvefit.com/) in our case), plugging in the metrics data we collected (simply deriving the inclusion fee by 1.0/TPS) from canary and we got the equation below. The reason we use canary data to derive the equation is that its hardware\network configuration is closer to mainnet compared with localnet.
+Assuming that with given configuration, relative inclusion fee is simply the inverse of stable peak TPS, and for the number of signatures, we want to charge it linearly by that number, now we have below linear equation, in which C1, C2, C3 are the constant coefficients in the equation:
+ = C1 * TxByteSize + C2 * NumOfSignature + C3
+
- Inclusion Fee Factor = 6.370641e-7 * TxByteSize + 2.585227e-3
+We used some existing math tool ([LINEST from Google Sheet](https://support.google.com/docs/answer/3094249?hl=en) in our case), plugging in the metrics data we collected (simply deriving the inclusion fee by 1.0/TPS) from canary and we got the equation below. The reason we use canary data to derive the equation is that its hardware\network configuration is closer to mainnet compared with localnet.
-We’d like to charge average sized transactions by 1e-6 FLOW, and according to [this](https://console.cloud.google.com/bigquery?sq=1039464903934:01f22b6020e1403690eeb67822d56c87) BigQuery, we can tell that the average size of production transactions are around 1800B, plugging this into the equation above and now we have the final equation as below:
+ = 6.39e-7 * TxByteSize + 3.29e-5 * NumOfSignature + 0.0023
+
- Inclusion Fee Factor = 267.956977406 * (6.370641e-7 * TxByteSize + 2.585227e-3)
+We’d like to charge average sized transactions by 1.0 factor (1e-6 FLOW), which means we are trying to keep inclusion fees of average sized transactions the same as before. According to [this](https://console.cloud.google.com/bigquery?sq=1039464903934:01f22b6020e1403690eeb67822d56c87) BigQuery, we can tell that the average size of production transactions are around 1800B, and according to [this](https://console.cloud.google.com/bigquery?sq=1039464903934:8ce5d7d1677a4c5d99aa3341b46375cd) BigQuery, majority of transaction only have 1 authorizers, unfortunately on GCP we don't record number of keys per authorizer, so we are assuming that there's only one key for each authorizer. After plugging these data into the equation above and now we have the final equation as below:
+ = 287.1 * (6.39e-7 * TxByteSize + 3.29e-5 * NumOfSignature + 0.0023)
+
#### Model Validation
To make sure our mathematical model above works as expected with real mainnet transactions, we ran the equation against sampled transactions in BigQuery where our recent production transactions are stored.
@@ -87,39 +109,40 @@ To make sure our mathematical model above works as expected with real mainnet tr
* New Inclusion Fee calculation in BigQuery
- From [this](https://console.cloud.google.com/bigquery?sq=1039464903934:9f7c25b503cf4fcdaf2301d2e51f539b) BigQuery where we calculate new inclusion fees for sampled transactions with different sizes, we can see that the new inclusion fee factor of transactions around 1800B are around 1.0 (or 1e-6 FLOW), and the smaller one tx is, the less the inclusion fee is, and vice versa. Listing several pieces of the result as below:
+ From [this](https://console.cloud.google.com/bigquery?sq=1039464903934:9f7c25b503cf4fcdaf2301d2e51f539b) BigQuery where we calculate new inclusion fees for sampled transactions with different sizes, we can see that the new inclusion effort of transactions around 1800B are around 1.0 (or 1e-6 FLOW), and the smaller one tx is, the less the inclusion fee is, and vice versa. Listing several pieces of the result as below. Note that there's no number of keys per authorizer info on BigTable.
Transaction with size less than average
-| Tx Size | New Inclusion Fee Factor |
-|:----------:|:-------------:|
-| 793 | 0.828099289 |
-| 809 | 0.8308305813 |
-| 810 | 0.8310012871 |
-| 811 | 0.8311719928 |
-| 821 | 0.8328790505 |
+| Tx Size(Bytes) | Num of Auth | New Inclusion Effort |
+|:----------:|:-------------:|:-------------:|
+| 742 | 1 | 0.8059 |
+| 757 | 1 | 0.8086 |
+| 763 | 1 | 0.8097 |
+| 766 | 1 | 0.8103 |
+| 767 | 1 | 0.8104 |
+
Transaction with size around average
-| Tx Size | New Inclusion Fee Factor |
-|:----------:|:-------------:|
-| 1755 | 0.9923182403 |
-| 1786 | 0.9976101192 |
-| 1804 | 1.000682823 |
-| 1843 | 1.007340348 |
-| 1865 | 1.011095875 |
+| Tx Size(Bytes) | Num of Auth | New Inclusion Effort |
+|:----------:|:-------------:|:-------------:|
+| 1756 | 1 | 0.9919 |
+| 1786 | 1 | 0.9974 |
+| 1804 | 3 | 1.0196 |
+| 1816 | 1 | 1.0029 |
+| 1843 | 2 | 1.0173 |
Transaction with size above average
-| Tx Size | New Inclusion Fee Factor |
-|:----------:|:-------------:|
-| 4538 | 1.4673924 |
-| 4801 | 1.512288018 |
-| 5184 | 1.577668328 |
-| 5823 | 1.686749315 |
-| 7880 | 2.037891086 |
+| Tx Size(Bytes) | Num of Auth | New Inclusion Effort |
+|:----------:|:-------------:|:-------------:|
+| 3386 | 1 | 1.2909 |
+| 3387 | 1 | 1.2911 |
+| 3412 | 2 | 1.3051 |
+| 3412 | 1 | 1.2957 |
+| 3418 | 1 | 1.2968 |
* Min\Max charges
@@ -128,35 +151,35 @@ Transaction with size above average
- Inclusion Fee of Empty Transaction
- Inclusion Fee Factor(empty tx)
- = 267.956977406 * (6.370641e-7 * **0** + 2.585227e-3)
- = 0.69272961282
-After applying this new inclusion fee factor onto the existing inclusion effort charge(1e-6 FLOW), we get 1e-6 * 0.69272961282 as the new charge.
+ Inclusion Effort(empty tx)
+ = 287.1 * (6.39e-7 * 0 + 3.29e-5 * 1 + 0.0023)
+ = 0.6697
+After applying this new inclusion effort onto the existing inclusion effort charge(1e-6 FLOW), we get 1e-6 * 0.6697 as the new charge.
- Inclusion Fee of Maximal Transaction
-According to the [code](https://github.com/onflow/flow-go/blob/master/model/flow/constants.go#L32), the max possible byte size of one transaction is 1500000B, now we have:
+According to the [code](https://github.com/onflow/flow-go/blob/master/model/flow/constants.go#L32), the max possible byte size of one transaction is 1500000B, and if we simply set the number of signatures as the currently max value of authorizers, 14, in our BigQuery, now we have:
- Inclusion Fee Factor(largest tx possible)
- = 267.956977406 * (6.370641e-7*1500000 + 2.585227e-3)
- = 256.751385588
+ Inclusion Effort(largest tx possible)
+ = 287.1 * (6.39e-7 * 1500000 + 3.29e-5 * 14 + 0.0023)
+ = 275.9779
-After applying this new inclusion fee factor onto the existing inclusion effort charge(1e-6 FLOW), we get 1e-6 * 256.751385588 as the new charge.
+After applying this new inclusion effort onto the existing inclusion effort charge(1e-6 FLOW), we get 1e-6 * 275.9779 as the new charge.
* New inclusion fees for different types of transactions
- It will also be useful to see inclusion fee changes with the new equation, for some typical types of transactions we have. We are assuming there is only one authorizer in these transactions which is the most common scenario.
+ It will also be useful to see inclusion fee changes with the new equation, for some typical types of transactions we have. We are assuming there is only one signature in these transactions which is the most common scenario. Assuming all calculation below has only 1 signature.
- Create Account transaction
Cadence script we use for the calculation: [link](https://github.com/onflow/flow-go/blob/master/integration/benchmark/scripts/createAccountsTransaction.cdc) - size: 984B
- New inclusion fee factor
- = 267.956977406 * (6.370641e-7*984 + 2.585227e-3)
- = 0.86070409114
+ New inclusion effort
+ = 287.1 * (6.39e-7 * 984 + 3.29e-5 * 1 + 0.0023)
+ = 0.8503
-The new fee is roughly **14% less** than the existing inclusion charge (1e-6 FLOW)
+The new fee is roughly **15% less** than the existing inclusion charge (1e-6 FLOW)
- Token transfer transaction
@@ -164,22 +187,22 @@ The new fee is roughly **14% less** than the existing inclusion charge (1e-6 FLO
Cadence script we use for the calculation: [link](https://github.com/onflow/flow-go/blob/master/integration/benchmark/scripts/tokenTransferTransaction.cdc) - size: 718B
- New inclusion fee factor
- = 267.956977406 * (6.370641e-7*718 + 2.585227e-3)
- = 0.81529635615
+ New inclusion effort
+ = 287.1 * (6.39e-7 * 718 + 3.29e-5 * 1 + 0.0023)
+ = 0.8015
-The new fee is roughly **18% less** than the existing inclusion charge (1e-6 FLOW)
+The new fee is roughly **20% less** than the existing inclusion charge (1e-6 FLOW)
- NFT transfer transaction
Cadence script we use for the calculation: [link](https://github.com/onflow/flow-go/blob/master/fvm/fvm_bench_test.go) - size 818B
- New inclusion fee factor
- = 267.956977406 * (6.370641e-7*818 + 2.585227e-3)
- = 0.83236693322
+ New inclusion effort
+ = 287.1 * (6.39e-7 * 818 + 3.29e-5 * 1 + 0.0023)
+ = 0.8198
-The new fee is roughly **16% less** than the existing inclusion charge (1e-6 FLOW)
+The new fee is roughly **18% less** than the existing inclusion charge (1e-6 FLOW)
@@ -192,30 +215,60 @@ The new fee is roughly **16% less** than the existing inclusion charge (1e-6 FLO
![mainnet tx size histogram ](20221005-dynamic-inclusion-fee/tx-size-histogram-gcp.png)
So most transactions are with sizes between 500 - 2000 bytes, and there are much fewer number of transactions with sizes above 4000B. The average transaction size from our mainnet is 1800B, which is marked on the diagram too. We used this value to calibrate our inclusion fees as mentioned above.
+
+
+* Distribution of mainnet number of authorizers
+
+ From [BigQuery](https://console.cloud.google.com/bigquery?sq=1039464903934:8ce5d7d1677a4c5d99aa3341b46375cd&project=dapperlabs-data) querying all our mainnet transactions, we can see the distribution of number of authorizers in below table:
+
+
+
+| Number of Authorizers | Count of Transactions |
+|:----------:|:-------------:|
+| 1 | 216049901 |
+| 2 | 41611744 |
+| 3 | 7548509 |
+| 4 | 1843914 |
+| 5 | 869991 |
+| 6 | 528975 |
+| 7 | 442313 |
+| 8 | 403601 |
+| 9 | 272371 |
+| 10 | 119965 |
+| 11 | 181782 |
+| 14 | 53 |
+
+
#### Limitations
-* Using metrics from canary to estimate mainnet fees
+* Using metrics from canary to estimate mainnet fees.
Since we were using the loader app to stress test certain environments (localnet, canary), it is impractical to run a similar stress test to mainnet which will impact production traffic. Thus, we are only able to apply the mathematical equation derived from those environments to mainnet directly. It is fine in our use cases because we are not looking for precise mathematical calculation to new inclusion fees, and we are looking for a better calculation than the current constant inclusion charge: we should charge less for smaller transactions and more for bigger transactions. So as long as the new equation demonstrates this characteristic on production transactions, we will treat it as a working math model.
-* Benchnet didn’t give stable peak TPS metrics
+* Benchnet didn’t give stable peak TPS metrics.
We also tried the loader app on benchnet configurations. However the existing benchnet didn’t give us stable peak TPS and it made it unusable to collect performance related metrics. The reason is still under investigation, but since we were still able to get metrics from canary, it is not a blocking issue for us.
-* Other factors impacting stable peak TPS
-In our benchmark testing on both localnet and canary environments, we actually also found that another two factors can also impact the stable peak TPS: number of authorizers and number of keys per payer. However we didn’t include these two factors into our final equation, because they don’t seem to be major factors impacting performance, thus including them will make our equation unnecessarily complex.
+* Other factors impacting stable peak TPS.
+In our benchmark testing on both localnet and canary environments, we actually also found that number of keys can also impact the stable peak TPS. However the actual impact measured from data collection was not major enough for us to include it into the equation.
+
+* More descriptive Cadence code will be discouraged.
+For most cases, Cadence code takes a big portion of one transaction. With transaction size as one factor to charge for inclusion fees, it may discourage Cadence authors to write less readable and descriptive smart contract code on Flow.
**Future Work**
-* Collecting more data points for a more accurate model
+* Collecting more data points for a more accurate model.
Due to the limitation mentioned, it was quite a cumbersome process to collect even one single performance metrics data point, so we were only able to collect a limited amount of data for modeling purposes. We don’t need a super precise model for now, but if in the future when higher precision is required, we will need to collect more data to support the precision we want from a model.
-* Self-adaptive Inclusion Fee model
+* Self-adaptive Inclusion Fee model.
In this FLIP we propose a fixed-coefficient linear equation, however the hardware configuration, network capabilities and even Flow itself may change. In these cases, the coefficients we have now may not give optimal inclusion fee calculations accordingly. It will be ideal if we can have a self-adaptive mechanism, to automatically adjust parameters of the inclusion fee model, to continuously produce appropriate inclusion fee calculation.
-* Checking balance of payer to see if Inclusion Fees can be covered in access\collection nodes
+* Checking balance of payer to see if Inclusion Fees can be covered in access\collection nodes.
When we have a dynamic inclusion fee, we will have to check if a certain payer’s account balance can cover this new inclusion fee.
-* More infrastructure setup is nice-to-have for easier metrics collection in future
+* Non-linear Inclusion Fees Calculation for extra large transactions.
+We might want to charge extra more, like quadratically for super large transactions, whose total size exceeds a certain cutoff size, to encourage people to keep their transaction size within a reasonable limit. Transaction smart contract code compress may be something worth investigation.
+
+* More infrastructure setup is nice-to-have for easier metrics collection in future.
As previously mentioned, for almost all existing testing environments(localnet, benchnet, canary), we had to do a trial-and-error method to collect one stable peak TPS with a given configuration. This process is a very cumbersome manual process and it does not scale with the number of metrics to collect. So in future when we need to collect similar metrics, we may want to have an easier or even automated process. It will enable us to collect relatively comprehensive metrics data for our future data related work. At the time of writing, the automation team has been actively working on this already.
#### References
diff --git a/governance/20221005-dynamic-inclusion-fee/num-auth-tps-canary.png b/governance/20221005-dynamic-inclusion-fee/num-auth-tps-canary.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ff1cfbbb4720758e860a122fcb69ea7cb3e77a2
GIT binary patch
literal 98340
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