Monero动态块大小和动态最小费用
简介
Monero使用动态块大小机制来控制块大小可以增长的速率。作为协商一致的规则的一部分,如果矿工将块大小扩大到最后100个块的中位数大小之上,则基本块奖励的一部分将被维护。这是一个不中继的最低费用。客户端软件使用最低费用的乘数来优先考虑在高峰期网络使用繁重时的交易。
我们将分析目前正在使用的公式和不同费用乘数对矿工中性和最佳策略的影响,并观察他们如何独立于网络状态。我们将展示当前公式如何激励稳定的块大小增长率为0.6%,只要有一个提供最低费用的交易池即可。
此外,我们将显示典型交易大小与最小块大小之间的比例如何通过使块大小分散而对公式的有效性产生负面影响。为了解决这个问题,提出和分析了两个提案。
结论是,现在的动态块大小惩罚公式在典型的事务大小接近中值块大小的情况下不能正常工作。惩罚公式必须改变以允许平滑过渡到网络状态,其中中间块大小将足够大于典型的事务大小。
1.当前动态块大小和动态最小费用分析
当前积分奖励罚款由以下方式给出:
P_current = R *((B / M)-1)^ 2
,
其中R
是基本块的奖励,'B'是块大小,'M'是最后100个块的中间块大小。罚款不会生效,除非'B> M_0`,其中'M_0 = 60000字节'是最小无罚币块大小。最大允许的块大小是“2 * M”,在该基础块奖励的基础上。
目前的最低费用原来是:
F_mc =(R / R_0)*(M_0 / M)* F_0
,
其中R_0 = 10 monero
是参考基础奖励,F_0 = 0.002 monero / kB
。
考虑到“R_0”,“M_0”和“F_0”是常量,表达式可以重写为:
F_min_c =(R / M)*(W_0 - 1)
,其中
W_0 - 1 =(M_0 * F_0)/ R_0 = 0.0012
。
正如我们将在下面看到的,“W_0”的值代表块大小扩张因子,最小费用将完全覆盖块的惩罚,使块大小为“B = M * W_0”对矿工的收益是中立的。
我们将找到一个广义的中立费用函数,这将产生一个费用,使块大小扩大,给定的因素对矿工的收益是中立的。
召回
P_c = R *((B / M)-1)^ 2
,并定义
F_A = B * F - M * F = F *(B - M)
,
“F_A”是额外的收费奖励,如果块扩大到“B”的大小,并填写支付交易费“F”的交易。
我们还将定义附加的矿工收入
E_A = F_A - P
。
用“W = B / M”代替,我们可以将惩罚公式重写为
P_c = R *(W-1)^ 2
,另外收取的收费是
F_A = F *(W-1)* M
。
为'F`解决'E_A = 0',我们发现
F_n_c =(R / M)*(W-1)
,
这是将块大小扩大到“B = W * M”对矿工收入中性所需的费用,因为这样做将对矿工产生相同的总积分奖励,因为将开采一个大小为B = M`与“F_n_c”的交易费。
虽然矿工与基地案相比并没有失去任何东西,但是有一个错失的机会,因为他可以选择一些最佳的增加“M <W_o * M <W_n * M',这将给他最大的回报。
我们现在可以观察到,对于“W = W_0”表达式
F_min_c = F_n_c
成立。
要找到给定块大小扩展的最佳费用,我们必须找到附加收益函数的最大值
E_A = F_A - P
。
为F
解决dE_A / dW = 0
给出
F_o_c = 2 *(R / M)*(W-1)
。
其中显示交易费用与最佳块大小增加之间的线性关系。
需要注意的是,“M <M_0”的情况需要特别注意。因为我们只惩罚最小自由块大小,所以在所有公式中,实际的中位数应该被替换为“M_0”。这意味着对于'M <M_0',我们应该重新定义“M”和“W”
W:= B / M_0
,
M:= M_0
,
然后照常继续。
为了展示不同费用乘数对中立和最优块扩展的影响,我们将用最小费用乘数来代替费用
F = F_min_c * F_mul_c
,
并将其插入中性和最优费用方程。重新排列
“F_mul_c =(W-1)/(W_0 - 1)”为中性费,
F_mul_c = 2 *(W - 1)/(W_0 - 1)
为最佳费用。
![图1-2](https://github.com/JollyMort/monero-research/blob/
master / Monero%20动态%20Block%20尺寸%20和%20动态%20最小%20Fee /图像/图1-2.png?raw = true)我们将通过绘制块大小增加与其他矿工收入之间的关系来进一步检查矿工激励费用乘数。在相同的图表上,我们将显示连接最小值的最佳曲线。费用乘数曲线最大值![图1-3](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images/Fig1 -3.png?raw = true)我们看到每个费用乘数曲线有一个矿点的最大收益点。另一个有趣的点是水平轴的第二个交叉点,矿工通过增加块大小来获得相同的总和,如果他开采了0%扩张的块,我们可以观察到最小的线性关系。费用乘数和最佳块大小扩展。例如,以最低的费用,最适合矿工持续增长中位块大小,比中位数高0.6%。只要有足够的交易填补块,他可以继续这样做。要以6%的速度增加块大小,需要10的费用乘数,增加60%为100,最终增加100%,而166.67乘数。重要的是要注意,这些图表是不变的网络州。对于任何基块奖励和实际块大小中值,它们看起来相同。问题是,给定一个具有任何费用乘数的交易池,矿工总是可以建立一个最佳曲线的块?答案是否定的,下面我们将分析一下原因。### 2.相对典型交易规模的问题虽然现有公式表现出永久性的激励,只要有足够的交易,就会以0.6%的速度增长块大小在回忆中,这种逐渐增加在实践中是不可行的。这是因为矿工只能通过从池中挑选交易来影响块大小。由于典型事务大小与最小块大小之间的比率大于0.6%,矿工无法实现块大小增加的目标。当然,并不是所有的交易都具有相同的大小,也不提供相同的费用,并且可以利用交易大小的差异来构建偶然的最优块。然而,对于一些典型的情况,这是不可行的。实际上,块大小增加是可行的,只能在一些离散的步骤。为了分析这个,我们将定义W_T = 1 + T_0 / M
,其中T_0
是一个典型的Monero事务的大小,'M'是前面定义的中间块大小。因子“W_T”是最小可行的块大小扩展因子,即块大小在单个典型事务大小上升到中位数以上:“B_T = M + T_0 = M * W_T”。我们可以定义可行的集合对于任何n * T_0 <= M,块大小扩展为
W_f = {1 + T_0 / M,1 + 2 * T_0 / M,...,1 + n * T_0 / M}这些离散步骤中的每一个都可以与使矿工的阶梯中立或最佳所需的费用乘数相结合。任何大于中性的费用乘数将为矿工带来额外的利润,而最佳费用乘数将给予给定块大小增加的利润最大化。最小可行扩展因子“W_T”随着协议的一部分改变“T_0”而改变影响典型事务大小的变化,或者由于网络状态而导致的中间块大小“M”。它还定义了可行的块大小增加步骤。下面我们来看一下1kB和15kB的“T_0”,作为非RCT和RCT交易的典型尺寸![图2-1](https://github.com/JollyMort/monero-research/blob/master /Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images/Fig2-1.png?raw=true)我们看到事务大小的跳跃如何创造了平滑扩展块大小的障碍。我们还看到,一旦中位数增加到足够大,离散的步骤变得越来越密集,那么这是如何缓解的。这也可以在下面的图表中看到![图2-2](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum% 20Fee /图像/ Fig2-2.png?raw = true)前RCT,第一步为1.67%,中性乘数为1.39,后RCT为25.3%,中性乘数为25%。另外,最小。每个TX的费用已经上涨了15倍。如果不知何故,网络应该调整到更大的块大小的状态,离散步骤将变得更加密集,并允许更平滑的更改。问题在于首先进入该状态。随着块扩展,较小乘法器的最佳步骤将变得可行。使用当前的公式,中位块大小应为“M = 1250kB”,以使最小费用可用的中立步骤,或“M = 2500kB”,以获得最低费用的最佳步骤。这个问题实际上是RCT之前,但RCT变得更加严重理想稳定增长与目前可行的RCT和非RCT交易之间的差异,根据块大小和市场价格之间的关系,不同的情景。[图2-3](https://github.com/JollyMort/ monero-research / blob / master / Monero%20动态%20Block%20Size%20and%20动态%20Minimum%20Fee / Images / Fig2-3.png?raw = true)如上所示,最小可行最小值。 RCT为6.91 $,非RCT为0.03 $。以这样的代价,存在阻碍采用和防止向稳定增长的状态过渡的真正危险。由于交易规模增加15倍,而且由于罚款的增加,TX的价格大幅上涨增加一个更大的事务需要更大的相对块大小增加,并造成更大的惩罚。因此,第一个可行增长步骤的成本比终端用户的成本高出前RCT的219倍!### 3.提出的解决方案首先可以考虑一些琐碎的解决方案: - 将“M_0”增加到1250kB。这将立即减少最小。费用和延期使用块奖励惩罚,直到网络增长到典型的交易大小对于动态公式的功能无关紧要的程度。 - 使单个典型交易大小高于中位数的块大小增加罚款。这将是原始CryptoNote设计的精神,免费提高了10%。这将允许稳定增长,同时节省速度。上述解决方案带来的缺点是它们可以免费增加一些。现有公式不利于任何自由增加。本着同样的精神,新提案的目标是使最小的增量可行,同时通过防止自由块扩展来保持网络使用的合理性。## 3.1固定最小可行费用选项的想法是缩小惩罚公式,使在中位数以上添加单一典型交易的中性费用保持不变,直至意味着1.2%的块大小增加。从那里,原来的公式会再次踢。然而,仍然会造成100%的全部罚款。实现这种转换的最简单方法是将当前惩罚公式与线性函数相乘:P_n_1 =(k_1 * W + 1)(W-1)^ 2 * R,其中参数
k_1和
l_1必须被确定为适应上面的命题。首先,我们会发现
l_1,这样`````````````````上述的解决方案给出了
l_1 = 1 - 2 * k_1,惩罚公式现在可以表示为
P_n_1 =(k_1 (W-2)+ 1)(W-1)^ 2 参数“k_1”仍然需要确定。我们可以表达上述保持中立费用的命题,以适应一个典型的交易规模增长常数如下:(k_1 (W_T - 2)+ 1)(R / M)(W_T - 1)=(R /(W_T-2)(W_T-2)(W_0-1)。 )^ 2))
。当条件“W_0 <W_T”成立时,新的惩罚公式将有效。对于“W_T <= W_0”,将使用原始惩罚计算。 “W_T = W_0”将会给予相同的惩罚,无论使用哪种表达式,因为对于那种情况,因为'k_1 = 0'。因为W <W_T需要特别注意,因为在某些'0'处罚将达到0 <W <W_T。为了解决这个问题,我们可以简单地锁定比例因子如下:对于W W和W_0 <W_T,
P_n_1 =(k_1 (W_T - 2)+ 1)(W-1)^ 2 * R总而言之,对于W <W_T和W_0 <W_T,P_n_1 =(k_1 *(W_T-2)+ 1)*(W-1)^ 2 * R',P_n_1 =(k_1 * - 2)+ 1)*(W-1)^ 2 * R
为W_T <= W且W_0 <W_T
,P_n_1 = P_c
为W_T <= W_0
。下面我们可以看到直接比较当前和提出的惩罚公式![图3.1-1](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images /Fig3.1-1.png?raw=true)根据定义的惩罚公式,现在仍然要找到中立和最优费用的表达式。对于F'解析'E_A = 0'给出中立费用表达式:
F_n_1对于“W <W_T”和“W_0 <W_T”,F_n_1 =(k_1 (W-2)+ 1),(k_1 (W_T-2)+ 1)(R / M)(W-1) )(R / M)(W-1),对于
W_T <= W且W_0 <W_T,
F_n_1 = F_n_c用于
W_T <= W_0。对于
F的dE_A / dW给出选择对于“W_T”,对于“W <W_T和W_0 <W_T”,F_o_1 =(k_1 *(3 * W-5)+ 2)*(R / M)*(W-1) = W和W_0 <W_T
,而F_o_1 = F_o_c
为W_T <= W_0
。下面我们可以看到当前和拟议的中立和最优费用的直接比较![图3.1-2](https:// github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images/Fig3.1-2.png?raw=true)还有,我们将分析影响的费用乘数,如下所示![图3.1-3](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20尺寸%20和%20动态%20最小%20Fee /图像/图3-1-3.png?raw = true)我们看到最初,只有最小的一步是可以使用的。一旦中位数增长,只要用户愿意提供更高的乘数,就可以实现更快的增长。接下来,我们显示单个交易的最低成本![图3.1-4](https:// github .com / JollyMort / monero-research / blob / master / Monero%20动态%20Block%20Size%20and%20动态%20Minimum%20Fee / Images / Fig3.1-4.png?raw = true)在这种情况下,我们可以看到如果市场价格不变,整个过渡期间单一交易的成本如何保持平稳。因此,实现了初始命题。此外,我们将分析一个完整块的最小成本。[图3.1-5](https://github.com/JollyMort/monero-research/blob/master/Monero% 20动态%20Block%20尺寸%20和%20动态%20最小%20Fee /图像/图3-1-5.png?raw = true)通常,这种成本分布在各个用户之间。如果一个单一的演员会想要将块大小保持在一定的中位数,那么他必须单独运行这个运行成本。我们可以将一个中位数增加周期定义为51个连续块的增加。这是影响中位数的最小块数,因为它是在过去100个块中计算的。我们将以最小可行增长计算一个周期的成本,如下所示。[图3.1-6](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block% 20尺寸%20和%20动力%20最小%20Fee /图像/图3.1-6.png?raw = true)这些图表下方的区域将给我们累积成本,以将块大小从最小自由块大小增加到某个中位数,如见下图。[图3.1-7](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images/Fig3.1 -7.png?raw = true)我们可以看到如何使用新的罚款和费用公式,如果增长更快,增长将以较低的利率变得更便宜,并且收敛于原始公式。重要的是要注意,任何增长都可以通过51个小块的单个周期“重置”,之后一些攻击者将以前的努力来增加块大小被擦除。这个建议将几乎免费乘车到大约0.5MB的块大小,同时将累积成本几乎减半到达转型点。这可能不是希望的,第二种选择在下面被提出。#### 3.2可行的当前最低费用选项想法是找到这样的惩罚公式,其中当前的最低费用将足以容纳单个典型的中立块大小增加交易大小从E_A = F_A - P
,E_A = 0
,W = W_T
和F = F_min_c
我们得到P_ {2-0} = F_min_c *(W_T - 1)* M
。扩展给出了P_ {2-0} =(W_0-1)(W_T-1)* R。这是满足初始命题的要求。无论惩罚函数是什么,“W = W_T”的结果必须等于上述“P_ {2-0}”。函数
P_ {2-1} =(W - 1)(W_T - 1) R “这是符合这个要求的。虽然这对W = W_0的特殊情况会很好,但它也必须扩大到“W = 2”的完全惩罚。一个解决方案是在“P_ {2-0}”中乘以“W_0”用一些线性函数f(W)= k * W + l
表达式,用W
代替W_T
项。这将再次产生函数二次:“P_ {2-2} =(W_0 (k_2 * W + l_2)-1)(W-1)* R。如上所述,它必须满足要求” P_ {2-2}(W:= 2)= P_c(W:= 2)
,求解该方程式给出l_2 = 2 / W_0-2 * k
。另一个要求是P_ {2-2} W:= W_T)= P_ {2-0}
,求解该方程式给出k2 =((W_0-1)-1)/((W_0-1)(W_T-2)我们有:对于W <W_T和W_0 <W_T,P_n_2 =(k_2 *(W_T-2)+ 1 /(W_0-1))*(W-1)*(W_0-1)* R
对于W_T <= W且W_0 <W_T,P_n_2 =(k_2 (W-2)+ 1 /(W_0-1))(W-1)(W_0-1) P_c为
W_T <= W_0。下面我们可以看到直接比较当前和建议的惩罚公式![图3.2-1](https://github.com/JollyMort/monero-research/blob/master/ Monero%20动态%20Block%20尺寸%20和%20动态%20最小%20Fee / Images / Fig3.2-1.png?raw = true)根据定义的惩罚公式,现在仍然是找到中性和最优费用的表达式。
E_A = F给出中立费用表达式:对于W,F_n_2 =(k_2 *(W_T-2)+ 1 /(W_0-1))*(W_0-1)*(R / M)对于W_T <= W和W_0,W_T和W_0 <W_T
,F_n_2 =(k_2 (W-2)+ 1 /(W_0-1))(W_0-1)(R / M) W_T
和F_n_2 = F_n_c
用于W_T <= W_0
。为F
找到dE_A / dW
给出最佳的费用表达式:对于W <W_T和W_0 <W_T,'F_o_2 =(对于
W_T <= W且W_0 <W_T和
F_o_2 = F_o_c,对于(K_2 *(3-2 * W)+ k *(2 * W-3)* W_0 + 1)对于'W_T <= W_0
。我们可以直接比较当前和建议的中性和最优费用。[图3.2-2](https://github.com/JollyMort/monero-research/blob/master/ Monero%20Dynamic%20Block%20Size%20于是%20Dynamic%20Minimum%20Fee / Images / Fig3.2-2.png?raw = true)再次,我们将分析费用乘数的影响,如下所示![图3.2-3](https://github.com/JollyMort/ monero-research / blob / master / Monero%20动态%20Block%20Size%20and%20动态%20Minimum%20Fee / Images / Fig3.2-3.png?raw = true)我们看到最初只有最小的一步是可以实现的。一旦中位数增长,只要用户愿意提供更高的乘数,就可以实现更快的增长。另外,请注意这个选项如何看起来与当前的这个选项相似,除了在单个TX大小的区域中。下面我们将显示单个事务的最低成本![图3.2-4](https:// github .com / JollyMort / monero-research / blob / master / Monero%20动态%20Block%20Size%20and%20动态%20Minimum%20Fee / Images / Fig3.2-4.png?raw = true)在这种情况下,我们可以看到单个交易的成本如何保持与当前最小值相同。费用公式,但现在足以使单个典型的TX被添加到中位数之上。因此,实现了初始命题。此外,我们将分析完整块的最小成本。[图3.2-5](https://github.com/JollyMort/monero-research/blob/master/Monero% 20动态%20Block%20尺寸%20和%20动态%20最小%20Fee /图像/图2-3-5.png?raw = true)通常,这种成本分布在各个用户之间。如果一个单一的演员会想要将块大小保持在一定的中位数,那么他必须单独运行这个运行成本。我们可以将一个中位数增加周期定义为51个连续块的增加。这是影响中位数的最小块数,因为它是在过去100个块中计算的。我们将以最小可行增长计算一个周期的成本,如下所示。[图3.2-6](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block% 20尺寸%20和%20动力%20最小%20Fee /图像/图3.2-6.png?raw = true)这些图表下面的区域将给我们累积成本,以将块大小从最小自由块大小增加到某个中位数,如见下图。[图3.2-7](https://github.com/JollyMort/monero-research/blob/master/Monero%20Dynamic%20Block%20Size%20and%20Dynamic%20Minimum%20Fee/Images/Fig3.2 -7.png?raw = true)我们可以看到如何使用新的罚款和收费公式,增长的价格与非RCT的价格几乎相同,现在的公式将是最低的,并且收敛于原来的如果增长应该更快,RCT的公式。重要的是要注意,任何增长可以通过51个小块的单个周期“重置”,之后一些攻击者将以前努力增加块大小,并且必须承担一切费用。这个建议将会增加到给定块大小的成本线性,与理想情况下的原始公式相同。### 4.修改常量的影响我们定义了3个任意常数的值:M_0 = 60000 bytes
- 最小可用块大小。 W_0 = 1.0012
- 最小费用中性扩张因子T_0 = 15000字节
- 典型的事务大小。最小可用块大小M_0
定义动态公式的起始点。改变它将保持与M_0 <M'相同的曲线形状。但是,由于对于“M <M_0”,我们的行为好像是M = M_0,而且W = B / M_0也会影响开始的最低费用:F_min_c =(R / M_0)(W_0 - 1 )```M <M_0.We可以看出,将M_0加倍的开始最小费用减半,这将开始遵循“M = M_0”的动态公式。其余的将不受影响。最低费用扩张因子“W_0”将所有东西都放在一起。将“W_0”减半将使最低增长率减半,并将任何给定网络状态的最低费用减半。它也会使过渡区域翻一番,即惩罚公式转换为旧版块的块大小将增加一倍。有了这个,即使是老分钟。费用公式将被缩放,因为“W_0”被用作旧费用公式中的常数。典型的交易大小“T_0”会影响新公式转换为旧公式的点,以及惩罚的折扣方式。如果实际的典型交易规模保持不变,则可以将最小费用增加2 TX的块大小。### 5.建议更改保持当前最小值的选项。收费公式被视为首选,因为与RCT之前的情况相比,它不会显着影响扩张成本。如前所述,第一个可行步骤的价格将被贴现,以便以目前的最低费用可以实现。目前约为0.29美元/ TX。这可能被视为已经很高的费用,因为对于比特币来说,费用需要一些重要的交易压力才能达到0.29美元/ TX。相比之下,Monero的收费是0.29 $ / TX,因为它是任意设定的。可以说,被称为最低限度的东西应该低于用户默认支付的水平。目前,钱包使用最低费用为t他默认,并提供x20和x166的乘数作为优先级的工具。建议添加x4的附加乘数,并将其设置为默认值。为了保持默认费用与现在相同,我们需要将最低费用降低4倍。我们可以通过增加最小费用来实现。自由块大小为“M_0 = 120kB”,这将降低最低费用2倍。考虑到在下一个HF中,计划优化RCT范围证明,交易规模可以减半,这将给予另一个因素如果它会少一些,那么“M_0”可以按比例增加以获得4的整数:M_0 = 120kB *(7500字节/ T_0)。在TX大小减少50%时,我们得到
T_0 = 7500字节,M_0 = 120kB,TX大小减少0%,我们会得到“T_0 = 15000字节”,M_0 = 240kB。这将允许网络在一个块中匹配16个典型的事务,而不是4个-5现在是。这将减少将块扩展到17个交易所需的费用,并将给用户减少在市场价格冲击的情况下支付的费用。### 6.结论### 7.附录1。常量VB代码(MS Excel用户自定义函数)2。当前公式的VB代码(MS Excel用户自定义函数)3。拟议公式的VB代码(MS Excel用户定义函数)