配额

提示

本文主要描述配额相关逻辑,并非详细的技术文档,详细技术文档会在技术黄皮书里提及。

相关词汇解释:

  • 配额: 在 Vite 系统中,交易时使用配额来支付计算和存储资源。
  • UT: 即单位交易(Unit Transaction),配额单位,相当于发起一笔 “无备注转账交易” 消耗的配额。
  • UTPS: 用户抵押 vite 后,每等待一个快照块可以发起的单位交易数。
  • UTPE: 用户抵押 vite 后,等待 74 个快照块,在第 75 个快照块能够发起的单位交易数目。(这里 E 指 Epoch,即一轮)
  • PoW: 即工作量证明(Proof of Work),简单来说就是用来证明进行了一定量的计算。
  • 抵押: 指账户中的一部分 vite 被冻结,无法交易,无法使用。
  • 抵押地址:指抵押发起方。
  • 配额受益地址:指抵押成功后获得配额的账户地址。

什么是配额

在以太坊的设计中,每个交易在发起时需要指定 gas 和 gas price, 从而与其他交易竞争写入账本的机会。这是一个典型的竞价模型,原则上可以通过价格有效调控供给和需求的平衡。但由于用户在出价之前,很难量化当前的供需情况,也无法预测其他竞争者的出价,很容易发生市场失灵(market failure)。而且,每次出价所竞争的资源都是针对一个交易的,没有一个按账户维度对资源进行合理配置的协议。

在 Vite 中,当用户发起一笔交易,即发起转账交易、部署合约、调用合约方法、发行新代币、注册超级节点、提取出块奖励、投票、抵押时,需要消耗一定的配额。Vite 通过配额模型来调整供需平衡。

用户可以通过两种方式来获取更高的资源配额:

  • 在发起交易时计算一个 PoW
  • 在账户中抵押一定数量的 vite。

如果用户希望一次性地发起一笔交易,可以选择计算一个 PoW 来一次性的获取配额;如果希望频繁发起交易,可以抵押一定数量的 vite 来获取持久的配额。

Vite 提倡用户通过抵押的方式来获取配额。

配额使用规则

将 “无备注转账交易” 定义为 “单位交易”(UT, Unit Transaction),作为配额单位。

用户发起的交易类型不同,所需的配额也不同,Vite 网络中,各种交易类型所需的配额见下表:

交易类型 所需配额 所需配额(UT) 最小抵押金额(vite)
不带备注的转出交易 21000 1 134
转入交易 21000 1 134
创建合约请求交易 31000 1.4762 267
注册超级节点交易 168000 8 1067
更新注册信息交易 168000 8 1067
注销超级节点交易 126000 6 534
提取出块奖励交易 147000 7 934
投票交易 84000 4 534
撤销投票交易 52500 2.5 400
抵押获取配额交易 105000 5 667
撤销抵押交易 105000 5 667
代理抵押获取配额交易 115500 5.5 800
撤销代理抵押交易 115500 5.5 800
铸币交易 189000 9 1200
增发代币交易 126000 6 800
销毁代币交易 115500 5.5 800
转移代币所有者交易 136500 6.5 934
修改代币类型交易 115500 5.5 800
链上查询代币信息交易 31500 1.5 267
交易所提现交易 25624 1.2202 267
交易所充值交易 21272 1.0130 267
交易所开通交易对交易 25624 1.2202 267
交易所抵押挖矿交易 25624 1.2202 267
交易所抵押获取 vip 资格交易 23448 1.1166 267
交易所交易对设置交易 43032 2.0491 400
交易所创建邀请人交易 21272 1.0130 267
交易所被邀请人绑定邀请码交易 23448 1.1166 267
交易所撤单交易 27800 1.3238 267
交易所挂单交易 38680 1.8419 267
交易所转让代币所有权交易 25624 1.2202 267
交易所交易对设置交易 36504 1.7383 267

对于转账交易中的备注,每个字符都需要收取额外的配额,每个字符收取 68 配额。

例如,如果用十六进制编码来表示备注,发起一笔备注为 0x0001(共两个字符)的转账交易,需要的配额为 21000+68*2=21136 ,即 1.0065 单位交易。

如果创建合约时指定了一个非零的确认数(即发送给合约的请求交易被确认多少次之后再出响应交易),那么这个合约的每个响应交易都需要额外收取 确认数 * 200 的配额。

注意:官方钱包会在转账的备注中默认填写两个字节的前缀,备注为空时不填,因此通过官方钱包转账时,如果填写了备注,会额外收取 2 * 68 的配额。详情见 vep-8

