IOHK的教育总监Lars Brünjes博士最近在汉堡举行的Blockchain Mania见面会上做了一个关于卡尔达诺项目激励机制的技术讲座。这个讲座的简要总结如下。
Lars博士在IOHK参与了Haskell课程教学以及内部和外部的一些培训。同时,他和Kiayias教授、Koutsoupias教授、Aikaterini教授共同在卡尔达诺项目中领导“激励机制”的工作。关于IOHK各个团队的成员详情可以在这里查看。
激励的重要性在哪里?
在区块链中,激励机制的目的是想要激励参与者“做正确的事”。在卡尔达诺项目中,激励的目的意味着最终实现权益的特定分布。这种权益的分布通过权益池来实现,我们不希望。(系统的)大部分权益都能在权益池中集中。这些权益池应当保持在线状态并积极参与协议的工作。
而设立激励机制是希望建立一个机制,在这个机制下如果每个参与者如果按照追求自身经济利益行事,最终的结果是系统的权益能够呈现一个完美的分布。
什么是激励?
加密货币中的激励是用来激励大家参与和严格遵守相关协议进程的机制。
以比特币为例,(参与和遵守协议)就意味着挖矿创建区块并且在挖出的区块中包含尽可能的有效交易。 在卡尔达诺中,(参与和遵守协议)意味着保持在线并在被选为时隙领导人时创建区块,同时参与协议的选举过程。
参与卡尔达诺协议的算力成本远远小于比特币。不过,当轮到时隙领导(工作)时,保持他们在线对于(系统的)安全性和效率都很重要。而对于这些时隙领导来说,这就需要投入一些资本(购买硬件、花费时间等等)。所以,对他们的这些开销予以“报销”是合理的。
我们的激励方式是基于ADA的货币激励。
然而,(除了为了货币激励而参与协议)也必须强调还有其他类型的动机,比如:
-
理想
-
道德
-
“做正确的事”的普遍渴望
这些动机不应该被低估。例如:当时比特币矿池 Ghash 集中了比特币总算力的%42。此后,一些矿工开始自发离开矿池,使得该比例在两天内降至38%。这里面没有经济因素的驱动,那些离开Ghash的矿工没有得到任何货币激励。他们仅仅是信仰比特币和去中心化的思想,渴望去做正确的事情。在这里我找到了关于此次事件的更多信息。在理想的世界中,经济激励和道德激励应该是一致的。
(但)在上面这个比特币的例子中,人们需要在遵从道德指引去做正确的事情和追逐经济利益之间做出抉择,这显然不是个理想的情况。 卡尔达诺的目标是调和这两件事:你最大化(经济)收益的同时,自动做了正确的事。
我们想要激励什么?
-
权益持有者保持在线
-
参与协议(运行): 当权益持有至被选为某个时隙的领导者,那么他们就应在该时隙在线并创建区块
另一方面,也许有人不感兴趣或没有相关技术去运行软件或没时间保持在线 → 但是他们仍然可以通过将权益委托给一个权益池的方式参与协议的运行!
预期配置
-
80% 的权益委托给 ( k ) 个权益池
-
k 应该在 100 左右
-
且这些权益池应该是超级用户并在需要时保持在线
-
他们也应该提供额外的网络设施(中继节点)
-
允许剩余的20%权益的持有者自主参与协议运行或简单地什么都不做
团队正在按照上述目标配置激励机制。
委托机制
卡尔达诺是个权益证明系统。持有权益(拥有ADA)比持有比特币有更多的含义。ADA可以用来购买商品或者服务,因为它本就是个加密货币。但是除此以外,它也意味着你有权力和义务参与协议和创建区块。
通过委托机制,这两种用处可以分割开来。这意味着拥有ADA的某人可以在保有购买力的同时,将参与协议的权利委托给另一个人(权益池)
必须强调,任何时候ADA币都可以正常消费。
地址
有三种不同的地址或叫做账户类型。每种地址都与一对密钥关联。其中一个用于支付,另一个用于权益.
三类地址:
-
基础地址: 权益密钥与地址直接关联
-
指针地址: 更间接一些. 地址指向区块链上的一个位置 → 在那个位置上通过一些元数据定义了权益密钥.
-
企业地址: 不含有权益. 该类地址用于交易所. 从区块链的角度看,交易所是极度富有的. 但实际上该地址里的Ada属于一大批往交易所存入资产的独立个人. 所以不能让交易所使用客户的资产参与协议运行. 该地址类型仅能用于资金的转移.
什么是委托凭证
委托凭证是在区块链上一段经过密码学签名的元数据. 它用来把权益权从一个权益密钥转移给另一个.
一个发布在区块链上的委托凭证被称为重权(委托凭证). 该笔交易(指委托凭证所在交易)被记录在区块链上,其中一部分元数据就是这个委托凭证. 因此,这里也会有笔交易费(与普通交易费一样).
也存在轻权凭证. 它们不发布到区块链上,也不是交易元数据的一部分. 只有当该权益所在地址被选为时隙领导人时,该权益的受托方才会通过在创建区块时将该委托凭证包在区块头中公布到链上,以此证明他拥有该权益权利(因此他才能在该时隙创建区块).(注:所以一个轻权委托是指被委托地址被选为时隙领导时才会公之于众,相对的,一个重权委托是在委托发生的时刻就上链公示了)。
如果存在委托凭证的冲突(比如说你先把权益委托给某人,然后又委托给其他人),存在两个同一权益的委托凭证,那么解决该冲突的规则就是:在区块链上最新的委托凭证起效。
权益池的登记
如果有人想创建一个权益池,他们必须正式创建一个正式登记并写入区块链账本。权益池会创建一个登记凭证。登记凭证会嵌在系统的一个特殊交易中(所以创建权益池会有费用)。这个凭证包含了权益池领导的权益密钥。想委托权益给该权益池的人可以据此创建委托凭证,在委托凭证中指明将他们的权益权利转移给权益池领导的权益密钥。
注意,权益池还在开放登记中(截至日期为5月31日). 如果你有兴趣,可以参照这里。
激励机制: 用于激励的资金哪里来?
用于激励的资金有两个来源.
1. 交易费
收取交易费的目的有两个:
- 抵抗DDOS(分布式拒绝服务)攻击
在DDOS攻击中,攻击者通过制造大量的无用交易洪水般的冲击网络使系统过载. 只要它需要为每笔交易支付足够高的费用,采用这种方式攻击的代价就会高昂到不可接受.
- 为激励提供资金.
下节会解释这个费用是如何计算的。
2.货币扩张
ADA 到今天为止的总供应量约为310亿阿达。 最大上限的供应量是450亿。 因此,还有140亿可用的ADA。 这些ADA也可以用于激励。虽然这是一个非常大的数量,但并不是无限的。
这个想法是类似于比特币的东西,比特币会随着时间的推进呈指数下降(用于激励的百分比将变得越来越少)。 目标和希望是,卡尔达诺会取得很大程度上的成功。 因此,越来越多的人会使用它,通过交易费收取的金额将会增加。 这将减少对这种额外货币扩张资金的需要。
费用如何工作
有一个规则是写死的,设置每笔交易的最低费用。 每笔交易必须至少包含一个最低的费用。 所以,交易的投入金额必须大于交易的付出金额,而两著的差异金额必须至少是这个最低费用(或者如果您愿意,您可以支付更多的费用)
最低费用公式
它是一个线性函数:
a + b x 数据大小
('数据大小’是交易数据的大小,以byte为单位,而不是ADA的数量)
a =常数,现在是 0.155381 ADA
因为需要预防DDoS 攻击→ 无论交易有多小,都应该花费一定的成本来制止试图产生数千笔虚拟交易的攻击。
b =常数,现在是 0.000043946 ADA / byte
这是为了公平。这个想法是,你应该支付你赋予系统的压力。如果您的交易量很大,运行该协议的人员必须将您的数据存储在电脑上并耗费电脑内存。因此交易越大,费用越贵,这才有道理。
举个例子:作一次交易,有200 byte 典型的数据大小。放进a,b 常数和数据大小后,交易费用将如下所示:
0.155381 ADA + 0.000043946 ADA /byte x 200 byte= 0.1641702 ADA
未来某个时间点,公式里的常数预计将会作出调整以更好地反映实际成本。这取决于ADA的走向和系统的使用统计。
Brünjes博士在这里还指出,未来可能还会加上其他条款。有一些想法包括,查看UTxO的数量(让您的钱包更加复杂和影响数据量),或者查看ADA的实际交易数量(大量的Ada,而不仅仅是byte)。
激励分配
在卡尔达诺,有严格的时间划分单位(纪元和时隙)。
时隙为20秒钟。 对于每个时隙,随机选择一枚硬币,并且该硬币的拥有者有权在该时隙中创建该区块。
一个纪元包含21,600个时隙,刚刚好是5天。 一个纪元是选举/随机过程发生的时间场所。 每隔5天,人们就会掷骰子,然后接下一个纪元的时隙领袖就会在那时刻选出。
在比特币中,分配是以区块为基础进行的。 但在卡尔达诺,我们的计划是以纪元为基础分配激励。 所有交易费用(一个纪元中的所有区块)加上货币扩张将被集中到一个奖励池。 然后这整个池将会分配给在这个纪元活跃/重要的人群。
分配的基本思路:分两步解释
1. 整个奖励池如何在众池中分配
基本思路是按照与持有权益数量成比例的方式进行,所以您可以查询权益数量并进行计算。 或者,您可以查看该池在纪元中被选为时隙领袖的时隙的数量(而非实际创建区块的数量)。
这两种方法起初看起来有所不同,但被选中为时隙领袖的概率与权益数量成正比(基于卡达尔诺协议的工作原理)。 然后,这两个方法会有相同的预期奖励。
有两个改进,如下所示。
改进1:
一个权益池可从奖励池中获得奖励的最大比例将受到1 / k的限制
(k是所需权益池的数量,大概在100左右)
如果没有这限制,权益池会想要变得越来越大,因为它们仍能获得相同比例的奖励,而以更低的成本因为大池的管理费用不会比小池多太多。
例如:
如果k = 100
A和B分别持有0.3%和1.2%的权益。
A将获得奖励池的,但B将获得1/100 = 1%
在这个例子中,不管你的权益有多大,你永远不能得到超过奖励池的1%。希望这会产生一个效应,即权益池不会变得太大。
改进2:
到目前为止,我们所谈全只依赖于权益池中的权益多寡,而不是他们实际所做的工作。需要一种机制来检查它们是否真的在获选时创建了区块。因此,利益池应该受到惩罚,如果他们不遵守协议并且在轮到他们时不上线。
这个判断式会决定该权益池是否有资格获得它在该奖励池中的份额,判断式会查看在该权益池中被选中为时隙领袖的时隙们以及实际创建的区块数量。这判断式不可能会像“创建至少x%的区块”那么简单。 → 假设说你必须创建至少“90%”的区块,而你已经被选择来创建来获得奖励。在这种情况下,如果一个权益池在一个纪元中被选中100个时隙,并且它已经创建了90个区块,那么他们很可能会关闭电脑并省略创建最后的10个区块。如果每个人都这样做,那么在纪元快结束时,每个人都会关掉电脑,这并不好。这就是为什么需要是更复杂一点,无论是随机化还是其他算法。
2. 一个池如何进一步在成员之间分配奖励
在奖励池被分配到各权益池之后,每个权益池领袖必须分配他的奖励份额给池中成员。池中成员是将他们的权益委托到该池的人。
有两个一般准则:
-
权益池领袖本身应该对她的成本(硬件,注册,计算能力,在线时间等)进行补偿,并因她的努力而获得奖励
-
池中成员应该根据他们委托到该池的权益比例来获得奖励
为了理解这一点,我们来看一下这个例子: 假设权益池领袖爱丽丝有0.2%的权益,与鲍勃(0.1%的权益)和查理(0.2%的权益)共组一个权益池。
让我们进一步假设,一个假想的纪元中的奖励池里有5,000,000 Ada。也假设爱丽丝的权益池通过了判定式并在被选为时隙领导时尽职尽责的创建了所有区块。
现在爱丽丝的权益池持有0.5%的权益 (0.2% + 0.1% + 0.2%),这比例小于 1/k,所以没有触顶,将从该纪元的奖励池中接收到 25,000 Ada (0.5% of 5,000,000) 。
在这 25,000 Ada中,鲍勃应该拿到查理的一半。
但是查理会比爱丽丝拿的少,因为还要奖励爱丽丝以补偿其运营权益池耗费的开销和精力。
假设这份运营权益池的额外补偿有5,000 Ada。这就是属于权益池领导的。所以,还剩下20,000ada,再根据权益占比 2:1:2 计算。
最后,爱丽丝共得到 13,000 Ada (8,000 + 5,000)
鲍勃共得到 4,000 Ada
查理共得到 8,000 Ada
*注意! 这是一个纯粹虚构的例子,是为了讲解分配奖励的思想。他无论如何不代表将来的实际奖励数量!
未分配资金
有两种情况会导致你拿到的激励少于你持有的权益比例:
-
如果你持有超过 上文所说的 1/k 比例的权益
-
如果你没有完成该做的工作,没有参与到协议运行中
在这些情况下,整个奖励池就不会分配完。重点是,这些未分配的奖励不会分发给其余的人。这不是一个错误,而是一个特性(故意为之)。这些资金将进入财库,用来提升整个系统的可持续发展能力。
权益池间无竞争
对未分配奖励的这种处理方式带来了一个重要的结果,就是权益池之间不存在竞争(在争夺奖励方面)。一个权益池是无法通过减低其他权益池奖励的方式增加自己的奖励。所以,就不存在一个奖励池去破坏其他奖励池工作的动机。
比特币系统的经典攻击方式,例如自私挖矿或扣押区块就不会(在这里)发生,因为权益池是互相隔离的。一个权益池的所有行为只会影响到它自己的奖励。
翻译: Dr.Wang,孙浩,Mihori, 杨林满, Carl_嘉隆