配额计算逻辑

通过抵押或者计算 PoW 获得的配额可以通过下面的公式来计算:

其中,

  • : 通过计算 PoW 获得的配额,通过计算 PoW 获得的配额是一次性的,只能在当前交易中使用;
  • : 通过抵押获得的配额,抵押获得的配额是长期的,并且可以累积,最多累积 75 个快照块;
  • : 单个账户块配额上限;
  • : 配额系数,和最近 74 个快照块快照的所有交易的配额之和相关;
  • : 用户在发起一笔交易时计算出的 PoW 难度;
  • : 通过计算 PoW 获取配额的权重;
  • : 账户受益的抵押金额;
  • : 抵押获取配额的权重。

目前 Vite 网络中,各参数取值如下:

  • = 1000000
  • = 6.259408129e-10
  • = 4.201037667e-24

配额系数计算公式如下:

Qc =\begin{cases} 1, if g \leq 1050000\\ 2-e^{8.260667775706495e-09 \times (g - 1050000)}, if 1050000<g \leq 2100000\\ e^{1.6949794096275418e-10 \times (2100000-g)}-0.9, if g>2100000 \end{cases}

其中,

  • : 最近 74 个快照块平均每个快照块快照的交易配额之和。

UTPS: 用户在每个快照块内可以发起的单位交易数

UTPE: 用户等待 74 个快照块,在第 75 个快照块能够发起的单位交易数目。(这里 E 指 Epoch,即一轮)

一个账户的当前可用配额取决于 UTPS 和这个账户在过去 74 个快照块期间的配额使用情况,例如,一个账户通过抵押获得了支持 1 UTPS 吞吐率的配额,在过去 74 个快照块期间没有发起交易,那么这个账户的当前可用配额为 75 UT

一个账户在发起一笔交易时的可用配额取决于 UTPS 、这个账户在过去 74 个快照块期间的配额使用情况和发起这笔交易时通过计算 PoW 获得的一次性配额,例如,一个账户通过抵押获得了支持 1 UTPS 吞吐率的配额,在过去 74 个快照块期间没有发起交易,并且计算了一个相当于 2 UT 难度的 PoW,那么这个账户在发起一笔新交易时,最多可以使用 77 UT 的配额。但是由于每笔交易有配额使用上限,上限为 47.62 UT ,因此这笔交易实际只能使用 47.62 UT 的配额。

为了计算方便,实际计算配额时,只计算 或者 的值,并将计算结果分段映射成相应的配额。映射表如下:

或者 UTPS UTPE 大约相当于在不算 PoW 的情况下抵押多少 VITE 大约相当于在不抵押的情况下计算多少难度的 PoW
0.0 0 0 0 0 0
280 1/75 1 134 894654
560 2/75 2 267 1789307
840 3/75 3 400 2683961
1120 4/75 4 534 3578615
1400 5/75 5 667 4473270
1680 6/75 6 800 5367925
1960 7/75 7 934 6262581
2240 8/75 8 1067 7157239
2520 9/75 9 1200 8051897
2800 10/75 10 1334 8946557
3080 11/75 11 1467 9841218
3360 12/75 12 1600 10735880
3640 13/75 13 1733 11630544
3920 14/75 14 1867 12525211
4200 15/75 15 2000 13419879
4480 16/75 16 2133 14314549
4760 17/75 17 2267 15209221
5040 18/75 18 2400 16103896
5320 19/75 19 2533 16998573
5600 20/75 20 2667 17893253
5880 21/75 21 2800 18787936
6160 22/75 22 2933 19682622
6440 23/75 23 3066 20577310
6720 24/75 24 3200 21472002
7000 25/75 25 3333 22366698
7280 26/75 26 3466 23261397
7560 27/75 27 3600 24156099
7840 28/75 28 3733 25050806
8120 29/75 29 3866 25945516
8400 30/75 30 4000 26840230
8680 31/75 31 4133 27734949
8960 32/75 32 4266 28629672
9240 33/75 33 4400 29524399
9520 34/75 34 4533 30419131
9800 35/75 35 4666 31313868
10080 36/75 36 4799 32208609
10360 37/75 37 4933 33103356
10640 38/75 38 5066 33998108
10920 39/75 39 5199 34892865
11200 40/75 40 5333 35787628
11480 41/75 41 5466 36682396
11760 42/75 42 5599 37577171
12040 43/75 43 5733 38471951
12320 44/75 44 5866 39366737
12600 45/75 45 5999 40261529
12880 46/75 46 6133 41156327