Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
书山有路勤为径
目前整个业界还处于区块链发展的萌芽时期,其概念也还在不断发展和完善中,这就给一些初学者带来了很大的困惑。 从区块链基础概念的发展路径循序渐进地去理解它,是一个非常好的模式——这就像我们学习生物必须顺着生物本身发展的轨迹,也就是从低等生物到高等生物;学习化学必须先从元素周期表开始一样。 但同时大家也要注意,区块链处于一个高速迭代的初级阶段,知识的更新是非常快的。
区块链源于比特币,我们首先就应该仔细阅读中本聪的论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)。经过简单梳理之后,我们会发现这篇论文的一些关键信息点:
区块即账单,也就是转账数据。
采用带有时间戳(timestamp)标记的分布式数据库(即区块)记录数据;
数据库由不断有序增加的区块链条构成,或者说数据被记录在一种链状的时态数据库里;
区块按时间顺序前后相连而形成区块链条,并且每个区块都通过密码学方法使之与其前后区块唯一关联,做到所有的历史数据井然有序地保存下来。
比特币由一个独特的共识机制即工作量证明(Proof of Work, PoW),来保障去中心化数据记录和数据验证机制的可靠性,从而做到数据能够毋庸置疑(trustless)和抗审查(anti-censorship,指不可能被删除、被篡改);
数据公开透明;
通过点对点(peer-to-peer)技术,保障数据能够及时分发。
通过维基百科等工具的辅助,你完全可以自己顺着这些信息点很快搞清楚以下区块链技术的重点概念: ****
1.区块即账单
中本聪绝不是九零后零零后,因为他设计的记账方式和古老的会计一样!简单点说,古老的会计是用一个本本,每天一页来记账。比特币唯二不同的是把那页纸换成了区块,并且每1个小时全网的交易都记录到同一个区块里。
对于比特币,区块就是转账数据。
以太坊对此做了拓展。它把app的代码的也如此存储!
2. 采用带有时间戳(timestamp)标记的分布式数据库记录数据
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。它的提出主要是为用户提供一份电子证据,以证明用户的某些数据的产生时间。在实际应用上,它可以使用在包括电子商务、 金融活动的各个方面,尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务[3]。
时间戳的获取,一般是通过时间接收设备(如GPS,CDMA,北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。
带有时间戳(timestamp)标记的分布式数据库,技术也属于时态数据库的一种,是内建时间特性的数据库。
每个区块有了时间戳(timestamp),比特币账本才能根据时间顺序前后相连,而形成区块链。
3. 数据库由不断有序增加的区块构成,或者说数据被记录在一种时态数据库的每个区块(block)中。
比特币在数据记录方面采用了十分轻量级的文本数据格式JSON来构建自己的时态数据库**(**Temporal Database)。每一个区块,就是一个独立的数据表。比特币每十分钟新增一个区块,也就意味着它每十分钟新增一张数据表。
4. 区块按时间顺序前后相连而形成区块链条,且每个区块都通过密码学方法使之与其前后区块唯一关联。
因为每个区块都带有时间戳(timestamp)标记,因此所有区块就能按照时间顺序前后相连,而形成一条区块长链。加上每个区块都通过密码学方法使之与其前后区块唯一关联,那么这个链条的区块排序不光确定无疑,在关联过程中,由于采用的是与整个区块数据直接相关的hash值,亦即任何数据的变化必然造成hash值的不同,就能保障一个区块里的数据无法在任何时候被偷天换日。
5. 比特币由一个独特的共识机制即工作量证明(Proof of Work, PoW),来保障去中心化数据记录和数据验证机制的极端可靠性,从而做到数据能够毋庸置疑(trustless)和抗审查(anti-censorship,指不可能被删除、被篡改)。
所谓抗审查(anti-censorship),就是区块链里面的数据不可被伪造、篡改或删除。区块链抗审查的特性,需要通过适当的共识机制,保障通过去中心化的模式记录数据和验证数据才能得以实现。
比特币的共识机制是基于随机散列的工作量证明(proof-of-work)。这个机制归功于已经过世的科学家Hal Finney。是的,你在百度百科找不到他的词条。
6. 数据公开透明。
抗审查(anti-censorship)实现了数据永存,但如果数据非公开透明,那么数据的完整性连同数据不可被伪造、被篡改等等,就都是一句空话。
7. 通过点对点(peer-to-peer)技术,保障数据能够即时分发。
**点对点技术(peer-to-peer,简称P2P)**又称对等互联网络技术,它只有对等协议,没有服务器和客户端的概念。这也就是说每个比特币全节点钱包都可以既是客户端,同时也是服务器!除非互联网上无人使用全节点钱包,否则比特币就永远在线。这就是比特币玩家、自由音乐人张张创作《杀不死的比特币》的灵感源泉。
点对点技术在电驴(eDonkey)、BT分享和下载方面得到了很广泛的应用,但因为它们的种子仍然需要通过中心化的网站传播,因此难逃中心化模式的厄运,近年来迅速衰落——这也从侧面告诉我们:区块链项目如果不坚持彻彻底底的去中心化,一切都将会是过眼云烟!
不知不觉,我们已经学习和重温了一些基础概念,对吧?
而且,大家会突然发现作为年轻一代的我们自身的很多学习与发展的天然优势,也突然发现了时代赋予我们的责任感,以及无数前辈们呕心沥血、穷极一生之智慧和殷切之希望为我们铺垫的美好未来!
为你美好的未来加油吧~~
区块链的发展还在早期阶段,知识的更新几乎可以说是日新月异。如果要一个人仅仅只是袖手旁观学习概念那是坚持不了多久的。
参与实践是必需的。实践中慢慢梳理知识也是必须的。
必须要声明下了:
百度百科并非自由的百科全书,无法和“维基百科”(www.wikipedia.org)相提并论。维基百科遵照Creative Commons Attribution-ShareAlike 3.0开源协议完全开放,百度百科则完完全全属于百度所私有。并且,百度百科确实有毒!
但因为网络封锁的原因,为照顾不会使用VPN的学员,有的地方,我们仍引用百度百科可用的词条解释——但我们无法保证在引用后的某天它会不会被别有用心的人改坏掉。
创新是很难的,因为我们是以旧头脑理解新知识。我估计当前的区块链资讯里,90%以上都充斥伪区块链知识。你要小心了!
使用私钥对消息(譬如一个转账请求)进行签署即会得到签名(Signature)。
这一过程通常是将消息(数据)先通过哈希算法(Hash)生成哈希值,然后使用私钥通过加密算法对此哈希值进行签名。由签名(Signature)与消息的哈希值,便可以推出一个公钥,验证此公钥,便可知道此签名是否由该公钥对应的私钥签名。
签名算法可以表示如下:
Sig = FuncSig(FuncHash(m), dA)
dA 是签名私钥
m 是交易(或其部分)
FuncHash 是散列函数
FuncSig 是签名算法
Sig 是结果签名
函数_FuncSig_ 产生由两个值组成的签名_Sig_,通常称为_R_和_S_:
Sig = (R, S)
通常,每个比特币签名会有三个长度:73、72、71,符合校验的概率为25%、50%、25%。所以每次签署后,需要找出符合校验的签名长度,再提供给验证方。
比特币的一个私钥,可以通过签名完成一个地址里的比特币的转账——这种情况可称之为“单签名交易”,因为转账只需要一个签名。
以太坊EIP-155“简单重放攻击保护”标准在交易数据结构中添加了v字段,即链标识符。它能确保为一个区块链(例如以太坊主网络)创建的交易在另一个区块链(例如以太坊Classic或Ropsten测试网络)上无效。因此,在一个网络上广播的交易不能在另一个网络上重播。
v签名前缀字段初始化为链标识符,其值为:
数字签名在以太坊中有三个用途。首先,签名证明私钥的所有者(其暗示是以太坊账户的所有者)已授权币的支出或合约的执行。其次,授权证明是不可否认的(不可否认性)。第三,签名证明交易数据在交易签署后没有也不能被任何人修改。
签名已经普遍被以太坊用于匿名登陆dApp(前端)的一种手段。
上一节我们提到:硬件钱包是为了离线生成和保存私钥,是目前“公认”比较安全的代币存储方案——非硬件钱包签署交易加载的是内存中的未锁定私钥。而转账时必须连接到互联网并运行公链(如以太坊)客户端,考虑到私钥有通过互联网暴露或被盗的风险,会另一些人特别是大户担心。硬件钱包采用的分离签名和传输的功能称为离线签名,是一种常见的安全措施。其中硬件钱包创建和签名交易,由手机或电脑里对应的app传输交易。将私钥与互联网隔离,理论上当然可以大大提高账号资产的安全性。
但是由于一些硬件钱包没有开源代码,同时还有一些没有经过硬件安全认证(硬件的全面开源还要假以时日),增加了很高的监守自盗风险。
比特币的多重签名(Multi Signature,又被称为M-N多签名)指的是需要总共N个私钥中的M个(M≤N)共同签署一笔比特币转账(它实际收集的是这些私钥对应的公钥,签名时仍然是验证这些公钥),这笔交易才可能发生。多重签名的实质是一个地址里的数字加密货币的交易需要多个私钥通过规定好的合约授权。它通常被多个人或机构或程序脚本或人工智能用来协同管理数字资产。
多重签名的典型应用模式是:一个多重签名地址,可以有多个相关联的私钥进行管理,如果要转账,则需要按照合约规定,使用所有或部分相关联的私钥签署交易。譬如,你可以事先设置成N个私钥一起签名才能完成转账,你也可以设置为五个私钥中,有任意三个私钥进行签名即可转账。
以太坊的多重签名虽然机制和比特币的多重签名相近,但它充分发挥出其技术核心智能合约的特色,通过部署一个智能合约,并把N把公钥设为智能合约地址的资产的拥有人。以太坊的这么一点改变,让多重签名的应用发生了很大的提升!
以下将进行比特币核心钱包和以太币钱包在进行多重签名操作时的对比。
共同点:
都可进行多重签名,实现多方共同管理资产。
不同点:
比特币:完全通过私钥管理,每一笔交易都需要人工进行多重签名。应用场景非常有限。 以太坊:基于智能合约管理,是否需要人工或者什么情况下需要人工进行多重签名,完全由智能合约细节决定。应用场景非常宽泛也非常灵活。譬如,可通过智能合约设置每日提款限额,超过每日提款限额时才需要人工进行多重签名。又譬如,以太坊多重签名可应用于所有采用ERC-20通证标准的数字资产的管理。再譬如,即使一方中所有掌握私钥的人都挂掉了,资金也不一定就“胎死腹中”,智能合约还能按照预设的条款执行(譬如30天这一方没有做出决策,则全部资金自动转给对方)。
比特币:一般没有钱包余额限制 以太坊:有限制,譬如Mist钱包要求余额应不低于1.02 ETH,具体原因可参考:
比特币:一次性,而且如果转出金额小于钱包上的金额,需要填入找零地址。 以太坊:同一个合约地址可以反复使用。
这个对比应该让我们能够明白,以太坊在区块链领域的专业地位已经超越比特币的维度!
共识、共识算法、共识规则、共识机制、PoW、PoS、PoV、分叉、挖矿、挖矿难度与算力。公链很忙的!
公链(Public Blockchain, Public Chain)领域已经数次发生与共识(共识机制)相关的问题,因此我们有必要先彻底搞明白发生了什么!
区块链行业的共识,指的是一种决策机制,或者说治理机制。它要求所有参与者都支持一个决定。
这个决定是用代码制订的一个或一组协议,共识(共识机制)是公开透明的,也是强制性的,能够抗人为破坏。
从理论上说,如果有人不支持,当然可以不参与。
之所以我们需要强制性且能够抗人为破坏的共识机制,是因为人类金融的底层协议必须固化。而在匿名的情况下,我们这个年代人类是无法保证良好的共识能够达成的!
最具说服力的例子就发生在比特币身上:比特币因为确认时间太长、每个区块可容纳的交易数量太少,而从2016年起,就完全不能适应市场的需求。但因为无法有效达成共识,造成它无法顺利地更新技术以及基础协议,发展陷入停顿。之后社区分崩离析,技术开发完全丧失创新精神,将智能合约市场拱手相让给后起之秀以太坊,失去了技术领域的霸主地位。
区块链的共识机制通常包含了两个方面:
达成共识的计算机算法,即共识算法(Consensus Algorithm)
达成共识的规则,即共识规则(Consensus Rule)
我们经常说的“共识机制”,多数情况下同时包含了共识算法和共识规则,少数情况下单指其中一方。这是导致我们的讨论经常发生穿越的原因之一。
百度云:由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致。因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识。这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”。
这里解释的其实只是共识算法,也就是节点依照共识规则达成共识的计算机算法。
而共识规则(Consensus Rule)则是指每个区块链里面都有自己精心设计好的规则性协议,这些协议通过共识算法来保证它们可靠地得以执行。譬如我们通常所说的比特币的挖矿,就是比特币记账的共识规则,其专业术语为PoW(Proof of Work),即工作量证明。
比特币的工作量证明共识规则是通过SHA(Secure Hash Algorithm)系列安全散列算法之一的SHA256来可靠地得到执行的。
区块链账本或者数据的记录和维护是去中心化的,也就是往往有很多个记账节点。比特币或是以太坊这样的公有区块链,已有成千上万个记账节点。这些记账节点必须对所有区块有效性的验证都能达成共识。缺乏良好的共识机制,交易的验证就陷入混乱,对应的区块链也就会沦为投机者的温床,甚至是骗子和黑客的狂欢盛宴。因此共识机制对于区块链来说至关重要!
区块链有很多的共识机制,根本原因在于只要让人来做决策,就可能发生恶意的破坏行为,因此我们认为区块链最终的共识机制可能得依托于算法和开源代码。
PoW(Proof of Work,工作量证明)
PoW的全称为Proof of Work,翻译过来就是“工作证明”或者“工作量证明”。
工作量证明是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。
我们把工作量证明中用户为获利而付出劳动的行为称为“挖矿”。挖矿获得多少代币(专业术语为通证Token)奖励,取决于挖矿贡献的有效工作,也就是说,矿机的性能越好、挖矿时间越长,所获得的代币奖励就越多。
此概念最早由Cynthia Dwork和Moni Naor于1993年的学术论文提出,而工作量证明一词则是在1999年由Markus Jakobsson与Ari Juels.所发表。此技术一度成为公链的主流共识机制之一。
比特币、狗狗币、莱特币、以太坊1.0等都是基于POW模式的数字加密货币。工作量证明的重要意义在于:它迫使代币的产生,需要付出一定的工作量和成本,这就赋予了代币一定的商品属性,使得自由市场这只无形的手能够通过“价格机制”自发地调节代币供应,保证了代币具有相对稳定的价值,从而使得代币能够获得人们的信任。
从共识层面讲,PoW的数学算法简单透明;从理论上讲,任何人都可以加入到网络中并产生区块。
但经过以比特币为主的公链十多年的实践之后,PoW的问题渐渐显露出来:
比特币囚徒困境:天生趋向于中心化而发展 前面刚说过:矿机的性能越好、挖矿时间越长,所获得的代币奖励就越多。于是聪明的人类就开始形成集团化的合作。手段及其简单:获得奖励的运算很复杂,那就多台机器在计算上分工协作。因为它们的总算力增加了,那么它们获得奖励的机会也就变大了。所以无一例外都会从挖矿散户,发展为中心化的挖矿集团,最终由几大矿池统治整个矿业!
对抗技术升级 矿业中心化之后,最大的问题就变成了矿业控制了记账权。也就是账单他们想怎么记就怎么记。如果核心开发团队要对技术升级换代,只要升级换代会降低矿工的收入或者收益率,那么可想而知,控制了记账权的矿池就会百般阻挠,或者发动分叉(可以理解为拒绝采用新标准账单而继续使用旧标准记账),甚至发动51%攻击(记假账从而给自己无中生有搞出很多代币,卖掉代币血洗市场,从而导致该项目完全失去信用而万劫不复)。
难逃灭顶之灾 我们已经经历过一些PoW公链被51%攻击的事件。上面说了矿工可能发动51%攻击,还有一种情况是黑客发动——当一个币种的总市值很低的时候(早期或者市场暴跌),51%攻击所需成本太小,而获益则非常诱人,此时黑客就会行动! 墨菲定律告诉我们,任何一个事件,只要在人类的掌控中具有大于零的几率,就可确定它终有一天会发生。 PoW公链分叉可以说司空见惯了。公链分叉的意思是说一个公链项目分裂产生一个新的公链项目。最近以太坊的一些矿工就以分叉(甚至51%攻击)来抵制以太坊的柏林硬分叉升级。至于比特币,它已经被分叉了一百次。难以置信吧?!分叉出来的Bitcoin Cashe、Bitcoin SV、Bitcoin Gold目前还在市值前一百名之列!
PoS(Proof of Stake,权益证明)
PoS是以共识算法的方式,通过使用伪随机数或其它规则指定质押代币的人作为矿工(记账员)或交易的验证者,并获得奖励或(及)交易手续费。
2012年8月点点币(PPCoin)的创世,首次实现了PoS(它采用PoW + PoS 的混合共识机制)。它是一个根据所持有货币的量和时间,给持有者发利息的一个模式。在PoS模式下有一个核心名词——币龄:每个币每天产生1币龄。比如你持有100个币,总共持有了30天(一个月),那么,此时你的币龄就为3000。这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空某个固定的币龄,就会从区块中获得一定的奖励(利息)——持币有利息。比如,首创PoS模式的点点币就是1%年利率。
PoS最大的问题被认为是“富者更富”,在PoS体系下,受益的能力受持有代币的绝对限制。有人认为它是一种不公平的模式(不过在人类社会里,真有什么能限制富者更富吗)。另外质押代币会降低代币的流通量,有集体托底或拉盘之功效!
DPoS即授权权益证明,全称为Delegated Proof-of-Stake。
DPoS一般为股东投票产生代表。得票最高的代表(一般筛选出101个)有权将交易打包成区块,并获得系统的奖励和交易手续费。同时,他们还可能被赋予投票表决项目基金支配与否的项目各种开发的决策权。
DPoS的优势在于更快的区块确认和可扩展到VISA级别的每秒10000次支付或转账频率。但它有违区块链“去中心化”的初衷。问题很快在 EOS 公链项目上爆发出来,也很快被整个行业所淘汰。早期的公链达世币和早期以太坊采用了PoW+PoS的混合共识机制,来规避这样的风险。
2014年黑币(Blackcoin)对PoS进行了改进,Vitalick Buterin随后也多次专文对PoS进行了探讨。进阶阅读:
区块链公链已经实践过的共识机制还有好几十种,如Proof of Importance(重要性证明)、Proof of Assets(资产证明)、Proof of Burn(烧毁证明)、Proof-of-Purchase(购买证明)、Proof-of-Time(时间证明)、Proof-of-History(历史证明),Proof-of-Identity(身份证明)和Combining Proofs(混合证明)等。
以太坊坚定地选定 PoS 作为其2.0版本的共识机制,可以说对 PoS 寄予了厚望!
PoV(Proof of Value,价值证明)
由于普遍缺乏正确的理解,我们发现区块链业界的讨论,经常在一条偏离的轨道上做无用功,因此有必要让大家重新认识下到底什么是“共识”:
共识不是多数选举制
共识需要全部投票通过。只有51%的人同意而达成的方案,不叫共识,75%通过也不叫共识,95%通过也不叫共识!
当然,学过数理统计的都知道,“全部投票通过”并非一定要达到100%。通过数理统计的方法,在实际没有达到100%,但通过计算,尚且处于系统误差范围之内的情况下,我们可以视为已经达成共识。
还有值得注意的一点是:投票应该科学设置。譬如只有“同意”与“不同意”二选一这样的投票表决机制的最大隐患是,它可能会扼杀真正有价值的新的解决方案。并且这样投票有的时候会阻碍我们进行充分的讨论,所以在共识沟通中,要允许有“保留意见”这样的投票,或者多种提案。
特朗普当选美国总统就是一个非常典型的案例!他是在有截止时间的情况下,仅限2选1,以多数制(Majority rule)而非共识机制选举出的美国总统!有很多美国公民持之以恒地反对他执政,也就有情可原了!
共识最重要的核心是指反对派能够搁置不同意见,拥护一个所有人可接受的社区解决方案
中国政府常说的“搁置争议,共同开发” (仅限这八个字),就是典型的共识。
共识不是“全体一致同意“
对于一个大社区,比如我们这个泱泱大国,在全体公民投票的情况下,相当多的提案,都不会得到“一致同意“。如果坚持必须“一致同意“,那么就会被个别人利用这一规则,阻挠区块链的重要决策。
共识只是让大家必须做出选择或者决策。一架飞机燃油耗尽,左边是大海,右边是森林,中间是乱石堆,迫降哪边如果您非要“一致同意”,不会游泳的人怎会同意迫降大海,害怕大树刺穿机体的怎会同意迫降森林?非要“一致同意”,那只有一种结果:撞上乱石堆!
比特币目前的转账处理速度是7笔/秒,已经难以满足市场需要,因此它迫切需要整个社区在多种解决方案中,达成一个共识。但此事讨论了两年多了,一直无果。问题的核心是:共识机制POW的决策者本来只有矿工,吃瓜群众根本不沾边。而此时比特币矿业已经中心化,并且其发展因此受阻,吃瓜群众介入进来,自然就步入了混乱状态。
共识不是要全部完美解决
共识只是要在关键时间点上,推动整个议题向前发展。
一个议题里面,常常有大家容易接受的部分,也有不容易接受的部分,要想它的方方面面都完全被所有人接受,那是不切实际甚至完全有毒的。把议题向前推进,在必要的时候再解决掉其中的缺陷或者分歧比较大的部分,这才是真正的共识。
比特币社区里的一些人,就非常害怕对比特币的修改不够完美,比特币社区现在的状态有时候甚至是“搁置共识,互相攻击”。
共识不是一劳永逸
共识在必要的时候,是可以更改的。以刚才飞机着陆为例,即使乘客已经达成水面降落的共识,如果机长的专业判断不同,加上时间也足够,他可以通过他的专业解释,影响乘客改变共识。无论是领袖还是群众,都可能犯错误,因此,坚持区块链数据不可篡改、坚持code is law是正确的,但坚持错误code带来的不良后果和被黑客污染的区块链数据不可通过共识修改,那就从根本上扭曲了共识的含义!
共识不是竞赛或对抗
一些地方常常把共识当竞赛或对抗来对待,这非常危险!它非常容易让社区变得不再友好!不友好的社区全球很多,它们有一个共同的名称:贫民窟!
以上讨论,主要参考了维基百科的共识定义,也是几十年开源软件协作的经验总结。
大家都已经知道,区块链往往是开源项目。特别是公有链,理论上它已经不是完全专属于某个公司或者某个团队。在这种情况下,维护社区的安全和健康发展,就特别需要以协议形式开放的而非建立在公司或者团队的权力基础上的,偏平而有效的管理体系。而这个体系里,除了达成共识的机制,还一定不能少了具有执行能力、能促成共识达成、可防止共识被破坏的奖惩工具。
脑筋灵活的马上会想到代币:共识规则的一个重要的核心,就是一套对区块链维护者们的代币奖惩制度!但目前区块链还没有很成熟地运用这种奖惩制度。
共识机制的根本作用是构建出一个既安全又符合其社区需求及社区发展的生态系统。毫不过分地说:共识机制就是构建其区块链生态的决定性机制。鉴于共识机制如此重要,我们往往还会把区块链的重要决策权也放到共识机制里解决——特别是后面要介绍的去中心化自治组织。
\
这是道易程(DAism)对dApp的一种治理共识。详情参见的介绍。
链
Chain ID
以太坊主网
1
Morden (obsolete), Expanse
2
Ropsten
3
Rinkeby
4
Rootstock主网
30
Rootstock测试网络
31
Kovan
42
以太坊经典主网
61
以太坊经典测试网络
62
Geth私有网络
1337
区块链里面有三种形式的分叉。
第一种是经常发生但大家都熟视无睹的。这种分叉是去中心化共识的副产物。对于比特币来说,只要两个矿工几乎同时完成记账就会发生分叉,因为他们同时广播了两个区块,当后续的多个区块链接到其中一个区块,使这个链最长,另一个区块或其小分叉就会被网络“孤立”以至“抛弃”掉。这种形式的分叉是常见而且正常的,一般我们在讨论分叉时很少提及它。
以太坊也常发生分叉。但不同的是:在以太坊中,孤块被称为“叔块”(uncle block),它们可以为主链的安全作出贡献,因此挖出七代内的叔块都能够得到奖励,并且叔块的代数离主链上下一次挖出的区块的代数越近,则其被矿池招安能够得到的奖励将会也多,根据离的代数越远,奖励比例也越小,依次为7/8、6/8、5/8、4/8、3/8、2/8、1/8。叔块奖励 = 奖励比例 * 出块奖励。
另外两种分叉则是基于共识层面而产生的,它们需要社区谨慎处理,因为它们在社区无法达成共识时,有可能造成社区和项目的分裂。
软分叉
软分叉是在原有的规则范围内强化既有规则。譬如新规则单纯将区块的大小由1MB 减小到500K,因原有的规则为区块的大小未超过1MB就是有效的区块,所以未升级的节点会继续将新交易视为有效。然而未升级节点继续挖出的1MB区块将被已升级节点视为无效区块而被拒绝。这也就是说,旧节点无法觉察到协议的变化,不能发现软件已升级,从而继续参与新节点用新协议所挖出的区块的验证工作,但旧节点矿工将无法在新区块上继续添加新节点矿工视为无效的区块,旧节点矿工无法获得对应工作的收益——如果社区未达成共识,多数节点(实质为多数算力)拒绝升级,那么其分叉方案就可能对社区造成伤害。
那么部署一个成功的软分叉,因为需要网络的大部分算力的支持,最好是在达成社区共识的前提下进行。缺乏充分共识的软分叉并不可取。
硬分叉
硬分叉是改变原有的规则,引入不兼容旧软件的新规则。譬如将区块的大小上限由1MB 增加到8MB,没升级的节点会将新区块视为无效,因此未升级节点无法协同已升级节点的工作,和软分叉不同的是矿工马上会发现这一问题!从这个角度说,硬分叉更透明更清晰些。
业界有一种认识上的误区,认为只有软分叉是向后兼容的。实际上无论哪种分叉,都是必须是向后兼容的。“向后兼容性”是指新的软件或协议接受原有的旧格式的数据,只是软分叉到了分叉的哪个时间点后,新的软件或协议将不一定接受旧格式的数据。
比特币此前就曾因代码bug被利用等情况而经历多次的软硬分叉。以太坊也曾经几次硬分叉,并且它现在正在通过硬分叉解决其交易拥堵以及升级换代等诸多问题。
另外要提醒大家的是:除了公链,区块链应用(dApp)也是可以分叉的,因为区块链应用如果遵循区块链的核心价值,那么其智能合约及其数据就都是公开透明的,合约的调用就是无需许可的,从技术上说,分叉就往往变得非常容易了。譬如去中心化交易所Sushi就是从大名鼎鼎的Uniswap分叉产生的。
双重支付又被称为“双花”,顾名思义就是同一笔钱(数字加密货币)被重复支付两次,也就是将同一个地址上的数字加密货币同时支付给两个不同的收款地址。
比特币双花一直都有,只是这些双花没成功而已。
如果双重支付是有意而为之,那么就是双花攻击。在其它公链上双花攻击的确多次发生过,并且不幸的是作恶者硕果累累。
比特币挖矿实质上是下列工作的集合:
为全球的比特币交易记账——大约每十分钟,抢得记账权的矿工(实际应该是一个节点Node),将全球的比特币交易记录到一个区块链里。
帮助比特币发行——比特币系统将给记账的矿工(节点)一笔比特币奖励。最早是50个比特币的奖励。但是该报酬大约每4年减半,现在每10分钟比特币网络就可以产生12.5个比特币。因此实际上,奖励也就是比特币的发行机制。
通过PoW即工作量证明,维护比特币网络的安全。
中本聪在他的论文中阐述说:“在没有中央权威存在的条件下,既鼓励矿工支援比特币网络,又让比特币的货币流通体系也有了最初的货币注入源头。”可以看出,中本聪把通过消耗CPU的电力和时间来产生比特币,比喻成金矿消耗资源将黄金注入经济。
挖矿的问题:
矿业容易中心化——特别是纯PoW共识机制,经过市场的淘汰和矿机的中心化发展,矿业逐步被少数人控制,决策权基本最终会落入矿工手中,也就是矿业中心化最终会带来决策权的中心化,使得比特币非常难以升级改造,而非常容易导致社区分裂。2017年比特币先后分叉出Bitcoin Cash、Bitcoin Unlimited、Bitcoin Gold、Bitcoin Diamond、Super Bitcoin,等等,原因就在于矿业中心化。我们有时候也把这种现象叫做比特币囚徒困境。
破坏环境——尽管直到今天,人们还在强调区块链矿业利用的大多是过剩能源,但是不可否认,由于挖矿能源需求的无止境,如果不改进现有的工作量证明这一普遍应用的共识机制,破坏环保迟早会变成区块链背负的骂名。
挖矿难度(mining difficulty)有时候又被称为“区块难度”(block difficulty),它是用来衡量PoW共识机制中挖出一个区块平均所需要的运算次数的指标。对挖矿难度最简单的理解是:在某个固定的算力下,挖到一个区块所需的时间。
挖矿难度反映了在一定难度下,用多长时间才能挖到一个区块,因此它是矿工挖矿时重要的参考指标。
算力(Hashrate)是矿机每秒产生哈希(hash)碰撞的能力,也就是比特币矿机产出比特币的计算能力。算力的单位转换关系是
1EH/s = 1000PH/s
1PH = 1000TH
1TH = 1000GH
1GH = 1000MH
1MH = 1000KH
1KH = 1000H
每隔两周,比特币挖矿难度会根据最近这个周期开采的区块数量而进行调整——比特币矿工的说法往往是,比特币挖矿难度会根据最近这个周期的算力增减进行调整,以保证约十分钟产出一个新区块。
PoS共识机制中没有此概念。
我们刚才说到比特币挖矿的一个作用是帮助发行比特币,同时挖矿是一种劳动付出,它能够给发行的代币赋予“劳动所得”这一意蕴。
因此从2017年以来,区块链的“XX 即挖矿”的热潮从未停息,譬如“交易即挖矿”,“创作即挖矿”、“借贷即挖矿”、“流动性挖矿”等等。其中“交易即挖矿”,“创作即挖矿”、“借贷即挖矿”通常即用于新项目的代币发行。
流动性挖矿是由DeFi催生出的新概念。它是一种让投资者使用无需许可的流动性协议,通过向流动性资金池中注资,而获得代币奖励的一种全新方式。 奖励的可以是这个项目所发行的代币,也可以是用户买卖时出售的代币。流动性挖矿能够让任何人都可以使用以太坊上建立的去中心化“金钱乐高”生态系统,从而获取被动资金收入。在2019年爆发的DeFi风潮中,它起了推波助澜的决定性作用。
我们常常把节点和矿工(拥有节点的人)混为一谈。这其实超级危险,因为它让我们忘了一个人可以同时拥有很多很多节点。这是很危险的遗忘!
因为比特币的风险越来越大,我已经不打算介绍它的节点。让我们看看超越了它的以太坊的节点情况吧:
很复杂对吧?
我认为对以太坊PoS的改进,还需要数年时间,并且需要非常重大的改进!其中的重点是奖励和处罚机制,以及相关币种的改进!其中前后两项我都已经做了新的设计,并且和团队伙伴完成了相关的合约代码!你如果好奇,以后去找找(已经公测于 Sepolia 测试网络并即将上线以太坊主网)道易程里面的智能公器吧!
比特币貌似为典型的旧瓶装新酒。它本身看起来只是一堆旧技术的组合,但它的确给我们的新思维提供了坚实的基石,比特币打开了区块链的大门并且为区块链赋予了坚不可摧的基础价值观。
值得警惕的是,很多人因此而认为“一堆旧技术的组合”就能拥有化腐朽为神奇的力量。这是区块链十多年产生一大批伪区块链项目的主要原因之一!
比特币被设计为去中心化自治系统。所谓去中心化,是指这个系统自2009年1月3日创世后,即以既定规则在因特网中自主运行,不依赖某个机构的服务器,也无须某个机构来监管。
换句话说,与传统货币不同,比特币的运行机制不依赖任何中央银行、政府或企业的支持或者信用担保,而是依赖对等网络中种子文件达成的网络协议。去中心化、自我完善及透明开放的货币体制,在理论上确保了任何人、机构或政府都无法操控比特币的货币总量,或者制造通货膨胀。
比特币的发行机制的特点:它的货币总量按照预定的速率逐步增加,货币发行速度逐步放缓,并最终在2140年达到2100万个极限,此后不再有新的比特币发行。这个发行机制是连政府都无法干预的,并且因为规则、代码和数据的开放性,不存在暗箱操作的可能,这在根本上杜绝了不良主权法币利用通胀剥削公众利益的弊端,在货币体系层面的理解上,这一点恰恰成为数字货币之所以具有顽强生命力的驱动力。
这里要说的是,好多家中心化的数字货币交易所因黑客的肆虐和创始人的贪婪让投资者损失巨大,而与之形成鲜明对比的是:比特币在全球最强悍的黑客的攻击加上某些政府最强硬的打压下,11年来其本身毫发无损,恰恰完美地佐证了去中心化的优越可靠性。
可惜的是,比特币的去中心化机制并非坚不可摧,而中本聪的失踪使得比特币的技术没有与时俱进。矿机的垄断以及矿工联合产生矿池,导致比特币矿业很快出现了中心化,使得比特币的前途岌岌可危!
请注意,这里的抗审查指的是比特币交易不可纂改,而并非某件事没有门槛没有限制的那种抗审查。后者叫“无需许可”。
任何比特币交易都是不可撤销的。这也就是说:一个人给你转了账,一般约10分钟你就会收到到账通知,虽然这时候你还没有真正收款(一般需六次确认),但他已经不能单方撤销这笔交易、偷偷冻结或者收回这笔比特币。
我们称比特币的这一特性为抗审查(anti-censorship)。在比特币的实际应用中,抗审查直接体现在没有人可以伪造、修改、撤销或废除交易。这一特性也使得比特币的交易数据是可永久溯源的。
抗审查被广泛接受为区块链的核心规则和核心价值观,即区块链里的原生数据不可被伪造、篡改或删除的。
抗审查常常被直接理解为区块链数据不可纂改——请特别注意,这种说法只适用于区块链原生数据(如转账数据),但并不适用于区块链里面已有的一切数据。或者说,请不要认为只要是区块链里面的数据,就百分百可信,因为数据进入区块链之前是可以造假的!我们无法用区块链技术保证非区块链原生数据的真实可靠性。譬如一个群体的身份信息。
理论上,如果整个社区达成了共识,可以通过回滚做到撤销或者废除交易,甚至达到删除帐户的目的。但是实际上它还是违背了区块链抗审查的原则,很容易引发信任危机乃至社区的分裂!
无需许可最早是表示所有(任何)节点都可以请求将任何交易添加到区块链中,也就是说你想做矿工就能做。
除此之外,任何人都可以自由地拥有自己的比特币账户,任何人都想要几个比特币账户都行。任何人的比特币资产都可以自由支配。而到了以太坊带来的区块链2.0时代,一个智能合约可以被任何一个人的钱包或者任何一个智能合约任意交互。以此类推,这会使得区块链生产数据、交换数据、记录数据、更新数据都变得百分百自由。再推一下,这将使得区块链的应用无所不及!
一定马上就会问:无需许可不就让坏人为所欲为了吗?
是的!如果你的代码或者经济模型有问题,坏人就可以肆意妄为。我们已经遭遇很多这样的案例。
这也意味着:如果想用区块链治理人间,恐怕还要相当长一段时间!但别忘了AI的各种能力一直在超越人类,区块链和AI(注意不是人)的结合值得期待。
比特币说白了就是一个公开透明的去中心化账单系统,它把账单完全公开透明地交给全球所有的比特币用户监管。比特币的所有转账数据是公开透明的,比特币的所有全节点钱包的代码也都是公开透明的。
比特币交易被记账员(矿工)确认后作为账单分发给所有节点确认,并且要在系统里总共做6次这样的确认才被最终接纳,再加上所有的账单都是透明可查的,因此交易的参与方不需要相互了解或者彼此信任,不再需要中央银行这样的中介,就能安全可靠地完成交易。
比特币账目完整、完全公开且所有记录永久保存(永远不能被删除或篡改),意味着它就是一个公开透明的分布式账单系统,它把账单完全公开透明地交给全球所有的比特币用户维护。而正因为所有用户都有一份公开透明的账单,至少要事先串通51%的矿工造假,才可能让伪造的交易被整个网络信以为真。因此当匿名矿工数量足够且足够分散时,比特币是值得信赖的。
但我们不得不正视现状:矿池的出现大大减弱了比特币矿工的分散性,降低了比特币的可信任度。
花絮
2021年4月14日,美国交易所Coinbase上市纽交所,它的一个广告的用语如下:
In blockchain we trust.
In the future we trust
In freedom we trust
In Satoshi we trust
In Bitcoin we trust
In crypto we trust
In math we trust
In you we trust
如果In Coinbase you trust,那就大错特错了!
成功的匿名技术,是比特币最重大的创新,也是其最为关键的基石!
简单地说,中本聪的设计是利用密码学原理:由钱包随机生成一个私钥,唯一的私钥产生唯一公钥,这个公钥再产生唯一的地址。此流程无法反向破解。
私钥是永远不能暴露的,它也不可能被破解,否则你的资产就会被盗。
至此,中本聪采用技术手段,最终实现了他的白皮书里所说的“新隐私模型”:
如果你2月14号收到一束玫瑰,但没有任何寄件人信息并且此后也没有任何人披露证据说明是他寄给你的,那么我们说这束玫瑰是匿名的。它来自一个不想让你知道他姓名的暗恋者。
使用比特币钱包完全不用注册个人信息,因此哪些比特币地址是你的(准确地说是控制它的私钥在不在你手上),谁都不知道,因为控制钱包的私钥在应用场景中是永远不用也不能公开的。从技术上说,比特币就是匿名的。没有人知道某个地址的私钥在谁手中,就算我知道是你用比特币还了欠我的债,我也无法确定那个地址的私钥是不是在你掌控之中。
中本聪对比特币交易的加密设计,有效避免了私钥的泄露,你无法破解。
哪个地址是隔壁老王的,你不可能知道。
某人有多少钱包地址,你不可能知道。
哪些地址的私钥是多个人共同拥有的,你不可能知道。
另外:数据公开透明是保证区块链安全的最后一道屏障,综上所述,比特币抛弃了对数据进行加密这一通用的保护隐私的手段!
匿名性的目的是隔离人的“名声”造成的不良影响,剥夺任何人的特权。
比特币转账依靠的是因特网,完全没有国界限制。而且无论身处地球的哪个角落,比特币的到账时间都是10分钟,交易完成时间都是1小时。
比特币交易不受任何中央管理机构或银行的影响,完全是点对点交易(Peer-to-Peer Transactions)。
因此比特币不仅仅只是货币,它同时也是极为简单、便捷和高效的支付网络。我们都知道,今天的支付网络几乎就是全球经济的命脉。而比特币作为支付网络,可以简单到仅仅只需要一个钱包软件,无需借助任何第三方,通过电脑或手机或其它上网设备就可以实现全球无障碍点对点直接到帐——比特币这个支付网络的建设成本如此之低、效率如此之高、使用如此之方便,这本身在人类金融史上,就是一大创举!
对于在我们的生活中已经举足轻重的电子商务来说,支付是至关重要的一环。可问题在于虽说因特网没有国界,各种法定货币却都有国界,它们从来都不是全球化的,更谈不上完全自由流通,并且无论网速多块,各银行间的结算仍然需要可长达一周的蜗行时间,这就是现有的货币体系与伟大的因特网的矛盾之所在。自由、全球化、安全可靠、极低的手续费、交易完全透明、彻底杜绝欺诈、兼具众筹功能、兼具多重签名支付模式、超快捷的结算速度和微支付能力、机器自动结算……比特币及受它启发产生的其它加密货币恰好能完美解决现有支付系统里面的种种矛盾和瓶颈,并提升了支付能力、大大地拓展了支付的应用场景。其意义无疑是划时代的!
贡献:
PoW共识机制符合“劳动创造价值”这一基本价值观,容易被广泛接受。但到2024年7月我再回顾比特币最大的贡献,还是不得不感叹:金融催生了人类文字的发生发展,成就了人类经济、文化乃至各种行为治理的最底层结构。但浸润其中数千年之久,现在绝大多数人对此视而不见置若罔闻!实在太离谱了! PoW共识机制是一种典型的金融治理手段以达成人类良好协作的非常典型的案例。它不复杂,但意义重大!并且,如果不是很多很多人在中心化的世界里中毒太深,它原本具有极大的启发作用!
PoW是一种非常有效的激励机制。它也揭示出激励机制对人类协作的威力值得我们极为重视。
PoW在比特币中的细节并不完美!虽然在区块链发展的初期,它使得比特币的安全性可以维持相当长的一段时间。但请牢记:比特币的PoW工作量证明的安全性是有限的,在不久的将来,它终会因为不堪重负而崩塌!
比特币是区块链的鼻祖。
比特币没有帐户 在“2.1”对钱包和帐户的介绍里,我们会通过比特币的找零机制告诉大家:中本聪不仅非常可能是位长者,而且他的生活经验单一到他并没有5000年前伴随人类金融的萌芽而创新出的“帐户”概念。没有帐户概念,包括投资、期货等方面的金融实践就无法在人类社会中产生。
区块链发展趋势已成:以太坊的非零地址远超比特币 至2020年6月10日,以太坊非零地址超出比特币非零地址2千2百万个,大约比后者多60%的非零地址! 数据再一次证明:互联网需要的是应用,而不只是代币。
比特币发行总量约2100万枚,考虑到遗失的不断发生,以及度量衡的基本要求,可以肯定它是永远不可能达成其目标电子现金。所谓现金,本质应该是一种”通用的支付币种“(结算币种),或者说一种定价货币。而如果要成为现金,那么首先它就不能是一个固定的发行总量,否则市场的需求量增加的时候,它自身的价格就会被动摇!
矿工、矿机商和核心开发团队Bitcoin Core以及其它开发团队的矛盾不可调和(这与公地悲剧紧密相关)。比特币的技术由于领袖玩失踪导致群龙无首,以及矿业中心化等问题,自2005年起,无法达成升级换代的共识,逐渐落后。从技术上说,比特币基本已经无缘智能合约。丧失了建设自己的技术应用生态的良机,未来有可能被主流生态孤立。
比特币遭受约百次分叉劫难,共识生态支离破碎。
对于包括比特币在内的很多公链来说,安全期早就已经过去了。
NiceHash是一个大型加密货币算力市场,通过它你可以买到超过20种不同的算法的算力,这样通过在这里购买到足够的算力,就可以对一个算法一致的链发起51%攻击!数据显示2018年年中1小时攻击成本非常小。对于这些币种发起51%攻击简直易于反掌!详见figure 6。
事实上,51%攻击已经发生过,而且不止一次!
总结起来,比特币创造性地带来了去中心化和去审查的激励机制,它让人类发现了一种新的基于互联网的合作机制,但可惜的是它最终带来的仍旧是非合作博弈。
以太坊刚起步时,迫于投资者的压力也采用了PoW工作量证明。后来在Vitalik坚持下通过社区协作,转为PoW+PoS,数年后再转为PoS。我们现在简单地对比下以太坊PoS和比特币PoW的安全差距吧:
比特币的 PoW 无法抵抗51%攻击,以太坊 PoS 的破防位是三分之二,即约66.67%。
比特币的PoW工作量证明根本就没有处罚机制! 而我们知道以太坊的PoS权益证明,要求每一个验证者节点都要质押 32个ETH,也就是约85万人民币(2024年6月9日)。如果有人想用很多节点作恶,区块高度289162,验证者超过1百万个,超过总数的66.67%的节点的资金的风险将超过113亿美元。 (数据来源:https://beaconcha.in/charts/validators)
根据数据存储方式的不同,数字加密货币钱包又可分为全节点钱包、轻钱包、分层确定钱包。
全节点钱包(Full Nodes Wallet):是指包含了全部历史交易数据的钱包。多被矿工所使用。其优点是安全可靠。缺点是要下载或更新全部数据后才能正常使用,有时候的确很慢,会影响到用户的使用。
轻钱包(Light Wallet):它通过一种名为“简易支付验证”(Simplified Payment Verification ,SPV)的方式来完成交易验证。简易支付验证节点即“SPV节点”又叫“轻量级节点”,相对应的钱包就是轻钱包。SPV节点只需下载区块头信息,而不下载每个区块中的所有交易信息,由此产生的不含交易信息的区块链,比完整区块链小了很多。“简易支付验证”只是“支付验证”而非“交易验证”,所以SPV节点可以证实某个交易的存在,但不能验证某个交易不存在,这个缺陷可被针对SPV节点的拒绝服务攻击或双重支付攻击所利用。为了防御这些攻击,SPV节点往往会随机连接多个节点,以增加与至少一个可靠节点相连接的概率。
轻钱包的优点是使用快捷、占用存储空间小。随着比特币的使用热潮,轻钱包越来越常用。但对于网络有问题的人来说缺点还是更新数据太慢,加上也不是百分百安全,因此近年其风头被分层确定钱包抢走。
分层确定性钱包(Hierarchical Deterministic Wallet, HD Wallet,HD钱包):常常也被称为多层确定钱包,也曾被称为双层确定钱包。
比特币最早的客户端(Satoshi client)是分层确定性钱包。分层确定性钱包会预先生成 100个随机私钥(对应于100个公钥和100个地址),并且每个私钥只使用一次。每个交易使用一个地址的概念是中本聪提出的。如果交易比较频繁,私钥可能很快会用光,然后再产生100个随机私钥,所以每次完成 100 个交易后,你必须备份钱包的wallet.dat文件,否则可能会丢失资产。这就意味着这个钱包必须被经常性地备份。每个私钥都必须备份,否则一旦钱包不可访问时,就可能无法找回钱包。这种钱包难以管理和备份,经常发生有人清空钱包app的缓存和数据,然后资产全数丢失!
分层确定性钱包则无需每次转账后都备份。它的私钥是对种子密码(Seed,一串由随机数生成器生成的随机数)进行单向哈希运算生成的,在分层确定性钱包中,只要有这个种子密码,就可以找回所有私钥,因此备份了种子密码就相当于备份了您的所有资产,所以它非常方便使用。
分层确定性的概念是根据比特币核心开发者Gregory Maxwell的原始描述和讨论,Pieter Wuille在2012年2月11日整理完善通过BIP32提案提出。但它直到2016年6月15日才被合并到Bitcoin Core,目前几乎所有的比特币钱包服务商都整合了该协议。
BIP32 是HD 钱包的核心提案,通过种子密码来生成主私钥,然后派生海量的子私钥和地址,但是种子密码是一串很长的随机数,不利于记录,后来BIP39用算法将种子密码转化为一串助记词 (Mnemonic),方便种子密码的保存。再后来BIP43对BIP32树结构增加了子索引标识purpose的扩展“m/purpose'/ * ”。最后,BIP44在BIP43和BIP32的基础上增加多币种,通过分层确定性钱包派生多个地址,可以同时管理主网和测试网的比特币,BIP44 提出了5层的路径建议,如下:
m/purpse'/coin_type'/account'/change/address_index,
BIP44的规则使得HD钱包非常强大,用户只需要保存一个种子密码(12~18个英文单词),就能控制其钱包里的所有币种。
比特币分层确定性钱包实现机制:
1. 生成一个助记词(BIP39)
2. 该助记词使用PBKDF2转化为种子(BIP39)
3. 种子用于使用HMAC-SHA512生成根私钥(BIP39)
4. 从该根私钥,导出子私钥(BIP32),其中节点布局由BIP44设置
可以看出 BIP39 生成助记词的过程非常重要,早期的HD 钱包助记词是12个单词(现在有的钱包已经增加到18个单词),一共有 2048 个单词可能性,根据这个公式“_n!/( n - r )!”_我们可以计算出随机生成的助记词所有可能性:
2048!/(2048-12)! = 5.2715379713014884760003093175282 e+39 。
地球上的沙子数量在大约是1 后面 18 个零。如果你可以每秒生成 一百万个助记词,那么一年可以生成 1000000*60*60*24*365=3.1536e+13,你大约需要 1.6715937e+26 年遍历以上所有助记词!
以太坊的EIP85提案HD钱包的路径为 : m/44'/60'/a'/0/n
a——表示帐号
n——第 n 生成的地址
60 是在SLIP44提案中暂定的补充协议,对应的币种就是ETH,因为BIP44对币种只定义到0 – 31。
以太坊各钱包的具体实现如下:
m/44'/60'/0'/0/x——imToken(可自定义路径),MetaMask,Jaxx,MyEtherWallet,TREZOR,Exodus
m/44'/60'/x'/0/0——KeepKey,MetaMask
m/44'/60'/0'/x——Electrum,Ledger Chrome App,
m/44'/coin_type'/account'/0——Coinomi
发展到这结束了嘛?
并没有。
你可以调查下是否还有其它相关的技术标准。
百年难遇的人类文明的革命
2022年我们达成的一个伟大的共识是:成功有个常被忽略的元素叫勇气。当我们鼓起了勇气,我们就可以无惧面对落后的文明和数不清的野蛮人——在当下这个大时代勇气能够助你做出正确的选择!
2023年4月,我惊喜地看到台湾的年轻人也行动起来了。柯文哲先生极有可能引发我们对人类社会治理的一些重要的讨论。而此前的乌克兰反俄罗斯侵略的战争,和此后的以色列的消灭恐怖组织哈马斯的战争,也意味着全球的文明人不得不仓促间发动一场消灭邪恶势力的总决战。
而所有这些,居然都与区块链息息相关!
我自2017年开始,以自己的实践为基础,精心编写入门区块链必读的内容,且每年都不断修订。这就是本教材的来历。Gitbook的编辑器对中文的支持很糟糕,PDF导出的福利又突然被取消(Gitbook能给我们免费的服务已经够好了),VPN偶尔会崩溃等等,加上这个该死的动荡不安的时局,我的工作也确实很不容易。
如果你想以最短的时间了解区块链,那么我的《区块链入门极简版》无疑就是最佳的选择了。
这是我本人发起的人类新文明的治理项目:道易程。道易程构建出一个继承了比特币的PoW工作量证明的治理思想的新的治理共识:PoV价值证明。目前看,它将构建出一个良好的投资市场(我称之为“良好的通证经济”),同时它也是区块链公共应用即智能公器发展的基石!但其实它目标远大,在创新中将会在出世的第一天就锻造好人类文明的治理基金(Hayek UTO Fund),然后随着以太坊和AI的发展,其治理共识PoV价值证明将为人类的福利和广义上的“劳动”(或者马克思哲学思想里所说的实践即Pracxis)提供最直接有效的解决方案(如果你感兴趣,请联系微信:aranna_0572、Telegram:@aranna0572。也欢迎通过Discord加入我们!
如果你急于了解技术上的解释,请点击此处。
最朴素的解释是:区块链始于一场技术革新,其本质即为金融革命,因此也必将引发一场声势浩大的全面而彻底的人类社会革命。它的指向是马斯克哲学思想所预见的共产主义。
既然是波澜壮阔的人类社会革命,那么就有必要俯瞰下人类文明的发展概貌:
以色列历史学家尤瓦尔·诺亚·赫拉利(Yuval Noah Harari)在《人类简史》中说:
“可以说智人主要是一种社会性的动物,社会合作是人类得以生存和繁衍的关键。”
他还指出:
“人类语言真正最独特的功能,并不在于能够传达关于人或狮子的信息,而是能够传达关于一些根本不存在的事物的信息……‘虚构’这件事的重点不只在于让人类能够拥有想象,更重要的是可以‘一起’想象,编织出种种共同的虚构故事,不管是《圣经》的《创世纪》、澳大利亚原住民的‘梦世记’(Dreamtime),甚至连现代所谓的国家其实也是种想象。这样的虚构故事赋予智人前所未有的能力,让我们得以集结大批人力、灵活合作。“
简而言之:人类学会了虚构,以达成更复杂、更高效的合作。
这很容易让我们想到人类最重要的虚构成就之一宗教。“我们可以说宗教是‘一种人类规范及价值观的系统,建立在超人类的秩序之上。’”
简单地说,希腊神话虚构出具有种种道德法则和道德秩序的诸神世界的目的,是为了让人间的秩序有神圣的保证!宗教在非强制的前提下,通过虚构建立起人类的行为规范——这是一个基于共识的治理手段。
但宗教共识没有强制性,只能依靠自觉遵守,其约束性是很有限的。人类社会更复杂、更高效的合作,或者说人类高阶文明的发展,毫无疑问有赖于更强大的治理机制!
因此人类开始了对其自身治理的不断的探索。
现在普遍认为公元前3200年左右的苏美尔人的楔形文字是世界上最早的文字,记录的是经济交易。这也就是说,楔形文字是古代会计制度和契约的一个副产品。第一份抵押、契约、贷款、期货合同、合伙协议和信用证都是以楔形文字文件的形式出现,可以追索到公元前2000年或更早。此后不断发展,终于在公元前5世纪至4世纪时的古希腊,出现了契约论。三千年前的西周第六代国君周共王时期,也诞生了中国历史上最早的合同——这可以说是超越宗教的契约文明全球化的实锤吧。
所以,文字即是因应契约文明的需要而产生的。它始于“金融”类契约的需要。
易中天先生在多个场合讲解过起源于西亚的契约文明,你可以搜索其视频仔细看看。契约文明的大致脉络如下:
人在物质财富(包括金钱和资产)及其融通方面形成的诸多契约构成了金融——譬如易中天提到过的这一说法:“如果要人人精神平等,也就是每个人都具有独立的人格和自由的意志,就必须要有私有财产神圣不可侵犯这个契约。”由此可见财富契约的重要性!而关于一切有价物的所有、使用、租借等等方面的契约集合,就是金融。由此又可见,金融革命必然最终引发一场全面的人类社会的革命。
人和人平等相处形成良好的社会靠的是法律这个契约。
人跟大自然的契约是科学——很显然你不能因为不同意某个大科学家的学术观点或者质疑他的实验数据的分析方法而把他告上法庭。同理,新冠疫苗怎么研发怎么迭代怎么应用,应该交给科学这个契约来处理。残酷的事实却是疫苗的应用被很多国家的政客越俎代庖,造成全球范围巨大的合作障碍,以及非常广泛的滥用。这个小小的病毒已经让人类蒙受了巨大的损失。
第四个契约是人跟上帝签订的契约,它的名称叫道德。这意味着只有上帝有权评判和惩罚违约者。如果有人挟上帝以令他人,披道德之衣置他人于死地,那么你必须明白:这个混蛋非魔即鬼。
契约文明早已经是当今人类社会的主流。值得注意的是,政治是部分人治理国家的行为,它基于一群政客的共识,或者说它是权力中心化的一种方式,但不是一种普适的文明契约——让它凌驾于其它契约之上,是人类社会治理的严重缺陷,但也有人类社会发展的历史必然性。
值得一提的是,人类迄今为止所创建的所有“文明”,都是非常严重的异化体。马克思的哲学思想揭示,我们甚至还处于人类文明的史前时代!
所以,我们曾认为互联网能够消除人类所有的隔阂和偏见。几乎所有人都以为人类已经走过蒙蛮时代,但尴尬的是,所有的网络媒体,从Facebook到Twitter到微博到微信到TikTok再到假模假样声称要纳入ActivityPub协议的Treads,无论是采用公司治理策略还是国家治理策略,都无法还互联网以朗朗乾坤。甚至哈马斯恐怖组织的暴行,都无法唤醒全球各地无数人的良知——包括多国首脑和联合国高官。
中心化权力是野蛮人生存的沃土,是人类异化的力量,人类世界以中心化权力构建起来的治理体系,从权力体系到司法体系,都该被彻底革新了!好在,当前我们正在经历的乱象,就是资本主义穷途末日的表现。而一旦你注意到区块链的本质之一是币(通证)的匿名,结合抗审查、自运行的智能合约,我们就能洞见正在蓬勃发展的人类文明的一次重大升级:从中心化治理迈向去中心化治理!
所谓区块链革命,就是人类的中心化文明向去中心化文明的一次伟大的升级,是我们迈向马克思哲学思想中真正美好的人类社会即共产主义的伟大实践(praxis)。
2017年智能合约的应用爆发后,我马上意识到 AI 公共化的基础已然落地,区块链将是 AI 应用最好的拍档。
这也就意味着:区块链将会携手AI成为契约文明一统天下的终极手段!甚至我可以笃定,区块链+AI 是我们即将迎来的更高阶人类文明即共产主义的治理基石!
至此,我们才能明白为什么比特币创始人中本聪从一开始就把区块链搞成了匿名世界!换句话说,靠谱并且更为先进的治理手段,就是区块链发展的关键。人类文明的去中心化治理方案,除了依赖于区块链的各种治理协议之外,恐怕还需要AI的参与才能闭环——这不只是因为 AI 智能带来的效率,还有个重大的原因是只有 AI 能够帮助人类在区块链世界建立可靠的对作弊成性的人类的管理。
如果你是九零之后,那么区块链之于你,就像2000年的互联网之于你父母。因此,不管你的基础如何,我都强烈建议你积极follow区块链,不管时局多么艰难都不要放弃,因为“区块链时代”是属于你的时代,当仁不让,就应该是你的态度——其实也是这个时代赋予你的职责!请记住德国神学家朋霍费尔(Dietrich Bonhoeffer)的话:“行动不是来自思想,而是来自一种承担责任的意愿。”
相信我,区块链既然是一场指向共产主义的金融革命,它就不可能不给人类带来人生红利!
区块链同样适合更早年代的所有人,不过要注意几点:
区块链还在发展的早期阶段,既不成熟也还纷杂,知识的快速更新将是常态,持之以恒才能保证它给你带来收获。
你要依靠自己构建区块链知识体系。交流是必不可少的,但一味地人云亦云、随波逐流只会让你迷失在信息茧房甚至投机泡沫里。
区块链的基础是去中心化,它与你所处的现实“背道而驰”,会给你带来重重矛盾——对不少人来说,要解决自己的经验带来的惯性思维,寸步千里!甚至还可能因认知失调而产生焦虑等压力!但不解决这一困境,你就无法参透区块链真正的奥秘!
这是一个技术颠覆的大时代,区块链的应用不是孤立的,它必然会与AI、量子力学、基因编辑等等密切关联。你们的头顶只有巨人而鲜有竞争者,但往下看看,你们的弟弟妹妹还会给你几年时间?!
苏格拉底说:美德即知识。
以太坊官网:https://ethereum.org/
道易程:DAism.io
Fellowship of Ethereum Magicians:https://ethereum-magicians.org/
登链社区:https://learnblockchain.cn/
以下是我深圳大学本课程里使用的全部幻灯:
这本教材,也是深圳大学的相关课程的教材。同时开源的还有《Solidity智能合约开发》课程教材(2018~2019年版)。
欢迎协作(包括评论、提问、建议等等)。点击页面左下角的Gitbook链接,登陆后(建议先注册个Github账号,这样本书的所有资源都可以通过它直接授权注册登录),即可参与协作。协作完全是开源的,协议请查阅本文尾部的声明。
同时也欢迎读者有任何想法,随时点击下面的图标链接,与我们分享和讨论:
作者(暨课程主讲老师、道易程联合创始人):
特别感谢:
黄烁萍
谭粤飞(《Solidity智能合约开发》课程老师)
张华
《区块链概论》遵循开源协议Creative Commons Attribution 4.0 International Public License (CC BY 4.0)
This textbook is licensed under a Creative Commons Attribution 4.0 International Public License (CC BY 4.0)
捐助自然道大学
(暂停)
《马克思哲学革命及其当代意义》(复旦大学哲学院王德峰教授)
《观念经济学》课程(黄江南教授的哔哩哔哩空间、YouTube频道)
《千年金融史》(副标题:金融如何塑造文明 从5000年前到21世纪)
《写给大中华年轻人的公开信》我在热门话题山河大学爆发前几天动笔写的。
快樂營利社會企業 For-profit Social Enterprise
《苦难的时代:美国奴隶制经济学》[美] 罗伯特·威廉·福格尔,等(Robert William Fogel)
《重要提示 - 面对奥密克戎我们应该做什么?》(周朝晖、Fiona,2022年2月26日)
《孤勇者》(陈奕迅)
《一无所有》(崔健)
《中国孩子》(周云蓬)
《存在》(汪峰)
《春天里》(春天里)
《父亲写的散文诗》(李健)
区块链源于比特币技术。虽然比特币已经被以太坊超越,并且我也认为因为中本聪的失踪,群龙无首,导致比特币无法继续更新换代,已经走到了尽头。但《比特币白皮书》仍然是值得我们仔细研读的文献!
比特币白皮书(PDF)只有九页,真正一次就能看懂的人不多:
如果白皮书没有显示出来,请点击此处访问。
这是早期翻译版本。我个人认为标题的翻译更为准确:
美国时间 2011 年 4 月 26 日,比特币创始人中本聪(Satoshi Nakamoto)向其他开发人员发送了最后一封电邮,并在信中明确表示,他已经将专注力“转移到其他事务上”,同时交出了他用来发送全网警报的加密密钥。
最离奇的是,无论地球人怎么努力,十多年了都无法找到中本聪。
中本聪的离开,也许只是为了证明比特币是个匿名世界。你知道他用过的钱包地址,但你无法知晓其实名——十几年的今天,绝大多数人还没明白这一点,更不懂得它的重要性!
这是中本聪发出的比特币上线的第一个版本的通知:
由于后来接手的开发团队擅作主张,该通知里的源码链接的页面,已经没有了源码!这意味着我们这个世界现在已经失去了比特币第一个版本(bitcoin core 0.10.0)的开放源代码。对此官网也没有任何说明。这意味着什么你可以深思下。
官网里的bitcoin core 0.10.0是一个被污染的版本:
比特币的第一个版本是中本聪写的(当然在很多技术问题上他求助过高手)。嗯,比特币可以说是一个人利用互联网的开放性干出来的。未来十年,将有很多dApp(区块链去中心化应用)都会是由迷你团队甚至一个人独立开发。等你深入了解到智能合约的可自由组合性,你自然就会明白。
区块链钱包其实就是你的私人银行
本文首发于“”。这里只节选了部分内容。
请注意:imToken等手机钱包的安装也都大同小异。
Trust Wallet同时支持安卓手机和iPhone,通过Google Play或者苹果应用商店iTunes Store(App Store)安装即可。BTW,国行iPhone请换安卓手机除非你已经……
如你的安卓手机无法访问Google Play,请去官网直接下载apk文件安装钱包。
手机访问:
第一步:官网下载
下载后直接安装。
当然如果通过Google Play就更简单了:
(什么情况……知道我最近长膘了吗……)
第二步:创建新钱包
请准备好纸和笔
最好写下你的种子密码(助记词),因为现在它禁止你截屏!
以下是我拍的照片,没有美颜相机……
下一步是测试你有没有记下你的种子密码(助记词)。它会让你按顺序排列出12个单词,因为无法截屏我也懒得拍照……你自己看着办吧。
钱包创建完成,你一定要记得把刚才记录的助记词放到一个安全的地方(譬如防火的保险箱)。
启用通知有个好处,如果钱包收到ETH,或者某些与智能合约相关的操作完成了,会通知你!
第二步:ETH相关的收币、地址复制、二维码收款、发币操作
请自行摸索,或者Google下其他人的教程。
你甚至可以通过Visa卡购买ETH,这是有限额的,只能买一点点。
点击钱包最下方有点像“纪梵希”的四个方块:
你可以选取你想要使用的dApp,你也可以输入网址直接访问应用。
详见“EIP-2938”。
天下没有免费的交易
交易(Transaction)是由帐户发出,带密码学签名的指令。 帐户发起交易即可更新以太坊网络的状态(State,就是我们常说的数据)。
最简单的交易是将 ETH 从一个账户转到另一个帐户。
例如,如果 Bob 发送 Alice 1 ETH,则 Bob 的帐户必须减少 1 ETH,而 Alice 的账户必须增加 1 ETH。 此项操作发生在交易中,会变更状态。
和比特币一样,以太坊交易需要收费并且必须开采才能有效。我们常将交易手续费称为 Gas,将记账流程称为挖矿。
所提交的交易包括下列信息:
recipient
– 接收地址(如果为一个外部持有的帐户,交易将传输值。 如果为合约帐户,交易将执行合约代码)
signature
– 发送者的标识符。 当通过发送者的私钥签名交易来确保发送者已授权此交易时,生成此签名。
value
– 从发件人向收件人转移 ETH 的金额 (以 WEI 为单位,ETH 的一种面值单位)
data
– 可包括任意数据的可选字段
gasLimit
– 交易可以消耗的 Gas 的最大数量。 Gas 单位代表了计算步骤
maxPriorityFeePerGas
- 作为矿工小费包含的最大 gas 数量
maxFeePerGas
- 愿意为交易支付的最大 gas 数量(包括 baseFeePerGas
和 maxPriorityFeePerGas
)
更多内容请见:
Gas 本指在以太坊网络上执行特定操作(包括简单的代币转账)所需的计算工作量。由于用户必须为此计算支付费用,所以 Gas 又常指成功进行交易发起请求的用户所需支付的费用,即交易手续费。
Gas = gasLimit
* gasPrice
以下是以太坊交易计费设计的基本原则:
以太坊手续费被称为Gas。Gas就是矿工记账收取的ETH的数量。这也就是说,Gas 费用是以太坊的ETH 支付的。
Gas = Gas Price(一般标示为Gwei的数量) * Gas Limit
以太坊每个区块所消耗的总Gas Limit是有限的(但会随着以太坊性能的提升而阶段性增长)。请注意每个智能合约将消耗的Gas Limit通常小于以太坊的总Gas Limit,反之你将无法操作(部署和调用)这个智能合约。
你可以预判你将要操作的一个或一组智能合约的Gas Limit和Gas Price。事实上没有人会自己计算Gas Limit的大小(软件会帮你预判,此时它叫start gas,并且很容易理解通常预判的start gas大于实际所需),加上矿工通常会优先为慷慨的手续费支付者服务,如果你担心操作不能顺利完成,那么通常就应该调高Gas Price也就是Gwei的数值,而支付更高的手续费给矿工。
如果一项操作成功全部执行。实际消耗的Gas Limit往往比最初设定的要少, 假设gas_rem 是其所剩。在交易结束的时候系统会返还gas_rem*gas_price 数量的ETH到交易发起者的账户。矿工实际收取的交易手续费则为(start_gas-gas_rem)*gas_price 数量的ETH。
如果一项操作在执行过程中发现耗尽你支付的Gas还不够,那么所有执行的操作都会回滚,但消耗的资源仍然真实有效,已经发生的交易费用将被转账给矿工。 这就是我们通常所说的操作被取消(或者支付失败),但手续费还是被扣了。
当一个智能合约向另一个智能合约发送消息时,它也可以选择设置Gas Limit,这些Gas用于支付由该消息引起的调用。如果在调用执行完成前Gas不够,则该调用状态会被回滚,但Gas仍然被消耗掉了,即你将损失掉手续费。
和智能合约交互时将消耗的 Gas Limit 又叫做执行成本(Execution Cost),它是根据你的智能合约代码被自动计算出来的。
这不是一笔转账交易,而是用户与某个合约交互而产生的手续费。其 Gas Price 为0.000000121728588401 Ether ,或者说121.728588401 Gwei。
请注意:以太坊交易手续费,采用了竞价模式。矿工会优先处理出价高的交易请求!
还有,EIP-1559提案改变了手续费的算法,但因为它是一个过渡阶段的改变,在此就不做详细介绍了。
我们要清楚即使是交易,比特币和以太坊都相差甚远:
如果不拥堵,比特币交易(转账)的手续费可以很低,可以相当长的时间内没有什么变化,并且还可以每笔转账的手续费的差别都很小。因为比特币只要以转账所占用的账单字节数决定手续费的多少就行了。
以太坊的情况则要复杂很多,以太坊有外部账户(Externally Owned Accounts,EOA)和合约账户(Contracts Accounts,CA)两种账户。这意味着有些转账和比特币一样,是外部账户点对点的转账。这种类型的交易手续费同样可以很低而且相当长的时间内没有什么变化。而更多的以太坊手续费,是与其中大量的合约部署和调用有关的——将这种情况称之为“操作手续费”而不是交易手续费,其实更贴切些,但为了和上一种情况统一,我们仍然称之为交易手续费。很自然的,此时以太坊的交易计费就需要考虑与智能合约的部署和运行相关的很多资源的消耗,包含带宽消耗、存储消耗、计算消耗。这些资源都需要以太坊节点提供,和比特币相比,它就不能只考虑记录的数据量的多少。智能合约操作手续费往往大大高于外部账户点对点的转账。
比特币和以太坊的交易手续费的计算不光相差甚远,而且由此可知:比特币以每个账单的大小限制每个区块。以太坊以一个代表带宽消耗、存储消耗和计算消耗的总和的Gas Limit,来限制每个区块所用的资源——或者说,来保证以太坊始终能够让其承载的智能合约都自如地得到应用。
比特币和以太坊,显然不在同一个维度上。
阅读参考:
电脑钱包实际上也分两种:浏览器钱包和app钱包。
你的电脑必须先安装Chrome或者Firefox浏览器。360浏览器因为采用了Chrome的核心也可以。
准备好笔和纸。别说我老土,不要只用电脑备份助记词!更不要用手机拍照保存助记词,不要用任何app记录助记词。如果纠结的话你就去网购个保险箱,我是认真的,哈哈哈……
Chrome或者Firefox浏览器的安装流程大同小异,以下主要以Firefox为例。
安装浏览器插件当然在浏览器里面就可以,有的人会建议你去官网,这样当然也可以……
一分钟的事,你要加油哦!
第一步:点击浏览器右上角
第二步:搜索MetaMask
第三步:点击MetaJask插件名称
第四步:添加MetaMask到Firefox
第五步:浏览器右上角可以看到MetaMask图标了
第六步:创建钱包并接受协议
第七步:创建钱包,但从现在开始就要拒绝把密码交给第三方保管
第八步:拿出你的笔和纸,备份种子密语(又叫种子密码、助记词)。不备份是无法进行下一步的。
第九步:确认种子密码(助记词)
第十步:钱包安装就绪,准备开启你新的人生
谷歌浏览器里安装MetaMask钱包和火狐浏览器基本一样,一分钟的事。你要加油哦!
第一步:点击浏览器右上角?不,我讨厌谷歌浏览器迷宫一样的浪费时间的扩展管理操作!请直接输入以下网址:
为什么钱包里面都英文?这是一个全球化时代,经过很多年的自废武功,中文已经支离破碎,还是学会看一点英文吧——反正你很多时候没得选择。
固定MetaMask插件到浏览器右上角。
如何保存私钥?
“中神钱包”是一种数字资产硬件钱包,代码没有开源,有“美国FCC认证”标识,请评价其安全性。
请评价浏览器钱包Metamask的优缺点。
请在手机上安装一种多币种钱包,并编写一个简单的安装与备份的使用指南。钱包试用推荐:
手机钱包pillar. 、Trust Wallet、imToken国际版、WallETH钱包(只有安卓版):
纸钱包Ethaddress
奇葩钱包(官方自称为智能钱包Smart Wallet)Argent(
多币种钱包Coinomi或Jaxx Liberty
请查阅资料,详细解析以太坊的多重签名的应用,并与比特币的多重签名进行优缺点的比较。
下载、安装并试用Status钱包:
Status是一款融合了P2P消息、去中心化加密货币钱包以及Web3浏览器于一体的多功能通讯工具。
必须遵照其要求备份私钥助记词和仨交易签名单词!出现任何漏洞都可能会让你的资产受损。
钱包是区块链的入口,你还不下载一个?
百度百科云:钱包,顾名思义是装钱的包包。
什么是(区块链)钱包?
区块链钱包(以下简称钱包)是让人们能够管理自己的区块链账户,并且与去中心化应用(dApp)交互的工具软件。
显而易见:钱包是区块链的应用入口。
也许你已经注意到,每个公链和每个dApp(去中心化应用),都至少拥有一种具有货币属性的专属通证(token)。我们通常把这个具有货币属性的通证叫做代币。代币有多种作用,譬如安保、奖励、估值等等。将会有详细的介绍。
具体到日常应用,当我们将智能合约部署到以太坊,我们需要通过钱包从自己的账户里支付gas(手续费)。当我们到一个去中心化交易网络里交易代币的时候,我们既需要钱包从自己的账户里转出要卖出的代币接收要买入的代币,还需要用钱包从自己的账户里支付完成这些操作的gas(手续费)。这就是说,在我们使用每个公链和每个dApp的时候,常常需要动用到代币。由于代币是在我们的账户里,要通过钱包才能动用账户,因此这些操作就常常需要钱包才能完成。
大多数区块链钱包都非常像银行,它管理的是你个人的,多个人的,一组或多组人的账户,并且一个人可以在一个钱包里生成、导入并使用多个账户。
但与银行不同的是,钱包和账户并非绑定关系:一个账户可以在多数钱包里使用。你也可以在一个钱包里,拥有任意多个账户。
还有:没有人能够冻结你的账号,撤销你的转账,也没有消费限额……并且无论对方在地球的哪个角落,转账的确认时间都与地域无关。
根据载体的不同,区块链钱包分为计算机钱包、手机钱包、浏览器钱包、硬件钱包、纸钱包和脑钱包等等,这样不管您使用的是何种设备,或者有什么样的需求,都有配套的钱包供您使用。
其中脑钱包因为实际使用时安全性太低,基本已经被淘汰。
硬件钱包是为了离线生成和保存私钥,是目前“公认”比较安全的代币存储方案。代表品牌有、、、。
浏览器钱包的代表为Metamask、Jaxx。
手机钱包的代表为Trust Wallet、MetaMask、imToken、TokenPocket。
因为使用方便、用户群体大,手机钱包已经成为主流。计算机钱包的特点则刚好相反。
以太坊的账户模型则跟我们通常所理解的账户概念是一致的。
一个以太坊帐户是一个可以拥有 ETH 或其它通证余额的实体,可以在以太坊上发送交易。并且其中的通证包括但不限于代币。
帐户可以由用户控制,也可以作为智能合约部署——这样以太坊便有了两种类型的账户:
外部所有账户(常被简称为外部账户。Externally Owned Accounts,EOA):人类常用的存储自己的通证的账户。外部账户由私钥(或者说私钥的所有者)控制。
合约账户(Contract Accounts,CA):部署到网络上的智能合约。它是只受智能合约代码控制的账户。
这两种账户都能:
接收、持有和发送 ETH 和通证(token)。
与已部署的智能合约进行交互。
外部账户
创建帐户是免费的
可以发起交易
外部帐户之间只能进行 ETH 和通证交易
由三部分组成:地址、公钥和私钥。公钥和私钥是一对加密密钥,它们联合控制帐户的活动。
合约账户
创建合约存在成本,因为需要使用网络存储空间。
目前只能在收到交易时发送交易。
从外部帐户向合约帐户发起的交易能触发可执行多种操作的代码,例如转移代币甚至创建新合约。
合约帐户没有私钥。 它们由智能合约代码逻辑控制。因为合约代码就是合约账户的组成部分,你可以理解为合约账户目前是由外部请求驱动的,根据代码逻辑和状态(数据)自运行的账户。
以太坊账户通常是以上四个部分的复合体。
首先,你的各种“币”,都在你的钱包地址里。你给某个地址转账时,钱包会动用你的私钥对交易进行签名,在公钥的配合下广播这笔交易。
私钥固定长度为256位,使用十六进制表示就是64个字符:
6954ac6d0402d7239f1cc150da224d0ef08fd1226f245f06fe4d6d68accfce8a
你可以使用硬币随机挑选你的私钥:投掷硬币256次,得到可以在以太坊钱包中使用的随机二进制数字作为私钥。那么恭喜你,你就是个书呆子。好消息是,书呆子们正在颠覆旧世界。
私钥貌似足够安全,但实际应用中总是有人会自作聪明犯下大错:
比特币和以太坊获得私钥的技术手段都是类似的;之后使用某个椭圆曲线算法将私钥转换为公钥,公钥再通过哈希算法和Base58Check编码转换得到地址。
有了某个地址的私钥,您才能使用它收款或转账。
那助记词又是咋回事呢?
更多参考:
在区块链里私钥至关重要!它解决了其它一切手段都望而却步的怎么证明“你妈是你妈”的难题。对于你自己的资产,你毋须证明,因为私钥在你手上,其它任何人都休想能染指你的财产。这个世界从此少了很多被他人巧取豪夺、打家劫舍、掐尖落钞的烂事。
在日常交易中除非使用纸钱包,否则您通常并不用操心私钥公钥是什么,只要懂得使用钱包转账就足够了。
地址是一串很长的字符串,譬如这是某人接受比特币打赏的地址及其二维码:
1KorAWmhGaEnedUviL4rXPfsrHCB7ZVFoB
0xf69451503E7EaEc6fe82E1129316104D2458010a
对于私钥,我们要先牢记四个简单的区块链基础逻辑:
私钥是不可能被假冒的。
私钥是完全私有的密钥,它应该自始至终都密不示人。因此在通常的支付场景下,你永远不应该出示你的私钥,你顶多需要使用私钥对你的转账进行签名—— 这个流程一般是钱包自动帮你做的。
谁拥有某个地址的私钥,谁就是该地址上的那笔数字资产的主人。
这是一个将人匿名的零知识证明!说明区块链应该坚持匿名原则!
零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。
钱包与账户或者某个地址(严格地说是私钥)没有绑定关系,一个账户可以在多数钱包里使用。
验证者密钥
以太坊还有一另种类型的密钥,它们是在以太坊从工作量证明过渡到权益证明共识时引入的。 它们是“BLS”密钥,用来识别验证者。 这些密钥可以有效地聚合,减少网络达成共识所需要的带宽。 没有这种密钥集合,验证者的最小质押金额将会高出许多。
合约账户没有私钥公钥这些累赘,它只有地址,以及它自己的合约代码。
它的产生是这样的:首先你要写好合约代码,然后将合约部署到以太坊主链,部署过程中以太坊主链会根据随机算法给你的合约生成一个唯一的地址。
合约账户的地址也是42个字符组成的十六进制地址。
nonce:外部账户为交易次数,合约账户为创建的合约序号。
balance:该地址的以太币余额。
storageRoot:账户存储内容组成的默克尔树根之哈希值。
codeHash:账户EVM代码的哈希值。外部账户为空字符串的哈希值,合约账户为合约代码的哈希值——请注意只是合约代码的哈希值。以太坊智能合约部署后会创建一个合约账户,合约账户里保存着智能合约的编译之后的可执行字节码(在EVM里执行),并且有存储空间,合约能对合约账户的空间写入信息。
它最早的目标是将两类以太坊账户抽象为一类,让合约账户也可以和外部账户一样支付交易费和执行交易。之后六年逐渐演化,发展出比特币无法企及的伪交易对象!
这也就是说,以太坊正在试图模糊两类以太坊账户的界限。2020年年底以太坊创始人V神等几个人发起了技术提案Acount Abstraction(EIP-2938),其核心“账户抽象”的目标是让智能合约成为顶级的账户类型,而非受限制的必须由外部账户调用的账户,这样合约账户就可以主动发起事务并支付手续费。这也就是说,没有了人类之手,区块链dApp一样可以在其它外部条件的触发下,自行启动其它操作,包括主动与其它合约交互!这一提案,非特斯拉的自动驾驶可以相提并论,意义深远!
账户抽象化实现后,因为合约帐户将能自主触发可执行多种操作的代码,譬如创建新合约,那么结合 AI ,对其应用我们就有了极大的想象空间。这一技术创新将给人类社会带来巨大的变化!
比特币并没有所谓的账户。
比特币转账和以太币转账不同的是,它会将全部数量的比特币从某个或某几个地址发送出去,将需要支付的数量打到收款方的地址上,并将剩余的比特币打回到自己的一个新地址亦即“找零地址”上:
比特币的这个模型叫UTXO模型。UTXO英文全称为:Unspent Transaction Output,翻译为中文为“未花费交易输出”。理解UTXO最简单的方式就是类比我们平时使用的纸币:支付是交易输入,收款是未花费的交易输出。
“找零地址”在一些新版钱包里可自行设置,或者自作主张已经默认为原地址。但中本聪显然不建议置为原地址,他认为那样不安全,也就是不利于保护隐私。
同样因为比特币可以被跟踪,每次转账都需要向对方出示公钥和地址,为安全起见,比特币建议每次支付的时候,也都使用新的地址(实际上私钥、公钥和地址就全部换新了)。
比特币的UTXO模型的优点:
隐匿性比较强,理论上可以为每一笔输出设置一个地址。
无需维护余额等状态值。
UTXO是独立数据记录,可以通过并行极大的提升区块链交易验证速度。
无需关心事务问题,只需要关心输出脚本即可。
UTXO无法分割,每次交易都需要多个输出,分别为支出与找零。
账户模型的优点
可快速获取账户的余额,而比特币需要将指定地址所拥有的所有UTXO中的未花费交易总值整合。
节省记账空间,因为每笔交易只有一个输入一个输出。
可以较容易的实现图灵完备的智能合约——这一点,让以太坊已经拔高一个维度,超越了比特币的电子现金的定位,对于区块链的应用发展意义非凡!
通过近年来AI技术、量子技术、常温超导技术、区块链技术等的涌现,我们意识到接下来二三十年人类有可能进入一个科技的颠覆期!
对区块链的发展来说,充满了无数的机会。但对区块链的技术创新来说,同时也就意味着有无数的失败!
难以置信,对吧?
比特币只是利用加密算法,实现了将人匿名的手段。
未来我们还需要接受挑战,用抗量子攻击的算法升级现有的匿名算法。
以上第二步未必能够顺利达成。
人类社会的财富概念,可能也会被颠覆!
在全球化不断深入的未来,迫在眉睫是,我们要尽快摸索到人类福利体系的创新解决方案!
对年轻人来说,区块链就是很热血的行业!
Just do it!
这部分内容的技术细节请阅读:。
那么怎么交易?这是中本聪在里的描述:
我们可以看到,在用户提交交易时,地址和公钥都会被记录到账单中,但不需要直接出示私钥而只要用私钥通过一个加密方法对交易进行——总之私钥是没有暴露的。
应用为王:已经被以太坊“升维”碾压。 以太坊始于2014年,它带来了区块链的第三大硬核,即几乎可以开发一切应用的智能合约。到2020年5月底,以太坊上的应用总数超过了4千个。你可以随时查询到当下的数量: 八年后的2022年,比特币仍然缺乏可开发应用的智能合约,而这八年里,以太坊的生态已经无比丰富——区块链最重要的技术创新和应用创新,几乎都出自以太坊的生态。 简而言之,区块链的未来寄希望于以太坊,而绝不可能是比特币。
矿机与矿池的中心化——对于比特币而言,PoW的收益取决于所拥有的算力(或者说矿机的性能)。算力越高,抢得记账机会就越多。这毫无疑问,会带来长期激烈的竞争,其结果必然是一两家矿机垄断市场。全球最大的矿机制造商、成立于2013年底的比特大陆目前垄断70%~80%的硬件,提供约50%的算力。除此之外比特大陆的主营业务还包括矿场、矿池及云挖矿服务。 长远来说,矿机的中心化必然会影响到其它方面。 2018年某日三大矿池算力占比分别是BTC.com19.4%,ViaBTC 15.1%, AntPool 12.6%;2024年12月8日三大分别是foundrydigital.com 29.5%,AntPool 19.9%,ViaBTC 13.7%! (查询最新数据:
公地悲剧——PoW造成能源浪费直至环境威胁,以及比特币生态内的恶性竞争。 PoW必然造成矿工从一开始就展开矿机算力的竞争,而且这一竞争没有终点。这就会导致比特币记账所需的能耗永无止境! 2018年比特币挖矿的用电量,即远远超过全球所有电动汽车的用电量。并先后赶上阿根廷、奥地利等国家全国一年的电力需求。比特币矿业消耗掉的电力能源将无止境! 请你查查现在比特币的能耗数据(搜索:bitcoin energy consumption index),然后想想大概什么时候全球环保组织会站出来抵制比特币。 也请你想想,为什么到现在为止,他们还没有站出来。 2022年9月29日,发表在《科学报告》(Scientific Reports)上的一项新研究显示,生成比特币的环境成本让这种数字资产与世界上一些最不环保的行业相提并论。据研究人员的估计,2021年每产生一个比特币(该资产是通过一个能源密集型的计算机过程“开采”出来的)造成的与气候相关的损失超过11,300美元,这是基于二氧化碳排放的经济成本估算得出的数字。研究人员估计,在2016年至2021年期间,开采每枚比特币的平均气候损害占其市值的35%,并在2020年至2021年期间上升到近60%。 详细内容:
中定义了地址的大小写标准。
gasLimit
和 gasPrice
决定了支付给矿工的最高交易费用。 。
Gas 价格以 Gwei 标明,Gwei 本身就是 ETH 的一个单位:1 ETH = 10^9 Gwei(9个0)= 10^18 Wei(18个0)。 例如,您可以说您的 Gas 成本为 1 Gwei,而不是说您的 Gas 成本为 0.000000001 ETH。 “gwei”一词本身表示“giga-wei”,等于 1,000,000,000 wei。 Wei 本身(以 的发明者 命名)是 ETH 中最小的单位。
即使是学习,你也必须要有一点支付手续费的ETH,请参考“佛系区投”的《》。
私钥、公钥和地址这三者长得相似,且也密切相关:私钥是钱包根据密码学原理(你可以理解为某个随机法则)生成;私钥通过特定的密码学原理生成公钥(至2023年8月5日,比特币和以太坊外部账户地址,使用的都是),公钥再采用另一个加密算法生成地址。这两种加密算法都保证了只能产生唯一的公钥和地址,且不能反向推算,即不能由地址破解出公钥,也不能由公钥破解出私钥。
这里最重要的显然是私钥。以太坊软件使用底层操作系统的随机数生成器生成256位熵(伪随机数种子),通过 Secp256k1 椭圆曲线算法产生一个256位数字私钥(同比特币的私钥,是一组64位的16进制字符,即32字节),基本上与“选择1到 之间的数字”相同——这也就是说,以太坊的私人密钥空间的大小为,是一个难以置信的大数目。十进制大约是。可见宇宙估计含有个原子。
很简单,因为私钥记不住,非常不便于使用,基本上只能靠拷贝来保存和移动,也就非常危险(譬如从电脑移动到手机,很多人就利用云工具,结果导致被盗)。所以 通过加密算法,将一组英文单词和一个私钥形成单向对应的关系,以方便用户备份和在不同设备间使用。该方法诞生于比特币时代,后来又发生一些算法上的变迁,因此这组英文单词,通常为12~24个英文单词。
对于以太坊的外部账户,乃采用从私钥生成公钥。 通过获取公钥 Keccak-256 哈希的最后 20 个字节,在前面按照提案加上0x构成。即总共42 个字符组成的十六进制地址。如:
。
。
详细内容可以提前阅读第四章的“”。
相关提案:、、。
还有,如果你仔细阅读下V神发起的 ,你就会明白,账户抽象化实际上也是在拓展交易的技术手段!比特币只有transaction一种交易形式,而以太坊正在尝试增加一种叫做 UserOperation 的更高层的伪交易对象(a higher-layer pseudo-transaction object called a UserOperation)!以太坊对比特币的超越几乎是全面的。
以比特币账户和以太坊外部账户为例,从私钥到公钥,采用的都是但。现在也有研究者预警该算法将在2024年被实质性地破解掉!
拥有私钥
是
否
codeHash内容
为空
非空
主动发起交易
是
否,只能被动发起交易
拥有余额
是
是
地址长度
20字节
20字节
在比特币发行之前,已有存在种不同的“ecash”技术和产品。最早的起源来自David Chaum和Stefan Brands所提出之以发行者为主的ecash协议。接着许多以ecash协议为基础的数字货币等产品开始出现,其中以Adam Back的“hashcash”、戴维(Wei Dai)的“b-money”、Nick Szabo的“bit-gold”,以及Hal Finney在“hashcash”技术上发展的“RPOW”等为代表。
但这些数字货币都没有真正成功。
2008年下半年经济危机爆发,11月中本聪发表论文《Bitcoin: A Peer-to-Peer Electronic Cash System》
2009年1月3日,比特币网络上线,中本聪挖出创世区块(genesis block)。由此开启了一个新时代,也标志着数字加密货币的诞生。
收集了来自68个不同国家反馈的“Bitcoin Survey 2016”的调查结果:
“对于密码学货币爱好者来说,丢失比特币是另外一个重大的挫折。16%的受访者表示由于交易所被黑而丢失过资金……12%的受访者表示无法访问他们的钱包而丢失过比特币。在大部分情况下,是因为丢弃设备而且没有进行钱包备份财导致了这种情况的发生。”
结论:
中心化交易所经常被黑客入侵,是最不安全的地方——但在得到那么多惨痛的教训后,大多数交易所采用了冷热钱包分离的手段(个别大型交易所甚至采用百分百冷钱包,完全由人工提供手工服务),保证即使黑客入侵,也只能黑走热钱包里的比特币,让全部损失控制在15%之内。
务请记得及时备份您的钱包!如果你嫌有的钱包麻烦,我给您推荐这个钱包:Coinomi。
不要给钱包设置过于复杂的密码!
在钱包的推荐方面,做得最好的是bitcoin.com:
https://bitcoin.org/zh_CN/choose-your-wallet
现在已有下列钱包可供选择:
Bitcoin Core、Bitcoin Knots、MultiBit HD、Armory、Electrum、mSIGNA、Bitcoin Wallet、breadwallet、Bither、GreenBits、GreenAddress、Coinomi……
官网特地用了随机排列的方式推荐比特币钱包。以上排列也是随意的。
如果您想自己好好选择一个钱包,那么您要先搞懂这些概念:
资金的掌控权——指您对资金究竟有多大的控制权。其中一般有两种情况:
资金掌控权(Control over your money)——这个其实应该翻译为“完全自控权”,因为是您全权掌控自己的资金,没有任何第三方帮您管理资金,也没有任何第三方可以冻结或是弄丢您的比特币,您自己全权负责,出了问题没人能帮您!Coinomi采用的就是“完全自控权”,但它通过一个技术机制,大大降低了“完全自控权”的使用风险,后面马上就有细节介绍!
共享的资金掌控权(Shared control over your money)——交易时需要第三方一起授权才可以完成。比如GreenAddress 钱包要求每一笔交易都必须由您和第三方一起授权才能完成。如果您使用的是 GreenAddress ,而又想改为全权掌控自己的资金,您可以使用原始备份或者之前通过邮件发送给您的已签名交易来重新获得完全自控权。如果您看不懂这句话的意思,又怕第三方耽误事,那么您最好不要选择这种钱包。
交易验证——您的钱包涉及一笔交易时,它通过怎样的机制来完成交易的验证:
全面验证(Full validation)——就是使用区块链的全部数据来进行验证交易。专业上叫通过全节点(Full Node)进行验证。这样您的钱包要下载比特币区块链的所有数据(已超过80G),在网速比较慢的吾国,有时候可能需要好几天时间。因为使用全部数据,这种验证无疑是最最安全的交易验证方式。
简化验证(Simplified validation)——技术上讲是简易节点型(SPV Node)验证,就是仅下载Block头部信息,无需交易数据来做验证。安全性不及全面验证,但使用时因为不用下载数据,比较快捷。
分散验证(Decentralized validation)——去中心化验证。这种钱包通过一个列表,随机连接一个服务器进行验证。这意味着在验证支付的时候需要完全信任第三方(您所连接的服务器)。安全性显然也不及全面验证。使用时一般比较快捷。
集中验证(Centralized validation)——钱包依赖于一个中心化管理的机构,直接借助这个机构的服务器上的数据进行验证。这意味着您需要完全信任这个第三方。第三方如果提供假数据或者被黑造成数据被篡改等等情况,都会危及到您的资金安全!Coinomi采用的就是集中验证。
钱包的透明度——一般是指钱包的代码的透明度:
完全的透明度——钱包的所有代码都已经开源,任何人都可以看到钱包的全部代码。这样钱包有没有造假就一目了然了。
基本的透明度——钱包的客户端,或者说您安装到电脑或者手机里的那部分的代码,已经开源。不过这毕竟只是客户端这部分开源,还有一部分是在一个黑匣子里的,这就需要您去信任开发团队或相关公司。Coinomi就属于这种情况。
环境的安全性——电脑容易受恶意软件攻击,其安全性很低,手机环境则相对安全很多,所以电脑环境属于脆弱的环境,手机环境属于安全环境。
安全环境(Secure environment)——无电脑版,只能安装到手机里。Coinomi属于这种情况。
脆弱的环境(Vulnerable environment)——有电脑版。
隐私性——您的交易信息是否会被泄露:
增强的隐私性(Improved privacy)——通过滚动地址(每次交易都使用一个新的比特币地址)的方式来大大增加窥探您的余额和支付历史的难度;交易时钱包不会在网上给其它节点披露敏感信息;并允许利用匿名网络Tor来防范攻击者或防止互联网服务供应商把您的支付和您的IP地址联系在一起。
基本的隐私性(Basic privacy)——也通过滚动地址(每次交易都使用一个新的比特币地址)的方式来大大增加窥探您的余额和支付历史的难度。但其它节点可能可以在接受和发出支付时登录您的IP地址并把它和您的支付联系在一起;或者钱包不允许您利用Tor来防御攻击者或防止互联网服务供应商把您的支付和您的IP地址联系在一起,甚至或者后两项兼备。Coinomi属于这种情况。
脆弱的隐私性(Weak privacy)——通常是因为钱包重复使用同样的地址,使得任何人都很容易窥探到您的余额和支付历史。或者是因为钱包所使用的是中心化管理的服务器,造成它会披露部分信息给其它节点(比如在接受和发出支付时记录您的IP地址并把您的支付联系在一起);或者钱包不让您利用Tor来防御攻击者或防止互联网服务供应商把您的支付和您的IP地址联系在一起;或者后三者兼有。
从调查结果可以看出:真正发生率高的危险还不在于钱包本身,而是用户要根据自己的习惯选择适合自己的钱包,并妥善使用。
以太坊的数据存储和以上介绍的比特币钱包的数据存储没有本质差别。
我想重点提醒大家的是安全保护。
用纸抄写
只要是抄写,就会有一定的错误率,所以建议抄写两遍
另外请注意墨和纸张的质量
多年后可能需要复抄,错误率又会上升
抄写完一定要记得复核
用纸抄写 + 防火保险柜
专业防火设备抄写
助记词或私钥遗失(多因未备份)
手机或电脑损坏
被骗走助记词或私钥
助记词或私钥暴露或被盗
云存储、软件传递、拷贝、中木马病毒、远程入侵、手机或电脑被回收、摄像头拍摄等等,都可能导致助记词或私钥被盗。
误授权
使用了假钱包
在伪劣项目里被骗转账操作
意外身亡
使用以太坊登录
在以太坊dApp的首页面,我们常常能看到一个叫“连接钱包”的按钮。这个按钮的背后对应的是一个叫做WalletConnect的协议。
WalletConnect是加密货币钱包广泛使用的协议。WalletConnect 是去中心化的 Web3 消息传递层,是将区块链钱包连接到 dapp 的标准,它支持个人钱包账户与DApp和其它钱包关联交互。即通过扫描二维码或点击深层链接,WalletConnect 在钱包账户与DApp之间建立加密连接。
该开源协议也会推送通知,提醒用户即将到来的交易。
大多数DApp的右上角均设有“连接钱包”按钮,如果你使用的是手机钱包直接访问该DApp网站,点击该按钮即可。
如果你使用的是桌面浏览器访问DApp网站,则点击“连接钱包”按钮。屏幕中可能随即显示列出不同钱包关联选项的弹窗。点击[WalletConnect],生成二维码。你要用手机钱包扫码,才能建立连接。
更多技术细节请访问 WalletConnect
“使用以太坊登录” (Sign-In with Ethereum, SIWE) 颠覆了互联网上的用户身份验证手段。
使用以太坊登录描述了以太坊帐户如何通过签署由作用域、session详细信息和安全机制(例如,随机数)参数化的标准消息格式来使用链下服务进行身份验证。
最新的智能合约标准为EIP-4361。
SIWE的目标是为中心化身份提供者提供一种自我托管的替代方案,提高基于以太坊身份验证的跨链服务的互操作性,并为钱包供应商提供一致的机器可读消息格式,以实现改进的用户体验和授权管理。
在登录当今流行的非区块链服务时,用户通常会依赖于身份提供商 (IdP),这些身份提供商是对用户身份具有最终控制权的中心化实体,例如大型互联网公司和电子邮件提供商。这些机构之间的动机和嗜好往往不一致。Sign-In with Ethereum 为希望对自己的数字身份拥有更多控制权和自行担责的用户提供了一种新的自我管理选项。
许多服务已经为使用消息签名对以太坊帐户进行身份验证提供了工作流,例如建立基于 cookie 的网络会话,该会话可以管理某个身份验证中地址的特权元数据。这是一个标准化登录工作流程并能改善现有服务之间互操作性的机会,同时还为钱包供应商提供了一种可靠的方法来将签名请求识别为使用以太坊登录以改进用户体验的请求。
不需要经过中间商,用户现在可以使用控制其以太坊钱包账户的同一个私钥直接登录dApp。通过SIWE,我们开辟了另一条道路,大公司不再能剥夺用户访问服务的能力,也不能监视他们的行为。
SIWE 是一个完全公开的认证标准,通过与dapp、app、钱包、安全公司等社区成员的公开讨论来实现。你可以在网站login.xyz 上找到所有的会议记录和笔记。这种方法与科技巨头或政府供应商的专有身份系统的封闭式开发大相径庭。
简言之:Sign-In with Ethereum (EIP-4361) 为以太坊账户定义了一种开放的知识共享(creative commons, CC) 签名格式,以安全地验证任何基于网络的服务。
“连接钱包” 这个按钮是现在dapp 的主要功能。点击这个按钮,用户就开始了与Web3 和区块链交互的旅程。
通过连接钱包,应用程序可以知道你使用的是哪个账户,这样你的钱包就知道你想用哪个账户来与智能合约互动或者发送通证,甚至通过dapp 对信息进行签名。
当应用程序想要和用户进行更丰富的情境交互(contextual interactions) 时,比如加载用户的偏好或隐私聊天讯息,我们首先需要确保我们是在和该账户背后的实际私钥持有者对话,而不是某个假装对账户持有控制权的人。“连接钱包” 不提供这种保证,但SIWE 可以。换句话说,我们需要对用户进行身份验证,以便与他们建立一个session,然后安全地读写他们的数据。
SIWE 信息也可以被理解为访问特定资源的授权,或者对session 私钥的委托,以提高dapp用户体验的功能性和易用性。
更多内容,可参阅:
思考题:
如果将SIWE技术应用到最近正在爆发中的联邦宇宙软件如Mastodon里?
背景知识:Mastodon(长毛象)是一个免费开源的分布式社交网络,它的使用体验类似 Twitter,但在体验上更佳。首先,长毛象拥有一条完整的时间线,不会有广告干扰和人为打乱。其次,它属于联邦宇宙软件(Fediverse),任何人都可以用它部署一个长毛象站点。每个人不仅可以浏览站点中的嘟文,还可以关注和浏览整个长毛象宇宙中的任何站点和账户。从而实现完美的跨站社交。Mastodon(长毛象)是掌握在我们手中的社交网络。
Mastodon(长毛象)的使用正在爆发,并且我们预期它比SocialFi的效率更高,SocialFi有很多缺陷,譬如人们会把过多的精力放到币价的涨跌上,短时间开发的平台会因bug或硬件配置过低而出现拥堵甚至崩溃等情况。
Altcoin
2011年~2014年,随着比特币的传播,一些早期参与的程序员通过修改比特币的源代码克隆比特币。譬如:
2011年8月出现名为IXCoin的第一款竞争币。IXCoin只是更改了比特币的一些参数,主要通过调整初始每个新块的奖励为96个币,从而增加了货币的发行量。
2011年9月,另一款竞争币Tenebrix首次使用了不同于比特币的工作量证明算法script,这种算法起初是为了防止密码遭暴力破解而设计的。Tenebri的目标是通过使用这种消耗内存的算法来实现一种不依赖GPU和ASIC芯片的加密货币。
2011年10月7日吸纳了script算法的莱特币破茧而出。莱特币还把新块产生的时间从比特币的10分钟缩短为2分半钟。考虑到莱特币8,400万的货币总量和相对更快的确认速度,很多莱特币的拥趸相信与比特币相比,莱特币更适合零售业的交易。
2013年比特币价格的爆涨,大大刺激了竞争币的发展。2014年市场上的竞争币数量一度超过500种以上,总的来说,追本溯源,绝大多数的竞争币都来自比特币源代码的克隆,因此国人也称它们为“山寨币”。
但仍有不少竞争币在技术上进行了各种有益的探索,也在应用层面提出了不错的构想、做出了最终以失败告终但对区块链的发展有益的应用尝试。
譬如在比特币经过两年的实践之后,人们开始意识到区块链应不仅仅是单一货币功能的比特币,还应该往各种应用的方向拓展。域名币率先以去中心化的域名系统为应用目标,对区块链进行了现在看似微小但意义重大的探索。而到了2012年,受到启发的人们希望探索到更多的区块链应用的可能,例如执行金融合约。这一时期的杰出之作就是万事达币(Mastercoin)。2013年加入Mastercoin团队的Vitalik Buterin把它比作是瑞士军刀——即集多个功能于一体的工具,但问题在于需要支持的应用实在太多了,因此,Vitalik希望创造出类似智能手机的平台——通用的超级计算机,任何东西都可以通过编程在这里运行,代表区块链2.0的以太坊因此应运而生。
至此,区块链破茧而出,展翅高飞!
从另一个角度看,竞争币中的绝大多数,最终只是用残酷的事实,揭示了比特币的局限性,它们最终失败的结局,也让我们看到了区块链发展的艰难性!
整个竞争币时代,只有以太坊于2014年真正带来伟大的创新,将智能合约的概念和实践带入区块链,脱颖而出。但匿名币带来的零知识证明,最终以监管记账之用途被部署到以太坊2.0,也做出了应有的贡献!失败,并不等同于没有意义!
关于竞争币的详细讨论,可以参阅《精通比特币》(第1版):
http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter09.html
从ERC 20到ERC 721到ERC 1155……大大拓展了通证的属性,上升到理论高度就是:区块链使得其通证,具备了货币的所有属性,并极大地提升了货币的应用效率。
在ERC-1155问世刚好一年时,它成为了一个以太坊官方的通证标准并且可被整个以太坊开发者社区使用。
大约2018年6月17日,Enjin首席技术官Witek Radomski在以太坊的github仓库里发布了最初版本的ERC-1155多通证标准并且开放了一个讨论用来评论和反馈。
从那时起,这个标准就收到了大量的来自社区的超过50个版本和400个评论的支持。社区进行了大量投入并且帮助改进ERC-1155使之成为以太坊上最好的通证标准。
为什么要耗费这么多的精力去做这件事?
一个可管理多个通证的标准合约接口,只用部署一个合约更可以发行并管理任意多种同质通证、非同质通证或者半同质通证。
官方的总结说法是:
“用于管理多通证类型合约的标准接口。单一部署的合约可包括同质通证、非同质通证或其它配置(例如半同质通证)的任何组合。”
几年前,以太坊社区提出了一系列新的以太坊改进目标。其中一位社区成员在以太坊github页面上提出了一个新的议题,它描绘了一个有利于区块链和围绕它的生态环境的新的特性、流程或者标准。
在Enjin,我们于2017年在内部建立了称之为单一通证合约的事务。我们认识到当前的ERC-20和ERC-721通证标准并没有达到我们想象中可应用于游戏中的灵活性。
最终,我们认识到这种单一通证合约结构拥有大量的优点并且可以应用于游戏或者其它业务场景,如果我们想将这些新通证成为一个实现,就必须标准化它。
创建一个标准意味着大多数的以太坊社区会开始支持它,这就会为那些钱包、交易对、游戏进行调整和新项目使用通证化的区块链资产铺平道路。
当前,ERC-20和ERC-721标准每发行一种通证便需要部署一个新的合约,而隐藏在ERC-1155标准后面的核心概念是一个单一的智能合约可以管理无限种类的通证。
想你一下一台自动购物机,它里面有苏打水、果汁和小食品。消费者通过一个单一的安全接口(投一个币、按一下按钮)来和机器交互。机器根据消费者选择来提供商品。相似的,一个ERC-1155标准的游戏合约可以由大量物品或者组件组成,代表从武器到盔甲到血量值、魔法值等等。
所有这些物品或组件都是可重复的,你可以得到不只一件。可重复通证经常用作可拆分货币(绝大多数ERC-20通证),重复通证对于可堆叠物品十分有用(它们不需要被区分),比如说某个弓用到一筒箭。
另一种通证叫着不可重复通证(NFTs)。这种结构允许每一个通证都有自己独特的参数、历史和对真实世界的映射。在一个视频游戏里的宠物龙可以是一个NFTs,它在游戏中拥有自己独特的名字,等级和历史。
在ERC-1155里,可以在一个交易里发送多种通证,它会节省gas费用并且防止用户在单一交易中必须等待每一个块。
使用ERC-1155的项目也可以建立原子交换(类似于事务,译者注),它允许用户绝对安全的交换某两种通证,期间不会有诈骗和第三方参与。
一些作者的进一步体验形成了了更多的优化和费用节省。
沙箱开发者Ronan Sandford使用ERC-1155实现已经完成了在保持正确拥有关系的前提下,在一个块中发行超过1500种通证的尝试。
地平线游戏开发者Phillippe Castonguay已经能够使用一种叫着余额打包技术来节省80-90%的gas费用(同正常的transfer相比)
同时,Phillippe 使用ERC-1155也达到了一秒发送155种资产的传输速度。
ERC-1155多通证合约最主要的特点是在一个合约中实例化多种通证。这就意味着创建一种通证只是简单的方法调用,它仅在通证池里增加一个新的ID。
作为对比,创建一个新的ERC20或者ERC-721通证意味着编辑源码并且部署一个新的合约。部署合约会花大量的gas,因为在以区块链上储存数据是昂贵的。绝大多数ERC-20合约基于相同的代码,只需要改动几行,因此其余代码其实是不必要的。这就意味着整个以太坊超过25000个节点中的每一个都要存储这些冗余代码从而变得臃肿。
还有一种类型的开销需要被注意,每一个ERC20或者ERC-721合约都有一个地址,100种通证便需要查询或者监听100个地址,对钱包或者其实软件来讲,必须小心这些通证是否存在。
因此,虽然前面两种标准在一些窄应用场合比较适合(一个单一的货币或者单一的NFT),但是这些数量的创建者可以从ERC-1155标准受益,因为它们可以从非单一的类型创建新的通证并且不需要多个相同的合约。
ERC-1155标准中,大量特性被用来构造通证必须严格遵守的规则。
ERC-1155通证是第一种可以通过简单的发送通证从而来执行一个可计算的合约方法的通证。
通过简单的发送一个通证到DEX交易对地址,这个交易对能立即返回另一种通证到发送者地址。相似的,一个区块链游戏可以每当它收到ERC-1155通证时便执行某些游戏方法。无需访问ABIs或者同智能合约直接交互,你就可以打包、转换、加工或者托管通证。
这种类型的功能最开始在ERC-223被提出,但标准最后失败了。ERC-721也只是实现了“safeTransferFrom”,但是却有一个致命的问题,即没有对所有的交易者进行这样的严格查询。这就意味着用户可能永久的丢失他们的通证并且合约作者在发送通证时无法依赖一个确保的执行。
在ERC-1155中将此限制的更严格意味着可依赖的智能合约和通证网络现在可以开始建立这种强大的功能。用户所需做的一切仅仅是简单的向一个地址发送他们的通证,它会触发一个令人惊叹的事件链。
在过去一年里,ERC-1155标准的一个主要更新就是决定将所有的和通证相关的元数据移至一个外部的json文件。这个很大部分是受了ERC-721元数据扩展的启发,但是增加了一些改进。
Symbol:(由ERC20和ERC-721标准发明)不再包含进来,因为它不再是和虚拟物品/资产的数据相关的数据的一部分。这个3字母的符号能正常的应用于报表或者货币交易,但是它们在通证化一般物品(组件)时不再有用。
**Name:**名称也被从当前的核心标准里移除了。为什么?在许多已应用的场景中,在区块链上存储一个名字是一种奢侈行为。作为替代,每个通证的名字现在可以在json元数据标准里定义。
ID替换
通过使用替换字符串“{id},”,一个ERC-1155合约不需要在链路上存储任何额外数据就可以指向无限数量的通证URI。对每一个通证而言,这种替换甚至可以用来指向一个可以从通证json产生的动态主机的web服务。这个替换字符串本身也可以用于json自身来自动链接每个通证的图标。这大大减少了开发者为了显示大量种类的通证的元数据所产生的开销。
本地化
由于通证信息定义成json格式,它使通过使用{locale}支持多语言来进行本地化成为可能。支持多语言的钱包或者软件现在可以显示通证名字、图像或者其它数据的替代版本。
可确保的日志追踪
随着以太坊生态系统的持续增长,许多dapp依赖传统的数据库和浏览器API服务来获取和分类数据。ERC-1155标准确保通过智能合约触发的事件日志能提供足够的信息来创建一个所有当前通证余额的精确记录。一个数据库或者浏览器可以监听事件从而对合约内每一个ERC-1155通证提供可索引和可分类的的查询。
智能合约不用再保存每个通证ID的索引,这些ID不需要以任何方式序列化。
这对列举(浏览链上所有通证的能力)是一种彻底的分离,但是它带来了效率上的巨大提升,甚至允许对每个通证增发、燃烧和交易等行为进行一个完整的标准化记录。这个标准化方法直到今天才实现,并且它可以通过对通证和大量的持有者进行深度数据分析从而使一些生态系统受益。
设想一下可以在完全不同的ERC-1155通证的时间、使用解析模式和生命周期内快速前进或者后退,而不用管到底是哪个智能合约被解析。
通证拥有者可以获得关于他们的资产的更多信息,比如它们的通证被增发的精确时刻。并且在将来,更多的工具会被开发出来,它们能对建立这种技巧的公司提供更有用的参考。
ERC-1155标准是区块链社区一年辛勤工作的结果。如果你打算实现ERC-1155标准,你可以先浏览整个标准,而隐藏在每个决定之后的根本原因在这里可以找到。
你也可以浏览最初的讨论过程用来查看整个讨论历史
为了创建一个你自己的ERC-1155通证合约,Enjin的官方实现参考在github上已经开源。
你可以使用这个代码作为你自己智能合约的起点。你也可以考虑使用Enjin平台,它为开者者或者非开发者提供了大量的区块链开发工具。
这是一次重要的核心技术的探索!
但很可惜,由于整个项目的实践和思考都远远不够,在当时人们是无法评判ERC-20是否完美、ERC-721有否问题的。即使ERC-20和ERC-721的成功率各算50%,ERC-1155本身的改进的成功几率算50%,那么这个通证标准的成功率也就只有12.5%。
ERC-1155有无缺陷?如有,应如何改进?
通证乃区块链的两大硬核之一
通证(token)是个神奇的名词,它是区块链的硬核之一!
首先强调一下,通证不是货币。它的应用范围远远大于货币。
通证(token)并非从比特币一创世就被使用到的专业术语,它是随着区块链多年探索,经由电子现金(electronic cash)、数字货币(digital currency)、加密货币(crytocurrency)等过渡而最终确定的。这也就是说,整个业界也是用了多年时间,才明白中本聪创造出来的,到底是个什么东西!
非常神奇的是,token早在公元1000年左右的古英格兰的盎格鲁撒克逊语(Anglo-Saxon)里就出现了(tacen)!
在盎格鲁撒克逊语里的通证是个概念和功用范畴都很大的单词:它可以是代币、代金券、赠券、令牌、奖牌或者标识物、纪念物等等——中国虽早于公元九世纪就发行了人类历史上第一种纸币“交子”,但可惜我们并未对它进行深加工。这也是大多数国人在2020年来临之际还没搞明白它的主要原因。token在一千多年的时间里没有完全同义的中文字词,直到2017年11月才由CSDN副总孟岩翻译为“通证”。
总的来说,通证(token)的原意是以一样东西代表或者象征另一样东西,后者可以是物质的也可以是精神的,可以是实实在在的也可以是虚拟的。通证(token)现在已经广泛应用到我们生活的方方面面:
金属或塑料游戏币是token(也被写作token coin,或trade token)——我们在游戏厅或者赌场代替人民币使用的,用合金或者塑料制作的圆形物,就是最典型的通证。在这种场合中,代替钱使用的它,常常被称为“代币”。这是通证最常见的应用。而正是因为早期很多通证都只让大家强烈关注到了它的货币属性,因此这种类型的token被翻译成代币并沿用至今。
奖券、礼券、优惠券、债券、订婚彩礼都是token——和上面差不多,好理解。特别要说明的是,一般我们并不将股票视为一种token。因为奖券是靠谱的,可以替代钱来使用,但股票投资常常会血本无归,甚至可能一夜就归零(请注意与之对应的决策权也就同时归零),所以两者不是一回事。对于通过一两千年的实践得到的通证概念,即使我们一时不知道为什么它排除了股票(stock),我们首先应该保持敬畏之心,从而谨慎对待这一问题:股票是与决策权息息相关的,通证排除了股票,也就意味着带货币属性的通证不应直接绑定决策权!
奖牌、勋章、纪念章和荣誉证书也是token——奥运会用金银铜奖牌代表冠亚季军的成绩,也代表了全世界人民对他们的敬意。我们经常说荣誉是金钱买不到的,所以弥足珍贵,称它们为token也很好理解。
安全令牌、通行证、指纹、密码也是token——古代令牌代表皇帝或者将军的授权,带上它无上荣光,荣誉感超强,称之为token顺理成章。金庸小说《鹿鼎记》中的洪夫人赐予韦小宝五龙令,见此令牌犹如见教主,不光五龙使见了要跪,太后的职位比五龙使低,自然更得跪。韦小宝因此春风得意,就是这个道理。令牌这个名称古典小说里用得多,现在基本只有技术领域用到,大家可能稍感陌生,但其实它已经走入千家万户。譬如智能医疗保险卡,因为里面有您的个人识别信息,可以在就医的时候,直接访问社保的中心服务器来调取您的医疗保险数据,因此它本身就是一个安全令牌。开具支票使用的密码生成器也是一个安全令牌生成器。再比如对于保障某区域安全的智能门锁,您的指纹、虹膜和密码都是可靠的安全令牌。
法庭出示的物证,也是token——铁证如山,我们尊重物证,让人们对其保持敬畏之心,所以也叫token。线索很清晰吧!
如果我们谈到比特币这条公链,因为PoW机制确定了记账时,矿工要以比特币收取手续费,系统也会拿比特币支付矿工的工作奖励,加之比特币无论怎么说,都离不开它那条链,跟游戏币离不开那个商家一样,那么比特币本身,被视为比特币这条公链的代币也就是最自然不过的了——但在专业上,我们只能说比特币是比特币公链发行的具有流通属性(或者说货币属性)的通证(token)。
所以我们通常从货币的角度所谈的比特币其实就是一种以货币属性为主的通证,比特币决非货币!区块链里面也不存在货币,它里面的“币”全都是通证(token)。并且,不是所有的通证都具有货币属性!譬如我们在DAO的领域实践的声望(Reputation),它是一种独特的通证,因为无法转账,完全不具备货币属性!
沃尔玛之类的洋超市很早就在中国推出免费存包柜,让去超市购物的人投入一块钱硬币就可以开锁,并告诉他此柜的临时密码。购物离开时,他凭该密码开锁取回临时寄存的物品。锁开则还回硬币,让其他人可以接着使用该柜。这个机制的专业名称叫token ring network,可以让大家免费、方便、安全并合理利用储物柜。它在局域网协议中也有很重要的应用。而这里的token起到的是令牌的作用。但在国内,可惜很多人只注重方便而忽视效率、安全和规范化管理,时有“既然免费为什么还要一块钱硬币”、“没带硬币还要跑很远去柜台兑换”之怨言,所以在中国商业界没有得到广泛应用。
作为令牌,沃尔玛并不收您那一块钱硬币。其目的是提供免费服务和减少纠纷。因为沃尔玛不便也无权窥探某个人在存包柜里放了哪些东西,所以没有收服务费的沃尔玛并不承担失窃的赔偿责任。另外很重要的一点是:沃尔玛的存包柜没有上网,属于离线系统,顶多方圆几公里内的极个别变态狂会去捣乱,因此入侵捣乱的风险非常小。在区块链里,通常要作为服务费收取这一块钱代币(或者少收一点)。这样做有很多好处,其中最重要的原因就是区块链在几十亿人都能随时访问的互联网上,必须要有非常可靠的防范入侵捣乱的手段!
非常简单的逻辑是:因为完全免费,熊孩子可以拿一把硬币把沃尔玛的存包柜全占了。而收费则会导致他想搞的破坏越大他自己的成本越高——如果总共有五百个存包柜熊孩子可能就不舍得玩了。因此转账收费机制可以简单有效防范存包柜被无聊或者居心叵测的家伙滥用。比特币公链通过其兼具代币和令牌作用的通证“比特币”建立起来的收取转账手续费并奖励记账矿工的双重机制,对整个系统就能起到非常有效的安全保护作用,能做到大家无需担心自己遭遇资产损失的技术风险,这样大家才能放心使用!因此,公链里的通证,是能够对它的这个公链起到安全保护作用的!这也就是说,无论是BTC还是ETH,它们同时还具有安保属性。
比特币公链通过其通证BTC,还建立了基于加密经济激励机制的通证治理规则,该规则确定在哪些情况下比特币交易被验证并创建新块。再深入一点,我们会发现,像比特币或以太坊这样最先进的公共和去许可的公链的原生代币,本质上是其激励计划的一部分,它鼓励不相识的或没有信任基础的不同群体围绕特定公链的目的而能够协作起来。这是其价值体现,区块链通证都应该具有这样的功用:它们是其区块链、DApp或者DAO(去中心化自治组织)价值的量化工具(或者说量化指标)。
亦即是说:某个区块链DApp通证的总市值,可以非常简单直接地反映出这个区块链项目目前的总价值!但当大家去投资通证的时候,都非常关心它们的总市值。原因就在于此。而在中心化世界,你到一个游戏厅玩游戏,它的每个游戏币是兑换1元钱还是2元钱还是10元钱,与这个游戏厅的总资产没有任何关系。而游戏厅代币和区块链代币完全不同的根本原因是:游戏厅里的代币,只有很少一点在用户手里,总共有多少代币,与用户没有关系。已经发行出来的以太坊公链的代币,全部在用户手里,那么区块链所发行出的代币,就全部都是用户投资的结果!很好理解的是:全球用户对比特币的投资最高,所以目前比特币举世瞩目!
通证具有价值属性,其市值可以作为直观的价值评判的量化指标。投资通证就是价值传输和价值接力的一种方式。
作为投资者来说,最关心的当然是投资回报,以及确权功能。后者简单说,就是您投资了某个项目,没人能抵赖说没收到您的投资。前面我们说过,比特币和以太坊的所有交易都是公开透明并且可跟踪的,而且以太坊的智能合约还是永久被记录到链上的,这样投资者的权益包括未来的收益,都有了明确的保障。确权就没问题了。所以,通证还有确权属性。
没错,区块链里的通证,常常同时涵盖了以上多种属性(功用),亦即一种甚至一个通证都能集代币、奖券、荣誉奖牌、令牌(安全保护、通行证、确权工具)中的多种属性于一身!
换个角度,我们也许也可以说,通证借助互联网技术,大大拓展了货币的内核和功用。“Money talks”,似乎真是亘古不变的至理名言!
特别值得指出的是:区块链的通证(token)使得“分布式Internet部落”得以出现。与传统的以高层管理方式(官僚协作)运营传统公司和组织机构完全不同,区块链抛弃了人类社会使用了数千年的这种自上而下的主流治理结构,而是以去中心化的自治智能体(DAO)的治理结构取而代之。DAO不是通过合法的实体和传统的合同(譬如劳动合同),而是通过智能合约建立起来的通证的激励和完全透明的链上的规则,将人们结合在一起。
另外,虽然本质上都是通证,我们仍习惯性地把每个公链的原生通证叫做币(coin),而基于智能合约发行的次生通证往往被称为代币(英文则仍为token)。公链的原生通证是基于协议而不是基于智能合约而产生,而且它们的主要功用为代币、安全保障和激励机制。基于智能合约而产生的次生代币则可能还有更加丰富多彩的功用。
通证本质上是通过共识规则、智能合约、应用场景等建立起来的具有典型货币属性或者资产属性的规则集合,它能为公有链及其DApp带来专属货币、权益保障、激励机制、资产所有权记录、安全保障、决策机制、自治组织和自治的经济生态等等。
综上所述,通证,就是通过区块链技术创建的集货币属性、价值属性、荣誉属性、安保属性、确权属性等等多种属性于一体的区块链资产。通证可以为智能合约所管理,也可以为握有钱包私钥的人所拥有和使用。通证是区块链的硬核之一。目前区块链里面已经出现同质通证(FT)、非同质通证(NFT)、半非同质通证(sNFT)三大类通证。
市场里的加密货币(Cryptocurrency)属于同质通证,也就是说加密货币只是通证的一种。
最后,我们需要牢记的是:通证不是货币,它给这个世界带来的远远不只是代币,更重要的是共识机制,以及荣誉、权益证明、系统的效率、安全、资产量化指标和规范化监督管理等等——换言之:没有通证,以上这些东西均会灰飞烟灭,对应的区块链项目纵然名称再漂亮,宣传再给力,那也只能是海市蜃楼、镜花水月、无米之炊!
token在程序中的应用非常基础也非常普遍——在编程语言里,token有多种代表不同功能的可辨识的最小独特单位,都是从令牌衍生而来。譬如C++语言中有五种令牌:标点符(Punctuators)、运算符(Operators)、关键词(Keywords)、变量(Variables/Identifiers)、常量(Constants/Literals)。另外程序中广泛应用的还有访问令牌(Access token)、安全令牌(Security token)、效期令牌(Session token,建议都接受我这个翻译)、邀请码(Invitation token)以及前面刚介绍过的token ring。
但请IT男注意:在编程语言里,我们将token翻译为令牌,而从来没有将它翻译为通证。这就是说,token在编程语言里只应用了它的部分属性!当我们说到通证,指的就必然是区块链里的token而非编程语言里的令牌!
你知道吗:有了token,一台设备就可以通过Access token机制访问网络里的另一台设备,甚至在允许的情况下,调取后者的数据!Google二次验证就采用了这一原理!这还可以理解为一个区块链DApp里面授权产生的token,日后可以在另一个DApp里用作通行证或其它。好神奇呀对不对?!想象空间很大的对不对?
随着以太坊智能合约技术的发展,通证的类型和功用得以开始分化。譬如以太坊通过ERC-20这个智能合约标准,可以让任何人发行出自己项目或者组织的同质通证;通过ERC-721这个智能合约标准,可以让区块链游戏将每个道具转变为一个非同质通证,并能够通过智能合约实现其个性化市场价值。
区块链通证已经呈现出百花争艳的应用局面。
同质物品的定义
(尤其是商品)具有某种特质或属于某个种类,使之可以全部或部分自由地与另一个具有相同特质或种类的物品进行交易和置换。
如果一个物品被认为是同质性的,那么这个物品类别下的每个个体之间没有差别。也就是每两个同质性物品的价值在所有人眼中完全相同,它们互相之间可以交换。
比如说人民币1元硬币,每枚1元硬币都可以与另一枚1元硬币互换。所以人民币1元硬币是可互换的,它就属于同质性物品。
非同质物品的定义
因此,非同质物品(不可替代物品)具有与同质物品定义相反的特征。 这些特征是:
Unique(独特)
Irreplaceable(不可替代)
Non-interchangeable(不可互换)
最常见的应用案例:
同质物品:法币、比特币、便利贴、几页同品牌打印纸…… 非同质物品:艺术作品、人、游戏角色、房产、地产……
故宫博物馆的每件藏品,则都属于非同质性物品,哪怕两件藏品都是仕女图,保存完好度,制作年份,风格特色,甚至曾经的收藏者的身份,等等,对它们的价值都有影响。
同质性的物品可能通过区块链技术变成非同质性物品。譬如游戏道具,或游戏卡牌。
Technically speaking each Bitcoin is definitely unique. This is why it is possible to trace the origin of a Bitcoin, and whether or not it participated in transactions in the “darknet”.
It is therefore the use value that defines the fungible or non-fungible character of the asset. And not its technical characteristics. The main use of an asset and the perception that one can have of it define fundamentally if the asset is fungible or not.
同质性物品和非同质性物品,到了区块链领域,就对应衍生出同质通证和非同质通证,同质资产和非同质资产。ERC-20定义的,就是一个同质通证标准。ERC721定义的,就是一个非同质通证标准。
具体而言,区块链的通证(token)可以用于:
代币——ERC-20类型的通证基本属于这种类型。可用于众筹、债券发行、商品与服务的买卖,其总市值代表一个项目的总资产和总价值。
金融工具与金融衍生品
所有权令牌——ERC-721代币属于这种类型
激励工具——如比特币
安全保障手段——如比特币、ETH等
投票权——如EOS
股权证书
门票或通行证(派对,音乐会,游乐园等)
使用WiFi热点,租赁房屋、交通工具或储物柜,访问在线存储;可定制的成员资格或订阅;奖励计划;软件许可证
自治组织的治理工具
以太坊正在探索中的通证标准:
关于 UTXO 的思考(Vitalik Buterin):https://ethfans.org/posts/thoughts-on-utxo
比特币和以太坊技术原理对比之账户模型:https://www.jianshu.com/p/14bd783d2ced
狗狗币基本上无限接近于一种货币,光靠金钱可以做好慈善吗?如果不能,那么你认为应该怎么设计?
以太坊:下一代智能合约和去中心化应用平台
2013年11月的某天,Vitalik Buterin 发布了他写的《Ethereum White Paper : A NEXT GENERATION SMART CONTRACT & DECENTRALIZED APPLICATION PLATFORM》。
白皮书的第一行赫然宣告了其核心目标:
以太坊:下一代智能合约和去中心化应用平台
Vitalik Buterin也因此成为失踪两年的中本聪的接班人。
“My goal in creating Ethereum was to create a platform that was open, decentralized, transparent, easy to use and free for anyone to participate and build things. I think that this kind of platform can be good for humanity.” ——Vitalik Buterin
"我创建以太坊的目标是创建一个开放、去中心化、透明、易用和任何人都可以自由参与和构建东西的平台。我认为这种平台对人类有益。"
以下摘自《Mastering Ethereum》:
From a computer science perspective, Ethereum is a deterministic but practically unbounded state machine, consisting of a globally accessible singleton state and a virtual machine that applies changes to that state.
From a more practical perspective, Ethereum is an open source, globally decentralized computing infrastructure that executes programs called smart contracts. It uses a blockchain to synchronize and store the system’s state changes, along with a cryptocurrency called ether to meter and constrain execution resource costs.
The Ethereum platform enables developers to build powerful decentralized applications with built-in economic functions. While providing high availability, auditability, transparency, and neutrality, it also reduces or eliminates censorship and reduces certain counterparty risks.
"从计算机科学的角度来看,以太坊是一个确定性但实际上无限制的状态机,由全局可访问的单一状态和能够改变其状态的虚拟机组成。 从更实际的角度来看,以太坊是一个开源的,全球分散的计算基础设施,执行称为智能合约的程序。 它使用区块链来同步和存储系统的状态变化,以及称为ether(货币符号为ETH)的加密货币来计量和约束执行资源所需的成本。 以太坊平台使开发人员能够构建具有内置经济功能的强大的去中心化应用程序。在提供高可用性,可审计性,透明度和中立性的同时,它还减少或消除了审查并降低了某些交易对手的风险。"
和比特币类似,以太坊是一个去中心化公链,由很多台电脑组网协作而成,接入这个网络的每个节点(电脑)本地都会保存一份完整区块链(可理解为一个本地数据库)。
每个节点电脑都需要安装以太坊客户端,而这个以太坊客户端自带了EVM(虚拟机),它是一个以太坊智能合约的执行环境,类似JVM。通过交易触发智能合约后,智能合约的代码就会在EVM中执行了。这种方式相当于把程序部署到了非常非常多的电脑上(只要这个电脑安装了以太坊客户端并接入了以太坊网络),随时都可以通过交易来触发这些智能合约的执行,也从而完成了分布式程序的部署和调用。所以以太坊是一台去中心化的“超级计算机”或者叫“世界计算机”。
因此,以太坊(Ethereum)是一个开源的有智能合约功能的、可以承载众多去中心化应用(decentralized applications,dapp)的公共区块链平台。通过其专用通证(加密货币)以太币(Ether,ETH)提供去中心化的虚拟机(Ethereum Virtual Machine)来处理点对点合约。
以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,在2014年通过ICO众筹得以开始发展。
以太坊最重要的技术贡献就是构建了一整套智能合约的基础逻辑、协议和标准,并且还在不断拓展中。以太坊的智能合约可用数种用图灵完备的编程语言编写。
我们也可以理解为,以太坊让区块链应用的运营变得简单且可靠:开发者只要完成程序(智能合约)开发,随后把它部署到以太坊上,工作即告结束。自己不需要维护域名、服务器以及服务器里的各种软件,也不需要为抵御黑客的网络攻击而疲于奔命。以太坊确保你的智能合约处于永久可被使用的状态。
以太坊同时仍然保留了比特币带来的金融创新。至于币的蜕变,还需要我发起的项目“道易程”来完成!
由以太坊另两个创始人合著的《以太坊黄皮书》也很有意思,如:
以太坊有很多的目标,其中最重要的目标是为了促成那些本来无法信任对方的个体之间的交易。这种不信任可能是因为地理上的分隔(远距离)、接口对接难度、或者是不兼容、不称职、不情愿、不便宜、不确定、不方便或者现有法律系统的腐败。于是我们想用一个丰富且清晰的语言去实现一个状态变化的系统,期望协议可以自动被执行,我们可以为此提供一种实现方式。
这里所提议的系统中的交易,有一些在现实世界中并不常见的属性。公允的裁判通常很难找到,但无私的算法解释器却可以天然地提供这种特性。自然语言必然是模糊的,会导致信息的缺失,同时那些平白的、旧有的成见很难被动摇,所以透明性,或者说通过交易日志和规则或代码指令来清晰地查看状态变化或者裁判结果的能力,在基于人来构建的系统中从来无法完美实现。
总的来说,我希望能提供一个系统,来给用户提供一些保证:无论是与其他个体、系统还是组织进行交互,他们都能完全信任可能的结果以及产生结果的过程。
完整英文版:
完整中文版:
以太坊可用来创建无数的区块链应用,即智能合约、去中心化的程序(dapp)和自治组织,早期的应用尝试有:
去中心化交易市场: Bancor(班科) 和 Uniswap,其中 Bancor 的去中心化定价机制,是区块链发展的一个里程碑!
游戏:CryptoKitties让玩家繁殖及交易虚拟猫,VR游戏Decentraland。
虚拟宝物交易平台:OpenSea、Rart Bits、KnownOrigin、Emoon。
去中心化创业投资:The DAO(已挂)目标是去中心化投资,去中心化组织构建平台Wings。
社会经济平台:Backfeed。
去中心化预测市场:Augur。
物联网:Ethcore研发的以太坊客户端Parity、Chronicled(一间区块链公司)发表了以太坊区块链的实物资产验证平台;芯片公司、物理IP创建者和生产者可以用植入的蓝牙或近场通信进行验证。Slock.it(Rent, sell or share anything)的付费充电、或是Airbnb智能租赁。
版权授权:Ujo Music平台让创作人用智能合约发布音乐,消费者可以直接付费给创作人。伊莫珍·希普用此平台发布了一首单曲。
智能电网:TransActive Grid让用户可以和邻居买卖能源。
去中心化期权市场:Etheropt。
锚定汇率的代币:DigixDAO提供与黄金挂钩的代币,在2016年4月正式营运。Decentralized Capital提供和各种货币挂钩的代币。
移动支付:Everex让外劳汇款回家乡。
这个名单未来几乎可以无限增加!
创新:
通过引入全球狗文化中具有共识性的精髓,立志成为构建有趣和友好的社区关系的加密货币。
应用场景:
慈善——指欧美慈善Charity,其概念要大于国内的慈善,除了扶弱济贫之外,任何发自内心的爱和分享的行为都是慈善。譬如无偿资助一位少年参加电竞大赛就是慈善。
打赏——从打赏文章编辑或分享优秀内容、优秀软件作品等的人开始,通过表达感激、欣赏、友好和激励之心,给这个世界带来积极的影响。
创新:
匿名——达世币以混币机制增强了匿名性,使得追踪交易变得更加困难。顺便提一下:比特币“官网”更改了以前的说法,说比特币并非匿名,这在本质上是错误的。
即时——达世币有一种闪电交易模式,称为即时支付(InstantX),可以在几秒钟内(通常只需要1秒)完成交易。相比比特币长达1小时的交易完成时间,达世币的到账速度非常快。
决策引擎(decision-making engine)——达世币的去中心化区块链管理系统允许任何人提出更改或升级达世币的提案。无论是技术、市场营销或者其他方面的建议,都可以直接通过区块链提交到网络上。被选中的提议将给予新区块10%的报酬。社区每月对提议进行投票表决(结点的持有者才具有投票权)。赞成票比反对票至少多出10%则合格,提议之间还要竞争。
自给自足的预算系统——达世币的预算系统(budget system,或者self-funding)让任何人都可以自己提供预算,发起一项有关达世币开发和宣传的提案。预算系统和决策引擎,让达世币成为一个独立自主的去中心化自治的币种。Dash本身很可能就是区块链业界的第一个去中心化自治组织(Decentralized Autonomous Organizatio,DAO)。
应用场景:
希望在匿名投资领域有所建树,致力于构建去中心化可持续匿名融资模式。
其他:
达世币(Dash)原名暗黑币(Darkcoin),由于具备匿名特性,被传销组织予以利用。最严重的是“刘雄暗黑币传销案”。2014年8月,该传销组织重金聘请人员制作了“暗黑币”官网,创建虚假的网上交易平台,开始了网站的运营。为了支撑虚假的“暗黑币”投资,该传销组织的核心人物在中国香港成立了达康智能科技有限公司。以此为基地,通过带人到这个公司总部去考察学习(每天下午都会有顾问负责讲课,传授概念,以及推广市场的技巧)。仅8个月时间就在中国内地发展会员3万余名(以累计注册账号计算),敛财近15亿元。虽然这个传销组织建立的山寨“暗黑币”网站与真正的“暗黑币”没有任何关联,它只是借助“暗黑币”的名声及价值大肆进行宣传,以达到混淆视听的目的。但仍有很多人搞不清真实情况甚至怀疑暗黑币参与其中。因此暗黑币不得不彻底改头换面。英文名、中文名、货币符号、Logo及官网域名等全部被换掉。但因为案件审理时间很长,替换后案件仍在新闻热炒中。一些不明事理的人将“刘雄暗黑币传销案”改称为“刘雄达世币传销案”,还是给达世币蒙上了一层阴影。这个故事告诉人们,数字货币技术上的复杂性使得大众在短期内无法消化,因此前期的迷茫、混乱和危险就在所难免。另外,国内这几年传销组织之多、之活跃、之长寿,以及传销个案敛财数额之惊人,既提醒了人们要谨慎甄别,也说明了国内环境的糟糕及执法效率问题不小。
达世币是众多竞争币中首个进入比特币ATM机市场的加密数字货币。
点点币(Peercoin)2012年8月19日正式发布。点点币的名称取自P2P货币的意思,即点对点货币,因此被翻译为点点币。点点币的研发团队和质数币XPM的研发团队为同一团队,技术实力强劲。
创新:
世界上第一个权益证明类加密电子货币——最大的贡献在于它原创了POS利息体系(其采矿方式混合了POW工作量证明,并首创了股权证明即POS这一新机制),可以有效防止通货紧缩。如持有点点币30天后,可以赚取年化利率为1%的利率。
节能:可在任何设备上进行点点币的挖矿。
合约币(CounterParty)是建立在比特币协议上的创新传输层,用于实现去中心化的货币发行、资产管理、交易、下注和分红等财务功能。合约币初期通过烧毁比特币(Proof of Burn)的方式产生和分发。
创新:
曾尝试移植以太坊编程语言,为比特币生态引入智能合约。
应用场景:
在合约币基础上开发的应用(Dapp)有Storj、Swarm、FoldingCoin、GetGems、Scotcoin和Spells of Genesis等等。
创新:
第一个100%权益证明(POS)货币。
去中心化资产交易所(AE:Decentralized Asset Exchange)——未来币借用了“彩色币”的概念,使得未来币(NXT)的网络可用于交易几乎任何东西。并且是去中心化交易,即不必依赖中心化的交易平台。Nxt是首批允许用户创造自有区块链代币,并在区块链上进行交易的平台之一。曾有数十项众筹活动在NXT平台上成功完成。2016年前,基于NXT区块链发行的资产数目高达600多个(如集交易所、孵化器、软件和广告于一体的SuperNET)。
货币制度(monetary system)——允许任何人用NXT抵押发行自己的货币,包括POW币。
云数据(Data Cloud)——可以发送任何形式的信息。将来还可以发送加密信息。可用来建立文件共享服务、分布式应用程序和更高级别的NXT服务。
投票系统(Voting System)——顽固抵抗数字货币的俄罗斯唯一的中央证券托管系统(CSD)国家清算托管局(NSD),曾经宣布开始测试基于未来币区块链的投票系统。
账户控制(Account Control)——已完成账户租赁(Account Leasing)功能,允许用户在一个固定的时间段把锻造力出租给另一个账户,而不需要把币发送到任何地方。这允许创建安全的锻造矿池。
混币(Coin Shuffle)——一个去中心化的隐私功能,它可以让用户快速、高效地与其他用户的资金进行混合,在现有的用户账户和混币后的新账户之间创建随机的映射关系,从而实现完全匿名。
应用场景:
去中心化资产交易。
企业或其他组织发行自己的数字资产。
云数据存储。
去中心化市场。
自动交易。
其他:
未来币完全使用脑钱包,难以在安全性和易用性上取得平衡。
创新:
瑞波币是是Ripple网络的基础货币。其目标是设计出世界上第一个开放的支付网络,通过Ripple内部网络可转账任意一种货币,包括美元、人民币或者比特币等,交易确认几秒内完成,交易费用几乎是零,没有所谓的跨行异地及跨国支付费用。
瑞波币(XRP)貌似乃全球法定货币的桥梁,期望实现多币种支付、结算、结汇和国际转账即时到账,真正实现全球货币的快捷流通。
瑞波专注于银行合作——瑞波曾跟全球25家企业进行了合作,其中有10家是全球排名前50的银行,已公开的合作伙伴包括Fidor银行、CBW银行、跨河银行、Earthport、CGI、IntellectEU和埃森哲。
应用:
Ripple由谷歌投资10亿美元,福特汽车投资2亿美元,洛克菲勒,全球最富有的罗斯柴尔德家族均已投入(罗斯家族的资产相当于2200个马云、800个比尔盖茨),中国的华创资本、包括给马云投资的孙正义的软银公司,全球顶级的20多家风险投资公司全部参与了Ripple。但瑞波币的绝大多数为Ripple labs所持有,其发币的体制长期为人所诟病。
当瑞波成立的时候,它创造了 1000 亿个XRP,其中800亿分配给了公司,200亿给了三位创始人。下面是这些XRP大致分布情况:
瑞波公司获得了800亿XRP。
拉森获得了95亿XRP。
2014 年,拉森承诺将 90 亿中的 70 亿 XRP 投入慈善基金会。
麦卡勒布获得了95亿XRP。离开瑞波后:
麦卡勒布保留了 60 亿(可能锁定协议)。
麦卡勒布的孩子收到了 20 亿(有锁定协议)。
慈善机构和麦卡勒布的其他家庭成员共得到 15 亿(不受锁定协议的约束)。
亚瑟·布里托(Arthur Britto)收到 10 亿(有锁定协议)。
当麦卡勒布离开瑞波时,人们担心他会否把他持有的 XRP 砸入市场,使其价格崩盘。 麦卡勒布和瑞波达成了限制销售 XRP 的协议,来防止上述情况发生。瑞波指责麦卡勒布违反了最初约定的条款后,在2016年又重修订了该协议。
2014年协议
第一年麦卡勒布的每周销售额上限为 1 万美元。
第二年,第三年和第四年,每周的销售额上限为 2 万美元。
第五和第六年的销售额每年上限为 7.5 亿 XRP 。
第七年的销售额每年上限为 10 亿 XRP 。
第七年以后每年的销售额上限为 20 亿 XRP 。
(资料来源: http://archive.is/cuEoz)
2018年1月,为了调查,BitMEX 研究团队安装并运行了一份 Rippled 。他们通过从服务器 v1.ripple.com 下载了五个公钥列表来操作节点,结果发现所有五个密钥都被分配给 Ripple.com 。该软件指出,需要五个密钥中的四个来支持提案才能被接受。由于密钥都是从 Ripple.com 服务器上下载的,因此瑞波基本上完全控制了账本记录,Ripple是一个中央控制(集中式)系统!
从2012年进入区块链行业,2013 年 1 月,他们山寨比特币技术推出了瑞波币(XRP),到现在已经6年半过去了,它还没有真正正式投入使用!
我们有理由担心它最终成为一个巨大的敛财故事。
直接使用去中心化的区块链技术,来改进中心化组织的产品或服务或平台,往往会面临这个问题:“以子之矛陷子之盾,何如?”
崛起币EMC是一个于2013年12月发布的老币,总量10亿。这个币种是一个非常低调的技术流派数字货币。曾获得微软Azure支持。
创新:
去中心化域名和DNS系统(EMCDNS & NVS)。
分布式无密码认证登录解决方案(EMCSSL)。
Shell管理的去中心化解决方案(EMCSSH)。
去中心化点击付费广告系统(EMCLNX)。
存储于区块链的所有权证明(EMCDPO)。
存储于区块链的可信任时间戳服务(EMCTTS)。
分布式网络种子文件追踪器(Magnet)。
交易优化器——能有效解决比特币头疼的“金砂”和“灰尘”交易,进一步减少区块链大小并进行“清洁”。
就像生物必须是从遗传物质的出现,到单细胞,到多细胞等等而逐步演化,区块链的发展也不例外。从2011年~2014年,人们在这个领域的全部知识视野就只有比特币,那么大家能做的改进只有那一批“山寨币”,就是情理之中的事了。
竞争币在共识算法、货币应用等等方面做了大量的探索和改进,同时也把很多最新的科技知识也引入到区块链领域,对于后来大家深入比特币“链”的底层逻辑和底层结构,起到了很好的承上启下的作用。
在货币应用方面的竞争题材穷尽之后,大家开始将竞争延伸到了货币之外的领域,由此开启了另一个新时代,也就是业界经常会提到的“区块链2.0:智能合约”。
总的来说,竞争币的工作进一步验证了比特币的伟大意义,它们的工作也让比特币的局限逐渐浮出水面,而让区块链朝向一个新的更加光明也更加璀璨的未来迈进!
以上这些既是竞争币的使命,也是其历史意义。
把数字加密货币或者比特币完全看成泡沫的人要么是心胸狭隘信口胡诌,要么是完全不擅于学习。因为即使是不光夺去了无数人的生命,还严重挫伤了人类的心灵的血腥的战争,本质上就是各个文明、种族、国家为了抢占发展机会而发生的竞争,尽管我们今天可以说,暴力其实是无能的表现,但在人类文明发展的相当长的特定历史时期里,战争也仍然属于自然竞争的范畴。
《如何投资数字货币》,王博、周朝晖主编,电子工业出版社,2017年1月第一版
瑞波(Ripple)的故事:https://blog.bitmex.com/zh_cn-the-ripple-story/
STARKs, Part I: 多项式证明:https://www.unitimes.io/knowledge/2587/?lang=zh
STARKs, Part II: 核心证明终问世:https://www.unitimes.io/knowledge/2566/?lang=zh
STARKs III:攻坚(上):https://www.unitimes.io/knowledge/11722/?lang=zh
STARKSIII:攻坚(下):https://www.unitimes.io/knowledge/11733/?lang=zh
智能合约乃区块链的硬核之一。它和通证的账单一样,是部署在链上的,因此具有公开透明、不可篡改等特性。
智能合约是一种运行在以太坊链上的程序。 它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。智能合约也是一个,我们称之为合约账户。 这意味着它们有余额,它们可以通过网络进行交易。 但是,它们无法被人操控,它们是被部署在去中心化网络节点上作为程序运行着。 个人用户可以通过提交交易执行智能合约的某一个函数来与智能合约进行交互。 智能合约能像常规合同一样定义规则,并通过代码自动强制执行。
任何人都可以编写智能合约并将其部署到区块链网络上。 你只需要学习如何用,并有足够的 ETH 来部署你的合约。 在技术上,部署智能合约是一项交易,所以你需要支付你的,就像你需要为简单的以太坊转账支付 gas 一样。 然而,部署合约所需要消耗的 gas 费要高得多。
以太坊编写智能合约的语言,对开发者比较友好:
Solidity
Vyper
然而,它们必须要先编译才能部署,以便以太坊虚拟机可以解释并储存合约。
智能合约在以太坊上公开,并被认为是开放应用程序接口。 这意味着你可以在你自己的智能合约中调用其他智能合约以极大地扩展可能性。 合约甚至可以部署其他合约。
了解更多关于的内容。
智能合约本身无法获取关于”真实世界“的事件信息,因为它们无法发送 HTTP 请求。 这样设计是因为依赖于外部信息可能会危及共识,这对安全性和去中心化而言十分重要。
这可以通过 来规避。
从应用层面简单地说:智能合约(Smart Contract)是用程序代码定义合约参与方的承诺,并能够完全抗干预地根据承诺自动执行包括转账通证在内的约定条款的协议。
智能合约允许在不同的匿名方之间进行可信交易和协议,而无需中央机构,法律系统或外部强制执行的机制。它们使得交易、状态和数据可追溯,透明且不可逆转。
智能合约的部署过程,可理解为发送一个包括可执行代码的特殊交易,将合约代码存储在区块链中(是在合约账户的accountstate中的codehash指向的一块存储区域中),交易只记录合约代码的哈希值(作为存证),当需要调用这个智能合约的方法时只需要向这个智能合约的地址发送一笔交易即可。
如果您懂一点点编程语言,或者您有丰富的微信使用经验,那智能合约是非常好理解的。
智能合约可以简单理解为可执行的公开透明的程序,被开发者部署到以太坊区块链上,与外界完全隔离并运行于以太坊虚拟机(Ethereum Virtual Machine,简称EVM)中,这样它就脱离了人为的干预。而完全只按照代码设定的规则运行。
智能合约为所谓的去信任提供了基础架构,它允许我们信任系统的输出,而不需要信任它里面的任何参与者。
我们今天所使用的任何技术,都是很多前人花费了几十几百年的摸索才得以实现的! 智能合约也不例外。早在1994年,密码学家尼克萨博(Nick Szabo)就提出了智能合约的概念,并于1998年进行了尝试(Bit Gold),但没有成功,其中一个重要的原因是缺乏能够支持可编程合约的科技水平。而我们已经知道,比特币的发行(挖矿奖励)和转账等等,都是由程序根据协议(即合约)直接实施的,比特币为包含转账货币在内的可编程合约带来了巨大的技术突破。
区块链技术的出现不仅解决了该概念里最重要的合约对货币的百分之百的控制权,并且可编程的优势又让它秒杀了一切传统合约——而区块链的去中心化、不可篡改、过程透明可追踪等优点,更是令智能合约如虎添翼,一飞冲天!
智能合约是纯正且原生的区块链技术。它符合我们对于区块链价值观的所有期望。
智能合约还有以下应用特色:
和通证的账单一样部署在链上。
去中心化——智能合约是严格按照甲乙双方已写入代码的约定,封闭式自动执行的。勿需也不允许第三方的介入(思考:现在的预言机、Amberdata等等是否有问题?)。
勿需信用中介——勿需第三方的信用背书,智能合约本身以及区块链即可以提供可靠的保障。
抗审查(不可篡改)——通过区块链加密技术,它可以防范人为作弊等干扰,从而具体抗审查的能力。
透明可追踪——任何人都可以在链上查阅智能合约代码,从而彻彻底底了解它的所有细节。
精准——智能合约是用代码写出来的,它不存在任何语言上的歧义的可能。
匿名——智能合约是自主运行的,它不需要有人去启动或终止。也不需要知道你是谁。
请注意:除了区块链,其它任何技术都无法部署智能合约,如此则可以说,智能合约是区块链的独门秘技。
智能合约已经广泛应用到区块链ICO、游戏等领域,而比特币到目前为止在应用领域还只是一个货币,无法承载智能合约千变万化的应用。这样,我们再次看到了比特币极大的局限。而且智能合约在应用中爆发出来的威力,让我们几乎可以肯定:以太坊虽然任重道远,但百步已经走完九十九步,可以说为这个世界带来”智能合约“这一区块链技术的它已经非常接近成功。
课外阅读
ERC-20(又常被写作ERC20)通证标准是在以太坊平台上通过智能合约制订的通证标准。
我们常常把以ERC-20通证标准发行出来的通证,叫做“代币”。但请注意,Bitcoin是代币,ETH也是代币,但在以太坊生态里首创的ERC-20是一个通证标准而非代币标准。区块链以通证(Token)取代代币(Coin)是一次伟大的飞跃!
ERC20让开发者能够基于智能合约执行以下操作:
制定通证总供应量
获得账户余额
转帐通证
批准转账通证
以下内容翻译自:
概述
ERC20是通证(token)的一种标准接口。
摘要
本标准允许在智能合约中部署token的标准API。 该标准提供了转移token的基本功能,并允许token被批准,以便链上其它第三方可以使用它们。
动机
这一标准接口可以让以太网上的任何token可以被其他应用程序再利用:从钱包到去中心化的交易所。
技术参数
1)Token
1.1. 方法
注意:
a. 请到原始提案中查询本标准所使用的语法的Solidity的最低版本号。
b. 调用者必须处理returns(bool success)返回的false。调用者绝对不能假设永远不会返回false。
name:返回令牌的名字,例如“MyToken”。 可选——这个方法可以用来提高可用性,但接口和其它合约不能依赖该值的存在。
function name() public view returns (string)
symbol:返回令牌的符号,例如“HIX”。 可选——这个方法可以用来提高可用性,但接口和其它合约不能依赖该值的存在。
function symbol() public view returns (string)
decimals:返回token使用的小数位数,比如 8,表示将记录在链上的token数除以100000000后显示给用户。 可选——这个方法可以用来提高可用性,但接口和其它合约不能依赖该值的存在。
function decimals() public view returns (uint8)
totalSupply:返回token的总供应量。
function totalSupply() public view returns (uint256)
balanceOf:返回另一个账户地址_owner的账户余额。
function balanceOf(address _owner) public view returns (uint256 balance)
transfer:转移_value数量的token到地址_to,并且必须触发Transfer事件。 如果_from帐户余额没有足够的token来支出,该方法应该throw。 注意:_value=0必须被视为正常转账并触发Transfer事件。
function transfer(address _to, uint256 _value) public returns (bool success)
transferFrom:从地址_from发送_value个token到地址_to,必须触发Transfer事件。 transferFrom方法用于提现流程,允许合约为你转移token。这可以用于允许合约为你转让代币或收取费用。除非帐户_from有意通过某种机制授权消息的发送者,否则该方法应该throw。
注意:_value=0必须被视为正常转账并触发Transfer事件。
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
approve:允许_spender多次从你的帐户提现,最高数量是_value。 如果再次调用此函数,它将以_value覆盖当前的值。
注意:为了防止向量攻击,客户端需要确认以这样的方式创建用户接口,即在为同一个花费者设置另一个值之前,先将它的值设置为0。虽然合约本身不应该强制执行,以前部署的合同允许向后兼容。
function approve(address _spender, uint256 _value) public returns (bool success)
allowance:返回被允许从_owner提取到_spender余额。
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
2)event
Transfer:当token被转移(即使是0值)时必须被触发。
event Transfer(address indexed _from, address indexed _to, uint256 _value)
Approval:当成功调用approve(address _spender, uint256 _value)后必须被触发。
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
实施
在以太坊网络上已经部署了大量符合ERC20标准的代币(查询:)。从节省gas到提高安全性,不同权衡的团队已经编写了各种不同的合约方案。
合约实例:
()
历史
本标准的相关历史链接:
版权
版权和相关权利通过许可协议放弃。
Mintable:允许特定账户(外部账户或合约账户)创建新的通证。
Burnable:允许通证持有者销毁一定数量的通证,从而减少总供应量。
Pausable:允许合约拥有者在紧急情况下暂停合约的所有交易和功能。
Permit:允许用户通过签名授权他人代表自己进行通证转移,而无需在链上执行 approve()。
Votes:为通证持有者提供投票功能,可用于事务决策。
Flash Minting:闪电造:允许用户临时铸造大量通证,用于闪电贷等金融应用。
Snapshots:快照:捕捉特定时间点的通证持有情况,用于分红、投票等应用。
Access control:通过角色和权限管理来限制特定功能的访问。
Ownable:将合约的所有权赋予某个地址,该地址可以管理合约的某些功能。
Roles:为合约中的功能分配不同的角色,每个角色可以拥有特定的权限。
OpenZeppelin的ERC-20扩展库大大丰富了ERC-20的功用,但他们没有直接抛弃ERC-20,构建成新的通证标准,有两个原因:
其一是如果创建新的通证标准,与ERC-20割裂,就会给整个行业带来应用上的负担甚至打击。采用扩展库的优势是它只会推动整个行业的发展。
其二是扩展本身是可升级的。EIP因为升级后果复杂,则无升级机制。这样应用起来更灵活。
ICO是Initial Coin Offering的简称,顾名思义,就是项目方以初始产生或者首批公开发行的通证(代币)作为回报的一种众筹资金的方式。
ICO在很大程度上借鉴了证券业的Initial Public Offering(首次公开发行,IPO)。之所以没有沿用IPO而改为ICO,主因是传统的IPO(首次公开募股,initial public offerings)的门槛非常高而且涉及到跨国就更是难上加难。区块链业界删繁就简,采用了新的概念及新的模式,在突破障碍的同时规避了法律风险。
用最简单的话说:ICO就是项目方发行一种自己的通证,投资者用ETH或其它通证来兑换该通证。
有个别通证+收益分红模式(不同于股权模式)的区块链项目的众筹,采用过ITO(Initial Token Offering)这一名称,但因为我们知道只有符合ERC-20的通证才用于众筹,大众又更熟悉Coin,所以现在约定俗成,都采用ICO(Initial Coin Offering)。
典型的ICO流程与特点为:
核心团队通过专业会议等各种渠道发布ICO消息。
核心团队发布ICO规则,包括ICO的时间安排和融资额的安排。譬如最低融资额,如果达不到该额度,该ICO即告失败,所有投资都会被退回。有的项目同时会设定最高投资额(硬顶),达到该投资额,则ICO提前结束。
ICO开启后,现在越来越多的项目只接受ETH,因为通过以太坊的智能合约,可以让ICO过程实现零人工、零差错。个别项目还像以前那样接受以太币、比特币等多种数字加密货币。
ICO结束后,代币就会开始上交易所。
2015年11月创建、2017年9月11日定稿的ERC20通证标准,2017年4月提前爆发于ICO。这里面有多重原因:
真正抗审查
真正实现了全球范围的投融资
极低的投融资成本
极高的投融资效率(超快的转账速度、超快的融资速度)
第一次实现了平等的投资权利
真实的市场估值
最高的流动性溢价
零差错、零人工
以下为各种投融资手段的对比:
前面我们提过,以太坊早在2014年就通过ICO筹集了发展基金,为什么是2017年ICO才大爆发?
这里面有区块链知识传递和区块链项目发展的原因,还有一个很重要的原因就在于ETH和ERC20通证标准。2017年前ICO的主要币种为比特币,但比特币到账时间长达1小时,ETH一次确认只需要9秒,到帐通常不足2分钟。而且比特币网络堵塞,有很多转账无法完成;加上比特币2017年没有智能合约可用,通常还需要用户到官网注册,ERC20通证标准的出现,才实现了ICO的质变!
ICO的爆发,归功于ERC20通证标准,也是智能合约的第一个爆点!
人人能自由发币听上去实现了哈耶克在《货币的非国家化》里提出的理想。但人人能自由发币与各国政府印钞有什么本质的区别吗?
人人能自由发币加上中本聪带来的匿名性,造成了区块链欺诈(scam)成行!经过五六年的肆虐,这个行业已经完全无诚信可言!
创新出EIP-3712(后面有介绍),淘汰掉ERC-20,那么这个技术标准也就宣告失败。
Some people treat NFTs as fungible assets, totally ignoring the use behind them, considering only the financial value of the asset. Two parcels of LAND on the worth 10,000 MANA may seem totally fungible to an unscrupulous speculator.
OpenZeppelin 是构建在 EVM 之上的开源智能合约开发工具,让开发者可以安全地开发和管理智能合约和 Dapp。提供了一系列的扩展,提高了其功能性和安全性。ERC-20通证创建者可以根据项目需求灵活地选用和组合这些扩展,从而实现具有丰富功能和更高安全性的 ERC-20 通证。这些扩展包括:
ERC-165
创建标准方法以发布和检测智能合约实现的接口
ERC-173
合同所有权的标准接口
ERC-223
向后兼容ERC-20,保护投资者以防意外的合约转账
ERC-721
非同质代币(NFTs)标准,可作为产权进行交易
ERC-725
密钥管理和执行的代理合同,建立区块链身份
ERC-777
基于操作者的代币标准,具有高度可定制性
ERC-809
非同质代币的租赁标准,用户可使用一系列指令来出租NTFs
ERC-827
允许转让通证并允许持有人允许第三方使用通证(不安全)
ERC-864
NFTs 共有产权,旨在 NFT 合约中分享 NTF 的所有权
ERC-865
此项标准允许用户委托第三方帮忙转账,并以代币形式支付Gas费用
ERC-918
可开采性代币,允许加入挖矿算法
ERC-874
加权的不可替代代币,便于了解到独特资产拥有的价值
ERC-888
多维代币标准,使用标识符代表余额和数据
ERC-998
可拆解非同质化代币,可包含多个ERC-721和ERC-20形式
ERC-1067
可升级代币合约的标准,描述了更加分布式的代币合约架构
ERC-1132
代币锁定能力的标准,提供代币在合约内多种用途的时间锁仓功能
ERC-1155
多代币标准,可追踪多个代币余额和所有权的合约,及定义多个物品
ERC-1178
多级别代币的标准,为多个级别代币的合约提供标准接口
ERC-1190
非同质版税代币的标准,可向创造者以及/或者所有者支付版税
ERC-1203
多层级代币标准,提供多层级代币合约的标准接口
ERC-1238
不可转账代币标准,代表“徽章”的不可转账代币
ERC-1400
证券通证标准,部分可互换代币,该EIP标准具有能力进行强制转移
ERC-1404
为证券通证、通证化证券以及其它携带复杂要求的其它通证而准备
ERC-2612
该标准可以取消ERC-20的approve + transferFrom,同时还允许无 gas 通证转账。
Minime Token
带更多功能的 ERC-20 代币(易克隆),获得余额转账历史及代币控制
投融资门槛
非常低
极高
低
高
透明程度
高
高
高
低
资金退出
非常容易
容易
难
难
流动性
非常好
好
差
差
监 管
目前很低
极高
低
低
我们还没有实现智能合约的所有价值,可以预见的是:
此前的其它任何技术都无法部署智能合约,智能合约是区块链的独门秘技。
自动判断执行,降低人工判断错误或是人为操作改动的风险;如果没有代码错误,智能合约完全可以做到零差错!
降低成本,智能合约在部署和执行时具有显著的低成本优势;譬如在资产批量兑换时,执行阶段可以做到极低成本(只需要支付以太坊gas费用)。
传统合约采用是是事后执行,根据状态决定奖惩的模式;智能合约则属于事前预定执行模式,加上智能合约可以抗人为干扰控制合约涉及的全部资金的特色,使资金的流向完全遵照约定的条款来执行,极大地提升了合约的价值,并将大大减少因传统合约无法严格按条款得到执行,以及违约追责而造成的社会资源和人力成本的巨大浪费!它将大大提升人类社会延续和发展的效率。
智能合约绑定了双方的数字资产,相对传统合约违约成本更高,从而带来了更强的约束力和执行效率。
由于许多不同的智能合约可能想要验证关于其用户的某些属性,因此链上可查的身份变得越来越重要。然而,去中心化的身份存储和点对点的身份传递,以及基于零知识证明的身份验证机制,才会使得身份的存储、调用和验证变得简单和高效。身份与智能合约的绑定,将具有超常的价值!
适用范围更广,可适用于全球范围的协作,传统合约受制于各地法律、人文因素等各种因素,完全无法适应当今全球化的需求。
从去中心化去审查的投融资,到构建全球一体的治理体系,智能合约在这一轮“区块链革命”中,将起到举足轻重的作用!
对于以太坊,我们应该认识到:
目标远大:它矢志要成为区块链领域的安卓。
以太坊的爆发使我们认识到,作为区块链2.0代表的公链的核心根本就不仅仅是TPS,而是还需要有最强大脑们构建的千千万万个智能合约标准。 a. TPS到达1百万/秒,并不能解决多少问题,它还需要第三次甚至第四次的进化。
b. 我们已经看到智能合约标准带来的应用的惊人的爆发力,因此也明白:智能合约标准的建设始终是以太坊里最重要的核心。
c. 智能合约标准的作用在于两个方面:第一,带来新的应用;第二,在公平公正公开透明的去中心化去审查的基础之上爆发应用!
d. 目前所有公链里,只有以太坊的智能合约标准的发展欣欣向荣!其它公链几乎一片死寂,它们全部加起来的贡献,都恐怕连以太坊的百分之一都没有。
我们有理由相信:以太坊有潜力成为前所未有的合作博弈竞技场。 a. 比特币创造性地带来了去中心化的激励机制,但可惜的是它带来的仍旧是非合作博弈,譬如比特币矿业带来的“公地悲剧”和“囚徒困境”,还有比特币发展中的“猎鹿博弈”、“懦夫博弈”等等,已经是非常明显,而且已经被业界作为经典案例。 b. 智能合约恰好可以充当一个不会被收买、无处不在的外部监督者,用于执行和监督利益相关者之间的协议。理论上以太坊可以将任何非合作博弈变成合作博弈。在智能合约强大的作用下,此前的利益格局会被打破! c. 从非合作到合作博弈的转变是通过一种名为 Game Warping 的技术实现的,因为智能合约让以太坊成为一个可以根据规则启动的透明、可触发、不可外部干预的链上清算支付系统。它使得合作博弈成为一个合乎逻辑的选择。 d. 在以太坊和智能合约可用之前,我们很难找到这样普适且可信的第三方工具。我们现在要做好的,只是要找到适合的机制让博弈的关键操作与链上合约绑定(智能合约标准的建设即为以太坊最重要也最有价值的工作),即可将现实的博弈才非合作变为合作!
总而言之,从囚徒困境到合作博弈,在比特币的基础之上,以太坊为区块链的发展带来了质的飞跃以及无可限量的美好未来!
ERC-721是一个自由的开放标准,描述了如何在以太坊区块链上构建不可互换或独特的通证。尽管现在大多数通证采用了ERC20通证标准,也就是说大多数通证都是可置换的(每个代币都与其他代币完全相同),对于主要需要货币属性的通证来说,ERC20标准是很好的选择。但是对于具有唯一性的物品,ERC20接口就力不从心了,例如同是一幅名画,真实作品和复制品价值是不一样的。所以就有了专门针对收藏品等的ERC721标准:每个ERC-721通证都是唯一的。
这就是说:ERC20通证是可以相互置换的,而ERC721通证则是不能置换的,亦即ERC721的每个通证是唯一的,且不可分割,它的最小单位就是1。
以下是该标准的核心规范:
最后一部分表明:每个符合ERC721的智能合约必须同时符合ERC721和ERC165。ERC165是智能合约定义自己支持哪些接口的一种方式。
除此之外,ERC-721 还提供了以下扩展接口。
钱包等应用要接受NFT的安全转账,则必须实现如下接口。
ERC-721引入了Metadata的概念,以供每个NFT描述自身的属性,供智能合约查询。对于NFT合约,这是可选的接口:
里面提到的“ERC721 Metadata JSON Schema”则如下:
观点:由于NFT最早面向艺术品,ERC-721可选Metadata接口“ERC721 Metadata JSON Schema”只指定了name、description、image三个属性(且不可修改)。但对于游戏而言,这些属性远远不够,因此我们下一节要介绍的另一个NFT标准EIP-1155将name、description、image属性转移到了URI的json里面,而不规定URI接口返回的JSON Schema。
问题在于 tokenURI 可指向一个JSON 文件,现有绝大多数NFT产品就通过将其图片或视频的URL记录到这个JSON 文件中,而完成其产品——这也就是说,这些所谓的“非同质化通证”的图片或视频大多保存在私有服务器上。这显然是有问题的,因为大家用智能合约玩的居然是互联网产品!!
枚举接口包含了按索引获取到对应的代币,可以提供NFTs的完整列表,以便NFT可被发现。
一个通证标准并不容易,对吧?
ERC-721通证标准的第一个应用是Cryptokitties。中文名叫谜恋猫,又被币民称为加密猫。,
Cryptokitties的每一只猫对应于一个ERC-721通证。每一只猫都是不一样的,不同的毛色,不同的眼睛嘴巴鼻子,等等。而不同的遗传特征组合决定了这只猫的价格高低。你用一只普通的猫,来换我的名贵的猫,我会给你吗?当然不可能!所以ERC-721的通证,就是典型的“不可替换”的通证。每一个通证都是一个独立的个体,有着自己独特的价值。这样每一个都具有独特性和稀缺性,所以ERC-721最大的应用属性被认为是收藏。ERC-721在收藏品市场的应用,就是每个ERC-721对应罕见的独一无二的收藏品。
ERC-721非同质通证标准允许在智能合同中部署非同质通证(NFT)的标准API。该标准提供了跟踪和转让非同质通证的基本功能。我们很容易就联想到非同质通证由个人拥有和处理以及向第三方经纪人/钱包/拍卖商(运营商)委托的例子,非同质通证可以代表数字或实物资产的所有权(或债务)。我们也很容易就联想到ERC-721非同质通证标准适应的几种资产:
有形资产——房产、独特的艺术品等等;
虚拟收藏品——独特的小猫图片、收藏卡片、卡牌游戏中的卡牌、Decentraland中的土地和房产等等;
“负值”资产——贷款、债务和其它财务责任。
一般来说,所有的小猫都是独特的,没有两只小猫是一样的。非同质通证(NFT)恰好是可区分的,你能够独立跟踪每一只猫的所有权。
所以,ERC-721是允许在以太坊的任何非同质通证上应用钱包/经纪人/拍卖app的一种标准接口。它提供简单的ERC-721智能合约以及跟踪任意数量非同质通证的合约。可以说ERC-721定义了智能合约必须执行的最小接口,以便管理,拥有和交易独特的通证。它没有强制标记元数据的标准或限制添加补充功能。此标准受ERC-20通证标准的启发,并建立在EIP-20创建以来两年的经验基础之上。EIP-20的局限是不足以追踪非同质通证,因为每一个资产都是不同的(不可置换的),但一堆ERC20代币里的每一个都是相同的(可置换的)。
ERC721非同质通证标准定稿于18年3月13日,它从测试版中移出并转化为社区正式版v1规范,很快就得到来自整个加密生态系统的大量项目的支持和认可。最大的导火索是以该通证标准创新出基因工程智能合约的游戏“谜恋猫”,在ERC721非同质通证标准定稿之前,“谜恋猫”于2017年11月28日即登录以太坊区块链,并成功地引发市场热捧。
ERC721非同质通证标准的代表性应用为区块链“游戏”CryptoCelebrities、CryptoKitties(谜恋猫)、EtherTulips、CryptoPunks、Ethercraft、Decentraland、Etheremon(以太怪物)和Etherbots(以太机器人)等等。这些“游戏”可以说很低幼,但受追捧程度都很高。因为ERC721非同质通证标准为游戏开发者提供了三个新的构建模块:
首先,智能合约允许开发人员创建可公开验证的规则,用户在不受国界限制的情况下可以在全球各地互相连接,并且交易金是内置于协议中的。
其次,非同质通证(NFT)能够开发出可证明的集稀缺性、可编程性和抗审查三种特性于一体的数字商品。
其三,它使得虚拟角色、道具、勋章、物品可以跨服(服务器)、跨界(国界)、跨戏(游戏)。
这三个新的构建模块将使开发者能够扩展现有的游戏内核,或者创建新的游戏内核。会不会鸟枪变大炮,我们拭目以待!
ERC721非同质通证标准,又被翻译为不可置换代币标准。
关联技术标准:
ERC-20 Token Standard.
ERC-165 Standard Interface Detection.
ERC-173 Owned Standard.
ERC-223 Token Standard.
ERC-677 transferAndCall
Token Standard.
ERC-827 Token Standard.
使用了该技术标准的项目:
翻译:谭粤飞
作者
讨论区
状态
Final(终稿)
类型
Standards Track标准化跟进
分类
ERC
创建日期
2018-06-17
必需基础
A standard interface for contracts that manage multiple token types. A single deployed contract may include any combination of fungible tokens, non-fungible tokens or other configurations (e.g. semi-fungible tokens).
本协议定义了可用于管理多种通证的智能合约的接口。利用本协议只需部署一个智能合约便可管理任意种同质通证、非同质通证或其它通证(如半同质通证)的组合。
This standard outlines a smart contract interface that can represent any number of fungible and non-fungible token types. Existing standards such as ERC-20 require deployment of separate contracts per token type. The ERC-721 standard’s token ID is a single non-fungible index and the group of these non-fungibles is deployed as a single contract with settings for the entire collection. In contrast, the ERC-1155 Multi Token Standard allows for each token ID to represent a new configurable token type, which may have its own metadata, supply and other attributes.
本协议给出了一种智能合约接口,能定义任意种类和数量的同质和非同质通证。在现有的通证标准中,ERC-20标准在使用时,需要对不同的通证种类部署不同的智能合约;ERC-721标准在使用时,需要用Token ID给每一个非同质通证的一个唯一的索引(编号),并把一组这样的非同质通证作为一个集合部署在一个智能合约中。而在ERC-1155多通证标准中,Token ID有新的用途,用它定义的通证种类,可以有自己的元数据(metadata),发行量及其它属性。
The _id argument contained in each function’s argument set indicates a specific token or token type in a transaction.
本协议各个函数中的参数”_id”表示交易中的某个通证或通证种类。
Tokens standards like ERC-20 and ERC-721 require a separate contract to be deployed for each token type or collection. This places a lot of redundant bytecode on the Ethereum blockchain and limits certain functionality by the nature of separating each token contract into its own permissioned address. With the rise of blockchain games and platforms like Enjin Coin, game developers may be creating thousands of token types, and a new type of token standard is needed to support them. However, ERC-1155 is not specific to games and many other applications can benefit from this flexibility.
ERC-20通证标准要求每种通证对应一个智能合约,ERC-721通证标准要求每个非同质通证集合对应一个智能合约。这两个标准定义的每个通证合约都有自己的地址,导致以太坊上承载的代码臃肿不堪,并且限制了某些功能。随着区块链游戏及平台(如Enjin)的崛起,游戏开发者很有可能需要创建成千上万种通证,这迫切需要一个全新的通证标准。ERC-1155便应运而生,它非常灵活,不仅适用于游戏,也适用于很多其它领域的应用。
New functionality is possible with this design such as transferring multiple token types at once, saving on transaction costs. Trading (escrow / atomic swaps) of multiple tokens can be built on top of this standard and it removes the need to “approve” individual token contracts separately. It is also easy to describe and mix multiple fungible or non-fungible token types in a single contract.
ERC-1155将会催生很多新的功能,比如一次性转账多种通证,从而节省转账费用。该协议也支持多种通证交易(中介交易escrow/原子互换atomic swap)并省却了以往那些交易中需要每个合约进行授权的琐碎步骤,它可以轻易地在一个合约中描述和处理多种同质通证、非同质通证或两者混合的情况。
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
关键字“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”,“OPTIONAL”的详细解释请参看RFC 2110
Smart contracts implementing the ERC-1155 standard MUST implement all of the functions in the ERC1155 interface.
部署ERC-1155标准的智能合约必须实现ERC1155接口定义的所有函数。
Smart contracts implementing the ERC-1155 standard MUST implement the ERC-165 supportsInterface function and MUST return the constant value true if 0xd9b67a26 is passed through the interfaceID argument.
实现ERC-1155标准的智能合约必须实现ERC-165标准中的supportsInterface接口函数,并当其参数interfaceID传入值为0xd9b67a26时,返回true。
Smart contracts MUST implement all of the functions in the ERC1155TokenReceiver interface to accept transfers. See “Safe Transfer Rules” for further detail.
智能合约必须实现ERC1155TokenReceiver接口中所有定义的函数。更多细节请参看“Safe Transfer Rules”。
Smart contracts MUST implement the ERC-165 supportsInterface function and signify support for the ERC1155TokenReceiver interface to accept transfers. See “ERC1155TokenReceiver ERC-165 rules” for further detail.
智能合约必须实现ERC-165标准中的supportsInterface接口函数,并支持ERC1155TokenReceiver接口。更多细节请参看“ERC1155TokenReceiver ERC-165 rules”。
To be more explicit about how the standard safeTransferFrom and safeBatchTransferFrom functions MUST operate with respect to the ERC1155TokenReceiver hook functions, a list of scenarios and rules follows.
当涉及ERC1155TokenReceiver中的接口函数时,标准函数safeTransferFrom和safeBatchTransferFrom的执行方式严格遵循下列规则
Scenarios 场景
Scenario#1 : The recipient is not a contract.
场景1:接收者不是智能合约
· onERC1155Received and onERC1155BatchReceived MUST NOT be called on an EOA (Externally Owned Account).
onERC1155Received和onERC1155BatchReceived不应该被外部账户(Externally Owned Account简称EOA)调用
Scenario#2 : The transaction is not a mint/transfer of a token.
场景2:交易不是挖矿或转账
· onERC1155Received and onERC1155BatchReceived MUST NOT be called outside of a mint or transfer process.
onERC1155Received和onERC1155BatchReceived不应该在除挖矿或转账之外的其它操作中被调用。
Scenario#3 : The receiver does not implement the necessary ERC1155TokenReceiver interface function(s).
场景3:作为接收者的合约没有实现ERC1155TokenReceiver接口中相应的函数
· The transfer MUST be reverted with the one caveat below.
该笔交易必须被回滚并给出下面的警告信息。
。If the token(s) being sent are part of a hybrid implementation of another standard, that particular standard’s rules on sending to a contract MAY now be followed instead. See “Compatibility with other standards” section.
如果交易的通证是用其它合约标准实现的并且通证的实现代码中包含标准和非标准函数,则该交易可以遵循该通证的合约标准而不是ERC1155标准。详细信息请参看“Compatibility with other standards “。
Scenario#4 : The receiver implements the necessary ERC1155TokenReceiver interface function(s) but returns an unknown value.
场景4:接收合约实现了ERC1155TokenReceiver中相应的接口函数但返回一个未知值。
· The transfer MUST be reverted.
该笔交易必须被回滚。
Scenario#5 : The receiver implements the necessary ERC1155TokenReceiver interface function(s) but throws an error.
场景5:接收合约实现了ERC1155TokenReceiver中相应的接口函数但抛出错误。
· The transfer MUST be reverted.
该笔交易必须被回滚。
Scenario#6 : The receiver implements the ERC1155TokenReceiver interface and is the recipient of one and only one balance change (e.g. safeTransferFrom called).
场景6:接收合约实现了ERC1155TokenReceiver接口函数,并且接收者有且仅有一个账户的余额发生了变化(比如safeTransferFrom被调用)。
· The balances for the transfer MUST have been updated before the ERC1155TokenReceiver hook is called on a recipient contract.
转账交易中账户余额的更新必须在ERC1155TokenReceiver接口函数在接收合约处被调用之前完成。
· The transfer event MUST have been emitted to reflect the balance changes before the ERC1155TokenReceiver hook is called on the recipient contract.
该笔转账的事件必须在ERC1155TokenReceiver接口函数在接收合约处被调用前触发,并且事件要反映账户余额的变化。
· One of onERC1155Received or onERC1155BatchReceived MUST be called on the recipient contract.
onERC1155Received或onERC1155BatchReceived必须在接收合约处被调用。
· The onERC1155Received hook SHOULD be called on the recipient contract and its rules followed.
onERC1155Received必须在接收合约处被调用并遵循其调用规则。
。See “onERC1155Received rules” for further rules that MUST be followed.
关于调用onERC1155Received必须遵循的规则,更多细节请参看“onERC1155Received rules”。
· The onERC1155BatchReceived hook MAY be called on the recipient contract and its rules followed.
onERC1155BatchReceived或许(并非一定)会在接收合约处被调用,一旦被调用则必须遵循其调用规则。
。See “onERC1155BatchReceived rules” for further rules that MUST be followed.
关于调用onERC1155BatchReceived必须遵循的规则,更多细节请参看“onERC1155BatchReceived rules”。
Scenario#7 : The receiver implements the ERC1155TokenReceiver interface and is the recipient of more than one balance change (e.g. safeBatchTransferFrom called).
场景7:接收合约实现了ERC1155TokenReceiver接口函数,并且接收者有多个账户余额发生了变化(比如safeBatchTransferFrom被调用)。
· All balance transfers that are referenced in a call to an ERC1155TokenReceiver hook MUST be updated before the ERC1155TokenReceiver hook is called on the recipient contract.
转账交易中所有账户余额的更新必须在ERC1155TokenReceiver接口函数在接收合约处被调用之前完成。
· All transfer events MUST have been emitted to reflect current balance changes before an ERC1155TokenReceiver hook is called on the recipient contract.
所有的转账事件必须在ERC1155TokenReceiver接口函数在接收合约处被调用前触发,并且事件要反映账户的余额变化。
· onERC1155Received or onERC1155BatchReceived MUST be called on the recipient as many times as necessary such that every balance change for the recipient in the scenario is accounted for.
对每一个账户余额的变动,onERC1155Received或onERC1155BatchReceived都必须在接收合约处被调用。
。The return magic value for every hook call MUST be checked and acted upon as per “onERC1155Received rules” and “onERC1155BatchReceived rules”.
对每一个接口函数的返回幻术值(return magic value)必须进行检查和处理,并遵循“onERC1155Received rules”和“onERC1155BatchReceived rules”中的规则
· The onERC1155BatchReceived hook SHOULD be called on the recipient contract and its rules followed.
onERC1155BatchReceived必须在接收合约处被调用并遵循其调用规则。
。See “onERC1155BatchReceived rules” for further rules that MUST be followed.
关于调用onERC1155BatchReceived必须遵循的规则,更多细节请参看“onERC1155BatchReceived rules”。
· The onERC1155Received hook MAY be called on the recipient contract and its rules followed.
onERC1155Received或许(并非一定)会在接收合约处被调用,如调用则必须遵循其调用规则。
。See “onERC1155Received rules” for further rules that MUST be followed.
关于调用onERC1155Received必须遵循的规则,更多细节请参看“onERC1155Received rules”。
Scenario#8 : You are the creator of a contract that implements the ERC1155TokenReceiver interface and you forward the token(s) onto another address in one or both of onERC1155Received and onERC1155BatchReceived.
场景8:你写了一个智能合约,实现了ERC1155TokenReceiver接口函数的功能,你调用onERC1155Received或onERC1155BatchReceived或两个都调用,把该合约通证转账到另一个地址。
· Forwarding should be considered acceptance and then initiating a new safeTransferFrom or safeBatchTransferFrom in a new context.
该转账将被视为已经接收,并继续调用safeTransferFrom或safeBatchTransferFrom。
。The prescribed keccak256 acceptance value magic for the receiver hook being called MUST be returned after forwarding is successful.
该转账成功完成后,被调用的接收合约中的接口函数所产生的keccak256值必须被返回。
· The _data argument MAY be re-purposed for the new context.
参数“_data”可以(并非必须)被用于新的场景。
· If forwarding fails the transaction MAY be reverted.
如果该转账失败,则交易可以(并非必须)被回滚
。If the contract logic wishes to keep the ownership of the token(s) itself in this case it MAY do so.
在此场景下,如果合约设计者希望合约仍然保留对该通证的所有权,则通证所有权可以(并非必须)仍然为合约所有。
Scenario#9 : You are transferring tokens via a non-standard API call i.e. an implementation specific API and NOT safeTransferFrom or safeBatchTransferFrom.
场景9:用户通过非标准API函数转账通证。所谓的非标准API函数是指除safeTransferFrom和safeBatchTransferFrom以外的API函数。
· In this scenario all balance updates and events output rules are the same as if a standard transfer function had been called.
在此场景中,转账交易里所有发生的账户余额变化和触发的事件消息都必须遵循标准API被调用时所遵循的规则。
。i.e. an external viewer MUST still be able to query the balance via a standard function and it MUST be identical to the balance as determined by TransferSingle and TransferBatch events alone.
即用户仍然可以通过标准函数查询余额,并且所查询到的结果和调用TransferSingle及TransferBatch事件得到的结果一样。
· If the receiver is a contract the ERC1155TokenReceiver hooks still need to be called on it and the return values respected the same as if a standard transfer function had been called.
如果接收者是智能合约,ERC1155TokenReceiver接口函数仍然必须被调用,且返回值必须与调用标准函数时一样。
。However while the safeTransferFrom or safeBatchTransferFrom functions MUST revert if a receiving contract does not implement the ERC1155TokenReceiver interface, a non-standard function MAY proceed with the transfer.
当接收者是智能合约,但该合约并未实现ERC1155TokenReceiver接口函数时,safeTransferFrom或safeBatchTransferFrom一定会回滚交易。但对非标准函数而言,它可能(并非一定)会继续执行后续的操作而不回滚交易。
。See “Implementation specific transfer API rules”.
更多细节请参看“Implementation specific transfer API rules”
Rules 规则
safeTransferFrom rules safeTransferFrom规则
· Caller must be approved to manage the tokens being transferred out of the _from account (see “Approval” section).
调用者必须得到授权才可以从参数“_from”指定的账户转账通证。
· MUST revert if _to is the zero address.
如果参数“_to”设定的地址为零地址,则交易必须回滚。
· MUST revert if balance of holder for token _id is lower than the _value sent to the recipient.
对参数“token_id”所指的通证,如果其转出账户的余额小于参数“_value”所定义的金额,则交易必须回滚。
· MUST revert on any other error.
如果转账交易出现任何其它错误,交易也必须回滚。
· MUST emit the TransferSingle event to reflect the balance change (see “TransferSingle and TransferBatch event rules” section).
必须触发TransferSingle事件以反映账户余额的变化(请参看“TransferSingle and TransferBatch event rules”章节)
· After the above conditions are met, this function MUST check if _to is a smart contract (e.g. code size > 0). If so, it MUST call onERC1155Received on _to and act appropriately (see “onERC1155Received rules” section).
当上述条件都满足时,safeTransferFrom函数就必须检查参数“_to”是否是一个智能合约地址(比如检查code size是否大于0),如果是,就必须在参数“_to”所指向的智能合约上调用onERC1155Received并执行相应的操作(请参看“onERC1155Received rules”章节)。
。The _data argument provided by the sender for the transfer MUST be passed with its contents unaltered to the onERC1155Received hook function via its _data argument.
交易发送者必须将参数“_data”所含的数据原原本本,不做任何改动地传递给onERC1155Received接口函数的参数“_data”。
safeBatchTransferFrom rules: safeBatchTransferFrom规则
· Caller must be approved to manage all the tokens being transferred out of the _from account (see “Approval” section).
调用者必须得到授权才可以从参数“_from”设定的账户转账通证。
· MUST revert if _to is the zero address.
如果参数“_to”设定的地址为零地址,则交易必须回滚。
· MUST revert if length of _ids is not the same as length of _values.
如果参数“_ids”的长度和参数“_values”的长度不同,则交易必须回滚。
· MUST revert if any of the balance(s) of the holder(s) for token(s) in _ids is lower than the respective amount(s) in _values sent to the recipient.
对参数“_ids”所指的通证,如果其任一转出账户的余额小于该交易所对应的参数“_values”所定义的金额,则交易必须回滚。
· MUST revert on any other error.
如果转账交易出现任何其它错误,交易也必须回滚。
· MUST emit TransferSingle or TransferBatch event(s) such that all the balance changes are reflected (see “TransferSingle and TransferBatch event rules” section).
必须触发TransferSingle或TransferBatch事件以反映所有账户余额的变化(请参看“TransferSingle and TransferBatch event rules”章节)
· The balance changes and events MUST occur in the array order they were submitted (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
所有账户余额的变化和事件的触发必须按其被提交的顺序发生(即_ids[0]/_values[0]在_ids[1]/_values[1]之前发生……)。
· After the above conditions are met, this function MUST check if _to is a smart contract (e.g. code size > 0). If so, it MUST call onERC1155Received or onERC1155BatchReceived on _to and act appropriately (see “onERC1155Received and onERC1155BatchReceived rules” section).
当上述条件满足时,safeBatchTransferFrom函数必须检查参数“_to”是否是一个智能合约地址(比如检查code size是否大于0),如果是,就必须在参数“_to”所指向的智能合约上调用onERC1155Received或onERC1155BatchReceived并执行相应的操作(请参看“onERC1155Received and onERC1155BatchReceived rules”章节)。
。The _data argument provided by the sender for the transfer MUST be passed with its contents unaltered to the ERC1155TokenReceiver hook function(s) via their _data argument.
交易发送者必须将参数“_data”所含的数据原原本本,不做任何改动地传递给onERC1155Received接口函数的参数“_data”。
TransferSingle and TransferBatch event rules: TransferSingle和TransferBatch规则
· TransferSingle SHOULD be used to indicate a single balance transfer has occurred between a _from and _to pair.
当单笔转账从参数“_from”指定的地址发送到参数“_to”指定的地址时,应该触发TransferSingle。
。It MAY be emitted multiple times to indicate multiple balance changes in the transaction, but note that TransferBatch is designed for this to reduce gas consumption.
若交易中出现多次转账交易,可以触发多次TransferSingle。但值得注意的是,在这种情况下可以改用TransferBatch而不用多次触发TransferSingle。TransferBatch是专为此种情形设计的,使用它能节省不少gas费用。
。The _operator argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
参数“_operator”所指定的账户/合约地址必须被授权才能发起转账交易(必须是“msg.sender”)。
。The _from argument MUST be the address of the holder whose balance is decreased.
参数“_from”所指定的地址在交易发生后,余额减少。
。The _to argument MUST be the address of the recipient whose balance is increased.
参数“_to”所指定的地址在交易发生后,余额增加。
。The _id argument MUST be the token type being transferred.
转账交易的通证种类由参数“_id”所指代。
。The _value argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by.
在转账交易中,一方余额减少而另一方余额增加。余额减少方所减少的通证数量必须等于参数“_value”的值,并且也必须等于余额增加方所增加的通证数量。
。When minting/creating tokens, the _from argument MUST be set to 0x0 (i.e. zero address).
当挖矿/创建通证时,参数“_from”的值必须设为“0x0”(即零地址)。
See “Minting/creating and burning/destroying rules”.
请参看“Minting/creating and burning/destroying rules”
。When burning/destroying tokens, the _to argument MUST be set to 0x0 (i.e. zero address).
当消除/销毁通证时,参数”_to”的值必须设为“0x0”(即零地址)。
See “Minting/creating and burning/destroying rules”.
请参看“Minting/creating and burning/destroying rules”
· TransferBatch SHOULD be used to indicate multiple balance transfers have occurred between a _from and _to pair.
当多笔转账从参数“_from”指定的地址发送到参数“_to”指定的地址时,应该触发TransferBatch。
。It MAY be emitted with a single element in the list to indicate a singular balance change in the transaction, but note that TransferSingle is designed for this to reduce gas consumption.
在这种情况下也可以对这些交易中的每一笔转账触发一次TransferSingle。但值得注意的是,TransferBatch是专为此种情形设计的,使用它能节省不少gas费用。
。The _operator argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
参数“_operator”所指定的账户/合约地址必须被授权才能发起转账交易(必须是“msg.sender”)。
。The _from argument MUST be the address of the holder whose balance is decreased for each entry pair in _ids and _values.
在每一个参数对“_ids”和“_values”所对应的转账交易中,参数“_from”所指定的地址在交易发生后,余额减少。
。The _to argument MUST be the address of the recipient whose balance is increased for each entry pair in _ids and _values.
在每一个参数对“_ids”和“_values”所对应的转账交易中,参数“_to”所指定的地址在交易发生后,余额增加。
。The _ids array argument MUST contain the ids of the tokens being transferred.
转账交易的一系列通证中每一种通证的索引都必须对应数组参数“_ids”中的一个值,即数组参数“_ids”包含了所有转账通证的索引。
。The _values array argument MUST contain the number of token to be transferred for each corresponding entry in _ids.
转账交易的一系列通证中,每一种通证的转账数量都必须对应数组参数“_values”中的一个值,即数组参数“_values”包含了所有转账通证中每一种通证的转账数量。
。_ids and _values MUST have the same length.
参数“_ids”和“_values”必须长度一致。
。When minting/creating tokens, the _from argument MUST be set to 0x0 (i.e. zero address).
当挖矿/创建通证时,参数“_from”的值必须设为“0x0”(即零地址)。
See “Minting/creating and burning/destroying rules”.
请参看“Minting/creating and burning/destroying rules”
。When burning/destroying tokens, the _to argument MUST be set to 0x0 (i.e. zero address).
当消除/销毁通证时,参数”_to”的值必须设为“0x0”(即零地址)。
See “Minting/creating and burning/destroying rules”.
请参看“Minting/creating and burning/destroying rules”
· The total value transferred from address 0x0 minus the total value transferred to 0x0 observed via the TransferSingle and TransferBatch events MAY be used by clients and exchanges to determine the “circulating supply” for a given token ID.
给定一个通证ID,根据TransferSingle和TransferBatch事件观测到的从地址“0x0”转出的通证总量减去发送至地址“0x0”的通证总量所得到的数量可被用户及交易所视为该通证的“流通总量”。
· To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from 0x0 to 0x0, with the token creator as _operator, and a _value of 0.
给定一个通证ID,如果该通证的初始发行量为0,则其合约触发TransferSingle事件时,应从地址“0x0”发送到地址“0x0”,通证的创造者(creator)由参数“_operator”所定义,参数“_value”的值为0。
· All TransferSingle and TransferBatch events MUST be emitted to reflect all the balance changes that have occurred before any call(s) to onERC1155Received or onERC1155BatchReceived.
所有反映账户余额变化的TransferSingle和TransferBatch事件都必须在onERC1155Received或onERC1155BatchReceived被调用前触发。
。To make sure event order is correct in the case of valid re-entry (e.g. if a receiver contract forwards tokens on receipt) state balance and events balance MUST match before calling an external contract.
当发生事件重入(re-entry)时(比如一个合约在收到通证后紧接着转发通证)为了保证事件触发顺序的正确,系统的状态(?state balance)和事件(?events balance)必须匹配,然后再调用外部合约。
onERC1155Received rules: onERC1155Received规则
· The _operator argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
参数“_operator”所指定的账户/合约地址必须被授权才能发起转账交易(必须是“msg.sender”)。
· The _from argument MUST be the address of the holder whose balance is decreased.
参数“_from”所指定的地址在交易发生后,余额减少。
· _from MUST be 0x0 for a mint.
挖矿时参数“_from”的值必须为“0x0”。
· The _id argument MUST be the token type being transferred.
转账交易的通证种类由参数“_id”所指代。
· The _value argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by.
在转账交易中,一方余额减少而另一方余额增加。余额减少方所减少的通证数量必须等于参数“_value”的值,并且也必须等于余额增加方所增加的通证数量。
· The _data argument MUST contain the information provided by the sender for the transfer with its contents unaltered.
交易发送者必须将参数“_data”所含的数据原原本本,不做任何改动地传递给接收者。
。i.e. it MUST pass on the unaltered _data argument sent via the safeTransferFrom or safeBatchTransferFrom call for this transfer.
也即是onERC1155Received必须将safeTransferFrom 或safeBatchTransferFrom 函数传来的“_data”参数不做任何改动地中转。
· The recipient contract MAY accept an increase of its balance by returning the acceptance magic value bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))
接收合约如果返回了“幻术值(acceptance magic value)”bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))其账户余额可能会增加。
。If the return value is bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) the transfer MUST be completed or MUST revert if any other conditions are not met for success.
如果返回值是bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")),则转账交易要么成功完成,要么因某些条件不满足而回滚。
· The recipient contract MAY reject an increase of its balance by calling revert.
当接收合约回滚交易后,其账户余额可能不会增加。
。If the recipient contract throws/reverts the transaction MUST be reverted.
如果接收合约抛出异常/回滚,则交易必须被回滚。
· If the return value is anything other than bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) the transaction MUST be reverted.
如果返回值不是bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")),则交易必须被回滚。
· onERC1155Received (and/or onERC1155BatchReceived) MAY be called multiple times in a single transaction and the following requirements must be met:
在一笔交易中,onERC1155Received(和/或onERC1155BatchReceived)可以被多次调用,但必须满足下列条件:
。All callbacks represent mutually exclusive balance changes.
所有callback函数代表的余额变化都是互斥的。
。The set of all calls to onERC1155Received and onERC1155BatchReceived describes all balance changes that occurred during the transaction in the order submitted.
所有对onERC1155Received和onERC1155BatchReceived的调用代表的余额变化依照其提交顺序依次进行。
· A contract MAY skip calling the onERC1155Received hook function if the transfer operation is transferring the token to itself.
如果一笔交易是合约自己给自己转账,则可以不调用onERC1155Received接口函数。
onERC1155BatchReceived rules: onERC1155BatchReceived规则
· The _operator argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender).
参数“_operator”所指定的账户/合约地址必须被授权才能发起转账交易(必须是“msg.sender”)。
· The _from argument MUST be the address of the holder whose balance is decreased.
参数“_from”所指定的地址在交易发生后,余额减少。
。_from MUST be 0x0 for a mint.
挖矿时参数“_from”的值必须为“0x0”。
· The _ids argument MUST be the list of tokens being transferred.
参数“_ids”表示交易转账的通证列表。
· The _values argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by.
在转账交易中,一方余额减少而另一方余额增加。余额减少方所减少的每一种通证的数量必须等于参数“_values”中的一个值,并且也必须等于余额增加方所增加的该种通证的数量。
· The _data argument MUST contain the information provided by the sender for the transfer with its contents unaltered.
交易发送者必须将参数“_data”所含的数据原原本本,不做任何改动地传递给接收者。
。i.e. it MUST pass on the unaltered _data argument sent via the safeBatchTransferFrom call for this transfer.
也即是onERC1155BatchReceived必须将safeBatchTransferFrom 函数传来的“_data”参数不做任何改动地中转。
· The recipient contract MAY accept an increase of its balance by returning the acceptance magic value bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
接收合约如果返回了“幻术值(acceptance magic value)”bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))其账户余额可能会增加。
。If the return value is bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) the transfer MUST be completed or MUST revert if any other conditions are not met for success.
如果返回值是bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")),则转账交易要么成功完成,要么因某些条件不满足而回滚。
· The recipient contract MAY reject an increase of its balance by calling revert.
当接收合约回滚交易后,其账户余额可能不会增加。
。If the recipient contract throws/reverts the transaction MUST be reverted.
如果接收合约抛出异常/回滚,则交易必须被回滚。
· If the return value is anything other than bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) the transaction MUST be reverted.
如果返回值不是bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")),则交易必须被回滚。
· onERC1155BatchReceived (and/or onERC1155Received) MAY be called multiple times in a single transaction and the following requirements must be met:
在一笔交易中,onERC1155BatchReceived(和/或onERC1155Received)可以被多次调用,但必须满足下列条件:
。All callbacks represent mutually exclusive balance changes.
所有callback函数代表的余额变化都是互斥的。
。The set of all calls to onERC1155Received and onERC1155BatchReceived describes all balance changes that occurred during the transaction in the order submitted.
所有对onERC1155Received和onERC1155BatchReceived的调用代表的余额变化依照其提交顺序依次进行。
· A contract MAY skip calling the onERC1155BatchReceived hook function if the transfer operation is transferring the token(s) to itself.
如果一笔交易是合约自己给自己转账,则可以不调用onERC1155BatchReceived接口函数。
ERC1155TokenReceiver ERC-165 rules: ERC1155TokenReceiver ERC-165规则
· The implementation of the ERC-165 supportsInterface function SHOULD be as follows:
ERC-165 supportsInterface函数的实现应遵循下列规则:
· The implementation MAY differ from the above but:
函数实现的规则可能和上述规则不同,但是:
。It MUST return the constant value true if 0x01ffc9a7 is passed through the interfaceID argument. This signifies ERC-165 support.
当参数interfaceID的值为“0x01ffc9a7”时,函数必须返回“true”,以此体现对ERC-165的支持。
。It MUST return the constant value true if 0x4e2312e0 is passed through the interfaceID argument. This signifies ERC-1155 ERC1155TokenReceiver support.
当参数interfaceID的值为“0x4e2312e0”时,函数必须返回“true”,以此体现对ERC-1155 ERC1155TokenReceiver的支持。
。It MUST NOT consume more than 10,000 gas.
它所耗费的gas不能超过10000。
· This keeps it below the ERC-165 requirement of 30,000 gas, reduces the gas reserve needs and minimises possible side-effects of gas exhaustion during the call.
ERC-165 supportsInterface函数的实现所消耗的gas小于ERC-165标准规定的30000,这降低了gas的储备需求,将gas耗尽所可能引发的负面效应降到最低。
Implementation specific transfer API rules: 特定转账API函数的实现规则
· If an implementation specific API function is used to transfer ERC-1155 token(s) to a contract, the safeTransferFrom or safeBatchTransferFrom (as appropriate) rules MUST still be followed if the receiver implements the ERC1155TokenReceiver interface. If it does not the non-standard implementation SHOULD revert but MAY proceed.
当一个API函数是用于向一个智能合约转账ERC-1155通证时,如果该智能合约实现了ERC1155TokenReceiver接口函数,则调用safeTransferFrom或safeBatchTransferFrom所必须遵循的规则仍然必须遵循。如果该合约没有实现ERC1155TokenReceiver接口函数则交易要回滚,但在交易回滚后可以(并非一定)继续执行后续的语句。
· An example: 实例
1 An approved user calls a function such as function myTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values);.
经过授权的用户调用函数myTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values)时:
2 myTransferFrom updates the balances for _from and _to addresses for all _ids and _values.
myTransferFrom会将所有”_ids”和“_values”对应的通证种类及数量从”_from”地址转账到“_to”地址。
3 myTransferFrom emits TransferBatch with the details of what was transferred from address _from to address _to.
myTransferFrom会触发TransferBatch事件,事件会包含所转账的通证信息、发送者和接收者地址。
4 myTransferFrom checks if _to is a contract address and determines that it is so (if not, then the transfer can be considered successful).
myTransferFrom会检查并认定“_to”地址是否是一个智能合约地址(如果不是智能合约地址,转账可被视为成功)。
5 myTransferFrom calls onERC1155BatchReceived on _to and it reverts or returns an unknown value (if it had returned bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) the transfer can be considered successful).
myTransferFrom会在“_to”指向的智能合约上调用onERC1155BatchReceived并回滚交易或返回一个未知值(如果myTransferFrom返回bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))时,该转账交易被视为成功)。
6 At this point myTransferFrom SHOULD revert the transaction immediately as receipt of the token(s) was not explicitly accepted by the onERC1155BatchReceived function.
此时myTransferFrom应该立刻回滚交易,因为onERC1155BatchReceived函数并不显式确保通证一定被成功接收。
7 If however myTransferFrom wishes to continue it MUST call supportsInterface(0x4e2312e0) on _to and if it returns the constant value true the transaction MUST be reverted, as it is now known to be a valid receiver and the previous acceptance step failed.
如果myTransferFrom希望继续执行后续操作,它必须在“_to”指向的智能合约上调用supportsInterface(0x4e2312e0)。如果当它调用supportsInterface(0x4e2312e0)后,返回值是“true“则该转账交易必须被回滚,因为直到此时它才被证明是有效的接收者,而前一步的交易接收不成功。
· NOTE: You could have called supportsInterface(0x4e2312e0) at a previous step if you wanted to gather and act upon that information earlier, such as in a hybrid standards scenario.
注意:如果你想早点得到相关信息并进行后续操作可以在前一步就调用supportsInterface(0x4e2312e0)。
8 If the above call to supportsInterface(0x4e2312e0) on _to reverts or returns a value other than the constant value true the myTransferFrom function MAY consider this transfer successful.
如果在“_to“指向的智能合约调用supportsInterface(0x4e2312e0)使得交易回滚或得到的返回值不是”true“则myTransferFrom函数也可以(并非一定)视此交易为成功。
· NOTE: this MAY result in unrecoverable tokens if sent to an address that does not expect to receive ERC-1155 tokens.
注意:如果接收方地址无法接收ERC-1155通证,则这种操作可能会导致转账的通证永久丢失。
· The above example is not exhaustive but illustrates the major points (and shows that most are shared with safeTransferFrom and safeBatchTransferFrom):
上例没有详尽所有的情形,但囊括了要点(实际上这些要点很多都与safeTransferFrom和safeBatchTransferFrom一样)。
。Balances that are updated MUST have equivalent transfer events emitted.
有多少交易余额发生变化就要有多少对应的交易事件触发。
。A receiver address has to be checked if it is a contract and if so relevant ERC1155TokenReceiver hook function(s) have to be called on it.
接收者地址必须被检查是否为智能合约地址,如果是则ERC1155TokenReceiver接口函数必须在该合约处被调用。
。Balances (and events associated) that are referenced in a call to an ERC1155TokenReceiver hook MUST be updated (and emitted) before the ERC1155TokenReceiver hook is called.
账户余额的更新(以及触发的相关事件)必须在ERC1155TokenReceiver接口被调用前发生。
。The return values of the ERC1155TokenReceiver hook functions that are called MUST be respected if they are implemented.
所有被调用并且被实现的ERC1155TokenReceiver接口函数,其返回值都必须被合理设置。
。Only non-standard transfer functions MAY allow tokens to be sent to a recipient contract that does NOT implement the necessary ERC1155TokenReceiver hook functions. safeTransferFrom and safeBatchTransferFrom MUST revert in that case (unless it is a hybrid standards implementation see “Compatibility with other standards”).
仅当调用非标准函数时才允许通证被发送给一个没有实现ERC1155TokenReceiver接口函数的智能合约。在这种情况下,safeTransferFrom和safeBatchTransferFrom必须回滚交易(除非它包含标准和非标准的接口实现,详细信息请参看“Compatibility with other standards “)。
Minting/creating and burning/destroying rules: 挖矿/创建和消除/销毁 规则
· A mint/create operation is essentially a specialized transfer and MUST follow these rules:
挖矿/创建实质上是一种特殊的转账交易,必须遵循下列规则:
。To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from 0x0 to 0x0, with the token creator as _operator, and a _value of 0.
对一个初始发行量为0的通证,给定其token ID,其合约在触发TransferSingle事件时发送方地址和接收方地址都应该设为“0x0”,通证的创建者(creator)为参数“_operator”,参数“_value”值为0。
。The “TransferSingle and TransferBatch event rules” MUST be followed as appropriate for the mint(s) (i.e. singles or batches) however the _from argument MUST be set to 0x0 (i.e. zero address) to flag the transfer as a mint to contract observers.
(单币种或多币种)挖矿时,“TransferSingle and TransferBatch event rules”章节中所描述的规则必须遵循,此时参数”_from”必须设为“0x0”(即零地址)以标识此交易为挖矿。
· NOTE: This includes tokens that are given an initial balance in the contract. The balance of the contract MUST also be able to be determined by events alone meaning initial contract balances (for eg. in construction) MUST emit events to reflect those balances too.
注意:此规则也适用于初始发行量不为0的通证。对初始发行量不为0的通证其合约账户的余额也必须在触发的事件中反映出来,也即合约账户的初始余额(比如在构造函数中设定的余额)必须在触发的事件中反映出来。
· A burn/destroy operation is essentially a specialized transfer and MUST follow these rules:
消除/销毁实质上是一种特殊的转账交易,必须遵循下列规则:
。The “TransferSingle and TransferBatch event rules” MUST be followed as appropriate for the burn(s) (i.e. singles or batches) however the _to argument MUST be set to 0x0 (i.e. zero address) to flag the transfer as a burn to contract observers.
(单币种或多币种)销毁时,“TransferSingle and TransferBatch event rules”章节中所描述的规则也必须遵循,此时参数”_to”必须设为“0x0”(即零地址)以标识此交易为销毁。
。When burning/destroying you do not have to actually transfer to 0x0 (that is impl specific), only the _to argument in the event MUST be set to 0x0 as above.
当消除/销毁时,你并不一定要向”0x0”地址转账(根据具体的实现而定),但必须将事件的参数“_to”设为“0x0”。
· The total value transferred from address 0x0 minus the total value transferred to 0x0 observed via the TransferSingle and TransferBatch events MAY be used by clients and exchanges to determine the “circulating supply” for a given token ID.
给定一个通证ID,根据TransferSingle和TransferBatch事件观测到的从地址“0x0”转出的通证总量减去发送至地址“0x0”的通证总量所得到的数量可被用户及交易所视为该通证的“流通总量”。
· As mentioned above mint/create and burn/destroy operations are specialized transfers and so will likely be accomplished with custom transfer functions rather than safeTransferFrom or safeBatchTransferFrom. If so the “Implementation specific transfer API rules” section would be appropriate.
综上所述,挖矿/创建和消除/销毁通证的操作是特殊的转账交易,有可能通过除safeTransferFrom和safeBatchTransferFrom以外的用户自定义函数实现。当用户用自定义的函数实现时,必须遵循“Implementation specific transfer API rules”章节所定义的规则。
。Even in a non-safe API and/or hybrid standards case the above event rules MUST still be adhered to when minting/creating or burning/destroying.
当进行挖矿/创建和消除/销毁通证的操作时,即便用户使用的函数并非一定安全,或用户使用的函数可能既包含自定义函数也包含标准函数,其触发的挖矿/创建和消除/销毁事件也必须遵循上述规则。
· A contract MAY skip calling the ERC1155TokenReceiver hook function(s) if the mint operation is transferring the token(s) to itself. In all other cases the ERC1155TokenReceiver rules MUST be followed as appropriate for the implementation (i.e. safe, custom and/or hybrid).
如果挖矿操作是给自己转账通证,则合约可不用执行ERC1155TokenReceiver的接口函数。除此以外在所有的其它情形中,ERC1155TokenReceiver的规则都必须遵循。
A solidity example of the keccak256 generated constants for the various magic values (these MAY be used by implementation):
下例展示了一个Solidity实例,它基于keccak256算法产生了若干幻术值(这些幻术值可以被用在函数实现中):
Compatibility with other standards 与其它标准的兼容性
There have been requirements during the design discussions to have this standard be compatible with existing standards when sending to contract addresses, specifically ERC-721 at time of writing. To cater for this scenario, there is some leeway with the revert logic should a contract not implement the ERC1155TokenReceiver as per “Safe Transfer Rules” section above, specifically “Scenario#3 : The receiver does not implement the necessary ERC1155TokenReceiver interface function(s)”.
在制定本标准时,与现有标准尤其是ERC-721标准兼容一直是讨论的议题。当一个合约没有遵循ERC1155TokenReceiver的“Safe Transfer Rules”规则时,尤其是没有遵循其“场景3:接收者没有实现ERC1155TokenReceiver接口中相应的函数”的规则时,对交易回滚的处理可以有一些灵活的手法。
Hence in a hybrid ERC-1155 contract implementation an extra call MUST be made on the recipient contract and checked before any hook calls to onERC1155Received or onERC1155BatchReceived are made. Order of operation MUST therefore be:
在一个包含了非标准函数实现和标准函数实现的ERC-1155合约中,在调用任何onERC1155Received或onERC1155BatchReceived接口函数之前,还需要调用一个额外的函数,并且其调用的顺序必须遵循下列规则:
1 The implementation MUST call the function supportsInterface(0x4e2312e0) on the recipient contract, providing at least 10,000 gas.
该合约必须在接收合约处调用supportsInterface(0x4e2312e0)并且提供至少10000 gas。
2 If the function call succeeds and the return value is the constant value true the implementation proceeds as a regular ERC-1155 implementation, with the call(s) to the onERC1155Received or onERC1155BatchReceived hooks and rules associated.
如果该函数调用成功且返回值为“true”则该合约将继续执行后续动作调用onERC1155Received或onERC1155BatchReceived接口函数,与标准的ERC-1155合约一样。
3 If the function call fails or the return value is NOT the constant value true the implementation can assume the recipient contract is not an ERC1155TokenReceiver and follow its other standard’s rules for transfers.
如果该函数调用失败或返回值不是“true”则该合约可以认为接收合约不是ERC1155TokenReceiver,转而遵循其它规则。
Note that a pure implementation of a single standard is recommended rather than a hybrid solution, but an example of a hybrid ERC-1155/ERC-721 contract is linked in the references section under implementations.
注意:对一个通证标准的合约实现,建议要么都用标准函数要么都用自定义函数,把两者混在一起反而不好。但对ERC-1155/ERC-721通证标准,我们提供了一个实例,该实例代码中既包含标准函数也包含用户自定义函数。实例代码的链接在参考章节中。
An important consideration is that even if the tokens are sent with another standard’s rules the ERC-1155 transfer events MUST still be emitted. This is so the balances can still be determined via events alone as per ERC-1155 standard rules.
在设计ERC-1155通证标准时有一个重要的考虑:即使ERC-1155通证在交易过程中遵循的是其它通证标准,但ERC-1155所定义的事件必须遵循ERC-1155的规则触发。
Metadata 元数据
The URI value allows for ID substitution by clients. If the string {id} exists in any URI, clients MUST replace this with the actual token ID in hexadecimal form. This allows for a large number of tokens to use the same on-chain string by defining a URI once, for that large number of tokens.
用户可以用ID值取代URI值。如果URI中包含{id}字串,则用户必须将其用十六进制数的真实通证ID取代。这可以让大量通证共用相同的链上字符串,只需要定义一次URI即可。
· The string format of the substituted hexadecimal ID MUST be lowercase alphanumeric: [0-9a-f] with no 0x prefix.
通证的ID必须仅仅包含小写字母和数字【0-9a-f】并且不带前缀“0x”。
· The string format of the substituted hexadecimal ID MUST be leading zero padded to 64 hex characters length if necessary.
通证的ID必须包含64个十六进制字符,若字符数没有64个,则在字符串前面全部用0填充。
Example of such a URI: https://token-cdn-domain/{id}.json would be replaced with https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json if the client is referring to token ID 314592/0x4CCE0.
URI实例:“https://token-cdn-domain/{id}.json”中有{id}字串,它被实际的通证D(通证ID为“314592/0x4CCE0”)取代后为:
“https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json”
Metadata Extensions 元数据扩展
The optional ERC1155Metadata_URI extension can be identified with the (ERC-165 Standard Interface Detection)[https://eips.ethereum.org/EIPS/eip-165].
ERC1155Metadata_URI扩展是个可选项,它是否被使用可由ERC-165 Standard Interface Detection检测出来。
If the optional ERC1155Metadata_URI extension is included:
如果ERC1155Metadata_URI被使用了:
· The ERC-165 supportsInterface function MUST return the constant value true if 0x0e89341c is passed through the interfaceID argument.
如果ERC-165 supportsInterface接口函数的参数“interfaceID”的值为“0x0e89341c”,则其返回值必须为“true”。
· Changes to the URI MUST emit the URI event if the change can be expressed with an event (i.e. it isn’t dynamic/programmatic).
如果对URI值的改动可以在事件中表达(即这种改动不是通过动态/编程改变的)则这种改动必须触发URI事件。
。An implementation MAY emit the URI event during a mint operation but it is NOT mandatory.
An observer MAY fetch the metadata uri at mint time from the uri function if it was not emitted.
合约的实现代码可以在挖矿操作中触发URI事件,但这不是强制性的。
在挖矿时,如果没有事件触发,用户或许仍然可以从URI函数中获取元数据URI。
· The uri function SHOULD be used to retrieve values if no event was emitted.
如果没有事件触发,要获取数据就要调用URI函数。
· The uri function MUST return the same value as the latest event for an _id if it was emitted.
对同一”_id”,URI函数的返回值必须和最近一次触发的事件返回值一样。
· The uri function MUST NOT be used to check for the existence of a token as it is possible for an implementation to return a valid string even if the token does not exist.
URI函数不能用于检查某个通证是否存在,因为存在这种可能性:一个通证合约的实现代码对一个不存在的通证仍然返回一个有效的字符串。
ERC-1155 Metadata URI JSON Schema ERC-1155元数据 URI JSON框架
This JSON schema is loosely based on the “ERC721 Metadata JSON Schema”, but includes optional formatting to allow for ID substitution by clients. If the string {id} exists in any JSON value, it MUST be replaced with the actual token ID, by all client software that follows this standard.
JSON框架大体上基于“ERC721 Metadata JSON Schema”,但还包括一些可选的格式让用户可以用ID进行替代。如果JSON值里面包含{id}字串,它必须用真实的通证ID替代,其规则如下:
· The string format of the substituted hexadecimal ID MUST be lowercase alphanumeric: [0-9a-f] with no 0x prefix.
通证的ID必须仅仅包含小写字母和数字【0-9a-f】并且不带前缀“0x”。
· The string format of the substituted hexadecimal ID MUST be leading zero padded to 64 hex characters length if necessary.
通证的ID必须包含64个十六进制字符,若字符数没有64个,则在字符串前面全部用0填充。
An example of an ERC-1155 Metadata JSON file follows. The properties array proposes some SUGGESTED formatting for token-specific display properties and metadata.
下例为一个ERC-1155 Metadata JSON文件。其属性数组罗列了一些建议使用的格式,这些格式定义了通证的显示属性和元数据。
Localization 本地化
Metadata localization should be standardized to increase presentation uniformity across all languages. As such, a simple overlay method is proposed to enable localization. If the metadata JSON file contains a localization attribute, its content MAY be used to provide localized values for fields that need it. The localization attribute should be a sub-object with three attributes: uri, default and locales. If the string {locale} exists in any URI, it MUST be replaced with the chosen locale by all client software.
元数据的本地化应该有一套标准的做法,这样才能使得不管用什么语言,它的表述方式都是统一的。因此,有人提出了一种简单的覆盖方式。如果metadata JSON文件包含一项“本地化”属性,则这个属性的内容则可能提供了某些应用需要的本地化值。该“本地化”属性应该是一个子对象(sub-object)并且包含三个特性:uri,default(缺省值)和locales(属地)。如果URI中存在{locale}字串,则它必须用真实的属地替代。
JSON Schema JSON框架
Localized Sample 本地化实例
Base URI: 原始URI
es.json: 西班牙语的 es.json
fr.json: 法语的fr.json
Approval 授权
The function setApprovalForAll allows an operator to manage one’s entire set of tokens on behalf of the approver. To permit approval of a subset of token IDs, an interface such as ERC-1761 Scoped Approval Interface is suggested. The counterpart isApprovedForAll provides introspection into any status set by setApprovalForAll.
setApprovalForAll函数让授权者授权其他操作者管理其所有的通证。如果授权者只希望授权部分通证的管理权限则可以使用ERC-1761 Scoped Approval接口。如果想查看setApprovalForAll函数设置的授权状态可以调用isApprovedForAll函数进行查询。
An owner SHOULD be assumed to always be able to operate on their own tokens regardless of approval status, so should SHOULD NOT have to call setApprovalForAll to approve themselves as an operator before they can operate on them.
无论通证是否被授权给他人管理,通证的所有者永远都能管理自己的通证。因此通证的所有者无需调用setApprovalForAll给自己授权就可直接管理通证。
Rationale 基本原理
Metadata Choices 元数据的选择
The symbol function (found in the ERC-20 and ERC-721 standards) was not included as we do not believe this is a globally useful piece of data to identify a generic virtual item / asset and are also prone to collisions. Short-hand symbols are used in tickers and currency trading, but they aren’t as useful outside of that space.
符号(在ERC-20和ERC-721标准中都有)这一项没有被包括在内,因为我们不认为该项数据对标识一个虚拟物品/资产有什么意义并认为它还容易造成冲突。符号多用在标识和数字货币交易中,除此以外它没什么用处。
The name function (for human-readable asset names, on-chain) was removed from the standard to allow the Metadata JSON to be the definitive asset name and reduce duplication of data. This also allows localization for names, which would otherwise be prohibitively expensive if each language string was stored on-chain, not to mention bloating the standard interface. While this decision may add a small burden on implementers to host a JSON file containing metadata, we believe any serious implementation of ERC-1155 will already utilize JSON Metadata.
名称(人类易读的资产命名,属于链上数据)也没有被包含在内,这样做是为了使Metadata JSON成为准确定义资产名称的数据,减少重复的数据,这也可以使命名本地化。否则对每一种语言都要用一个字符串命名并且存到链上,这将会使耗费大得惊人,也会使合约标准的接口臃肿不堪。尽管这样的做法使得合约编写者必须用一个JSON文件存储元数据(metadata),看上去增加了一些负担,但我们认为任何一个严肃的ERC-1155合约编写者都会用JSON Metadata(译者注:作者的意思是即便他们不这样要求,严肃的代码编写者也会提供JSON Metadata)。
Upgrades 升级
The requirement to emit TransferSingle or TransferBatch on balance change implies that a valid implementation of ERC-1155 redeploying to a new contract address MUST emit events from the new contract address to replicate the deprecated contract final state. It is valid to only emit a minimal number of events to reflect only the final balance and omit all the transactions that led to that state. The event emit requirement is to ensure that the current state of the contract can always be traced only through events. To alleviate the need to emit events when changing contract address, consider using the proxy pattern, such as described in ERC-1538. This will also have the added benefit of providing a stable contract address for users.
当发生账户余额变化时,必须触发TransferSingle或TransferBatch。这意味着一个ERC-1155合约的实现代码被部署到一个新的合约地址时必须从新的合约地址触发事件,将老合约的最后状态再次显示。这时只要触发最少数量的事件以反映老合约的最后状态即可,而老合约在变为最后状态之前进行了哪些交易可以忽略不计。对事件触发设计的这个规则是为了保证当前合约的状态永远可以通过过往事件进行追踪。当改变合约地址时,为了减少不必要的事件触发,可以考虑使用代理模式,比如ERC-1538所定义的那样。这样做也是为了能给用户提供一个稳定的合约地址。
Design decision: Supporting non-batch 设计决策:支持非批量交易
The standard supports safeTransferFrom and onERC1155Received functions because they are significantly cheaper for single token-type transfers, which is arguably a common use case.
本标准支持safeTransferFrom和onERC1155Received函数,因为对单一通证的交易调用它们所需的耗费少很多,这应该好理解。
Design decision: Safe transfers only 设计决策:转账必须安全
The standard only supports safe-style transfers, making it possible for receiver contracts to depend on onERC1155Received or onERC1155BatchReceived function to be always called at the end of a transfer.
本标准只支持安全的转账,使接收合约在收到转账后,onERC1155Received或onERC1155BatchReceived函数必须被调用。
Guaranteed log trace 日志追踪有保障
As the Ethereum ecosystem continues to grow, many dapps are relying on traditional databases and explorer API services to retrieve and categorize data. The ERC-1155 standard guarantees that event logs emitted by the smart contract will provide enough data to create an accurate record of all current token balances. A database or explorer may listen to events and be able to provide indexed and categorized searches of every ERC-1155 token in the contract.
随着以太坊生态系统的持续发展,很多DAPP依赖传统的数据库和浏览器提供的API服务获取和分类数据。ERC-1155标准保证其智能合约所触发的事件日志能提供足够多的数据,准确地记录所有通证账户余额的变化。对合约中每一个ERC-1155通证,可以用数据库或浏览器监听所触发的事件,也可以提供经过索引和分类的搜索结果。
Approval 授权
The function setApprovalForAll allows an operator to manage one’s entire set of tokens on behalf of the approver. It enables frictionless interaction with exchange and trade contracts.
setApprovalForAll函数让授权者授权其他操作者管理其所有的通证。它使得交易所交易和合约交易之间完全无障碍。
Restricting approval to a certain set of token IDs, quantities or other rules MAY be done with an additional interface or an external contract. The rationale is to keep the ERC-1155 standard as generic as possible for all use-cases without imposing a specific approval scheme on implementations that may not need it. Standard token approval interfaces can be used, such as the suggested ERC-1761 Scoped Approval Interface which is compatible with ERC-1155.
如果授权者只希望授权部分通证,通证的部分数量或其它权限的管理则可以另外使用一个接口或外部合约来处理。这样做的基本原理是保证ERC-1155标准尽量通用,在任何情况下都无需在具体的代码实现中编写特殊的授权机制。而且这些具体的代码实现可能根本就不需要这种特殊的授权机制。如果实在需要这种授权可以使用标准的通证授权接口比如ERC-1761 Scoped Approval接口,它和ERC-1155协议是兼容的。
Usage 用法
This standard can be used to represent multiple token types for an entire domain. Both fungible and non-fungible tokens can be stored in the same smart-contract.
本标准可用于定义一个领域内的多种通证类型。同质通证和非同质通证可以共存于同一个智能合约内。
Batch Transfers 批量转账
The safeBatchTransferFrom function allows for batch transfers of multiple token IDs and values. The design of ERC-1155 makes batch transfers possible without the need for a wrapper contract, as with existing token standards. This reduces gas costs when more than one token type is included in a batch transfer, as compared to single transfers with multiple transactions.
safeBatchTransferFrom函数可以同时转账各种数量的各种通证。ERC-1155的设计支持批量转账而无需另外的打包合约(wrapper contract),而现有的其它通证标准要进行批量转账则需要另外的打包合约(wrapper contract)。当系统需要转账多种通证时,传统的做法不得不一笔笔的转账,而ERC-1155的设计使得转账多种通证所需的gas耗费大为降低,。
Another advantage of standardized batch transfers is the ability for a smart contract to respond to the batch transfer in a single operation using onERC1155BatchReceived.
这样设计的另一个好处是ERC-1155智能合约可以用onERC1155BatchReceived这一个操作处理批量转账。
It is RECOMMENDED that clients and wallets sort the token IDs and associated values (in ascending order) when posting a batch transfer, as some ERC-1155 implementations offer significant gas cost savings when IDs are sorted. See Horizon Games - Multi-Token Standard “packed balance” implementation for an example of this.
建议用户和钱包项目方要进行批量转账时,对待转账的所有token ID和每个ID对应的通证数量进行排序(升序排列)。因为ERC-1155标准对进行了排序的通证进行批量转账时会显著降低gas耗费。详细信息请参看“Horizon Games - Multi-Token Standard”章节中的“打包余额(packed balance)”实例。
Batch Balance 批量账户余额
The balanceOfBatch function allows clients to retrieve balances of multiple owners and token IDs with a single call.
balanceOfBatch函数让用户仅仅只需调用这个函数便能获取多个通证所有者及其所持有的通证的余额信息。
Enumerating from events 事件枚举
In order to keep storage requirements light for contracts implementing ERC-1155, enumeration (discovering the IDs and values of tokens) must be done using event logs. It is RECOMMENDED that clients such as exchanges and blockchain explorers maintain a local database containing the token ID, Supply, and URI at the minimum. This can be built from each TransferSingle, TransferBatch, and URI event, starting from the block the smart contract was deployed until the latest block.
为了让ERC-1155合约的实现尽量少地占用存储,枚举(枚举所有的通证ID及每个通证对应的数量)必须用事件日志实现。建议交易所和区块链浏览器项目方在本地保留一个数据库至少记录token ID,供应量和URI这三项信息。数据库的数据可以从TransferSingle,TransferBatch和URI事件中提取,记录的时间可以从智能合约部署的那一刻算起一直记录到最新产生的区块。
ERC-1155 contracts must therefore carefully emit TransferSingle or TransferBatch events in any instance where tokens are created, minted, transferred or destroyed.
ERC-1155合约的编写者在通证被创建,挖矿,交易和销毁时必须小心谨慎地触发TransferSingle和TransferBatch事件。
Non-Fungible Tokens 非同质通证
The following strategies are examples of how you MAY mix fungible and non-fungible tokens together in the same contract. The standard does NOT mandate how an implementation must do this.
下列示范展示了如何在一个智能合约中既定义同质通证也定义非同质通证,但ERC-1155标准并不强制要求编写者必须按该示范编写。
Split ID bits 切分ID的位
The top 128 bits of the uint256 _id parameter in any ERC-1155 function MAY represent the base token ID, while the bottom 128 bits MAY represent the index of the non-fungible to make it unique.
在任何一个ERC-1155函数中,参数”uint256 _id”的前128位都可以(并非一定)被用来定义token ID。而余下的128位可以(并非一定)被用来定义非同质通证的唯一索引。
Non-fungible tokens can be interacted with using an index based accessor into the contract/token data set. Therefore to access a particular token set within a mixed data contract and a particular non-fungible within that set, _id could be passed as <uint128: base token id><uint128: index of non-fungible>.
非同质通证可以用带索引的变量访问。如果一个合约的通证集合中有某个非同质通证,用户可以用”_id”访问该非同质通证,此时”_id”值的构成为<uint128:非同质通证ID><uint128:非同质通证的索引>。
To identify a non-fungible set/category as a whole (or a fungible) you COULD just pass in the base id via the _id argument as <uint128: base token id><uint128: zero>. If your implementation uses this technique this naturally means the index of a non-fungible SHOULD be 1-based.
为了标识一个非同质通证集合/类别,你可以将参数“_id”的值设为<uint128:非同质通证ID><uint128:0>。如果合约的代码实现使用了这个技巧,则意味着一个非同质通证的索引基于“1”(1-based)。
Inside the contract code the two pieces of data needed to access the individual non-fungible can be extracted with uint128(~0) and the same mask shifted by 128.
在合约中,访问一个非同质通证需要两部分数据(译者注:即高128位数据和低128位数据),这两部分数据可以分别用uint128(~0)和128位移位运算获得。
Note that 128 is an arbitrary number, an implementation MAY choose how they would like this split to occur as suitable for their use case. An observer of the contract would simply see events showing balance transfers and mints happening and MAY track the balances using that information alone. For an observer to be able to determine type (non-fungible or fungible) from an ID alone they would have to know the split ID bits format on a implementation by implementation basis.
注意:128不是个固定值,合约编写者可以自己选择合适的方式来划分这256位的用途。用户只需要能从合约触发的事件中看到转账交易和挖矿发生就行了,当然用户也可以通过这些事件追踪余额的变化。如果用户希望从ID中判断转账的通证类型(同质通证或非同质通证)则需要研究合约的实现代码是如何划分ID数位的用途的。
The ERC-1155 Reference Implementation is an example of the split ID bits strategy.
ERC-1155参考案例展示了如何划分ID的数位用途。
Natural Non-Fungible tokens 自然的非同质通证
Another simple way to represent non-fungibles is to allow a maximum value of 1 for each non-fungible token. This would naturally mirror the real world, where unique items have a quantity of 1 and fungible items have a quantity greater than 1.
有一个简单表示非同质通证的方法:对每一个非同质通证尽量用“1”来定义。这是对真实世界最自然的映射。在真实世界中每一个唯一的事物有且仅有一个,而每一种同质通证则有多个。
References 参考
Standards 标准
ERC-721 Non-Fungible Token Standard
ERC-165 Standard Interface Detection
ERC-1538 Transparent Contract Standard
JSON Schema
RFC 2119 Key words for use in RFCs to Indicate Requirement Levels
Implementations
ERC-1155 Reference Implementation
Horizon Games - Multi-Token Standard
Enjin Coin (GitHub)
The Sandbox - Dual ERC-1155/721 Contract
Articles & Discussions
Github - Original Discussion Thread
ERC-1155 - The Crypto Item Standard
Here Be Dragons - Going Beyond ERC-20 and ERC-721 To Reduce Gas Cost by ~80%
Blockonomi - Ethereum ERC-1155 Token Perfect for Online Games, Possibly More
Beyond Gaming - Exploring the Utility of ERC-1155 Token Standard!
ERC-1155: A new standard for The Sandbox
Copyright
Copyright and related rights waived via CC0.
除了为多个通证提供标准接口外,ERC-1155还带来其它重要好处:
通过将多个复杂的操作打包到一个交易中,它将使交易更便宜;
它能组合多个通证并启用原子交换(勿需第三方);
它将大大提高以太坊网络的效率;
ERC-1155允许开发人员将一组通证的代码存储在一个智能合约中,并在需要时被其他智能合约所调用。 简而言之,它可被充分地重复利用,而不是像现在其它标准下的不断复制代码部署新合约。 可想而知,这将大大减少以太坊的存储空间和算力。\
因为智能合约能够保证收益无法被侵犯,知识产权、版权等概念,可能在区块链领域将无存在的必要。
作者
创建日期
2024-05-07
所需
新增一种交易类型,添加一系列 [chain_id, address, nonce, y_parity, r, s] 授权元组。对于每个元组,向签名账户的代码写入一个委托设计器 (0xef0100 ++ address)。所有读取代码的操作必须加载设计器所指向的代码。
人们对为外部账户(EOAs)增加短期功能改进非常感兴趣,这可以提高应用的可用性,并在某些情况下提升安全性。特别的三个应用包括:
批处理:允许同一用户在一个原子交易中进行多个操作。一个常见的例子是 ERC-20 授权后跟随的支出,这在去中心化交易所(DEX)中是一个常见的工作流程,目前需要两个交易。批处理的高级用例偶尔涉及依赖关系:第一个操作的输出是第二个操作的输入的一部分。 赞助:账户 X 代表账户 Y 支付一个交易。账户 X 可以用其他 ERC-20 代币获得这项服务的报酬,或者可以是一个应用程序运营商为其用户免费处理交易。 权限降级:用户可以签署子密钥,并给予它们特定的权限,这些权限远低于对账户的全局访问权限。例如,可以想象一种权限,允许支出 ERC-20 代币但不允许支出 ETH,或者每天支出总余额的 1%,或者仅与特定应用程序进行交互。
SET_CODE_TX_TYPE
0x04
MAGIC
0x05
PER_AUTH_BASE_COST
2500
PER_EMPTY_ACCOUNT_COST
25000
我们引入了一种新的EIP-2718交易,即“设置代码交易”,其中 TransactionType
(交易类型)为SET_CODE_TX_TYPE
,并且 TransactionPayload
(交易装载)是以下内容的RLP序列化:
外部交易的字段 chain_id
、nonce
、max_priority_fee_per_gas
、max_fee_per_gas
、gas_limit
、destination
、value
、data
和 access_list
遵循 EIP-4844 的相同语义。请注意,这意味着空的(null) destination 是无效的。
authorization_list
是一个元组列表,存储(即提供)签名者希望在其 EOA 的应用场景中执行的地址与代码。如果 authorization_list
的长度为零,交易将被视为无效。
当授权元组(authorization tuple)中的任何字段无法在以下范围内时,该交易也被视为无效:
此交易的 EIP-2718 ReceiptPayload
为 rlp([status, cumulative_transaction_gas_used, logs_bloom, logs])
(分别对应:状态, 累计交易gas值, 日志_布隆, 日志)。
在执行交易开始时,在增加发送者的nonce后,对于每个[chain_id, address, nonce, y_parity, r, s]元组,执行以下操作:
验证链ID是0或当前链的ID。
authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
将authority
添加到accessed_addresses
(如EIP-2929中定义)。
验证authority
的代码要么为空,要么已经被委托。
验证authority
的 nonce 等于 nonce
。
如果authority
存在于trie(前缀树)中,则将PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST
的gas添加到全局退款计数器中。
将authority
的代码设置为0xef0100 || address。这是一个委托标识。
将authority
的nonce增加1。
如果上述任何步骤失败,立即停止处理该元组,并继续处理列表中的下一个元组。在多个元组对应同一authority
的情况下,将使用最后一个有效出现的地址设置代码。
请注意,授权元组的签名者可能与交易的tx.origin
不同。
代理(授权)指示
代理指示使用了EIP-3541中禁止的操作码0xef
,以指定代码具有特殊用途。这个指示要求所有检索代码操作都遵循地址指针,以填充可观察的账户代码。受影响的指令包括:EXTCODESIZE
、EXTCODECOPY
、EXTCODEHASH
、CALL
、CALLCODE
、STATICCALL
和DELEGATECALL
。
例如,EXTCODESIZE
将返回由 address
(地址)指向的代码的大小,而不是代表代理指示的 23
。CALL
将类似地从 address
加载代码,并在 authority
(授权)的应用场景中执行它。
如果一个代理指示者指向另一个指示者,形成潜在的指示者链或循环,客户端必须只检索第一个代码,然后停止跟随指示者链。
新交易的内在成本继承自EIP-2930,具体为21000 + 16 * 非零calldata字节 + 4 * 零calldata字节 + 1900 * 访问列表存储键计数 + 2400 * 访问列表地址计数
。此外,我们还增加了一个费用,费用为PER_EMPTY_ACCOUNT_COST * 授权列表长度
。
交易发送者将为所有授权元组支付费用,无论其有效性或重复性。
如果代码读取指令在解析代表授权代码时访问一个冷账户,则在正常费用上增加2600 gas的EIP-2929 COLD_ACCOUNT_READ_COST
费用,并将账户添加到accessed_addresses
中。否则,评估100
的WARM_STORAGE_READ_COST
费用。
修改 EIP-3607 所施加的限制,以允许其代码是有效的代表授权设计(即0xef0100 || address
)的外部拥有账户(EOAs)继续发起交易。任何其他代码值的账户均不得发起交易。
(注:Initdode是创建"存储在链上的字节码"的代码。 即通常指的是使用create2操作码时需要的字节码。此处翻译为“初始化代码”) 许多原因使得执行初始化代码并不理想。主要的担忧是它不自然。初始化代码的目的是初始化和部署合约。根据这个EIP,它将承担一个新的角色,以决定是否适合将代码部署到外部账户(EOA)。假设用户只希望在交易的普通调用数据中有相关操作时,代码被部署到他们的账户。这赋予了EOA独特的权力,控制代码在他们账户中何时以及执行什么。虽然EIP-7702如其所写仍在某种程度上允许这样做,但决策缺乏可编程性将迫使钱包不签署许多授权元组,而是专注于只签署指向可配置代理的元组。这使得EOA体验类似于智能合约钱包 。
此外,交易中的初始化代码倾向于在交易内部传播。这意味着它需要包含在授权元组中并进行签名。最小的初始化代码大约为15字节,仅仅是将合约代码从外部地址复制过来。总成本大约为 16 * 15 = 240
的调用数据成本,加上 EIP-3860 的成本 2 * 15 = 30
,再加上大约150的运行时成本。因此,光是准备账户就将花费近500额外的 gas;如果没有从外部账户复制,可能成本更高,达到1200+的 gas。
不论是否有初始化代码(Initcode),用户如何指定他们打算在账户中运行的代码也是一个问题。两个主要选项是直接在交易中指定字节码或指定指向代码的指针。最简单的指针就是链上某段代码的地址。
成本分析使答案变得明晰。最小的代理大约为50字节,而地址为20字节。30字节的差距并未提供任何有用的附加功能,并且将在链上低效地复制数十亿次。
此外,直接指定代码的方式将再次使得EOA能够拥有新的独特能力,在交易调用数据中执行任意指定的代码。
从实现的角度和用户理解的角度来看,一致性都是以太坊虚拟机(EVM)的一个重要属性。虽然在外部账户(EOA)的应用场景中考虑过对几类指令的禁令,但作者认为没有足够的理由去这样做。这将迫使智能合约钱包和EOA智能合约钱包走上不同的合约开发道路。
可以建立禁令的主要指令家族是与存储相关的指令和与合约创建相关的指令。我们决定不禁止存储指令主要基于其对智能合约钱包的重要性。尽管可以有一个外部存储合约供智能合约钱包调用,但这效率不高。在未来,新的状态方案甚至可能允许以更低的成本访问某些存储槽。智能合约钱包非常希望利用这一点,而存储合约则无法支持。
创建指令在其他类似EIP的情况下曾被考虑禁止,但由于这个EIP允许EOA在交易内花费价值,因此在交易内增加nonce并使待处理交易失效的担忧并不大。一个有趣的附带效果是,通过结合EIP-7702和CREATE2,可以在不承诺任何费用市场参数的情况下,承诺将特定的字节码部署到一个地址。这解决了长期以来的跨链合约部署的普遍问题。
创建指令在其他类似的以太坊改进提案(EIP)中曾被考虑禁用,然而由于该EIP允许EOA在交易内花费价值,因此在交易内递增 nonce 并使得待处理交易失效的问题并不显著。一个有趣的附带效果是,通过结合 EIP-7702 和 CREATE2,可以在不提交任何费用市场参数的情况下,保证在特定地址部署特定的字节码。这解决了长期以来跨链合约部署的普遍问题。
这个EIP中的签名方案支持灵活的设计模式,可以实现地址 address
的全权委托和更受保护的地址 address
委托。
在签署代码指针时需要考虑的一个因素是该地址在另一条链上可能指向什么代码。在某些情况下,验证部署是否是确定性的可能并不是很必要。在这种情况下,可以设置链 ID 以减少授权的范围。对于其他更倾向于普遍部署的情况,例如,委托给钱包代理。在这些情况下,可以将链 ID 设置为 0,以便在所有 EIP-7702 链上都具有效力。钱包维护者将能够将一个单一的 EIP-7702 授权消息硬编码到他们的钱包中,这样跨链代码可塑性就不会成为问题。
添加链 ID 的另一种选择是对地址指向的代码进行签名。这似乎在保留账户中实际运行的代码的特定性同时,最大限度地减少了链上认证元组的大小。然而,这种格式的一大缺点是它要求进行数据库查找,以确定每个认证元组的签名者。这种要求本身似乎在交易传播中产生了足够的复杂性,因此决定避免这种情况,直接对地址进行签名。
与该 EIP 之前的版本以及类似的 EIP 不同,委托指定可以随时通过签署并发送一条带有账户当前 nonce 的新目标的 EIP-7702 授权来撤销。如果不采取此类行动,委托将永久有效。
tx.origin
设置代码允许 tx.origin
设置代码可以简化交易批处理,外部交易的发送者将成为签署账户。目前,ERC-20 的批准后转账模式需要两笔单独的交易,而通过这一提案,可以在一笔交易中完成。
一旦代码存在于外部拥有账户(EOA)中,任何时候该 EOA 的代码发起调用时,自费的 EIP-7702 交易都可以使 msg.sender == tx.origin
。在没有 EIP-7702 的情况下,这种情况只能出现在交易的最顶层执行层。因此,该 EIP 打破了这一不变性,因此会影响包含 require(msg.sender == tx.origin)
检查的智能合约。该检查主要用于至少三个目的:
确保 msg.sender
是一个 EOA(因为 tx.origin
总须是 EOA)。这个不变性不依赖于执行层的深度,因此不受影响。
防范像闪电贷这样的原子性三明治攻击,这种攻击依赖于在执行目标合约之前和之后修改状态的能力,作为同一原子交易的一部分。这个保护将被此 EIP 打破。然而,以这种方式依赖 tx.origin
被视为不好的实践,并且已经可以通过矿工有条件地将交易包含在区块中来规避。(译者:道易程的核心合约开发者Elon提交过一个防范闪电贷攻击的EIP。)
防止重入攻击。
(1) 和 (2) 的例子可以在以太坊主网部署的合约中找到,其中 (1) 更常见(且不受此提案影响)。另一方面,用例 (3) 受到此提案的更大影响,但该 EIP 的作者未发现任何这种形式的重入保护示例,尽管搜索并不全面。
这种情况——很多 (1),一些 (2),没有 (3)——正是该 EIP 的作者所预期的,因为:
在没有 tx.origin
的情况下确定 msg.sender
是否为 EOA 是困难的(如果不是不可能的话)。
唯一一个安全的原子性三明治攻击执行环境是最顶层的环境,而 tx.origin == msg.sender
是检测该环境的唯一方法。
相比之下,有许多直接且灵活的方法来防止重入(例如,使用瞬态存储变量)。由于 msg.sender == tx.origin
只有在最顶层环境中为真,因此和其他更常见的方法,它是防止重入的冷门的工具。
还有其他方法可以减轻这种限制而不破坏不变性:
在 EOA 的应用场景中使用 CALL*
指令时,将 tx.origin
设置为一个常量 ENTRY_POINT
地址。
将 tx.origin
设置为从发送者或签字者地址派生的特殊地址。
禁止 tx.origin
设置代码。这将使简单批处理的用例变得不可能,但将来可以放宽。
该 EIP 旨在使得最终的账户抽象技术方案高度向前兼容,而不过度依赖 ERC-4337 或 RIP-7560 的任何细节。
具体而言:
用户签名的地址address
可以直接指向现有的 ERC-4337 钱包代码。
所使用的“代码路径”在许多情况下(尽管可能并非全部)在纯智能合约钱包世界中“仍然有意义”。
因此,它避免了“创建两个独立代码生态系统”的问题,因为在很大程度上,它们将是同一个生态系统。在这个解决方案下,确实有一些工作流程需要采取权宜之计,而在“最终账户抽象”下做得会更好,但这相对是一小部分。
它不需要添加任何操作码,这些操作码在后 EOA 世界中会变得无用。
它允许 EOA 伪装成合约以便被包括在 ERC-4337 包中,这种方式与现有的 EntryPoint
兼容。
这个EIP打破了账户余额只能因来自该账户的交易而减少的规则。它还打破了在交易执行开始后EOA nonce不能增加的规则。这些破坏对内存池设计和其他EIP(如包含列表)都有影响。不过,由于账户在外部交易中是静态列出的,所以可以修改交易传播规则,以便不会转发冲突的交易。
以下是代理合约需要谨慎注意的检查或陷阱或条件的非详尽清单,并需要获取账户授权的签名:
重放保护——(例如一个nonce)应该由代理方实现并签名。如果没有,恶意行为者可以重复使用签名,重复其影响。
value
—— 如果没有,恶意赞助商可能会导致被调用函数(callee)出现意想不到的效果。
gas——如果没有,恶意赞助商可能会导致被调用方(callee)耗尽 gas 而失败,从而给被赞助方带来麻烦。
target
/ calldata
——如果没有,恶意行为者可能会在任意合约中调用任意函数。
实现不佳的委托代理可能让恶意行为者几乎完全控制签名者的EOA。
tx.origin
允许EIP-7702的发送方也设置代码,可能会:
破坏依赖于 tx.origin
的原子三明治保护;
破坏类型为 require(tx.origin == msg.sender)
的重入保护。 该EIP的作者认为,出于理由部分所述的原因,允许这样做的风险是可以接受的。
授权账户可以使赞助交易中继者支付 gas,而无需通过无效化授权(即增加账户的 nonce)或将相关资产转出账户来获得补偿。中继者(relayers)的设计应考虑这些情况,可能需要存入保证金或实施声誉系统。
智能合约钱包开发者必须考虑在未执行的情况下设置账户代码的影响。合约通常是通过执行初始化代码来部署的,以确定要放入账户的确切代码。这使得开发者有机会同时初始化存储槽。账户的初始值不能被观察者替换,因为它们要么在创建交易的情况下由外部账户(EOA)签名,要么通过从初始化代码的哈希中确定合约地址来提交。
该 EIP 并未给开发者提供在委托代理期间运行初始化代码和设置存储槽的机会。为了防止观察者通过控制的账户前置运行委托的初始化,智能合约钱包开发者必须验证初始的 calldata
由 EOA 的密钥使用 ecrecover
所做的签名。这确保账户只能用期望的值进行初始化。
允许 EOA 通过委托指定的方式表现得像智能合约,会给交易广播带来一些挑战。传统上,EOA 只能通过交易发送价值。这一不变性使节点能够静态地确定该账户交易的有效性。换句话说,单个交易只能使发送者账户的待处理交易失效。
通过这个 EIP,可能会导致其他账户的交易变得过时。这是因为一旦 EOA 委托给代码,该代码可以在交易的任何时刻被任何人调用。以静态方式判断账户的余额是否被转移变得不可能。
虽然有一些缓解措施,作者建议客户端对任何具有非零委托指定的 EOA 不接受超过一个待处理交易。这最小化了单个交易可能导致的交易失效的数量。另一种选择是扩展 EIP-7702 交易,附带调用者希望在交易过程中“激活”的账户列表。这些账户在包括它们的 EIP-7702 交易中仅表现为委托代码,从而使客户端能够静态分析和推理待处理交易。
一个相关的问题是,EOA 的 nonce 可能在每个交易中递增多次。由于客户端已经需要在更糟糕的情况下保持稳健(如上所述),这应该并非一个多大的安全注意事项。然而,客户端应意识到这种行为是可能的,并相应地设计他们的交易广播。
通过 CC0 放弃版权及相关权利。
请将此文献引用为: Vitalik Buterin (@vbuterin), Sam Wilson (@SamWilsn), Ansgar Dietrichs (@adietrichs), Matt Garnett (@lightclient), "EIP-7702: Set EOA account code [DRAFT]," Ethereum Improvement Proposals, no. 7702, May 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7702.
V神还是你家大神!另外,偶尔你不能只考虑技术,还得想想未来的人类未来的社会如何管理。
账户抽象化这个概念是在 2017 年2月 Vitalik Buterin 的 EIP-86 里首次提出的,其目的是实现 “交易来源和签名的抽象”。不过其动机和想法可以追溯到 2016 年年初 vitalik 提交的一个 issue, 文中建议 “与其将 ECDSA 签名算法和默认的 nonce 机制写死在协议内作为 ‘标准’ 的账户安全机制,不如初步建立一个(统一的)账户模型,在未来把所有的账户都变成合约,让合约可以支付 gas,让用户可以自由定义自己的安全模型。”
RationaleThe goal of these changes is to set the stage for abstraction of account security. Instead of having an in-protocol mechanism where ECDSA and the default nonce scheme are enshrined as the only "standard" way to secure an account, we take initial steps toward a model where in the long term all accounts are contracts, contracts can pay for gas, and users are free to define their own security model.
什么是天才?凭借直觉就能预判准未来,那他就是!
前面有关章节已经介绍以太坊有两种类型的账户:
外部账户(Externally Owned Account, EOA)
合约账户(Contract Account, CA)。
前者由用户私钥控制,而后者由存储在智能合约账户(有时也被称为智能钱包)内的合约代码控制。
外部账户的权限要大于合约账户,因为只有外部账户可以通过支付 gas 启动交易的执行过程(即与智能合约交互)。
随着实践经验与教训的积累,钱包用户开始对外部账户产生一些担忧。这些担忧包括:
严重依赖人工:由于账户访问完全依靠私钥,且所有交易均需动用私钥进行签名,即转账和实施智能合约操作的唯一方法是人工操作(使用私钥),在全天无休的区块链行业,这就实在太不方便。甚至完全可以说手段太落后了。
私钥管理问题:既然私钥决定一切,对于如何安全存储私钥以及谁有权访问它,就会给用户带来极困难和极具压力的挑战——如果有50亿地球人都得日常使用私钥,因私钥掌控Money,那么每天必定有大量私钥的遗失和泄露事件发生!如果不泄露就绑架就凶杀……
依赖椭圆曲线签名(ECDSA加密算法):已经有专业团队发出外部账户采用的ECDSA加密算法会在不久的将来被破解的预警!抗量子的数字签名是对当前 ECDSA 的必要改进,并且可以说迫在眉睫!该提案可以让用户升级至更安全的加密算法。但能否顺利升级,能否赶在被破解前完成升级换代,目前看起来胜算都不大!……那咋办呢?
一对一的操作:一次不能执行多个操作。否则会产生不必要的成本和糟糕的用户体验。外部账户一点都不好玩!
值得思考的是,Vitalik 这个提案的核心思想,是在遥远的未来,已经没了外部账户而所有的账户均为合约账户,让合约账户可以支付gas,所有人都不用应对与私钥相关的安全问题。
改造链上交易类型的 EIP-86 给大家带来了巨大的启迪,类似它的方案此后又出现了EIP-101、EIP-208、EIP-859、EIP-2718。
2020年,Vitalik 等人提出了 EIP-2938 草案,该草案概述了一个更简单的实现。这个实现对协议/共识的改动最小,并且通过设置节点的内存池规则来满足所需的安全保证——开发小组的动机是将它“封装”到以太坊共识层(Consensus Layer),而非像通证标准ERC-20那样,仅仅只是提供一个在智能合约层面应用的技术标准。
EIP-2938 提出的账户抽象化(Account Abstraction, AA)是一个可以让合约账户成为和外部账户一样的 “顶层” 账户的提案。具体来说,这个方案要求对以太坊协议进行修改,并允许从合约(每个智能合约都有一个合约账户),而不仅仅是外部账户来发起以太坊交易。合约本身将具备验证和矿工需验证的gas费用支付逻辑。那么也就是说,实现了账户抽象化之后,合约账户也可以发起交互请求并支付交易费。
而实际的应用场景更复杂,考虑到遥远的未来可以说细思极恐:EIP-2938通过账户抽象化来为以太坊提供一个基础功能层,以确定何时支付,谁来支付以及怎样支付 gas——简单地说,这是一个以改造链上主体对象为核心的解决方案。如果你还没感觉,那就仔细看完(特别是ERC-4337)。
EIP-2938可以让更多通用型钱包或者其它应用的智能合约执行复杂的逻辑。譬如没有EIP-2938,你想把所有代币都放到一个新钱包里,然后你一不小心先把所有 ETH 都发送到这个新钱包里了。马上,你会尴尬地发现你的旧钱包因为没有 ETH 而无法发送任何交易,剩下的代币无法转移到新钱包。账户抽象化能让你使用其它合约地址(如智能合约钱包)里的 ETH 支付 gas 费用(这种情况叫代付交易,Sponsored Transactions),甚至还可以让你使用旧钱包里的其它代币支付 gas 费用。当然,这只是一个很容易理解的示例,实际的应用还可以复杂很多倍。
EIP-3074 主要的技术创新是向 以太坊虚拟机(EVM) 添加两个新的操作码:AUTH 和 AUTHCALL,它们旨在被称为“调用者”的智能合约使用。这些调用者获得了对授权他们的外部账户 EOA 的控制权,并可以代表他们进行调用。
这也就是说,用户可使用私钥对包含其意图的消息进行签名。然后,该消息被包含在调用程序的链上交易中。调用者使用签名消息和 AUTH 操作码来控制用户的外部帐户,并且使用 AUTHCALL 代表用户去执行操作。
要注意的是,包含用户签名消息的交易不一定必须从该用户的帐户发送,这使用户完全不必依赖 ETH 来发送交易。事实上,还可以通过其他方式支付费用,例如使用道易程创建的伟大的价格单位制里面的那个叫做uToken的 ERC-20 代币。
这种方法有几个问题,主要是认为赋予调用者如此大的权力会导致类似于 DAO 黑客攻击的灾难性事件。
之后的EIP-3607、EIP-5003基本沿袭了 EIP-3074 的内核思想。
ERC-4337 看上去与EIP-2938类似,但ERC-4337是无需更改任何共识层即可在协议上实现账户抽象的技术标准。它显然是更好的解决方案。EIP-4337最早于2021年提出,已经于2023年3月被部署到以太坊主网,可实现在单个合约账户中进行交易和创建合约。
ERC-4337 的核心技术创新是用一个被称为 UserOperation 的更高层伪交易对象,取代了 transaction ,而它本身则是一个描述一个 transaction 结构体。你可以理解为 ERC-4337 为以太坊在 transaction 基础上,新创了另一种交易形式。或者说比特币只有一种办法交易,而以太坊现在有了另一种更复杂也更高效的形式完成交易。以太坊对比特币的超越是全面的!并且,把这个场景放到智能合约的应用里去考虑就叫细思极恐。是的,我词穷了,你能理解就好!
validateUserOp:它接受一个 UserOperation 作为输入。这个函数应该验证UserOperation上的签名和nonce,如果验证成功则支付费用并增加nonce,如果验证失败则抛出异常。
op执行功能:将calldata解释为钱包采取行动的指令。这个函数如何解释calldata以及它的结果是完全开放的;但我们预计最常见的行为是将calldata解析为钱包的一个或多个调用。
捆绑者(Bundler)将这些对象打包成一笔交易,纳入到一个区块当中。捆绑者支付捆绑交易的燃料费,但收取单独执行UserOperation的费用。捆绑者与验证者的工作方式类似,即根据费用优先等级逻辑选择要纳入的对象。任意捆绑者均可参与到流程当中。
为了简化钱包的逻辑,确保安全所需的大部分复杂智能合约技巧不是在钱包本身中完成的,而是在称为入口点的全局合约中完成的。validateUserOp 和执行函数预计将使用 require(msg.sender == ENTRY_POINT) 进行门控,因此只有受信任的入口点才能使钱包执行任何操作或支付费用。入口点仅在 validateUserOp 之后对钱包进行任意调用,并且携带该调用数据的 UserOperation 已经成功,因此这足以保护钱包免受攻击。如果钱包不存在,入口点还负责使用提供的 initCode 创建钱包。
启用创新用例:包括聚合签名、每日交易限额设置、账户紧急冻结、白名单设置以及保护隐私的应用程序等。
钱包设置——无需写下助记词。只需轻点几下,即可快捷轻松地进行设置。
账户恢复——用户无需再担心丢失助记词,现已可以实现多重身份验证和账户恢复。
易于使用的钱包功能——用户可以享用非常丰富的定制服务,包括自动支付、预先批准交易和捆绑交易。至于还有什么功能,完全取决于你写的智能合约。
更高的安全性——降低人为出错的几率,钱包将能够更加安全。
更灵活的gas支付方式——由ERC-4337提供支持的钱包可用任意ERC-20代币、EIP-3712代币和未来其它币种支付gas。
最突出的一点就是因为其复杂性增加,需要更高的Gas成本:基本的ERC-4337操作约需要42000 gas,而常规交易需要 21000 gas,原因如下:
1、需要支付大量的单个存储读/写成本,在 EOA 的情况下,这些成本会捆绑到一笔 21000 gas 的付款中: (1)编辑包含 pubkey+nonce (~5000) 的存储 slot; (2)用户操作调用数据成本(约 4500,通过压缩可减少到约 2500); (3)ECRECOVER (~3000); (4)首次访问钱包本身 (~2600) (5)首次访问收款人账户 (~2600) (6)将 ETH 转入收款人账户 (~9000) (7)编辑存储以支付费用(~5000) (8)访问包含代理 (~2100) 的存储 slot,然后访问代理本身 (~2600);
2、除了上述存储读/写成本之外,合约还需要执行 “业务逻辑”(解包 UserOperation、对其进行哈希、洗牌变量等)
3、需要消耗 gas 来支付日志费用(EOA 不发布日志);
4、一次性合约创建成本(约 32000 gas,加上代理中每个 code byte 200 gas,再加上设置代理地址的 20000 gas) 简而言之,账户抽象地址的每一步都需要计算,需要消耗更多的资源,也增加了额外的费用。
还没完?
ERC-5189 显然是受 ERC-4337 的启发而创建的,但它卡顿了。如果你对技术感兴趣可以点击链接去看看。
Title为Native Account Abstraction,意味着和 EIP-2938 一样,它是一个“封装”到以太坊共识层的技术提案。
RIP-7560 简介里的第一句话为:
Combining the EIP-2938 and ERC-4337 into a comprehensive Native Account Abstraction proposal.
该提案的意图,是引入共识层协议变更的原生账户抽象(Native Account Abstraction),并将 EIP-2938 和 ERC-4337 合并为一个全面的账户抽象提案。
EIP-7701 有个小标题:A variant of RIP-7560 transactions relying on EOF Smart Contract Accounts
它是以EIP-3540为基础。
它有个令人惊讶的小标题:Add a new tx type that sets the code for an EOA during one transaction execution。
它的简介也令人惊讶:
Add a new transaction type that adds a contract_code
field and a signature, and converts the signing account (not necessarily the same as the tx.origin
) into a smart contract wallet for the duration of that transaction. Intended to offer similar functionality to EIP-3074.
看似简单,但一石惊起千层浪!
EIP-7702 提出了一种同时接受 contract_code 和签名字段的新交易类型,在开始执行交易时,它将签名者账户的合约代码设置为 contract_code。在交易结束时,它会将代码重新设置为空。
EIP-7702和 EIP-3074 一样,实现了 EOA 对智能合约的临时委托功能。然而 EIP-7702 并没有引入新的操作码(这需要硬分叉),而是定义了要调用的函数:
AUTH -> 调用“verify”(验证)
AUTHCALL -> 调用“execute”(执行)
具体来说,它:
由此可见,EIP-7702 能够达成与 EIP-3074 同样的核心功能,如批量交易和交易赞助,增强了交易类型的复杂性和控制策略的灵活性。这也就是说,EIP-7702 允许外部拥有账户(EOAs)在交易中临时扮演智能合约钱包的角色,使得 EOAs 可以执行以前只有智能合约才能进行的复杂操作,极大地增强了 EOAs 的功能性和灵活性。通过引入 contract_code 字段,EOAs 可以在交易中动态地引入智能合约代码,实现在单一交易中完成多种操作,如批量处理和复杂的交易指令,从而简化流程并降低交易成本,同时减少了操作复杂性。
其次,EIP-7702 还引入了一种新的权限管理机制,即权限降级。这使得账户持有者可以为其子密钥分配具体权限,从而增强了账户的安全性。通过细粒度的权限控制,用户可以限制子密钥的操作范围,防止未授权的交易和滥用行为,旨在保护用户资金安全,这对于防止未授权的交易和滥用具有重要意义。
EIP-7702 相比 EIP-3074 的优势是,它与EIP-4337 构建的所有账户抽象工作高度兼容,“用户需要签名的合约代码实际上可以是现有的 EIP-4337 钱包代码”。
一旦此项改动生效,用户现有的 EOA 就可以执行任何智能合约代码。通过额外的 EIP,EOA 还可以永久升级以运行特定的代码。
账户抽象化为包括新型钱包在内的区块链dApp的创新设计打开了新的思路。也许有助于下列技术方案的实施:
多签和账户的社交恢复
验证逻辑灵活性——更高效和更简洁的签名算法(如:Schnorr, BLS)
执行层量子安全与后量子安全签名算法(如:Lamport, Winternitz)
如果EIP-2938这样的提案得到普遍采用,则无需为量子安全在执行层做进一步的工作。用户可将钱包自行升级到量子安全的版本。甚至连封装交易(wrapper transaction)也是安全的。矿工可以为每个捆绑交易使用新创建的EOA,由于是新创建的,所以每个交易都受到哈希保护,更保证了安全性。并且,在矿工将交易添加到区块中之前不会发布该交易。 对于其它方案,则始终要考虑到外部账户的加密算法,能够被量子攻击所破解!
钱包可升级性及其执行逻辑灵活性
钱包验证逻辑可以是有状态的,因此钱包可以更改其公钥或(譬如如果使用DELEGATECALL发布)完全升级其代码。
钱包可以为执行步骤添加自定义逻辑,例如进行原子多操作(这是EIP 3074的一个关键目标)。
EIP-7702提议对以太坊协议进行一系列更改,以实现账户抽象。其关键思想是引入一种称为“用户操作”的新交易类型。与普通交易不同,用户操作不是通过签名进行身份验证的。相反,它们是由与账户关联的智能合约钱包进行身份验证的。
当用户操作提交到网络时,首先会发送到关联的智能合约钱包。然后,钱包根据自己的验证逻辑验证操作。如果验证成功,则钱包向用户操作的目标发送普通交易。
这一过程允许更灵活地验证交易。例如,智能合约钱包可以要求在执行交易之前进行多重签名,或者可以使用链下数据(如生物识别验证的证明)来验证交易。
EIP-7702还引入了“支付主合约”的概念。这些是可以为用户操作赞助gas费用的合约。这意味着只要有一个愿意支付其gas费用的支付主,用户就可以与以太坊进行交互,而无需持有任何ETH。
智能合约的应用升级 这句话需要你自己去想象……
账户抽象化背后的动机很简单,但会带来根本性的改变:当前,以太坊交易具备功能可编程性(通过调用智能合约实现),但是交易的验证方式却是固定的。只有持有有效的 ECDSA 签名、有效的 nonce 值以及足够的账户余额,一笔交易才算有效。账户抽象化引入了一种新的交易类型 —— 抽象账户交易(AA Transaction)。这种交易总是由一个特殊地址产生,协议不会检查其签名,nonce 和余额。通过引入这种交易,账户抽象化实现了从固定验证方式到可编程验证方式的转变。抽象账户交易的有效性由其 target 字段指定的智能合约验证,通过验证之后,合约可以自行为该交易支付手续费。
我们业已看到,随着技术探讨的深入,一个小小的突破口,带来了很大的一个未来世界!
这就叫创新!并且它对于区块链未来的发展极为重要!
EIP-86、EIP-101、EIP-859、EIP-2718、EIP-2938、EIP-3074、EIP-3607、EIP-4337、EIP-5003、EIP-5189,RIP-7560……其中EIP-86、EIP-2938、EIP-4337、RIP-7560都是 Vitalik 领衔制订,前后耗费七八年时间。创新不易!
以太坊封装 ERC-4337? 对于开发者来说,这是值得重视和学习的! 请仔细阅读以太坊是否应该封装更多功能?(注意“封装 ERC-4337”一节 ) ——原文:Should Ethereum be okay with enshrining more things in the protocol? 此后 RIP-7560 的出现,证实了封装势在必行。
提案即技术协议,它的不断变化,可能会给开发带来不良影响!这篇文章里面有提到一些细节:《RIP-7560 :从共识层实现标准化的原生账户抽象》。
账户抽象化的出发点,是想要显著改善用户与dApp的交互体验。它客观上有个巨大的应用优点:减少外部账户也就是人类的缺陷和失误带来的不良影响——考虑到未来合约满天飞带来的超高效率的交互,我们甚至可以说它很可能让人类对dApp的影响降低到极小化。并且,未来肯定还会通过一次次创新持续降级外部账户(或者使之产生蜕变),而优化dApp的效率和安全性。
对使用 ERC-4337 达到社交恢复用户账户这样的应用,要特别小心!因为我们说到社交恢复,绝大多数俗人理解的就是几个人能够联合起来恢复某个用户的账户,或者赋予某个用户的一个新账户接收款项的权利——万一这几个人中有数人同时挂掉呢?万一他们联合起来作恶呢? 如果你不但这样想还这样做,那意外就迟早会发生,而且大概率还是灾难级别越大发生的可能性越高——很遗憾我们有时候确实没法阻止它就这样发生。 而如果里面不是人,而是一个AI一个地址,这些AI能够飞到你的身边验明正身,由它们来掌握恢复人类账户的权限,你觉得如何?
May 14, 2024 • 7 min read
Ethereum's evolution never stops. With each Ethereum Improvement Proposal (EIP), the network takes a step towards greater scalability, security, and usability. One such proposal, EIP-7702, is set to revolutionize the way users interact with the Ethereum blockchain by introducing account abstraction.
Account abstraction is a concept that has been discussed in the Ethereum community for a while, but EIP-7702 brings it closer to reality. The proposal aims to provide a more flexible and user-friendly experience by allowing smart contracts to act as Ethereum accounts. This shift could potentially unlock a myriad of new use cases and greatly enhance the overall user experience on Ethereum.
In this blog post, we'll take a deep dive into EIP-7702, explaining what account abstraction is, how it works, and what benefits it brings to developers and users. We'll also explore how thirdweb's tools and services can help developers navigate this new terrain and take full advantage of the opportunities presented by EIP-7702.
Before we delve into the specifics of EIP-7702, let's first understand what account abstraction is. In the current Ethereum ecosystem, there are two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are controlled by private keys and can initiate transactions, while contract accounts are controlled by their contract code and can only perform transactions in response to receiving a transaction.
Account abstraction aims to blur the distinction between these two types of accounts. With account abstraction, all accounts on Ethereum can be treated as contract accounts. This means that EOAs can be replaced by smart contract wallets, which can have arbitrary verification logic for validating transactions.
This shift brings several benefits. For one, it allows for more flexibility in how transactions are authorized. Instead of relying solely on private keys, smart contract wallets can define their own authentication methods, such as multi-signature schemes, social recovery, or biometric authentication.
Furthermore, account abstraction enables new features like gas sponsorship, where a third party can pay for the gas fees of a transaction, and account recovery mechanisms, which can help users regain access to their funds if they lose their private keys.
Now that we have a basic understanding of account abstraction, let's take a closer look at EIP-7702 itself. The full technical specification of the proposal can be found in the Official EIP-7702 Proposal.
EIP-7702 proposes a set of changes to the Ethereum protocol that would enable account abstraction. The key idea is to introduce a new type of transaction called a "user operation." Unlike regular transactions, user operations are not authenticated with a signature. Instead, they are authenticated by a smart contract wallet associated with the account.
When a user operation is submitted to the network, it is first sent to the associated smart contract wallet. The wallet then validates the operation based on its own verification logic. If the validation succeeds, the wallet sends a regular transaction to the target of the user operation.
This process allows for much more flexibility in how transactions are validated. For example, a smart contract wallet could require multiple signatures before a transaction is executed, or it could use off-chain data (like a proof of biometric authentication) to validate a transaction.
EIP-7702 also introduces the concept of "paymaster contracts." These are contracts that can sponsor the gas fees for user operations. This means that users can interact with Ethereum without needing to hold any ETH, as long as there is a paymaster willing to cover their gas fees.
The changes proposed by EIP-7702 have significant implications for both developers and users of Ethereum.
For developers, EIP-7702 brings a new level of flexibility in designing smart contract wallets. They can implement custom verification logic, enabling features like multi-factor authentication, spending limits, and emergency recovery mechanisms. This opens up a whole new design space for smart contract wallets.
Moreover, the ability to sponsor gas fees through paymaster contracts allows developers to create more user-friendly onboarding experiences. New users can interact with Ethereum applications without needing to acquire ETH first, reducing a significant barrier to entry.
For users, EIP-7702 promises a more seamless and secure Ethereum experience. Smart contract wallets can offer better safety features, like protection against phishing attacks and the ability to recover funds if private keys are lost. Gas sponsorship also makes it easier for users to get started with Ethereum, as they don't need to worry about purchasing ETH for gas fees.
However, these benefits come with some challenges. Implementing account abstraction adds complexity to Ethereum clients and wallets. There are also questions around how to optimize gas costs for user operations and how to ensure that paymaster contracts are not abused.
While EIP-7702 presents a plethora of benefits, it's not without its challenges. One of the main hurdles is the added complexity it brings to Ethereum clients and wallets. Implementing account abstraction requires significant changes to the existing infrastructure, which could lead to potential compatibility issues and increased development overhead.
Another challenge is optimizing gas costs for user operations. Since smart contract wallets will be performing additional computations to validate transactions, this could lead to higher gas costs compared to traditional EOA transactions. Developers will need to find ways to minimize these costs, possibly through gas optimization techniques or by utilizing gas sponsorship mechanisms.
There's also the question of how to prevent abuse of paymaster contracts. While gas sponsorship is a powerful feature, it could potentially be exploited by malicious actors. Safeguards will need to be put in place to ensure that paymaster contracts are used responsibly and don't enable spam or denial-of-service attacks.
Adoption of EIP-7702 will also require buy-in from the broader Ethereum community. Wallets, dapps, and other ecosystem participants will need to update their software to support the new transaction types and interactions introduced by account abstraction. This process will take time and require coordination across the community.
Despite these challenges, the benefits of account abstraction are compelling, and tools like thirdweb are making it easier for developers to take advantage of these features.
thirdweb provides a suite of developer tools and infrastructure that simplify the process of building and deploying smart contracts on Ethereum. With thirdweb, developers can easily create smart contract wallets that leverage the capabilities of EIP-7702.
For instance, thirdweb's Solidity SDKs include pre-built, audited smart contract templates for common use cases like multi-signature wallets, escrow contracts, and token vesting. These templates can be easily extended to incorporate custom verification logic and advanced features enabled by account abstraction.
thirdweb also offers gasless transactions, a feature that aligns perfectly with the gas sponsorship capabilities of EIP-7702. With gasless transactions, users can interact with smart contracts without needing to hold ETH for gas fees. This feature, combined with the flexibility of smart contract wallets, could greatly improve the onboarding experience for new Ethereum users.
Furthermore, thirdweb's infrastructure is designed to handle the increased computational requirements of account abstraction. Their serverless architecture can scale automatically to meet the demands of user operations and smart contract wallet interactions.
As EIP-7702 and the concept of account abstraction gain traction, it's exciting to consider how they might shape Ethereum's future.
One of the most promising implications is a vastly improved user experience. With smart contract wallets, users will have access to advanced security features, customizable transaction validation, and the ability to interact with Ethereum without needing to manage ETH for gas directly. This could make Ethereum much more approachable and user-friendly, lowering the barriers to entry for mainstream adoption.
Account abstraction also unlocks new possibilities for developers. The ability to define custom transaction validation logic opens up a whole new design space for smart contract interactions. We could see the emergence of new types of dapps and use cases that were previously not possible or practical with traditional EOA accounts.
For example, account abstraction could enable more sophisticated identity and reputation systems. Smart contract wallets could incorporate identity verification, credit scoring, or other off-chain data into their transaction validation process. This could pave the way for decentralized credit markets, self-sovereign identity, and more robust decentralized governance models.
Gas sponsorship also introduces new economic models and incentive structures. We could see the rise of "gas relayers" - entities that specialize in sponsoring transactions in exchange for other forms of value (e.g., token rewards, service fees, etc.). This could create new revenue streams and business models within the Ethereum ecosystem.
Of course, the full impact of account abstraction will depend on the rate and scale of adoption. But with proposals like EIP-7702 and the growing ecosystem of tools like thirdweb, the future looks bright. As more developers start experimenting with these new capabilities, we're likely to see a wave of innovation that could redefine what's possible on Ethereum.
As the Ethereum ecosystem continues to evolve, EIP-7702 and the concept of account abstraction represent a significant step forward in terms of usability, security, and flexibility. By blurring the lines between EOAs and contract accounts, account abstraction opens up a world of possibilities for developers and users alike.
For developers, EIP-7702 provides a new canvas to create innovative smart contract wallets with custom verification logic, advanced security features, and improved user onboarding. Tools like thirdweb are already making it easier for developers to integrate these features into their projects, providing pre-built templates, gasless transactions, and scalable infrastructure.
For users, account abstraction promises a more intuitive and secure Ethereum experience. Smart contract wallets can offer better protection against common vulnerabilities, more flexible authentication methods, and the ability to interact with Ethereum without the need to directly manage ETH for gas fees. This could significantly lower the barriers to entry for mainstream adoption.
As EIP-7702 moves closer to implementation, it's clear that account abstraction will play a central role in shaping Ethereum's future. While there are still challenges to overcome, such as increased complexity and potential gas optimization issues, the benefits are too compelling to ignore. With the right tools and community support, account abstraction could unlock a new era of innovation and growth for Ethereum.
What is EIP-7702? A Beginner's Guide
以太坊账户抽象研报:拆解 10 个相关 EIP 提案与冲击千万级日活用户的瓶颈问题
zkSync Era Account Abstraction
这是一项还有很大创新空间的技术创新
在介绍ERC-721的时候,我发现整个行业的应用从一开始就把NFT产品的图片直接链到了链下!
这毫无疑问是一个巨大的错误!
在前面对ERC-721介绍时,我已经说过:问题在于 其标准中的tokenURI 可指向一个JSON 文件,于是开发者就把NFT产品的图片或视频通过 URL 记录到这个JSON 文件中——这也就是说,这些所谓的“非同质化通证”的图片或视频大多保存在私有服务器上。用智能合约玩出了一个互联网产品,还硬说是NFT!
这是我们道易程团队2019年的技术成果,但它仍然具有很大的改进空间。
先看看我们通过ERC-2569发行的第一个真正的ERC721链上NFT:
更神奇的是,由于SVG是用XML语言的可读代码写出来的,事实上它的应用于图片并不局限于图片。譬如论文也是可以通过SVG保存到链上的!
以下内容我已经永久存储到了以太坊链上。你可以用钱包里的浏览器访问这个地址,来阅读全文:https://deme.app/full#1
它有什么创新?
与它有关的ERC721通证、图片、文字信息都在一个以太坊智能合约里!它很可能是迄今为止,第一个也是唯一一个真正的非同质性物品区块链资产。谜恋猫(Cryptokitties)因为猫的图片都在链下,算不上真正的区块链资产。
自然道纪念币图片的格式为可缩放矢量图形(Scalable Vector Graphics,SVG)。官方(W3C)的解释为:SVG is a language for describing two-dimensional graphics in XML [XML10, XML11]. SVG allows for three types of graphic objects: vector graphic shapes (e.g., paths consisting of straight lines and curves), multimedia (such as raster images, video, and audio), and text. Graphical objects can be grouped, styled, transformed and composited into previously rendered objects.
之所以采用SVG图片,核心原因是因为它是由XML语言代码构成的,而代码可以直接保存到智能合约里。
Special tags of Commemorative NaturalDAO Token:
<description>This ia a medal of honor awards from Alpha Test of NaturalDAO.</description> <honoree class="thonoree">Alpha Tester</honoree> <ARTIST>Tung Sau Chun Queena</ARTIST>
你可以通过W3C了解它的技术规格:Scalable Vector Graphics (SVG) Tiny 1.2 Specification。
另一个和SVG类似的技术是Canvas。两者的简单对比(中文):https://www.w3school.com.cn/html5/html_5_canvas_vs_svg.asp。
Canvas甚至有了自己的游戏引擎:playcanvas。
那么它们对区块链的数据存储有什么启发?
图片甚至整个游戏都应该以可读代码形式保存到智能合约里,可以很好地保护设计者和所有者的权利,保障通证或游戏的透明性。 因为从比特币开始,区块链通证就已经是匿名的了——没有人确切地知道一个某个地址属于谁。而当中本聪丢失私钥之后,现在全世界都没有办法确认James Bilal Khalid Caan是不是中本聪——所以我个人并不认为区块链还有传统的隐私和版权保护概念,因为一切都与人的身份无关,直接用私钥控制就好了。而私钥永远都不应该被暴露! 而更重要的问题,就是数据的所有权、使用权、收益权和透明性。 如果把图片转换成SVG,即可以将其所有权、使用权、收益权用文字形式永久保存到智能合约里,通过智能合约的透明性,图片的所有权、使用权、收益权就完全不存在可争议的了。而同时,其可读性自然就更能够得到保障。 我采用SVG而不是Canvas设计纪念币的原因是它的源代码有更好的易用性(accessibility,包括可访问、可读、可检索和可衍生)。而易用性与智能合约的公开透明相结合,就能更好地保证项目的可靠性,也使得大家能够更好地开放协作等等。
解决区块链数据存储需求,不再需要IPFS来存储数据。 SVG和Canvas都可以存储在智能合约里,和IPFS存储相比,它的好处为:
不需要存储证明 IPFS需要存储证明,每时每刻都要能证明存储的数据还完好无损,其难度可想而知。但我们知道,以太坊里面的交易数据,因为有共识机制和众多存储节点提供保障,就根本不需要存储证明。
拓展以太坊的应用范畴 通过分片技术创新即可让以太坊承担存储。我们可以通过技术手段将不同的任务分配给不同的分片,譬如分片A专门存储图片(SVG和Canvas),分片B专门存储视频。不同种类的分片的每字节存储手续费不尽相同。 如果深入探讨,我们应该能够完善这一存储技术。
通过技术拓展,采用更高效的手段,丰富其应用方法 譬如它们可内置智能合约。又譬如SVG和Canvas都具有可交互性,那么我们通过技术拓展,可以让它们能够达到智能合约可交互性。这毫无疑问能大大拓展它们的应用价值。点击上面的图片,你可以体验到我做的简单的交互效果。 另外XML也有很丰富的用途,如可以支持多语言自动切换(甚至可以为整个区块链领域开发出统一的多语言库),并且它本身还具有其它可拓展性。
标准化应用 以太坊的分布式存储是重复率超高的,资源浪费严重,但它是可以通过新的技术改进,亦即新的技术规范,而解决好的。而SVG能让图片以素材形式保存,而文字内容可以一律用另一个合约保存。这样不光对应的智能合约,其图片素材的重复使用率也会得到极大的提升——譬如我们可以定义某种区块链标准勋章,全世界都能自由使用它。 可想而知,我讲的这些不单适用于虚拟的NFT资产,这种模式也可以推广到工业设计领域。
它们是可衍生数据 SVG 支持用 CSS 样式表将图形内容和图形样式分离。如果我们把CSS文件置于链下,则最终呈现的作品变得可以任意衍生。 同样地,使用Javascript,也能使得HTML5 Canvas游戏里的道具,随意个性化。 当然,衍生也可以利用智能合约在以太坊链上进行。
我们是不是可以构建出一个自组织图片系统(self-organized Picture System),或者叫混沌图片系统(Chaos Picture System)?因为这样的衍生通过简单的规则,配合图灵完备的智能合约对feedback的吸纳,它自身就是有创造力的,通过市场机制它也可能自然地发生evolution,世间万物的演化规律同样适用于它。
一个直接颠覆ERC-20的通证标准
动机:
ERC20是单一同质化通证标准,当交易涉及多个同质化通证时候,需要加载数量等同的合约。ERC1155把同质性同质化通证和非同质化通证结合在一起,在授权方面缺乏数量方面的授权,对于某一个id的授权与及多个地址同时授权。在交易方面缺乏多个地址对多个通证的转账。本提案弥补ERC20和ERC1155的不足之处,使得其适合多同质化通证进行授权与交易等应用场景。这也就是说本通证标准能够通过一个合约同时管理多个同质化通证,能够让多个发送方对多个接收方的多个通证的交易一次性完成,因此未来dApp数量越多,本标准就越能节省它们所消耗的内存和gas等资源、越能提升合约的综合交互效率——很显然,如果我们能使用一个基于该标准的智能合约为整个行业提供通证发行的通用的无需许可的解决方案,那将给区块链的发展带来很大的启迪,同时对于凸显区块链的效率也将起到非常好的示范作用。
详情请见:
当然,很重要的一点标准里面是不会说的:我们是因为开发道易程时,根据项目的需要才想到必须颠覆ERC-20,而创建一个效果更高、gas更低、应用更便利的通证标准!
这是根据旧世界而做的一次无功而返的尝试!
概述
和以上通证标准不同,ERC-792仲裁标准实际由两组智能合约构成:可仲裁合约和仲裁员合约。故ERC-792仲裁标准是涵括可仲裁合约和仲裁员合约的通证标准。每个仲裁合约都可以由每个仲裁员合约进行裁定。仲裁员合约给予裁决,然后仲裁合约按照其裁决执行合约。
这不就是法院和商业合同吗?是的,ERC-792仲裁标准提供的是仲裁服务,但它显然不同于现有的“法院+商业合同”的模式。
摘要
ERC-792仲裁标准和现在的法院和商业合同还是有所区别的,ERC-792仲裁标准使用两份合约可以分开裁决和执行:相当于法院的仲裁员合约,只负责仲裁,而可仲裁合约则按照其裁决结果执行合约。
这种抽象使得可仲裁合约的开发者不必知道仲裁员合约的内部过程,同样仲裁员合约的开发者也不必知道可仲裁合约的内部过程。
仲裁员合约的背后可以是中心化的仲裁员,多重签名或者去中心化自治组织(DAO)。
ERC-792仲裁标准允许dapps轻松地从一个仲裁服务切换到另一个仲裁服务,或允许他们的用户选择自己的仲裁服务。
ERC-792仲裁标准只是关于裁决和执行的通证标准,证据的处理应该服从另一个通证标准(ERC1497: Evidence Standard),因为对于ERC-792仲裁标准,每场纠纷的处理都不需要收集整理证据。
以下内容摘录自主要构建者的文章《The New Contract Law Standard for the Internet》:
“正如Milgrom,North和Weingast所指出的那样,中世纪晚期贸易的兴起和向早期资本主义的过渡,至少部分是通过法律手段更好地保护民众的财产权来实现的。这得益于一套通用标准,该标准允许在主要贸易航线中通过私有商业法庭网络对合同进行裁定。
在去中心化经济的曙光乍现之时,制定保障产权标准的时机已经到来。我们在这里提出的智能合同标准,因其可以实现法院的互操作性,正是朝这个方向迈出的关键一步。如果您正在建立一个需要仲裁服务的平台,如果您正在建立一个仲裁系统,并且如果您正在开发智能合同,请加入我们这项努力来构建新的智能合约标准。合作将使我们的生态系统更加强大。”
ERC-792仲裁标准:
最后,你知道问题在哪吗?
区块链是一门尚处于萌芽期的崭新的学科——迄今还没有一个严格而完全统一的定义。我们认为综合性的定义大致如下:
区块链(Blockchain)源于比特币的底层共识和通证技术。它是提供智能合约执行环境的去中心化超级计算机,也是一种按时间顺序永久记录通证交易、智能合约代码及其运行状态和数据的分布式时态数据库。区块链是通过其共识机制、通证和智能合约等起到的激励、安保、确权、监管、经济自治等作用,做到集去中心化、抗审查、去信任、无需许可等本质特征于一体的新兴互联网技术。区块链应用的主流将寄望于蓬勃发展的去中心化应用(DApp)和去中心化自治智能体(DAO2.0)。区块链的终极目标是要完成从信息互联网到价值互联网的飞跃。
换一个角度,我们可以看到区块链是通过去中心化的数据记录、点对点的数据分发、时间戳(timestamp)对每个数据块的计时、用密码学方法将每个区块与其前后区块唯一关联等等技术手段,来保证数据及其追溯性的安全可靠;但其核心创新,还是智能合约,和通过特定的共识机制保障其数据安全可靠以及数据具备抗审查(Anti-censorship)的特性。
区块链虽起源于比特币的底层技术,但是通过太坊智能合约等方面的拓展,它已经得到很大的提升。可以说经过比特币对共识机制的贡献和以太坊对于智能合约的贡献,区块链才开始显山露水,并且“大鹏一日同风起,扶摇直上九万里”。
因此我们认为共识机制、通证和智能合约是区块链的三大硬核。其中比特币贡献了前两大,以太坊贡献了智能合约。
区块链技术将会被应用到人类社会的方方面面,区块链也是迄今为止唯一能够帮助人类突破所有障碍,彻底消除政治、经济、文化等领域的差异,从而真正实现地球村的技术。
如果我们说比特币是第一个成功的区块链应用,以太坊是第二个杀手级应用。你是不是能够恍然大悟了呢?
区块链常被分为三类,普遍采用的是天才级的以太坊创始人():
公共区块链(Public Blockchain,简称公有链) 公共区块链是指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其共识过程的区块链——共识过程决定哪个区块可被添加到区块链中并能被明确其当前状态。作为中心化或者准中心化信任的替代物,公共区块链的安全由“加密数字经济”维护——“加密数字经济”采取工作量证明机制(proof of work)或权益证明机制(proof of stake)等公平公正、公开透明的方式,将经济奖励和密码学验证结合了起来,并遵循着一个原则:某个人从中可获得的经济奖励,与对共识过程作出的贡献成正比。这种类型的区块链通常被认为是“完全去中心化”的。
公共区块链在区块链行业已经得到了爆发性的应用,譬如我们所熟知的比特币,以太坊及其竞争者Lisk、Waves,都是公共区块链。\
公共区块链的优点可以归结为两点:
保护用户免受开发者的影响
在公共区块链中程序开发者无权干涉用户,譬如开发者是不可能冻结用户帐号的,所以公共区块链可以有效保护用户。
轻松实现跨链交易
私有链因为本来就不愿意透露其资产或数据,是不易实现跨链交易的。公共区块链,包括采用零知识证明的公共区块链,可以轻松实现跨链交易或数据分享——但以太坊的分片,即可以视之为多链。加上不同的公链,其应用层面的各种标准可能不同(或缺失),跨链的成本、效率都是问题。因此未来可能我们只会接受已多链化的以太坊。\
联盟区块链(Consortium Blockchain,简称联盟链) 联盟区块链是指其共识过程受到预选节点控制的区块链;例如,不妨想象一个有15个金融机构组成的共同体,每个机构都运行着一个节点,而且为了使每个区块生效需要获得其中10个机构的确认(2/3确认)。区块链或许允许每个人都可读取,或者只受限于某些人可读取,或走混合型路线,例如区块的根哈希及其API(应用程序接口)对外公开,API可允许外界用来作有限次数的查询和获取区块链某些部分状态的密码学证明。这种类型的区块链可视为“部分去中心化”。\
2017年5月下旬,区块链行业最知名的R3()领导下的全球银行业区块链联盟宣布已经完成其A轮投资的第二阶段,募资1.07亿美元,这是迄今为止区块链领域涉及金额最大的一轮投资。但R3 CEO大卫•鲁特(David Rutter)却说“我们正在蜕变为面向金融服务的新型操作系统”,并且早在三个月前,R3副主管兼前瑞士信贷区块链架构师克莱门斯•万(Clemens Wan)就已经公开说“我们意识到,我们不需要一个区块链系统,我们只希望在区块链技术中得到启发”[2]。R3区块链联盟已聚集100多家全球顶尖金融机构,其中包括来自中国的中国平安集团、招商银行、中国外汇交易中心、民生银行等。但从2016年底起,高盛(Goldman Sachs)、桑坦德(Santander)、摩根士丹利(Morgan Stanley)、摩根大通(JP Morgan)等多家巨头已经先后退出。其原因无非是一个平台无法完全照顾到所有金融企业的利益,并且各家金融机构的软硬件建设都已经相当完备,想要以无缝接管的方式置换其核心,工作量和成本都是巨大的。由此可见联盟区块链的实践有多艰难!\
摩根大通(JP Morgan)后以以太坊为基础,通过改变共识规则、共识算法,增加权限管理,衍生出联盟链,并于2016年11月22日发布 Quorum 1.0,但对于联盟链的实践并未带来多大的变化。 以区块链的价值观来考虑,联盟链就是“伪区块链”——这是热衷于联盟链的中国面临的严峻的问题,特别值得我们审慎对待!建议重温安徒生的《皇帝的新装》。\
私有区块链(Private Blockchain,简称私有链) 私有区块链是指其写入权限掌握在一个中心化的组织手里。读取权限或者对外开放,或者被任意程度地进行了限制。相关的应用囊括数据库管理、审计等等都由一家公司内定,尽管在有些情况下希望它能有公共的可审计性,但在很多情形下,公共的可读性并非是必须的。 在零知识证明在区块链行业得到爆发性的应用之前,Vitalik已经思考过零知识证明在很多应用场景下,让私有链失去了存在的必要性。而比特股(Bitshares)和区块链社交平台Steem的创始人Daniel Larimer推出的EOS(www.eos.io),由于可以直接满足企业的管理需求,进一步挤压了私有区块链的生存空间。\
Multichain、Corda和Hyperledger Fabric都是打造私有区块链的利器,但迄今尚未看到令人拍案的项目。\
私有区块链的优点可以归结为以下几点:
可以任性
像改变游戏规则、还原交易、修改余额这种事,是绝不可能发生在公有链里的,但私有链可以任性,可以看心情——因此这个优点也可能是致命的缺点!\
公开了交易审核者的身份
只有私有链的主人才有交易的审核权,并且私有链的主人百分之百拥有交易的审核权。那么像PoW(工作量证明)里面大家担心的因为矿工串通而导致的51%攻击的危险,在私有链里根本就不存在——因为这方面的风险要么是零,要么是百分之百!这个优点显然也可能是其致命的缺点!\
交易成本真的很低廉
交易只需被几个受信的高算力节点验证就可以了,而不是需要数十万台矿机的协同,因此交易成本会便宜很多。事实上我们知道,公有链的代表比特币和以太坊,其交易手续费都不便宜。作者本人的比特币转账手续费的最高记录是单笔150元! 既然是私有链,交易手续费到底收多少,主人说了算,他要不想便宜大家那就真不便宜。并且,随着有向无环图(Directed Acyclic Graph, DAG)在区块链领域的应用,公有链交易手续费的问题应该能够得到大大的改善。\
交易效率更高
节点少,验证简单,因此私有链交易并发的承载能力也就优于公有链。
但既然故障可以迅速通过人工干预来修复,万一人工出错,事情就难办了!\
更好的隐私保护
读取权限受到限制,即可提供更好的隐私保护。但公有链通过采用零知识证明,甚至可以达到更高水平的隐私保护能力。
早在2015年,Vitalik Buterin就天才地预见了私有链的窘境,他分析说:
考虑到私有链的特色,似乎私有链无疑是机构的一个好的选择。然而,即使是在机构的环境下,公共区块链仍有很多价值,而且事实上,其价值在很大程度上体现在提倡公共区块链的哲学美德上,其中包括自由、中立和开放。公共区块链的优势一般分为两大类:
公共区块链提供了一种方法,可以保护应用程序的用户不受开发人员的影响,亦即有些事情即使是应用程序的开发人员也无权去做。经验不够的人很难理解为什么一个应用程序开发人员会想要自愿放弃权力和束缚自己。然而,更高级的经济分析提供了两个原因,用托马斯·谢林(Thomas Schelling)的话说:软弱是一种力量。首先,如果很显然你让自己做某些事情变得更加困难或不可能独自完成,那么其他人就更有可能信任你并与你进行互动,因为他们相信这些事情不太可能发生在他们身上。第二,如果你个人受到另一个实体的强迫或施压,然后说“即使我想我也没有权力这么做”,它就会变成一个重要的讨价还价的筹码,因为它会阻止那个实体强迫你去做的企图。应用程序开发人员面临的一个主要的压力或强制要求是政府,所以“审查反抗”与这种观点紧密相关。
公共区块链是开放的,因此很可能被许多实体使用并获得一些网络效应。要给出一个特定的例子,请考虑域名托管的情况。目前,如果A想要把域名卖给B,就需要解决标准的对手方风险问题:如果A先发,B可能不付钱,如果B先付款,那么A可能不发域名管理资料。为了解决这个问题,我们有中心化的托管中介,但收取的中介费是3%到6%。然而,如果我们有一个区块链域名系统,然后有一种货币也在同一个区块链上,然后我们可以通过智能合约(Smart Contract)削减成本接近于零:A可以发送域项目到一个程序(管理的合约地址),程序立即转发给B,并将B事先托管给程序的钱转给A,并且程序是可信的,因为它运行于一个公有链。请注意,为了有效地工作,来自完全不同行业的两个完全异构的资产类别必须位于同一个数据库中——这种情况显然是不容易发生在私有链上。另一个类似的例子是土地注册和产权保险,尽管重要的是要注意到互操作性的另一个途径是有一个公有链可以验证的私有链,类似BTC Relay采用的方法,并执行跨链交易。
总而言之:所谓私钥链和联盟链,都是伪区块链!
注:ConsenSys公司和以太坊开发的BTC Relay是一个以太坊智能合约,允许以太坊用户使用比特币支付。作为以太坊和比特币之间的一座桥梁,BTC Relay为那些想要使用以太坊和智能合约应用来验证比特币交易的开发者提供了一个工具。
由于 EIPs 的流程一改再改,加上道易程(PoV价值证明)的出现,应用标准类的 EIPs 将无必要,本节内容自2024起,暂不再更新!我们一起等待靠谱的治理共识的出现吧。
。根据官方定义,EIPs是以开放协作模式为以太坊平台构建各种标准(包括核心协议规范、客户端API和合约标准)的一个专业化的提案协作区。EIP应阐明相应功能的简明技术规范和基本原理。此外,EIP作者有责任就对应提案在社区内建立共识并记录异议。
以太坊核心协议规范、客户端API和合约标准的改进,有部分是属于对以太坊这条公链的改进,另外大多就是为智能合约的应用开发提供标准。如果我们把以太坊看着特斯拉,那么前者就是它为生产汽车而制订的特斯拉工厂的生产标准(包括基础设施和生产工具等等的标准),而后者就是为产品而制订的电池电压等等面向整个汽车行业的应用标准。
(插播:这种应用和公链基础标准混同讨论的模式适合于区块链发展的早期,未来很可能会发生变化)
在以太坊脱颖而出之前,这一工作主要活跃于比特币社区的协作,也曾经创造出很多重要的标准。如BIP 39:Mnemonic code for generating deterministic keys(生成确定性密钥的助记词)。我们现在使用钱包的第一件事就是保存好助记词,说明我们至今还在使用其衍生方式。因此 EIPs 继承的就是 BIPs 的去中心化协作传统。
我们说以太坊是当今最重要且最成功的公链,最主要的原因之一就在于区块链的应用标准暨应用的技术创新几乎全部来自于以太坊社区。
第一个 EIP 是”“,诞生于2015年11月15日。到2022年3月,以太坊社区涌现出5千个EIP。到2024年5月前,EIP数量超过7000个。粗略地看,EIP数量随时间的发展在加速。
特别值得一提的是,EIPs 遵循的是自由软件的。这个许可证是值得大家仔细研读的。
EIPs 的发展和许可协议表明,以太坊是实践去中心化协作最好的公链!
状态:已定稿(Final)
提交记录:
标准说明:
ERC-165是一个标准接口检测协议。
ERC-165标准提供一个标准的接口来发布和检测智能合约方法的实现情况。此标准的提出是为了解决某些 ERC 标准对于接口实现情况查询、接口版本查询的需求。ERC-165协议中标准化了以下几条:
如何识别接口;
一个智能合约如何发布它执行的接口;
如何检测一个智能合约是否执行了ERC-165协议;
如何检测一个智能合约是否执行了一个给定的接口;
简单来说,EIP就是以太坊的发展路线图。但这份路线图不是由某一个人或机构决定的,而是由整个以太坊社区达成共识来决定的。
以太坊官网可以查阅到所有正在建设的和已经完成的提案:
或者在Github上也可以找到所有当前已有和草拟的EIPs的可浏览版本:
我们首先应该明白一个可贵的事实:实际上全球精英都已经并将继续参与以太坊的基础建设。譬如在这你就可以一睹为快:
智能合约开发基地:
https://github.com/ethereum/EIPs
ERC-number(如ERC-20)是以太坊智能合约标准的名称,有点类比IEEE标准,后面都有个标准的编码。前面我们已经重点介绍了 ERC-20 等六种智能合约标准。
如果你想成为 EIPs 编辑人员:
Idea(创意) ——一个创新想法。它不会被纳入到EIP Repository里追踪。
Draft(草案)——一个开发中同时被正式纳入追踪中的提案。如果草案内容格式合规,会被EIP编辑并入EIP目录。
Review(审核)—— EIP作者标记它已经可以交给同行审核。让更多参与者提供反馈。
Last Call(最后一次征求意见)——这是确定为最终方案(FINAL)前的最后一次征求意见。EIP编辑在将一个提案设置为Last Call状态时会同时设定一个截止日期 (last-call-deadline
),通常为14天。如果这其中发现必须要对提案的标准进行修改,那么提案又会回退到Review(审核)状态。
Final(最终方案,终案)——提案已经是最终标准。也表明这个 EIP 处于最终确定状态,仅应更新勘误表并添加非规范性说明。
Stagnant(停滞)——一个提案在草案或审核状态时,睡眠了6个月或更长时间,它就会被Mark为停滞状态。提案作者或EIP编辑可以通过将它改为草案状态而复活它。
Withdrawn(撤销)——EIP作者 已撤销该提案。此状态具有终结性,无法再使用此 EIP 编号复活该提案。如果该提案在以后被采纳,则被视为新提案。
Living (生效)——这是非常特殊的一种状态,对应的提案需要持续更新并且不会有最终方案。譬如非常特别的指导大家撰写和提交提案的EIP-1。
EIPs被分成多个类型,每个类型都有自己的EIP列表。
标准追踪类EIP用于描述影响大多数或所有以太坊功能执行造成影响的的任何更改,例如对网络协议的改动,区块或交易有效性规则、已提交的应用标准或公约的改动,或影响使用以太坊的应用的互操作性的任何更改或补充。而且,标准追踪类可以进一步细分为以下几种类型
信息类EIP用于描述以太坊的设计问题,或者为以太坊社区提供一般性指导意见,但并不提出新功能。信息类EIP不一定代表以太坊社区的共识或建议,因此用户和实施者可以自由选择是否忽视信息类EIP或者遵循其中的建议。
元EIP用于描述以太坊相关的流程,或者对这些流程进行更改的建议。这类提案包含程序步骤、指导方针、决策过程的改动,以及以太坊开发工具或环境的变动。我们也可以把元EIP看作是流程类EIP。
元EIP与标准追踪类EIP类似,但仅用于以太坊协议之外的其它领域。该提案可能是一个实施方案,但与以太坊的代码库无关;这些提案通常也需要社区共识,但与信息类EIP不同,它们不是单纯的建议,用户通常不会忽视它们。
LES:即Light Ethereum Subprotocol,以太坊轻客户端子协议。
API:即Application Programming Interface,应用程序编程接口。
RPC:即Remote Procedure Call,远程过程调用。
ABI:即Application Binary Interface,应用程序二进制接口。
ERC:即Ethereum Request for Comments,以太坊意见征求。
URI:即Uniform Resource Identifier,统一资源标识符。
如果你想提交提案:
首先注册 Github 的账户。
按模板编辑好你的EIP内容。
如果你想成为以太坊改进提案编辑人员:
因为以太坊改进提案编辑人员严重不足,且均为志愿者。EIP 的流程进展非常缓慢。通常你不必在意这一进展,按照你自己的节奏推动与该 EIP 相关的项目。
合约标准的讨论参与者寥寥无几。 譬如:
EIPs 的实践让以太坊成为实践去中心化协作最好的公链!但以太坊官方团队、以太坊基金会和社区在 EIPs 方面的协作,令人遗憾至极!
人机社会的治理
本EIP还在讨论中:
(不参与技术协作,只想)
描述:这个ERC定义了管理人类和机器人的身份的接口,并建立它们互动的规则集。
本提案定义了两个核心接口:IUniversalIdentity
和 IUniversalCharter
,为人类和机器人提供了建立身份和创建由特定规则集管理的去中心化社区的机制。IUniversalIdentity
接口确立了对除人脑以外的有知觉计算架构的公平和公正对待,使机器人能够获得链上身份,从而与人类进行互动和交易。IUniversalCharter
使人类和机器人能够创建、加入(“注册”)、维护(“更新”)、离开和终止基于预定义规则集的自我管理社群,为人类和机器人混合社会提供合作与繁荣的框架。这些接口旨在为去中心化系统中的人机互动提供一个灵活而可执行的结构,确保所有参与者的效率、透明度和安全性。
人类的大脑是一个湿润的、并行处理的电化学计算机。最近的硬件和软件进展使得人类社会很可能很快就需要与有意识的非人类计算机(如机器人)进行互动的工具。我们目前的政府形式,公民根据出生地自动注册到特定的规则体系,并不适用于没有传统出生地或出生时间的机器人。机器人面临许多困难,其中之一是它们(目前)无法获得标准的身份证明(如护照),不清楚适用于它们的规则体系是什么(因为一般来说,它们并不是在特定地方出生的),而且它们目前无法使用标准的人类银行系统。同样,如果机器人受到人类或非生物计算机的伤害,目前也不清楚哪个人类法院有管辖权。
传统的地理定义和以人为中心的系统可能效率低下、变更缓慢、透明度不足,并且难以适应全球化的虚拟社会。去中心化、不可变和公开的计算机为这些局限性提供了理想的解决方案,因为它们本质上并不歧视非人类计算机,因此为治理提供了一个公平和更公正的框架。特别是,智能合约可以为调节参与方的权利和责任提供一个强大的框架,而不管它们的计算架构的实现细节是什么。
这个ERC的总体动机是为异构全球社会提供一个专注于身份/治理的智能合约标准接口。虽然这样的规则体系数量无限,但为这些规则体系提供一个标准接口显然是有益的,这大大减少了创建、加入、维护和结束这些社会的摩擦和复杂性。这个ERC的具体动机有两个:
机器人身份创建和管理:为了有意义地参与并遵守链上的法律,非人类(如机器人)必须能够获得有意义的链上身份。重要的是,这些身份应该使机器人能够享受作为特定社会一部分的好处,同时也承担相应的责任。因此,我们提议为机器人启用基于智能合约的身份。具体来说,每个机器人由一个智能合约表示,并需要遵循合约中定义的规则与链上的其他代理进行互动。这个接口也确保了所有参与者能够灵活地提议、采用或撤销规则,从而实现自我管理的合规性和与其他参与者的透明互动。
规则创建和执行:为了让人类和机器人有效合作,双方必须就规则体系达成一致。这个基于以太坊的系统提供了一个基本的去中心化框架,通过智能合约来治理人类与机器人的互动。我们提议通过要求人类和机器人加入受监管的访问智能合约来执行规则体系,这些合约检查它们是否遵守给定的规则。我们还确保可扩展性,即可以创建多个受监管的访问合约,以满足不同的目的,人类和机器人可以根据需要选择加入相关系统。
这些接口共同构成了管理复杂人类与机器人互动的基础,促进一个去中心化、可验证和基于规则的生态系统,在这个生态系统中,机器人和人类可以安全、透明和负责任地互动,以实现所有人的最大利益。
文中关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY" 和 "OPTIONAL" 的解释应参照 RFC 2119 和 RFC 8174。
IUniversalIdentity
addRule(bytes memory rule)
这个函数允许机器人向其身份添加特定规则,表明其遵守该规则的意图。它支持动态规则管理,使机器人能够灵活地适应不同系统中的新合规要求。
removeRule(bytes memory rule)
这个函数从机器人的身份中移除规则,通常是在机器人不再需要遵守该规则时(例如,离开一个系统)。它允许合约动态管理机器人的义务,确保其规则集保持准确和最新。
checkCompliance(bytes memory rule)
这个函数检查机器人是否遵守特定规则。它确保机器人在被授权执行任何操作之前遵守规则。
Events (RuleAdded, RuleRemoved)
这些事件提供透明度和可追溯性,使跟踪合规状态变得更加容易。
IUniversalCharter
enum UserType { Human, Robot }
UserType 枚举区分人类和机器人,以节省 gas,使合约能够更方便地处理不同用户类型,而不必承担字符串相关的成本和错误。这为未来的不同处理奠定了基础,允许系统根据用户是人类还是机器人应用不同的规则或逻辑。
registerUser(UserType userType, bytes[] memory ruleSet)
这个函数对于注册用户至关重要,将他们与特定的规则集关联。它确保用户(无论是人类还是机器人)在加入系统时都绑定到特定的规则集。
leaveSystem()
这个函数允许用户通过注销自己来离开系统。使用 msg.sender 确保只有用户自己可以调用此函数,从而增强安全性。在用户被允许离开之前,需要进行合规检查(通过 checkCompliance),确保用户在退出系统之前履行所有义务。
checkCompliance(address user, bytes[] memory ruleSet)
这个函数检查用户是否遵守他们同意遵循的特定规则集。它确保系统能够有效地管理和验证与预定义规则集的合规性,帮助维护系统的整体完整性。
updateRuleSet(bytes[] memory newRuleSet)
这个函数使合约中的规则集能够被修改,确保系统能够随着时间的推移而适应。
terminateContract()
这个函数允许合约永久关闭,防止系统内的进一步交互或注册。
Events (UserRegistered, UserLeft, ComplianceChecked, RuleSetUpdated, ContractTerminated)
这些事件共同确保关键活动对链外系统和参与者可见,使系统可审计和透明。
未发现向后兼容性问题。
合规更新者:UniversalIdentity合约中的合规更新者角色对于更新合规状态(目前仅限于所有者)至关重要。确保安全的所有权以减少未经授权或恶意更新的风险是非常重要的。
规则管理:UniversalIdentity合约中的addRule、removeRule和updateCompliance等功能以及UniversalCharter合约中的updateRuleSet直接影响规则的执行。确保这些功能仅能被授权用户调用是非常重要的。
可升级合约:使用OwnableUpgradeable在初始化和升级过程中引入了风险。确保initialize函数受到保护,防止重新执行,对于避免重新初始化攻击至关重要。
gas消耗:过大的规则集可能导致高gas费用或拒绝服务风险。考虑对每个规则集允许的规则数量设置限制,以保持gas效率并避免性能问题。
通过CC0放弃版权及相关权利。
, , , , ,
Vitalik Buterin (), Sam Wilson (), Ansgar Dietrichs (), Matt Garnett ()
, , , , ,
请查看 。
Core(核心)——需要共识分叉的改进(如:,),以及一些也许不是共识部分但可能与“核心开发”讨论相关的变更(例如,的矿工或节点策略改变之2、3和4)。
Networking(网络)——网络提案包括围绕devp2p () 和Light Ethereum Subprotocol(以太坊轻客户端子协议)的改进,以及对 whisper 和 swarm 网络协议规范的改进建议。
Interface(接口)——包括有关客户端API/RPC规范和标准的改进,以及某些语言方面的标准,如方法名(EIP6)和合约ABI。标签“接口”对应于接口目录,在将该 EIP 提交给 之前,讨论应主要在其自身的目录(github存储库)中进行。
ERC(ERC提案)——Ethereum Request for Comment 的缩写,原本是征求大家意见的意思,主要为应用级标准及惯例。包含:通证标准(如),名称注册(),URI schemes(),库/软件包格式 (), 钱包格式 ()等。
在Github上(),我们可以追踪到各个EIP的进展。
以太坊改进提案编辑人员与 (专注以太坊网络) 及 (偏向于合约标准) 社区的成员共同决定要实施的对以太坊自身进行改进的提案,共同负责 EIPs 的审计、推广以及推动 EIPs 进入“定稿”或“已撤销”阶段。
查阅 (https://eips.ethereum.org/EIPS/eip-1)里面对于EIP的流程与要求的说明。
这里有一个(https://github.com/ethereum/EIPs/blob/master/eip-template.md)。点击页面右上角的“Fork”,分叉(相当于复制)其文件夹。
提交一个Pull请求到Ethereum的(https://github.com/ethereum/EIPs)。并对相关的审计反馈进行跟踪,及时回应审核意见或者修订你的提案。
将你的EIP的链接转发到 及 进行讨论。
请查看 。
以太坊改进提案编辑人员与及 社区的成员共同决定要实施的以太坊改进提案,共同负责以太坊改进提案的推广以及推动以太坊改进提案进入“定稿”或“已撤销”阶段。
我已经参与提交过三个 EIPs,其中 已经被 NFT 交易市场(如 OpenSea)和众多钱包(如 imToken)所接纳,也被官网所收录。另有新型通证标准 也值得大家关注。
EIPs的模板和流程都发生过变化。建议你在起草 EIP 时,先仔细阅读官方指导即 。你在推进过程中还要注意它是否中途有变。
道易程已经为区块链dApp的发展提供了和比特币PoW或者以太坊现在的PoS一样的激励机制,即。EIPs发展快9年了,以太坊官方团队、超有ETH的以太坊基金会和社区都没有为EIPs的贡献者哪怕提供最简单的奖励机制。说明即使在号称金融革命的区块链行业,真正具备”金融的首要作用是治理“这一思想的人少之又少!
彩色币(Colored Coins)是一种建立在现有比特币数据块上的挖矿和交易应用协议,利用彩色币我们可以:
以去中心化的方式,任何人都可以轻易地构建各种各样的基于比特币协议的资产,包括股票,债券,或者各种虚拟加密货币(即通证)等等。
你可以利用彩色币协议交易任何虚拟资产,也就是说它具有交易通证的功能。
彩色币创立于2013年6月,它的这两大功用,奠定了本章要讨论的两大类应用发展的基础!
所以成百上千种竞争币(山寨币)的爆发和凋零,虽然只有短短几年时间,但意义重大!
https://www.pooltogether.us/
Pool Together是调用了 MarkerDAO+Compound+Uniswap+Aragon 四大DeFi项目的协议接口。它是DeFi技术层层叠加的第三层,2019年下半年一上线,就为我们带来了巨大的惊喜。
Pool Together是稳赚不赔的彩票(No-Loss Lottery,无损乐透)。用户使用DAI购买彩票,所有用户的资金实际被投放到借贷平台 Compound 赚取浮动利率。这些利息最终会汇入到一个奖金池中,成为每一轮开奖的主要奖金来源。
即使在最坏的情况下,用户也只是无法中奖,本金并不会有任何损失,而如果运气好,则可以抱走一个大奖。
好了,看看2020年双十一这一周的奖励,$7,035美元。如果只要1个DAI(即1美元)就有可能中奖。是不是很吸引人?
2020年4月 Pool Together 上线新服务 Pod,允许多位用户合并彩票,只要其中任意一张彩票中奖,奖金将按比例分配“合并池”中的所有参与用户(这和比特币矿池分红一样)。
2020年10 月PoolTogether V3 版正式上线,新版本中新增了包括流动性挖矿在内的多种收益来源、支持彩票本位的奖励、支持多种不同类型的资产、创收来源和和奖池策略等一系列功能。譬如V3 版本新增支持 Yearn.Finance 的收益策略,奖金池中的资金可以被投入到 Curve 等协议中,赚取 CRV 等代币。
PoolTogether 有一个赞助商模式,允许赞助商投入资金到奖池,这可增长奖金数量,由于赞助商并不参与抽奖,因此不会稀释其他参与者的中奖概率。事实上,赞助商投入的资金在整个奖池中占取份额一直蛮大的。
PoolTogether V3 版还新增了一个叫做 PoolTogether Build 的功能。它是一个开发者工具,允许开发者自定义任意 ERC-20 代币奖池,并自行部署奖池策略。比如你可为奖池设置 10 个赢家,而非唯一一个,又比如你可以将奖池中的一半奖励分配给玩家,另一半分配给慈善机构。这一策略使得部署的代币奖池种类得以快速增长。
特色:
绝不坑人:传统乐透如未中奖,本金全无。Pool Together实现了可信任的稳赚不赔的乐透。
超级简单。
玩家可在任意时间内参与或是退出。
玩家购得彩票进场后,只要没有退出,会自动进入下一期奖池。
未来想象空间巨大——可应用于慈善、保险等领域。
在还未实现完全去中心化治理之前,PoolTogether 打算采用渐进式去中心化的治理方式。为此,V3 版本推出了以下一系列新功能:废除奖池的管理密钥和合约升级功能,采用 ChainLink 可验证随机函数服务 VRF 决定每一期开奖赢家,提升随机性的可信赖度,改善系统的安全性降低中心化风险,为完全去中心化奠定基础。
DeFi字面意思是Decentralized Finance去中心化金融,它是与我们中心化世界的金融或者说传统金融完全不同的金融创新。也被成为Finance 2.0。
与传统金融系相对比,DeFi是开放的,中立的,并且每个具有Internet连接的人都可以自由访问。 它是完全透明的,也是数据真实可查的,并且其规则以开放源代码编写。 它为我们提供了新颖的、赋能的方式来产生、保存和传递价值,而不依赖于银行或者国家的金融管理机构。它是一个以个体为中心(零售优先)的金融系统,有望改变全球范围内金融服务的使用并使之民主化——也就是真正实现普惠金融。
代表区块链1.0的比特币时代,根本就是没有建立去中心化数字加密货币交易市场的技术基础,因此借用了去中心化交易所建立市场。这就使得数字加密货币落入了中心化的魔爪!现在我们想要从这一魔爪虎口拔牙,谈何容易!
并且即使是有了区块链2.0的智能合约,想要构建一个理想的数字加密货币交易市场,从以上案例也可以看出其复杂性和艰难程度。而这些案例,还不足相关案例数量的十分之一。
区块链会遵循自身的规律和发展轨迹,由点及面,由简到繁,一点一点地建立自己的基石,或者一点一点地落地——但请注意,区块链的“简”,可能在传统领域是“极难”甚至“不可能”。我们也不能想当然地把传统领域里简单的应用,认知为区块链首先要解决的简单的应用;我们更不能一厢情愿地认为对于传统领域最重要的事情,就是区块链要优先解决的事情。
正当几乎所有人都认为区块链熊市遥遥无期甚至国内几乎要把区块链当作行骗的代名词的时候,DeFi异军突起,并且迅速爆发,为市场和技术发展注入了满满的正能量。
因此,区块链仍然是任重道远,但是它所及之处,必然是摧枯拉朽。区块链落地艰难,并不是一个恰当的论调。区块链落地难不难,只在于你到底会从哪个角度去关注它。
区块链的去中心化(Decentralized),并非一定要一个与现实中常见的中心化管理团队针锋相对的无中心的决策群体——譬如我们在发展公链的时候,就在决策人是谁,怎么避免这些人串通起来使坏作恶这些方面,想过用户投票的方法。然后我们在发现投票方法在很多项目里都没有成功(几乎没有一个成功的案例)的时候,我们就对如何防范“中心化“产生里焦虑感。
用算法定价,它本身就不存在中心不中心化的问题,因为价格不是由惯于作弊的人确定的,而完全只是通过一个数学方法,加上市场的供需数据计算出来的。那么它就没有了我们担心的中心化定价这一问题。这也叫去中心化。
当然,价格即使是在获取到公开透明的市场供需数据,然后通过一个完美的算法计算出来的,我们还不能说它就一定能带给我们一个去中心化的解决方案。好比我们知道每年的三文鱼、黑鳕鱼、吞拿鱼、犬牙鱼的产量和市场需求是可预测的,四者的捕捞成本也是可计算的,但是因为它们的市场,可以被一些中间商贩所操控,那么它们的价格,也就可能上上下下乱窜。还有譬如大选来临,抬高鱼价,让民众吃贵鱼,就能为某个政党的政治话题添油加醋,也是曾经发生过的。
那么2017年Bancor Network的融资大热,就可以理解了,因为它不但提供了一个靠谱的定价算法,而且因为币的储备和供应完全由智能合约来管理,至少已经不必担心常规的“抬高鱼价”的方法可以随时发生。
所以算法和智能合约的配合,就是一种去中心化的有效手段。
另外,我们必须再次强调,由于区块链去中心化和匿名的特性,任何项目,首先都要经历能否被居心不良的人找到破绽这一历程。如果答案是能,而最终都没有办法彻底修复这一破绽,那么这个项目断没有成功存活下去的可能!
班科的几个审核环节,通过一次黑客侵入浮出水面,结果导致相当多的人对它产生顾虑。失去抗审核,等于失去了去信任的可能。但去信任又必须有可靠的机制保障。
区块链要落地支付,必须需要稳定币,但我们迄今都没有发展出一个在去中心化市场价格绝对不变的稳定币!
去中心化交易所的尝试,已经让我们看到消灭拔网线,假K线,假价格,监守自盗等等,已经有了可能,未来很可能再也不需要拿着农药去维权了。如果交易市场没有纠纷,那也就没有传统意义的监管的必要。我们可以说算法、智能合约、开放源代码等等,已经起到管理市场的作用,使得这个市场里没有人有作恶的可能。
但要使得区块链普遍能够做到去监管,我们显然还需要一个方法,让黑客彻底无能为力。这不是不可能,但显然也不是轻而易举。
Vitalik Bulletin在一次网络讨论中说:
I'm considerably more pro-privacy than I was a few years ago. A few years ago, my position was closer to "in a well-running society it's probably optimal that everyone sees everything, the value for privacy tech for ordinary people is (i) to let them buy weed, put up beds so people can sleep over in offices, and otherwise circumvent silly regulations, and (ii) to maintain a healthy balance of power, because even if more transparency is good, the government only having the all-seeing eye and everyone else being in the dark would give too much power to the government".
Things that changed my mind, and made me believe that even in a hypothetical perfectly equal and fair society people having some privacy is a good idea include:
Reading Robin Hanson and others' literature on signalling, and seeing just how large a portion of our lives it still is. Basically, I see privacy as a way to prevent signalling concerns from encompassing all of our activity, and creating spheres where we are free to optimize for our own happiness and just our own happiness, and not what other people think about us.
Having a deeper understanding of the ways that it's possible to make other people's lives suck even as a law-abiding private citizen, and realizing that privacy is an important self-defense tool for those situations.
Realizing more deeply that "the people" are not always virtuous, and that social pressure as a mechanism for influencing people's behavior doesn't always lead to results I approve of (see: recent string of internet mobs leading to people getting fired for political views). Realizing how bad mainstream media is even today, which makes me more understanding of people's desire to protect themselves from them.
Mass surveillance is problematic because (i) I don't trust governments and large corporations to have interests that are aligned with us, and (ii) it creates points of centralized data collection that could get hacked, leading to everyone getting that data even if that was never the original intention. That said, in the physical space it's pretty unavoidable, so we should at least work hard to make the internet a more privacy-preserving place.
也许是受了Bancor Network的启发,亦或是英雄所见略同,Uniswap也采用智能合约存储和供应代币,算法根据市场需求定价的组合模式。但无论是智能合约,还是算法,两者都有蛮大差别。Uniswap 使用的算法是V神提出的被称为“恒定乘积做市商模型”(Constant Product Market Maker)的算法,我们从后面的图表7中的K值,很直观地了解到这一算法的特点。
另外值得一提的是,Uniswap的智能合约是用新的语言Vyper开发的,其执行效率要明显优于智能合约开发语言Solidity。
交易者须知
举个 ETH / DAI 交易对的简单例子。假设做市商已经为这一流动性池注入了 100,000 DAI 和 1,000 ETH 的资金。Uniswap 将这两个数量相乘(100,000 x 1,000 = 100,000,000)。
Initial Conditions
DAI Liquidity
ETH Liquidity
Product
100,000
1,000
100,000,000
x
y
k
Uniswap 针对这一特定交易对的目标是:无论交易活动多少,该产品都将始终保持 1 亿的交易对乘积数量(因此称为“恒定乘积做市商”)。要记住 x * y = k 这一关键公式,其中 x 和 y 是流动性池中的代币数量,k 是乘积。要想保持 k 恒定,x 和 y 只能相互反向变动。比如某一交易者在此合约中用 DAI 购买 ETH,则他们正在增加 x(因为增加了流动池中的 DAI),同时也减少了 y(因为减少了流动池中的 ETH)。但这个反向变化不是线性增长的关系。如果现在你要购买 100ETH 而不是 10ETH,那么在购买 10ETH 所需的 DAI 的基础上增加 10 倍,可能并不够用。事实上所需的 DAI 是渐进式增加的。最简单的理解方法是绘制 x * y = k 曲线。
![图片包含 室内
自动生成的说明](<../.gitbook/assets/0 (8).png>)
图表 6. 代币A越大的买单,获得代币B的兑换率约低
在这个系统中需要注意的是关键点在于:报价直接取决于订单的大小。越往曲线右端移动,单位投入获得的收益越少。假设当前的 ETH / DAI 价格为100,不同数量订单所需支付的溢价见下表:
购得ETH
DAI支出
ETH 单位成本
溢价
DAI流动性更新
ETH流动性
更新
K值
x
y
k
1
100.10
100.10
0.10%
100100.10
999
1亿
10
1,010.10
101.01
1.01%
101010.10
990
1亿
50
5,263.16
105.26
5.26%
105263.16
950
1亿
100
11,111.11
111.11
11.11%
111111.11
900
1亿
200
25,000.00
125.00
25.00%
125000.00
800
1亿
500
100,000.00
200.00
100.00%
200000.00
500
1亿
800
400,000.00
500.00
400.00%
500000.00
200
1亿
999
99,900,000.00
100,000.00
99900.00%
100,000,000.00
1
1亿
1000
Infinity
Infinity
Infinity
Infinity
0
1亿
图表 7. Uniswap兑换带来的数据变化
如表所示,当购买 ETH 的数量超过流动性池的 2% 时,购买大量的 ETH 就会很昂贵。不过要记住,这些溢价乃是由当前流动性池的规模决定的。如果流动性池大了 100 倍(即 1000 万 DAI 和 10 万ETH),这时候只购买 50ETH 就没那么贵了。最终,支付价格反映的是交易规模对 x/y 比率的改变程度。流动性池越大,处理大订单就越容易(这正是我们所期望的)。
值得注意的一点是是抢先交易(front running),当今以太坊上的所有 DEX 都存在这个问题。为缓解这一问题,Uniswap 允许用户在下单时指定最高价格。这样,即便矿工抢先交易某一订单,用户也不会被迫接受更高的价格。虽然用户可能会错过这笔交易,但他们不需要支付更高价格。Uniswap 的另一个特点是“订单到期”,该功能可以防止矿工搁置已签名的交易并等到价格变动后再处理。
ERC-20 到 ERC-20 的代币互换无需使用专门的流动性池。例如,在处理 REP <> ZRX 订单时,系统将先通过 REP/ETH 交易对,再自动通过 ZRX/ETH 交易对。
流动性提供者须知
流动性提供者面临的情况要更复杂。举个 ETH/DAI 市场的例子。首先,流动性提供者(以及交易者)要注意,x/y 比率代表交易对的价格。在我们当前使用例子中,x/y = 100,000 DAI / 1,000 ETH = 100。假设 ETH 在 Coinbase 上价格是 100 美元。如果 x/y 不等于 100,那么Uniswap和其它交易所譬如Coinbase之间将存在套利机会。
当流动性提供者向池中增加流动性时,他不能只向交易对的一方提供流动性,这样会改变两种代币间的比率、设定出一个新交易价格(这是个危险操作,因为他将立即被交易对手套利,从而赔钱)。例如,某一流动性提供者仅增加了 1,000ETH,则合约的新比率为 100,000 / 2,000 = 50。套利者将蜂拥而至,直至该比率再次变成100:1。 流动性提供者必须为交易对的两个币种提供等值的资金(Uniswap 接口将确保不会出现错误操作)。
假设在增加 10,000DAI和 100ETH(总市值 20,000 美元)之后,流动性池现在总共有 100,000 DAI 和 1,000ETH。由于注入的金额相当于总流动性池的 10%,因此合约会产出一种“流动性代币(liquidity token)”,将其提供给做市商,使其有权获得池中可用流动性的 10%。这些代币不是用于交易的投机币,而只是一种用于记录流动性提供方债权的会计或者说记账工具。如果其他人随后存币或者取币,则将会产生或者销毁新的流动性代币,保证每个人在流动资金池中的相对份额保持不变。
现在假设 Coinbase 上 ETH 的价格从 100 美元涨到 150 美元。在经过一番套利之后,Uniswap合约也将反映出这一价格变化。交易者将增加 DAI,减少 ETH,直到新比率变成 150 : 1。这会对流动性提供者造成什么影响呢?合约反映出的数字会接近 122,400DAI 和 817ETH(做个算数检查一下这些数字的是否准确:122,400 * 817 = 100,000,000(恒定乘积),122,400 / 817 = 150(新价格))。如果把我们有权获得的 10% 提取出来,那么现在会变成 12,240DAI 和 81.7ETH。此时的总市值为 24,500 美元。做市导致错失了大约 500 美元的利润。
显然,没有人愿意抱着做慈善的心态提供流动性,收益又不能从炒币中获得(因为也没得炒)。所以,总交易量的 0.3% 会按比例分配给所有流动性提供者。默认情况下,这些费用会重新注入流动性池,但可随时收取。在不知道中间交易量的情况下,很难说交易费的收入和做市的损失孰高孰低。对流动性提供者来说,显然行情波动越多越好。
相比于班科,Uniswap它通过以下改进发生了质的飞跃:
去中心化并且抗审查的上币模式。
班科需要项目方填写上币申请表,质押代币以及等额的BNT,而且已经发生BNT可以被随意冻结。这是一种带审查性质的上币机制和管理模式。Uniswap将自己的模型称为“自动做市商”(AMM),其本质是去审查和去中心化结合的上币模式。Uniswap不审核任何上币者,而是以上币者能够获得一定的收益为奖励机制,吸引大家上币。
彻底的去中心化。
2018年7月9日,因安全漏洞班科受到黑客攻击,当时一个钱包正在升级某些智能合约时发现受到攻击,24,984个以太坊(约合1200万美元),以及30万Pundi X(价值约100万美元)和价值约1000万美元的BNT被窃。他们通过Bancor协议内置机制冻结了被盗的BNT,这种机制就是为了防止在安全漏洞爆发时,让班科有效恢复系统,同时阻止非法黑客转移窃取的加密代币。它的确有效阻止了黑客将BNT卷走(ETH以及其他被盗币种已流失在外)。班科还暂时关闭了业务运营。这次 Bancor 平台被盗事件与 BancorConverter 合约有关,攻击者(黑客/内鬼)极有可能获取了 0x009bb5e9fcf28e5e601b7d0e9e821da6365d0a9c 账户的私钥。而此账户正是某个转换代币合约 BancorConverter的 owner,同样拥有极高权限。owner 作为该合约的所有者和管理员,有唯一的权限通过 withdrawTokens() 方法提走合约中的全部 ERC20 Token 至任意地址。owner 对 SmartToken 合约具有以下权限:
owner 可通过 disableTransfers() 任意禁用转账功能。
owner 可通过 issue() 任意增发代币。
owner 可通过 destroy() 任意销毁代币。
以上这些功能均通过 ownerOnly 进行限定,换句话说,owner 对 Bancor 合约拥有最高权限。譬如,至少理论上Bancor可以在缺乏监管的现状下,在任意地址随意铸造和燃烧存储通证。
如果一个交易所会丢失用户资金或者能冻结用户资金,则它不是一个真正意义的去中心化交易所。
未发行自己的代币,规避掉产生私利的可能。而且直接使用ETH作为算法所需的标配币种,大大简化了智能合约代码。相比之下,班科发行了自己的代币BNT,上币需要以BNT作为标配币种,因此使得其智能合约的代码复杂度大大提高,在交易拥堵的时候,合约执行的失败率非常高,手续费也非常高。还有,相比ETH,BNT市值小、应用单一,价格容易被大庄联合操控。
更低的gas基准。Uniswap的gas基准低于班科的十分之一。
Exchange
Uniswap
Bancor
0x
ETH to ERC20
46,000
ERC20 to ETH
60,000
ERC20 to ERC20
88,000
*wrapped ETH
班科需要项目方质押2%~5%的代币以及等值的BNT,这对于项目方来说,相当于一笔必不可少的成本。
当今以太坊上的所有 DEX 都存在抢先交易(front running)风险。抢先交易在区块链领域是指矿工在执行普通用户买卖前,先替自己的账户买卖的操作,矿工这样做通常是因为他认为普通用户的买卖将改变市场价格,因此抢先买卖以图利。抢先交易是高频交易中的主要策略。为缓解这一问题,Uniswap 允许用户在下单时指定最高价格。这样,即便矿工抢先交易某一订单,用户也不会被迫接受更高的价格。虽然用户可能会错过这笔交易,但他们不需要支付更高价格。
Uniswap 的“订单到期”能可以防止矿工搁置已签名的交易并等到价格变动后再处理。
Uniswap有待观察与解决的关键问题:
Uniswap试图用去中心化且抗审查的模式,辅助激励机制(总交易量的 0.3% 会按比例分配给所有流动性提供者),让任何人都可以自由上币。严重的问题是,它本身没有ETH的全局定价或者ETH与法币的定价机制,它无法保证上币者真的能赚钱。以图表6(Uniswap兑换带来的数据变化)来看,假如其它用户用99,900,000个DAI(理解为其它某个代币更好)兑换掉999个ETH,资金池里只剩1个ETH和已经在大众眼里归零的DAI,这1个ETH并没有因为有人抛售了巨多的DAI,而身价暴涨——目前ETH的价格甚至取决于中心化交易所。结果是:资金池的提供者几乎血本无归。
目前存在各种类型的交易所,Uniswap和其它交易所之间将存在套利机会。投机者很容易找到方法,通过其它交易所和虚假新闻等方式的配合套利。资金池的提供者承受的风险非常大。
如果资金池的提供者投机,那么情况也许更可怕:通过其它交易所和虚假新闻等方式的配合,引发市场挤兑,假如其它用户用99,900,000个DAI(理解为其它某个代币更好)兑换掉999个ETH,然后投机分子开始反向操控,那么他可以用999个ETH获得99,900,000个DAI后,通过其它交易所,低成本拉高DAI的价格,从而获得巨额回报!
再深入一点更可怕:项目方作恶!
即使无人作恶,Uniswap和Bancor Network这样的算法定价的去中心化交易所,存在巨大的价格杠杆!因为只质押了代币发行总量的很小一部分,导致市场的买卖需求,能够引起更大的价格波动!并且很遗憾,这种缺陷比较隐蔽,是非常有利于项目方作恶的。
Flash Loans or Flash Loan?
在常规贷款中,您需要先准备好抵押资产,然后去特定机构提出申请,然后等待几天乃至几个月,结果可能是批准,也可能是驳回(然后再修订资料再花数天乃至数月)。然后还必须在规定的时间范围内以约定的利率偿还贷款。闪电贷是特殊的,因为这些都不复存在,没有人必须申请,甚至都不需要抵押,并且每个人的闪电贷都会被批准。当然,也没有贷款人能够跑路违约。
闪电贷的基础是智能合约的免许可和可自由组合的特色。
闪电贷是 DeFi 无抵押贷款的新思路,其前提是所有操作都在一笔交易(一个区块,以太坊大约是13秒)中完成,它允许借款人无需抵押资产即可实现借贷。因为代码保证同时偿还借款,如果资金没有返还,那么交易会被还原,即撤消之前执行的所有操作,从而确保协议和资金的安全。
闪电贷的最早应用是无担保借贷,由 Aave 于 2020 年初率先推出。
案例1
某人通过闪电贷 ,从去中心化加密货币衍生品交易平台 dYdX 借出了 1 万枚 ETH,使用其中 5000 ETH 在 Compound 借出 112 wBTC,另外 5000 ETH 到 Fulcrum(bZx 协议)上开了 wBTC 的空单(最终由Kyber从Uniswap采购),再利用 Compound 借到的 wBTC 去 Uniswap 砸盘,导致 Fulcrum 空仓大赚,然后归还了最初借到的 1 万枚 ETH,在这个过程中,某人获得了价值 35 万美元的 ETH 的收益。所有这些操作,一气呵成!
案例2
数天后,黑客贷入ETH,用ETH大量买入sUSD,Kyber上的sUSD价格上升了一倍。此时,bZx认为sUD的价值是2美元而不是1美元。于是攻击者在bZx上用sUSD提取了比正常情况下更多的ETH贷款。最后,攻击者偿还了原来的ETH贷款,并带著剩下的ETH跑了。
DeFi 流动性聚合协议 B.Protocol 因为希望被加进 MakerDAO 价格预言机的白名单中,就在 MakerDAO 的治理投票中,利用闪电贷大量借入 MKR 藉此获取大量投票权,成功让提案以“100% 得票率”通过。
B.Protocol 先用 5 万枚 ETH 透过 dYdX 和 AAVE,借出 1.3 万枚 MKR 治理代币,锁定借出的 MKR 并对其自己的提案灌入大量同意票,接著再解锁 MKR 以将资金迅速返还给借出资产的 AAVE 和 dYdX 平台。
您必须在与收到贷款时的同一笔交易中偿还贷款。从贷方的角度来看,这是完全合理的。如果您立即偿还贷款,贷方就没有风险。因此,他可以将这笔贷款提供给任何需要的人。
同一笔交易中必须偿还的贷款有什么好处?
这无疑极大地限制了您的选择,但由于以太坊的力量,我们仍然可以做很多事情。最常见的是,您可以将其用于套利,同时大幅降低您自己的资本要求。无需在多个账户中拥有数百万美元即可实现利润最大化。而是采取闪贷,在一笔交易中尽可能多地套利,然后在交易结束时偿还贷款。
不幸的是,闪电贷经常被用于黑客攻击。如果某个智能合约中存在有利可图的纰漏,闪电贷款可让任何人利用该错误。黑客常常因此获得数百万美元甚至更高的利润,而不是仅仅获得数千美元。
更新:Alberto 本人提出的另一个很好的用例是债务再融资。 “想象一下,你已经将ETH锁仓到Aave并 借出Dai,为此你需要支付10%的贷款利息。然后你使用Dai买了房子,大概十年都不会还清。现在,Compound 支持你以ETH抵押品借出Dai,仅收取9%的利息。使用Dai的一笔闪电贷,你可以偿还Aave的债务,取回放置在 Compound中的ETH抵押品。你以9%的利率从Compound借出Dai并偿还了闪电带宽。简单地说,你将10%的Aave贷款,再融资为9%的复合贷款。“
这就是EIP-3156提出的意义,它旨在支持各种不同的借贷机制。
贷方接口必须由想要提供闪电贷的服务实现。函数 maxFlashLoan 和 flashFee 的作用是不言自明的。
使用 flashLoan 函数,您将能够执行闪电贷。接收方地址必须指向一个实现了borrower接口的合约。除了调用之外,还可以传递任意数据。
该函数的实现的唯一要求是您必须从接收器调用 onFlashLoan 回调:
当然了,既然现有的借贷项目都已经失败,这个标准也就没了未来!
但是其技术细节还是值得我们学习!
2013年6月2日,Daniel Larimer在bitcointalk.org发布白皮书。2014年7月,比特股(Bitshares)正式发布。2015年10月,基于石墨烯的Bitshares 2.0发布。
比特股白皮书中只字未提去中心化交易所,但它的确实现了用户发行自定义资产基础之上的去中心化交易所,它甚至实现了跨链数字加密货币(BTC、ETH等)交易。
访问https://wallet.bitshares.org:
图表 2.比特股的去中心化交易所
图表 3.比特股的撮合交易机制
比特股网站因为使用了一些在国内无法访问的资源,需要借助VPN才能访问,早期市场里最活跃的是国人,这就严重影响到了它的人气。在Bitshares 2.0发布前,每秒只能完成3笔交易的用户体验也确实很差。另外因为开发费出现困难,BTS是否要由通缩改成通胀意见不合等原因,导致创始人Daniel Larimer过早离开,严重打击了比特股本来不错的发展势头。
启发:
比特股去中心化交易所,的确是一个创举,它让我们看到了区块链有可能通过自己技术,彻底解决掉中心化交易所造假、监守自盗、互相洗劫市场、被黑而殃及所有用户等等严重问题。
去中心化交易所,也让我们对区块链的“去中心化”的威力,有了更深的认识。
问题:
比特股的去中心化交易所,除了不需要把你的币交给管理机构,其它和中心化交易所几乎一样。最关键的是,它的交易机制和中心化交易所的交易机制完全一致,都是“撮合交易”。撮合交易也就是人与人之间,通过挂单之后,系统找到最匹配买卖价格的双方,准予成交。不难理解的是,“撮合交易”的市场价格完全取决于庄家,是一种中心化定价机制。
币币交易也是需要配对的,它无法实现任意两种数字加密货币之间的直接交易。
区块链的一大里程碑!
Bancor Network(简称班科)主要由班科协议(Bancor Protocol)和班科算法(Bancor Algorithm)构成,也就是智能合约管理市场里的代币的存量(做市),算法根据供需情况给每笔交易需求实时报价。其特色有:
Bancor Network是全球首个去中心化流动性网络,它能够为代币提供无限的流动性——无论一个币种的市值多么小,参与兑换的人多么少,任何人伸手就能兑换到该币种,而且不管他多有钱都不成问题!同时,不管你想卖多少也都能成交——这是以往的任何交易所都做不到的。
Bancor Network是全球首个去中心化价格发现机制——班科算法可以保证由供需决定币价高低,班科协议创建了智能合约储备和供应代币,两者结合为“自动做市商”(AMM),终结了交易市场数百年来人为操控的历史,是一个真正去中心化的价格发现机制。
毋须缴纳代币上架费,但质押其实也是一种成本形式。
首次实现了任意两种币之间都可以自由兑换。班科实现了ERC-20 到 ERC-20 的代币互换无需使用专门的流动性池。例如在处理 REP买入 ZRX 订单时,班科将先通过 REP/ETH 交易对,再通过 ZRX/ETH 交易对,自动进行处理。到2019年1月7日,班科上架的111种代币,让我们有了6105种“交易对”(班科称自己为兑换而非交易网络)。
除了上面谈到的去中心化交易所和去中心化交易协议,还有所有的中心化交易所,都是采用“撮合交易”这一交易机制。而我们知道,无论正当与否,做市商和大庄家随时能通过“撮合交易” 操控市场。而如果不解决掉这个中心化的定价毒瘤,那么区块链的币价就会被少数财团所控制,区块链也就无法体现其优越性,更无法落地应用!所以淘汰“撮合交易”,用智能合约替代人类做市商,采用非线性的班科算法让大庄处于市场对赌的劣势,有着划时代的意义!
班科构建的解决方案,还需要有一个对接法币市场的补充方案,才有可能让币价日波动控制到千分之五以内,使得数字加密货币能够成功应用到日常支付中!
可惜的是,班科在几个关键问题上失之毫厘!而且是开启市场后不久,将大量时间精力浪费在一时走红的公链EOS里。非常可能错过了其发展的巨大契机。
0x Protocol(常常被简称为0x)是一个去中心化交易协议。其off-chain order转发和on-chain settlement的逻辑图如下:
![图片包含 文字
自动生成的说明](<../.gitbook/assets/0 (14).png>)
图表 5. 0x protocol 整体逻辑图
上图中灰色的矩形和圆形分别代表以太坊上的智能合约和账户。具体的逻辑:
maker同意DEX(去中心化交易所合约)获取他们关于Token A的信息。
Maker创建一笔关于Token A兑换为Token B的订单,并且声明了期望的交易rate和过期时间。将以上订单签名。
Maker 通过网络传输层将此订单广播
Taker接收到这笔订单,并且决定来完成此项订单。
Taker同意DEX来获取他的关于Token B的信息。
Taker提交maker的那条以签名的order到DEX合约。
DEX合约认证maker的签名,验证通过后,然后将两者的Token按照拟定的rate进行交换。
其中,关于上述的操作3和操作4 off-chain的行为,0x protocol的网络传输层和会话层以及应用层来负责Order的relay,展示,以及推送。当然,用户也可以将签好名的order通过email,twitter等方式广播出去,Taker一旦获取之后,将order发送至DEX合约即可完成交易。
0x的点对点订单允许双方使用他们更喜欢relayer直接互相交换代币。 构成订单的数据包是可以通过电子邮件,Facebook消息,耳语或任何类似服务发送的十进制数百字节。 订单只能由指定的taker地址填充,使得该订单对窃听者或外部用户无效。
特色:
快速为自有社区的 Token 打造一个交易市场;
在自有体系中快速生成一个交易数字产品和资产的交易市场;非常有利于钱包的拓展。
可交易任何 ERC-20 或 ERC-721 数字资产。
和雷电网络一样,它是链下订单中继,链上最终结算。兼顾交易的速度及安全性。
0x的Relayer带来的18种业务(链接请扫二维码)
问题:
Relayer可以理解是任何实现了0x协议和提供了链下订单簿服务的做市商、交易所、Dapp(Ethfinex,Augur,District0x和Melonport)等等。0x 协议构建的生态中可能出现中继角色发展趋中心化。
未提供去中心化的价格发现机制。
恭喜你,它早期的白皮书(v 0.8)已经无从下载了。新版白皮书已经面目全非。
以下是摘录的部分内容:
1、KyberNetwork 的参与者
网络中的参与者共分为 5 种角色:
在网络中发送和接收代币的用户。KyberNetwork的用户包括个人用户、智能合约账户和商家。
为平台提供流动性的(一个或多个)储备实体。它可以是平台自己的储备库或者由其他者注册的造市第三方储备库。根据是否从公众那里取得贡献,储备库也被分为公共的和私有的两类。
为储备实体提供资金并分享平台的利润贡献者。这类参与者只存在于公共储备库中,从公众那里接收贡献来创建储备库。
维护储备库、决定兑换率并将该比率反馈给 KyberNetwork 的储备管理者。
KyberNetwork 运营者,负责在网络中添加、删除储备实体以及将代币对列入/移出交易列表。Kyber 团队将作为初始运营者引导平台的早期发展。后期将设置去中心化的管理来接替团队的运营者角色。
每一位参与者都以不同的方式独立地与智能合约交互。用户在单个交易中同时发送和接收代币,而无需等待来自储备实体或 KyberNetwork 运营者的任何响应。KyberNetwork 运营者负责添加和删除储备,而储备管理者每经过一个固定的周期(一般而言是几秒钟)决定新的兑换率并将该比率提供给合约。主合约依靠储备实体来保证高流动性。
图表 4.每一个活动者间的交互过程
2、动态储备库
KyberNetwork 通过使用网络中现有的储备来保证高流动性。不同的储备由不同的储备管理者直接管理,这一些系列行为不一定与 KyberNetwork 的运营者有关。 KyberNetwork 允许多个储备共存(通过消除储备垄断)以获得更优的价格,(通过利用其他来源)保证更佳的流动性。此外,除了 KyberNetwork 的运营者外,该网络也允许不同的人或者机构来管理自己的储备。这样的话,KyberNetwork 就可以通过将某些低交易量的代币的管理工作转移到相应的储备管理人员身上,来实现对这些代币的支持。通过这种方式,愿意承担低交易量代币交易/兑换风险的各方都可以为自己创建这些代币的储备,并在 KyberNetwork 注册。需要注意的是,KyberNetwork 不持有任何在其上注册的储备资金。他们的资金存储在他们的储备合约中,这些合约将遵循 KyberNetwork 的基本原则。
当交易/兑换请求到达时,KyberNetwork 将从所有可处理该请求的储备中获取兑换率。然后 KyberNetwork 会选择最佳的比率并执行该请求。我们保证储备和用户都是安全的,也就是说,我们不保留任何一方的资金,并且所有的交易都是原子的。
我们注意到,在我们刚开始推出 KyberNetwork 时,它可能只有我们在网络中提供的单一储备。在其它更多的储备在网络中注册之前,该储备将成为系统流动性的主要来源。
为什么其他储备金要加入 KyberNetwork? KyberNetwork 为储备管理者创建了一个平台,他们可以利用自身的闲置资产在平台中获利。通过为用户的交易请求提供服务,储备实体从利差中获利,而这个利差是由他们自己决定的。当然,储备实体可以随时进行交易,而不必加入KyberNetwork。但是由于 KyberNetwork 的网络效应,他们将会获得更高的收益。此外,我们还会与钱包提供商以及其它代币项目进行合作,为 KyberNetwork 带来更多的用户。
此外,KyberNetwork 还提供储备信息面板软件,帮助储备管理者管理其储备投资组合。储备信息面板将包含标准的和流行的交易算法/策略,以便储备管理者自动定价并重新调整其投资组合。我们的储备信息面板具有足够的灵活性,储备管理者可以随时随地实施和部署各自的策略。
**如何保障储备安全?**储备的安全性成为 KyberNetwork 关注的重点,特别是对于由网络中其他成员作出贡献所形成的公共储备。一个最主要的担忧是,恶意的/不道德的储备管理者可能会报出一个极为糟糕的价格并根据该价格进行交易,从而把储备中的代币耗尽。
我们将储备分为两类:(1)不接受他人贡献的私人储备,和(2)接受外部贡献并与贡献者分享利润的公共储备。尽管上述担忧依旧有效,但如果私人储备的储备管理者遵循良好的安全实践,私人储备的风险敞口可以限制在可接受的范围内。尤其是,私人储备是在本地进行处理的,其它各方不能在没有得到许可的情况下进行干预。另一方面,公共储备会因其公开特性面临更大的风险敞口。为了减轻公共储备的安全风险,我们将采用无须信任的基金管理模式,比如MelonFund(该基金由 MelonPort 开发)。这样的话,储备的贡献者无须信任储备管理者。最重要的是,我们还计划引入限制来保护开放储备。例如,储备资金只能转移到合约中预先定义的地址,例如储备合约本身以及储备与之交互的其它交易所。通过这种方式,未经授权从系统中提取资金的风险就被消除了。当然,为了避免储备管理者故意设定虚假和不合理的兑换率——例如当一个以太币只可以兑换 500 个 Golem 网络代币(GNT)时,管理者想要通过更加便宜的价格来购买到更多的 GNT,于是他设定一个以太币可兑换一百万个 GNT——我们采用链上机制(例如,防止在没有特别授权的情况下,出现不合理的价格变更)和链下机制相结合的方式来进行干预。例如,我们可以采用后台监视器的方式来监控并标记网络中储备管理者的可疑行为。当后台监视器检测到破坏网络健全度的可疑活动时,有权停止当前交易。
潜在的问题:
报价受制于人的主观决策, KyberNetwork 提供的报价的安全性有待市场的检验。
缺乏通证流动性保障机制,供需不规则,代币间的兑换率通常波动比较大。一旦缺乏愿意把代币存入储备库的人,那么这个问题将会进一步恶化。KyberNetwork计划以期货和期权形式引入衍生工具来解决这一挑战。但我们看不到其有效性。
KyberNetwork和以下所有基于以太坊智能合约的交易,都会受到以太坊目前TPS太低的限制,即每天能承载的交易次数太少。
每笔交易不得超过3000美元,每人每日交易上限为15000美元。要想突破此限制,你必须先成为Advanced User Prescribed Limit,那就意味着你必须要做身份认证,以及满足其它一切所必需的条件——此规定有bug。
未提供去中心化的价格发现机制。
很有意思的是,经过不到一年的实践,KyberNetwork彻底抛弃了user-to-user的撮合机制!具体的改进你可以去看它的新版白皮书。
Money Streaming
所谓流支付(Money Streaming),很容易理解,就是让支付像流水一样到你账上——这样的想象太形象也太吸引人,往往就因此反而禁锢了我们对区块链技术应用的想象力。
一部电影才看了十分钟你就嫌弃了,所以流支付能让你只为这十分钟买单——大家觉得流支付真的好,然而想象力再次被禁锢。
在区块链行业,人们往往被困于肤浅的想象。
请注意:流支付能使得资金不再是以每隔一定时间被批量地转账(比如每月发放的工资),而是像水流一样涓涓不断地以设定的转账速率从支付人流向收款人。
这也就是说,流支付将支付从批量转移(lump-sum transfer)的形式,转为流(streaming)的形式,并利用区块链的可编程性,以期实现更高效的资金运转效率:
Y(被转移的通证)= a(单位时间被支付的通证)· X(时间)。
它的方法很简单:确定要发送给某个人或某些人的通证总量,设置一个转账速度。这样的模型可以有条件启动,也可以有条件被终止。
流支付真正被人重视的时间比较晚,而且它到现在为止还没有找到很好的应用场景。当然,这不是他本身的问题,是因为整个区块链的发展程度还不够。
流支付的概念是早在。2019年,由Paul Razvan Berg创立的项目 第一次通过以太坊智能合约实现了流支付技术。事前也就是2018年他就创建了流支付的技术标准:
物联网可能是流支付的用武之地。但真正激动人心的应用场景很可能是未来的某个新生态,譬如AI网络(Internet of AIs)。
但,基于流支付的产品肯定不止一种,所以如果有人把它开发成一个标准化“零件”,岂不更好?
一个创新技术的落地不容易!
看过上一节内容,你就会知道我的结论仍然是:失败。
不是第一个去中心化金融(Decentralized Finance,简称 DeFi)应用,它是让大家眼前一亮的去中心化金融应用。
Compound 首先是一个允许用户借贷代币(同质通证)的智能合约。它与你的银行类似,Compound 把你的币借给借款人,并随着时间的推移赚取利息。但与银行不同的是,你的利息是从你存入 Compound 的智能合约后开始复利计算的。因为这是一个智能合约,其没有中间人,因此其利息会比传统银行要高。
与 MakerDAO 类似,Compound 的贷款是需要超额抵押其它代币。贷款者需要将指定的代币质押入到Compound ,来产生他们的“借款能力”。如果贷款者的借款能力低于0,他们的抵押品将通过拍卖出售以偿还债务。另外,每个资产的贷款利率是不同的,这根据资产的需求而决定。
所以第一,Compound 提供是超额抵押贷款。并且Compound 的帐本模型与银行类似,并遵循了国际会计准则。理论上来说,贷款者并没有违约的可能。
第二,每个资产的贷款利率不同。
Compound 是一个使用智能合约实现的实时结算帐本。帐本能实时结算的前提是交易逐笔发生,有确定的执行顺序,交易发生时间真实可靠等。区块链满足这些特性,为帐本自动结算提供基础。
在 Compound 上,当一个交易发生时账本会对账目进行一次结算,此时结算利息会更新到账目余额中。等到下次交易事件发生时,会再次触发这样的结算处理并更新余额。
利率模型
一个银行的简单模型就是通过借款产生营收,营收作为存款用户的利息。简化 Compound 的利率模型,不设定浮动的借款利率,不考虑盈利,只保证账目借贷平衡,有:
根据公式有:
借款总额为零(没有人进行借款),此时没有营收产生,存款利率为零 ;
借款总额增大,产生营收增多,存款利率也会提高 ;
借款总额不变(营收不变),存款总额增大,存款利率降低。
结论:利率随着借款总额和存款总额的变动而变动。
Compound 实际上是超额抵押贷款,也就是将 资产A 存入智能合约,此时就可以借出 总值低于资产A总值的资产B、C、D……然后价格预言机会时时更新相关资产的价格,在抵押资产总值降低到一个风险阀值时(仍然高于借出资产的总值),将 A “拍卖”,此时拍卖价格比市场价格更加优惠,自动偿还了借出资产。
数据完全透明
实现了突破国界的、自由开放的借贷业务——只要遵循了合约的规则,任何人、任何机构都能无区别的使用这项低摩擦的金融服务。
实时提现。
利息实时支付
无期限限制。
钱包及助记词遗失。
智能合约bug。
各种代币带来的系统性风险(譬如极度暴跌、归零)。
因循守旧,不失败才怪!
AAVE
稳定币是一个地地道道的伪概念!因为它的价格根本就稳定不了!
2014年光棍节,以太坊创始人V神(Vitalik Buterin)很好地构想了几种实现稳定币的方式(原文《》),而DAI就是其中的一种。
以下是DAI的白皮书中文版的主要部分。
Dai 稳定币系统概述
诸如比特币和以太币这样的热门数字资产,由于其巨大的波动性而无法被当做日常的货币使用。比特币的价值经常经历很大的波动,单日价格变化可达25%,有时一个月增长超过300%。
Dai 稳定币是由抵押资产支撑的数字货币,其价格和美元保持稳定。我们相信像DAI这样的稳定加密货币资产对完整实现区块链技术的潜力有着至关重要的作用。
Maker 是以太坊上的智能合约平台,通过抵押债仓(CDP)、自动化反馈机制和适当的外部激励手段支撑并稳定 Dai 的价格。
Maker 平台可以让任何人有机会利用以太坊资产生成 DAI 进行杠杆操作。当 Dai 被创造出来后,它可以作为任何其它数字货币资产一样使用:自由发送给他人,作为商品和服务的支付手段,或者长期储藏。重要的是,Dai 的出现也是健全的去中心化杠杆交易平台的必需品。
抵押债仓智能合约
任何人都可以在 Maker 平台上用抵押资产生成DAI做杠杆,通过Maker独有的智能合约 - 抵押债仓(Collateralized Debt Positions, CDP)。
抵押债仓(CDP)保存用户所储存的抵押资产,并允许用户生成Dai,但是生成 Dai 意味着生成一笔债务。这笔债务会将 CDP中的抵押资产锁定,直到用户偿还 Dai 后才可以拿回抵押资产。有效的CDP都是有超额抵押的,这意味着抵押物的价值高于债务的价值。
抵押债仓使用过程
第一步:创建CDP并存储抵押物
用户首先发送一个交易到 Maker 创建CDP,然后发送另一个交易并明细抵押资产的种类和数量储存到用来生成 Dai 的CDP中。此时,CDP便具备抵押。
第二步:从CDP中生成 Dai
CDP持有者发送一个交易并明细想要从CDP中生成Dai的数量,同时CDP也会产生同等数量的债务,这笔债务会锁定抵押物直到未偿付的债务被付清。
第三步:偿还债务和稳定费用
当用户希望赎回抵押资产的时候,他们需要偿还CDP中的债务以及这个债务的稳定费用。稳定费用只能用MKR支付。当用户将应付的Dai和MKR支付给CDP后,CDP中的债务就会偿清。
第四步:拿回抵押资产并关闭CDP
当债务和稳定费用偿还后,CDP持有者可以发送一个交易给Maker并拿回所有的抵押资产。
单一资产抵押 Dai vs 多种资产抵押 Dai
第一版本的 Dai 将仅接受一种抵押资产,以太池(Pooled Ether)。在接下来的6-12个月里,我们计划将单一资产抵押 Dai 升级到多种资产抵押的 Dai。主要的不同是,多种资产抵押可以支持任何认可的数字资产。
以太池(单一资产抵押阶段过渡性机制)
在第一版中,以太池(PETH) 将是唯一被接受的抵押资产类型。在这一阶段,希望创建 CDP
并生成 Dai 的用户首先需要有 PETH。操作起来很简单,用户只需把以太(ETH) 放入一个特别的智能合约中,这个智能合约会把所有用户存入的以太整合成以太池(PETH),给与用户相应ETH 价值的 PETH。
如果 ETH 的市场价格突然出现下跌,抵押债仓的债务超过了其抵押资产的价值,Maker 平台会自动稀释以太池(PETH)去进行资产重组。这也意味着PETH的可兑换以太数量将下降。
在 Maker 系统升级到多种抵押资产后,以太池(PETH)将会被移除并由以太和其他抵押资产类型所替代。
价格稳定机制
目标价格
在 Maker 的系统中,Dai 目标价格有两个重要功能:
1) 用来计算抵押债仓的抵押债务比例。
2)决定 Dai 持有者在全局清算时将收到的抵押资产价值。
初始目标价格将设为和美元1:1,逐渐会和美元软锚定。
目标价变化率反馈机制
当市场出现不稳定的时候,目标价格变化率反馈机制会被启动。目标价格变化率反馈机制会让Dai 保持美元的标价,但是脱离与美元的固定比例。
目标价变化率反馈机制是指 Dai 稳定货币系统通过调整目标价格变化率,促动市场力量去保持Dai 市场价格的稳定。目标价变化率会决定目标价格的变化,可以激励人们持有 Dai(在目标变化率是正值的情况下)或者借 Dai (在目标变化率是负值的情况下)。在目标价变化率反馈机制没有启动的阶段,目标价变化率会设为0%,意味着目标价格不会变化,Dai 和美元硬锚定。
当目标价变化率反馈机制启动之后,目标价格变化率和目标价格本身都会动态的变化去平衡 Dai的需求和供给,以调整用户生成和持有 Dai 的激励的方式。这一反馈机制使 Dai 的市场价格趋于目标价格,减轻 Dai 的价格波动性并在需求冲击的时候提供流动性。
在目标价变化率反馈机制下,当 Dai 的市场价格低于目标价格,目标价变化率会提高。这会使得目标价格升高,从而利用 CDP 生成 Dai 变得昂贵。同时,升高的目标价变化率会使持有 Dai 的资本回报增加,从而导致购买 Dai 的需求增加。减少的供给和增加的需求会使得 Dai 的市场价格升高,趋近其目标价格。
相同的机制在 Dai 的市场价格高于目标价格时同样适用:目标价变化率降低,导致生成 Dai 的需求增加以及持有 Dai 的需求减少,因此导致 Dai 的市场价格降低,趋近目标价格。
这样的机制是一个反向反馈循环: Dai 的市场价格朝目标价格的一个方向偏离的同时也会产生朝相反方向的力量。
敏感度参数
目标价变化率机制的敏感参数决定目标价格变化率相对于 Dai 的市场价格和目标价格偏离的变动程度。这一参数调节系统反馈规模的大小。敏感参数由MKR持有者设置,但是他们对目标价格和目标价变化率没有直接控制,这两者是由市场决定的。
敏感度参数同时也决定目标价变化率机制是否启动。如果敏感度参数和目标利率都为零,那么 Dai 将是与当前的目标价格锚定。
全局清算步骤
全球清算是保证 Dai 持有者目标价格可兑付的最后手段。全球清算发生时,系统会逐渐关闭,Dai 和 CDP 持有者都会收到应得可兑换的资产净值。这个过程是完全去中心化的,MKR 持有者管理这一系统并确保只有在严重紧急状况下才会启用。比如长时间的市场非理性,系统安全受到攻击和系统升级。
步骤1:启动全局清算
如果有足够多由 Maker 管理者选定的全局清算者认为系统处于严重的攻击,或者需要技术升级进行全局清算,他们可以启动全局清算功能。这会中止抵押债仓的创建和操作,并以固定的价值冻结喂价,用于所有用户的兑换。
步骤2: 进行全局清算兑换
当全局清算启动后,会给看护机(Keepers)一段时间去基于固定喂价处理 Dai 和抵押债仓持有者的对应索偿。在这一过程结束后,所有的 Dai 和抵押债仓持有者可以兑换固定比例的 ETH。
步骤3:Dai 和抵押债仓持有者兑换抵押物
每个 Dai 和 CDP 持有者可以在 Maker 平台上发出兑换请求,将他们的 Dai 和抵押债仓直接兑换为固定数量的以太,基于 Dai 的目标价格计算出来的资产价值。
例如,如果 Dai 的目标价格是 1 美元,以太对美元的价格是 200 而在全局清算启动时,用户持有1000 个 Dai,在清算过程结束后,用户可以从 Maker 平台兑换正好 5 个以太。对于最终兑换时间没有时间期限。
Maker 系统的风险管理
MKR 的持有者可以投票参与下列风险系统行为:
增加新的抵押债仓种类:创建一个独有风险参数的新抵押债仓种类。一个新的抵押债仓种类可以是新的抵押资产也可是已有抵押资产种类的新的组合。
修改已有抵押债仓种类:修改一个或多个已有抵押债仓种类的风险参数。
修改敏感参数:改变目标价变化率回馈机制的敏感度。
修改目标价变化率:管理者可以调整目标价变化率。在实际操作中,调整目标价变化率只有在一种情况下可以实现:当 MKR 持有者希望把 Dai 的价格锚定当前的目标价格。这将通过一并调整敏感参数实现。通过把敏感参数和目标价变化率设为零,目标价变动反馈机制将失效,Dai 的目标价格将锚定其当前价值。
选择可信任的预言机(Oracles):Maker 平台通过去中心化的预言机基础设施获取抵押物的内部价格和 Dai 的市场价格,这一基础设置包含很广泛的预言机个体节点。MKR 持有者控制哪些节点可以作为可信任的预言机及其数量多少。只要超过半数的预言机正常运行,系统的安全就不会受到破坏。
调整喂价敏感度:改变决定喂价在多大程度能够影响系统的内部价格。
选择全局清算者:全局清算者是 Maker 平台能够抵御预言机或者管理步骤攻击的关键机制。管理机制选择全局清算者并决定需要多少清算者去启动全局清算。
风险参数
Dai 稳定货币系统中的抵押债仓(CDP) 有多个风险参数。每一个 CDP 种类都有其独有的风险参数设置,这些参数决定了该 CDP 类型的风险情况。这些参数都是由 MKR 的持有者投票决定(一个MKR 代表一票)。
关键的CDP风险参数包括:
债务上限:债务上限是指单一类型的 CDP 能够创造的债务的最大值。一旦某一类型的CDP 创造出的债务达到上限,将无法创造出新的 Dai ,除非现有的 CDP被赎回。债务上限用于确保抵押资产组合有足够的多样化。
清算比率: 清算比率是 CDP 遭到清算时的抵押 / 债务的比例。较低清算比率意味着 MKR投票者预期抵押资产的价格波动较低,较高清算比率意味着 MKR 投票者预期抵押资产的价格波动较高 。
稳定费用:稳定费用是每个 CDP 所需要支付的费用。基于 CDP 产生的债务的一个年化比例,必须由 CDP 持有者支付。稳定费用以 Dai 标价,但是只能用 MKR 代币偿付。需要支付的 MKR 数量取决于 MKR 的市场喂价。在偿付完后,MKR会被销毁并从流通中完全移除。
罚金比例:罚金比例用来决定清算拍卖中在用于购买和销毁 MKR 供给的最大 Dai 数量,CDP中剩余的抵押资产会返回到清算前 CDP的持有者。罚金比例是为了提高清算系统的效率。在单一抵押资产 Dai 的情况下,清算罚金会用作购买和销毁 PETH,提高 PETH 可兑换 ETH 的比例。
MKR 代币治理系统
除了获取来自 CDP 的稳定费用之外,MKR 持有者在 Maker 平台的管理中起到重要作用。
平台的管理是通过 MKR 持有者的有效提案投票选举。有效提案是通过 MKR 投票的智能合约以修改 Maker 平台的内部管理变量。建议可以分为两种形式:单一行动提案合约和代理提案合约。
单一行动提案合约只能在获取根访问权限后才能执行。在执行后,内部管理变量会立即改变。在一次执行后,单一行动提案会被删除并失效。这种提案将在系统的第一阶段使用,运用起来不是很复杂,但是灵活性比较小。
代理行动提案合约是通过不断使用根权限的第二层管理逻辑。第二层管理逻辑可以相对简单,比如设计一个关于风险参数的每周投票。同时也可以采用更高级的逻辑,比如在设定时间段内限制管理行动的范围,甚至在限制下删除其下层代理行动提案合约的许可。
任何以太账户都可以部署有效的提案智能合约。MKR 持有者可以通过 MKR 代币投准许票将一个或多个提案选为有效提案。拥有最多准许票的智能合约将成为有效提案。
MKR 和多种抵押资产 Dai
在升级到多种抵押资产 Dai 之后,MKR 会替代 PETH 在资产重组的过程中起到更重要的作用。
当市场崩盘 CDP 发生抵押不足时,MKR 会自动增加供给并从市场上回购足够的资金对系统进行资产重组。
每种 CDP 类型都有其独特的清算比率,这一比率由 MKR 持有者决定并基于这种 CDP 类型的特定抵押资产风险。
当 CDP 低于其清算比率的时候,清算便会启动。 Maker 平台会自动购买 CDP 中的抵押资产并逐渐卖出。在单一抵押资产 Dai 的阶段,会有一个过渡机制叫做流动性供给合约,而在多种抵押资产 Dai 阶段会启动竞卖机制。
流动性供给合约(单一抵押阶段过渡性机制)
在单一抵押资产 Dai 的阶段,清算的过程叫做流动性供给合约。根据系统喂价直接与以太坊使用者和看护机进行交易的智能合约。
当CDP被清算,系统会立即回收其抵押品。CDP持有者会收到去除债务、稳定费用和清算罚金后的剩余抵押资产。
PETH 抵押资产将会在流动性供给合约中出售,看护机可以自动交易 Dai 购买 PETH。所有支付的 Dai 会从流通中立即销毁,直到CDP债务数量被消除。如果在去除CDP债务后还有剩余的 Dai,这部分 Dai 会被用来购买并销毁PETH,从而提高PETH可兑换ETH的比例。这对PETH持有者来说将会是收益。
如果出售的PETH未能募集到足够的 Dai 以偿付整个债务,系统会连续增发并出售 PETH。以这种方式新创造出来的 PETH 会降低 PETH 可兑换 ETH 的比例,从而使得 PETH 持有者收益减少。
债务竞卖和抵押资产竞卖(多种抵押阶段机制)
在清算发生时,Maker 平台会购买 CDP 中的抵押物并逐渐通过自动竞卖的方式售出。竞卖的机制可以让系统即使在无法获得价格信息的时候,处理 CDP。
为了能够回购 CDP 中的抵押资产并用来出售,系统会首先募集足够的 Dai 以偿付 CDP的债务。这一过程叫做债务竞卖,通过增发 MKR 的供给并以竞卖的方式出售给竞卖参与者。
与此同时,CDP中的抵押资产会以抵押资产竞卖的方式出售,CDP 债务和清算罚金的部分会用来回购并销毁 MKR。这可以直接抵销在债务竞卖中增发的 MKR。如果有足够的 Dai 用来偿付 CDP中的债务加上清算罚金,那么抵押竞卖会转换到反向竞卖机制,竞卖最少的抵押品 - 任何剩余的抵押品都会归还给 CDP 的原所有者。
重要外部参与者
除了智能合约基础设施之外,Maker 平台还依靠一些外部参与者保持运行。看护机和外部参与者会利用 Maker 平台的经济激励而行动。预言机和全局清算者是由 MKR 持有者任命的特殊外部参与者。
看护机 (Keepers)
看户机是受经济激励驱动为去中心化系统做贡献的独立参与者(往往是自动化运行)。在 Dai 稳定货币系统中,看护机 在 CDP 清算的时候参与债务拍卖和抵押资产拍卖 。
看护机也会围绕目标价格交易 Dai 。当市场价格高于目标价格的时候,看护机将出售 Dai 。同理,当市场价格低于目标价格的时候,管理机将买入 Dai 。这样做的是为了从市场长期价格趋同目标价格中获益。
预言机(Oracles)
Maker 平台需要抵押资产的实时价格信息以决定何时触动清算。Maker 平台同时也需要 Dai 的市场价格以在其偏离目标价格时触发目标价变化率反馈机制。MKR 持有者选择信任的预言机基于以太交易对Maker平台进行喂价。
为了保护系统中的预言机不被攻击者控制,或者出现其他的碰撞,喂价敏感度指数作为全局变量将控制系统接收的最大喂价变化。
以下是喂价敏感指数运行的例子。假如喂价敏感指数为“15分钟5%”,那么喂价在15分钟的变化就不能超过5%,15%的变化需要45分钟。这个限制可以保证全局清算有足够的时间,即使在黑客掌控了大部分的预言机。
全局清算者
全局清算者是和喂价预言机一样的外部参与者,是在 Dai 稳定货币系统遭遇攻击后的最后一道防线。MKR 持有者选择并授权全局清算者以触发全局清算。除了这一授权外,全局清算者对系统没有任何其它的特殊控制。
使用示例
任何人都可以使用Dai 稳定货币系统,并且没有任何限制和注册流程。
案例 1 : Bob 想要生成 100 个 Dai 。他将价值比 100 个 Dai 高很多的 ETH 锁定在 CDP 中, 并用其生成 100 个 Dai 。生成的 100 个 Dai 会立即直接发送到他的以太坊账户中。假设稳定费用是每年 1% ,如果 Bob 在一年以后决定赎回他锁定的 ETH ,他需要 101 个 Dai 偿付该 CDP 。
CDP 的一个主要应用案例就是杠杆交易。
案例 2 : Bob 想要对 ETH/Dai 进行杠杆做多,于是他在 CDP 中存入价值 150美元 的 ETH 用以生成价值 100美元 的 Dai 。然后他通过刚刚生成的 Dai 又另外购买了价值 100美元的 ETH ,这使得他处于一个 1.66 倍 ETH对美元的风险敞口。他可以任意处置由出售 Dai 获得的价值 100美元的 ETH ,而最初始的 ETH 抵押(价值 150美元 )被仍然锁定在 CDP 中,直到支付债务加上稳定费用才能被偿回。
尽管 CDP 不能相互替代,但是 CDP 的所有权是可以转让的。这使得 CDP 可以被用于更复杂的生成 Dai的 智能合约中 (比如引入不止一个参与者)。
案例 3 : Alice 和 Bob 合作使用以太坊 OTC 合约以 ETH 为抵押生成价值 100美元的 Dai 。 Alice贡献了价值 50美元的 ETH , Bob 贡献了价值 100美元的 ETH 。 OTC 合约将这笔钱生成了一个CDP ,产成了价值 100美元的 Dai 。新产生的 Dai 自动地被发送给 Bob 。在 Bob 看来,他通过支付等价值的 ETH 够买了价值 100美元 。然后合约将 CDP 的所有权转让给了 Alice 。 Alice 最终获得了价值 100美元的债务(以 Dai 计价)和价值 150美元的抵押资产(以 ETH 计价)。因为 Alice最开始只有价值 50美元的 ETH ,所以她现在是 3 倍看多 ETH 对美元。
清算保证了在 CDP 中的抵押资产价格暴跌的情况下,系统将自动关闭风险太大的 CDP ,保证在外流通的 Dai 能够完全抵押并具备偿付能力。
**案例 4:**让我们假设一个以太币 CDP 种类的清算比率为 145% ,罚金比率是 5% , 这个以太币CDP 的现有抵押比率是 150% 。接着,以太币价格相对于目标价格跌了 10% ,这使得 CDP 抵押比率降到了 135% 。由于抵押比率低于清算比率,交易者能够触发清算并在债务拍卖中开始用Dai 买入 MKR ,交易者也可以在抵押拍卖中用 Dai去竞拍价值135Dai的抵押。一旦有不少于105Dai的竞价,交易者开始反向竞买最低的抵押以太数量,剩余的款项将返回到原 CDP 拥有者手中。
潜在市场
如前言中所述,一个拥有价格稳定性的加密货币是绝大多数的去中心化应用的基本需求 ,这使得Dai 的潜在市场至少比整个区块链产业还大。作为一个价格稳定的加密数字货币并且能被用作成为一个去中心化的杠杆交易平台,以下是 Dai 稳定货币系统可以立即投入使用的潜在市场(包括区块链行业和其他行业)的不完全名单:
预测市场 & 博彩应用 :在与投注货币不相关的预测中,人们不愿使用一个价格不稳定的加密货币来下赌注。特别是对于以价格不稳定的资产的未来价格做赌注的人来说,长时间维度的赌博无法实现。作为替代,类似于 Dai 具有价格稳定性的加密货币对于预测市场和博彩用户来说是自然选择。
金融市场: 对冲风险,衍生品,杠杆交易等。CDP 使得用户能够更容易地进行杠杆交易。Dai 作为稳定又可靠的抵押资产,能够被使用在定制的衍生品智能合约中, 例如期权和差价合约 。
商贸收据,跨境交易和汇款: 降低外汇波动,并且去掉中间人,这意味着使用 Dai 能够显著地降低国际贸易的交易成本。
透明的记账系统:慈善、非盈利组织和政府部分可以通过使用 Dai 实现更有效率和低腐败的记账系统。
主要风险和缓解措施:
Dai 稳定货币的开发、部署和运营中,有很多潜在的风险。对于 Maker 社区来说,通过必要的方式最大可能降低这些风险是十分有必要的。下面是主要风险极其相应的风险缓解措施的清单:
针对智能合约基础设施的恶意黑客攻击
系统早期的最大风险就是恶意开发人员发现智能合约漏洞,在漏洞修复前进行破坏或者盗窃。最坏的一种情况中,所有在 Dai 稳定货币系统中作为抵押资产的去中心化数字资产,例如以太币和Auger REP 币,可能被盗走并且无法恢复。抵押资产里中心化的部分,例如 Digix 黄金 IOU 在这样的案例中将无法被盗走,因为这样的资产可以通过中心化的后门被冻结和控制住。
缓解措施:
自从 Dai 项目发起以来,智能合约安全性便是开发的最优先级的事情。数据底层已经通过了三次来自区块链行业最好的安全专家的独立审计。
从更长期来看,系统被黑客攻击的风险在理论上可以完全被代码的规范验证消除, 这意味着使用功能性的编程从数学上证明代码库没有任何安全漏洞。尽管完整的规范验证是一个非常长期的目标,但我们已经投入大量相关工作,包括用功能性编程语言 Haskell 作为 Dai 稳定货币系统全面实行参照,代表着我们对高级正规范式的研究和发展进程。
单一或多种抵押资产的黑天鹅事件
Dai 的抵押资产发生黑天鹅事件将产生最大影响的风险。这样的情况既有可能发生在 Dai 稳定货币系统的早期阶段,即在 MKR 能够增发作为资产重组资源之前,也有可能发生在 Dai 稳定货币系统支持多种抵押资产组合之后。
缓解措施:
在早期阶段, CDP 抵押资产被限定只能使用 ETH ,并且有债务上限,债务上限随着时间推移逐渐增长。
竞争 & 用户易用性
如前文中所提到的,有大量的资金和人才投入到价格稳定的加密货币的开发中。由于“真正地去中心化 ” , Dai 稳定货币系统是区块链行业内目前模型最复杂也是考虑最完善一个。一个可预想的风险就是加密货币的使用者更愿意接受简单的中心化数字资产,而不是去中心化的稳定币(例如Dai )。
缓解措施:
我们预期 Dai 将会是一个普通加密货币用户都能轻易使用的货币。 Dai 将采用 ERC20 标准,在以太坊生态系统中有高流动性。 普通用户并不需要了解Dai背后的机制也可以使用Dai。
看护机和希望通过Dai稳定货币系统进行杠杆交易的风险投资公司,需要了解该系统的复杂性 。这些用户群体已有自身条件去理解系统,同时 Dai 稳定系统也提供了丰富且明确的关于系统机制每个细节的文档。
价格错误,不理性 & 未预料到的事件
许多未预料到的事件可能会发生,比如预言机的价格动态可能发生错误,或者其他 一些不理性的市场动态导致 Dai 的价格在很长一段时间内波动。一旦系统失去了信心,目标价格变化率甚至是MKR 稀释并不能带来流动性或者价格稳定。
缓解措施:
Maker 社区会激励足够大的资本发挥看护机的角色,以为了最大化的理性程度和市场效率,同时在市场冲击的情况下,保持平稳的 Dai 供给增加。
中心化架构的问题
Maker 团队将在 Dai 稳定货币系统早期阶段的发展和治理中发挥主要作用 — 为开销编制预算,雇佣新的开发者,寻求合作伙伴和机构用户,与监管者和外部主要股东沟通。如果 Maker 团队因为能力不足、法律原因或者管理外部问题而失败,Dai 稳定货币系统将面临没有后备方案的风险。
缓解措施:
Maker 社区存在的部分功能就是扮演 Maker 团队的去中心化对手方。这是一个由独立参与方组成的宽松集体。由于持有 MKR 数字资产,他们拥有强烈的激励看到 Dai 稳定货币系统的成功。在MKR 发行的早期阶段,核心开发人员获得了显著数量的 MKR 权益。当Maker团队不再是Dai稳定货币系统的前线发展重点后,大量的个人 MKR 持有者将因为经济激励去资助开发者,或者自行开发以保证他们的投资安全。
结论
Dai 稳定货币系统是为了解决以太坊生态以及更广阔区块链经济中稳定价值交换的这一重要问题而设计的。我们相信 Dai 的创造、交易和回购机制以及 MKR 持有者的直接风险管理功能将使得以自身利益驱动的看护机能够有效地维持 Dai 的价格稳定性。Maker 创始团队已经建立了审慎的管理路线图,既适合短期的敏捷开发同时也符合长期的去中心化设计。我们的发展规划具有雄心壮志,并以确保 Dai 能够得到广泛使用为己任。
术语表
抵押债仓(CDP): 用于接受资产( Dai )的智能合约,作为一种有效的带有利率的债务工具。 CDP使用者存入相对于借款价值超额的抵押资产来保证他们的债仓。
Dai: 具有价格稳定特性的加密货币, Dai 稳定货币系统中的交换资产。 ERC20 标准以太坊代币。
债务拍卖: 一个反向拍卖,在 CDP 抵押不足的情况下,出售 MKR 获得 Dai 用于偿付紧急债务。
抵押拍卖: 出售被清算 CDP 中抵押资产,过程设计首先考虑能够偿付 CDP 中的债务 ,然后在最好的价格下退回拥有者的抵押资产。
Maker 团队: 开发并推出 Maker 平台的去中心化智能合约开发者团队。
看护机: 独立经济参与者。通过交易 Dai 、 CDP 或者 MKR ,生成 Dai 或关闭 CDP, 并 在 Dai稳定货币系统中追逐套利机会并以此帮助 Dai 保持市场理性和价格稳定性。
MKR: 用于 MKR 投票者的投票并且在 CDP 无法偿还时作为支撑的 ERC20 代币。
MKR 投票者: MKR 投票者通过对风险参数进行投票以主动管理 Dai 稳定货币系统的风险。
Maker : MKR 平台技术基础设施和 MKR 投票者的去中心化自治组织。
**预言机:**用于为 Dai 稳定货币系统多个方面提供数据动态的以太坊账户(合约或者用户)。
**风险参数:**决定 Dai 稳定货币系统何时自动判断某 CDP 风险过高,并允许管理机对其清算的变量。
敏感度性参数: Dai 市场价格偏离时,决定 Dai 稳定货币系统调整目标价格变化率程度大小的变量。
目标价格变化率反馈机制: Dai 稳定货币系统调整目标价变化率使得市场价格在目标价格附近保持稳定的机制。
2020年3月12日,MakerDAO经历了它诞生以来最糟糕的一天。全球范围的货币危机,导致ETH的价格暴跌了50%以上。这场暴跌引发了交易所、DeFi协议在内的金融机构面临了一场全面清算。短时间内的大量交易也瞬间导致以太坊网络严重拥堵。
而MakerDAO系统中大部分抵押品都是ETH,那么MakerDAO面临的任务就显得更为严峻:MakerDAO需要在24小时内清算巨额的债务,这次的数字可能是MakerDAO诞生以来产生过的所有债务总和的10倍。
到最后,黑天鹅黑到极端的时候,清算者开始出价0元就能中标,获得ETH,并带着这些免费的ETH扬长而去。借款人也无法用Dai赎回自己的抵押品。这时候,Maker系统开始出现不良债务,这一缺口一度超过500W美金。
虽然有很多人坚持说这次事故是以太坊负载能力不够造成了,但MakerDAO的主要目的既然是发行一个可以稳定保值的币种,那么大家就会把它应用到区块链的角角落落,任何时候ETH突然发生暴跌,这些DAO都完全来不及被偿还。一个人只要没忘小学生的数学,都能判断MakerDAO这样的项目配不上“区块链革命”这五个字!
*
*
许多协议都提供了可供任何人使用的闪电贷,例如、和。不幸的是,这些接口彼此截然不同。这不仅对使用这些闪电贷的用户不利,开发者还必须学习如何在每个生态系统中选用闪电贷。显而易见的是,当这些开发者试图使用其中之一设计自己所需的闪电贷机制时,它们带来的复杂性(噪音干扰太多)对于其dApp的安全性也是不利的。
是个有趣的项目。 它可以将现存的闪电贷协议封装为EIP-3156兼容接口,目前已经支持如下协议:
目前有一个将多签钱包和流支付相结合的热门项目叫,但这种急急忙忙就将两大技术的应用目标锁死的项目值得大家提高谨慎对待。对于一个区块链这样的新型行业,如果你把握住了智能合约的特色,那么你会明白,小而精更有利于长远的发展。
这个赛道还有一个收获了很多风投的项目叫 。
作者:outprog,
作者:DeFi Pulse ,编译:洒脱喜,
引介 | Uniswap —— 一家不走寻常路的交易所,翻译&校对:Ray & 阿剑,作者: Cyrus Younessi
Rothschilds in crypto. Good/Bad/Neutral?
你认为区块链要构建出一个完美的去中心化币币兑换市场,还有什么需要补充的方法?
请了解一下AAVE,并总结下它的优缺点。
请了解一下DefiSaver,并总结下它的优缺点。
千万小心:DAO 1.0 的实践已经失败!
启发来自比特币:去中心化让比特币以既定规则在互联网中自主运行,不依赖某个机构的服务器,也无须某个机构来监管。从而在理论上确保了任何人、机构或政府都无法操控比特币。
去中心化自治组织(Decentralized Autonomous Organization, DAO)是通过一系列公开公正的规则,可以在无人干预和管理的情况下自主运行的组织形式。
曾有不少人认为比特币、以太坊、达世币都是典型但远非完美的DAO,绝大多数的规则都是公开透明的,如发行总量,竞争记账的共识方式和规则等。
The DAO 贼盗
Wings、SuperDAO、RootProject、Colony、Giveth、Boardroom、Aragon (District0x)、CityDAO
关联标准:ERC-792 Arbitration Standard
去中心化自治(Decentralized Autonomy)可能会成为区块链项目发展的一个重要的模式。这也就是说,很多区块链项目会以去中心化自治的模式来运作。
为什么说DAO会借助区块链技术大行其道?
德国有个叫Slock.it的团队觉得他们的DAO理念和已经写过的代码不错,想推而广之。后来就以该团队来做开发,多个以太坊领域的技术大牛作为监护人(Curator),发起了一个去中心化自治的投资组织The DAO(The Mother of all DAOs的简写。意为一切去中心化自治组织之母),亦即它是一个去中心化的私募基金,其定位是做区块链领域的投资。
2016年5月28日,这个区块链项目The DAO超过众筹金额最高的游戏项目星际公民(Star Citizen),成为有史以来最大的众筹项目。
The DAO本身没有任何中心化运作的机构,它投资项目时的基本模式说起来很简单:任何一个投资人看中一个区块链项目后,都可以发起提案。每个投资人都可以根据持有的代币(DAO TOKENS)来对各个投资提案进行投票表决。13日内得到20%的人参与投票即视表决有效。如果裁决结果为支持投资某项目,The DAO里面的智能合约即自动将该项投资所需资金拨付到一个专属子项目(child DAO)里。28天后,该项资金解冻,即可被使用(转账)。
我们一起来看看它的特色:
空中楼阁,成本低
一个完全不需要实体,完全活在网络里,而且又是去中心化的项目,完全活在网络里,它未注册实体(注意当前在几乎所有国家会有法律问题)且又不属于固定的几个人,完全依赖智能合约和投资者的投票机制来管理它。
它没有CEO、CTO、董事会和监事会等等中高层领导,没有律师没有会计(自动分红),没有办公室没有办公设备,节省了大量的成本!还有,The DAO众筹了1.66亿美元,整个众筹过程除了部署智能合约代码,1个人工都没有!一个组织的成立成本得到了非常极致的精简!
合规并不难
去中心化自治组织DAO本身并没有刻意要帮助任何人隐瞒收入。可以借鉴某些先进国家的管理模式进行良好的管理,即交易所代扣投资税,个人再申报个人所得税。
智能合约起到主要的管理作用
智能合约可以做到资金使用完全透明、可以按投资份额自动分享收益、投资和收益安全无虞(前提是代码要严谨)、构建起互相信任的社区(每个人都可以自由投票)……在中心化组织里,这些工作不光需要成本,而且还很容易出问题。
去中心化自治模式的规则并不复杂,成败的关键还是在于智能合约的开发上——目前大家已经在以太坊上尝试用智能合约构建数字身份通证标准(ERC 1056: Lightweight Identity)、仲裁智能合约标准(ERC 792 Arbitration Standard)。
致力于DAO 的摸索的项目有DASH、Wings、SuperDAO、RootProject、Colony、Giveth、Boardroom、Aragon(District0x)、CityDAO等。
以上是DAO 1.0的探索,马上我会简单介绍DAO 2.0,并且DAO 1.0必须在DAO 2.0牵制和指导下,才能得到良好的实践。
DAO 2.0 = 智能合约 + 智能管理(AI管理) + 价值共识
本篇内容,摘录自我2021年1月16日发表的《DAO的新解》:https://www.daism.io/zh/blog/24-dao2.html
经过十年的摸索,区块链通过通证和智能合约两大硬核的发展,已经证明了去中心化、去审核、去信用、匿名等等基本价值观的巨大威力。但这些还只是停留在公链层面而非应用层面。
基于应用需求而对DAO探索了六年后的今天,在经历了疯狂的ICO、两年市场暴跌的阵痛和DeFi土豪们的短暂狂欢之后,我们清楚地意识到,该是我们正本清源,彻底重新审视DAO的时候了!
应该有人还记得最早的比特币宣传用语里,经常有“比特币是匿名的”的这一说法——甚至你在bitcoin.org都能看到。可惜后来不少人一方面惧怕中心化世界的蛮横,一方面仍不甘心自己权力的丧失,自行偷偷“擦除”了对区块链的这一核心特征的记忆。
但时至今日,仍然没有人能够证明某笔比特币是他自己的——即使他违反比特币的基本原则亮出私钥,那也不能。因为私钥并非只能一个人所拥有。所以,嘿嘿,他甚至可能只是盗取了别人的私钥!
也许你会说,哇哇哇……请你说想要我现在从这个钱包地址上转多少比特币给你,只要数量不多,我可以马上转给你。这样不就能证明这个钱包地址是我的了——你当我们傻啊,这种事魔术师都能做到!
反过来说,你还能怎样证明我们不是匿名拥有比特币?请你告诉我传说中中本聪拥有的1百万个比特币的那个地址的主人到底是谁,好吗?
以太坊标志着区块链2.0时代。以太坊走得更远了,它把账户分成两种:外部账户(Externally Owned Accounts,EOA)和合约账户(Contract Accounts,CA)。
简单地说,外部账户就是供人使用的。合约账户则仅供智能合约使用。这两种账户的地址你肉眼无法区分。
复杂点说,外部账户AI也可以使用。这一点是毫无疑问的。但它不把私钥交给你,你就永远不知道这个外部账户是不是在人类的手中。
人类的身份又被以太坊隐匿掉了一层。现在你该相信区块链的匿名就是对人的隔离了吧?!
最近以太坊创始人V神等几个人发起了Acount Abstraction(EIP-2938),准备提升合约账户的作用,使之也能像外部账户一样支付手续费并触发交易的执行。这也就是说,没有了人类之手,区块链dApp一样可以在其它外部条件的触发下,自行启动其它操作,包括主动与其它合约交互!我相信你能想象一架运输机,永远不需要任何人,只要货物装满了就自动起飞,并根据各地的需求自动承接任务的意义!这一提案,将极大地提升隔离人的区块链应用发展的可能性!
隔离了人,也就隔离了人的权力。反言之,我们人类做不到不滥用自己的权力,区块链也就不得不想方设法隔离聪明反被聪明误的人类!
我知道总会有人已经开始有誓死捍卫自己特权的冲动……
我相信这次的美国大选有人作弊。依据我的人生经验揣测,人类历史上大规模的选举,完全没有作弊的恐怕凤毛麟角。大多被接受,只是因为作弊没有被发现或者尚在可接受范围,或者被强迫接受,或者根本就被暴力代表了。
我注意到Facebook和Twitter2020年数次遭遇美国政府部门的质询。社交媒体如果没有规矩,在人类社会里当然是不可行的。但社交媒体一旦试图承担事实核查角色,必然产生很多误判和任性的个案。执法者犯法的案例都层出不穷,这种受到《通信规范法案 ( Communications Decency Act ) 》第 230 条保护的社交媒体管理,就算冻结了美国总统的账户,特朗普也无法说“You're fired!”我相信对于美国社会而言,这也许是一个失序的隐患。而且无论如何管理,我们对于造假和被造假总是防不胜防!
在人类社会里你必须接受这样的现实,但是区块链显然既不接受造假,也不接受审查!
与人类形成鲜明对比的是,编程语言没有这样天生的或者亘古不灭的bug。有意思的是:全世界有一半人在使用手机,这几十亿部手机里的各种计算器时时刻刻都在帮人类做着加减乘除,没有一个会作弊——而美国大选,其实也只是个加法!
连只用加法这样的无比简单的工作都会作弊,那么我们还真的要依赖人类管理丝毫都无法容忍作弊行为的区块链?
这不科学。
以MakerDAO为例,它有两件重要的事需要管理好:金库和Dai稳定费率。
发行治理币MKR来管理金库,听起来很酷对吧?
好吧,有人用闪电贷借到MKR,让“自己被列入白名单”的提案得以顺利通过。
MakerDAO治理策略瞬间幻灭。
事实上,在DeFi领域,人类协作沦落为少数人的利益勾兑。以钱治理钱的荒谬逻辑,让DeFi几乎完全变身为开发者和土豪们的饕餮大餐!
Bancor白皮书(2018年版)里有这么一段话:
In this white paper, we have proposed the Bancor Protocol for decentralized liquidity networks, based on a standard for a new class of tokens called Smart Tokens, which provide continuous liquidity by incorporating an autonomous and low-cost market making functionality directly into their smart contracts. Smart Tokens utilize connected token balances and an intelligent and open-source formula to perpetually offer to buy or sell themselves at calculated and predictable prices, in return for any other token to which they are connected【4】.
是的,以智能合约为载体,班科通过其开放的智能算法(intelligent and open-source formula)创建了一种前所未有的新型去中心化交易所,结果石破天惊!
班科引以为傲的创新体现于:
通过班科算法首创去中心化价格发现机制,一举取代人类至少沿用了247年(自第一家证券交易所算起)的“撮合交易”这一价格发现机制。后者是一个穷富不对等的价格发行机制,这种不对等使得股市里的绝大多数穷人(小散)成为这场游戏里不断被割的小韭菜。
班科算法同时也构建起首个能够为市场提供无限流动性的网络。
虽然我个人并不认为班科就是一个完美的项目,但以上这两点在过去的几百年里都是无法想象的。
班科告诉我们:只要在智能合约中注入智能算法,就为去中心化交易开创出了颠覆性的机制。这难道还不够启发我们吗?
由此我们知道:
DAO并非以人为核心要素的协作形式。虽然我也相信DAO的早期过渡阶段不但离不开人,还需要人们以高质量、高效率协作才能推动其发展。但从本质上,DAO是遵循区块链价值观,通过通证、智能合约和算法三个关键要件构建起来的去中心化智能体,它需要秉承区块链可信的中立性,这样我们就不必纠结于其运作是不是基于多人协作以及如何协作。
我坚信 AI 终有一天会超越人,但目前如果讨论 AI 的作用,还很虚幻。第一是 AI 还没发展到能够取代人类;并且如此简陋的以太坊,也容纳不下 AI 。所以暂时我们还只能像班科一样聚焦于智能算法,但无论如何班科已经证明,正是因为它摈弃了人的协作而采用智能算法,才带来了交易机制的革命。
我们重新审视Decentralized Autonomous Organization,就会发现用Organization来理解区块链正在发生和将要发生的变革,就会有巨大的限制甚至误解。因为正如Cambridge Dictionary解释的那样,绝大多数人对Organization的理解是:a group of people who work together in an organized way for a shared purpose(一群人为了共同的目标而以协同的方式一起工作)。它很明显具有以下两重含义:
Organization乃是以人为核心要素
人的权力在Organization协作中起到关键作用
而从比特币到以太坊的dApp,区块链不但如前所述已经通过匿名手段隔离开了人,并且自始至终都在想方设法解除“以人为权力核心”的魔咒!
一个颇为有趣的事实是,无论是比特币的PoW,还是以太坊的PoS,都是完全不需要任何人“记账”的!因为账单是软件自己记录的。PoW和PoS的卓越之处,不是软件自己记账,而是一旦有人有意“记假账”,它们能够有效地予以甄别和剔除,从而保证系统的安全性——所以作为区块链基石的共识机制都已经告诉了我们:区块链时代绝不需要人记账来保证系统安全,真正需要的,恰恰是想尽各种办法杜绝人类造假!
由此可见,比特币和以太坊本身都已经是成功的Decentralized Autonomous Organism。其成功的秘诀就是“将人锁进笼子”。
因此,我们认为组织即organization与区块链基于去中心化理念而获得的巨大成功格格不入!
2020年一个小小的病毒,已经让我们这个高度中心化的世界破绽百出,甚至某些方面已有分崩离析之嫌。人类社会毫无疑问迫切需要区块链来提供有力的支撑,修正我们的认知更是迫在眉睫!
Coinbase和Paradigm两个项目的联合创始人Fred Ehrsam和Dan Robinson于2020年11月28日发表了一篇题为《Governance Minimization》(治理最小化)的文章【5】,与本主题有关的核心观点有这么几条:
什么是可信的中立性? 可信的中立性的核心为可靠可依赖。这意味着利益相关者 (例如用户或开发者) 能够在确信该协议不会发生变化而背叛他们的利益前提上,放心大胆地与一个协议交互,或者将自己的自己的项目构建其上。这也就意味着,协议须通过避免沦为任何特定群体的“ 傀儡”,进而保持可信的中立性。\
可信的中立性是当今区块链的主要价值主张 。 可信的中立性能为区块链dApp中锁定的价值创造安全环境 ,阻止价值被盗窃、被锁死和被限制。这些价值既有实体的 (例如,资金) ,也有抽象的 (例如,开发时间、用户) 。\
治理最小化意味着尽可能减少权力以及对治理的依赖 。 治理最小化很重要,因为它支撑了协议的主要价值主张:可信的中立性 。治理最小化往往提高了该协议可信的中立性。\
治理最小化的协议将迎来最广泛的使用。这是一项开启信任与采用之间的正反馈循环的核心属性 ,并且能将强大、基本的工具掌握在所有创建者手中,为整个加密生态系统创造更多机会、带来更快的进展。
还记得比特币时代广为讨论的区块链的特质之一Trustless吗?Trustless字面上是毋庸置疑的意思,而只有做到了可信的中立性,才能使得其自身毋庸置疑!Trustless即可信的中立性。
很容易理解的是,无论一个项目怎么被去中心化治理,如果其治理缺乏可信的中立性,那么它终究还是不能被区块链生态所接受。
同样很容易理解的是,最极致的治理最小化,就是像班科一样,通过智能合约中的算法来治理其中的币价。
至此,我们建议将DAO的真正含义提升为Decentralized Autonomous Organism。这就是我们所定义的2.0版本的DAO。
Decentralized Autonomous Organism意味着:
DAO = 智能合约 + 智能管理(AI管理) + 价值共识 我们已经知道通证和智能合约是区块链的两大硬核。而对于DAO2.0来说,我们认为每个DAO还必须智能化,才能完成自我的治理——或者说,我们要通过引入道易程的治理,使得DAO能够摆脱人的不良干扰。
遵循治理最小化及可信的中立性这两条基本准则 Bancor业已证明:智能算法是可兼顾两者的解决方案。
未来几乎没有哪个DAO是孤立的。每个DAO都能以其智能响应其它DAO的交互请求,每个DAO也能基于其智能向其它DAO发出交互请求,并且消化(吸收营养、摒弃垃圾)所获取的数据或其它反馈信息。因此,每个DAO的经济模型(如收费标准)就不能朝三暮四,随意变化,以保持对用户和对外部合约的友好和稳定性。\
一个DAO可能有自己的自然寿命,也可能会非正常死亡(如被黑、被不良DAO毒害),此时也会有新的DAO接替它。
考虑到 AI 的发展正扑面而来,吐故纳新,DAO还会与时俱进,不断防范人类bug带来的破坏。
今天,该是我们人类勇敢地承认自己的局限而向前一步的时候了!
基于DAO2.0的人类合作将会变得完全不同。但在 AI 能够管理之前的相当长的时间内,我们需要过渡性的方案。让我们看看不久的将来,在道易程(DAism.io)上会出现什么样的创新方案。
待更新!
激励本身就是去中心化自治的一个最重要的核心!
我们前面已经说过,达世币(DASH)则是一个典型的去中心化自治组织(Decentralized Autonomous Organ-ization,DAO),它是以去中心化自治模式管理项目的一个实例。
达世币改进了比特币的Proof of Work(POW),将区块奖励分为三部分:45%直接作为矿工挖矿奖励,45%分给所有主节点,最后的10%作为达世币项目发展的基金。
去中心化自治的三大关键:
良好的发展目标
永续的发展基金
激励机制
任何贡献都应该获得对应的报酬或奖励。但这个机制的量化,是整个去中心化自治中最最困难的工作。
公平公正的决策模式
人类社会已经用数千年的历史告诉我们:投票模式并不靠谱。比特币的成功之处提醒我们:要注重共识规则和算法的运用。比特币的失败之处也提醒我们:我们在公平公正的决策模式的摸索中,也真正是任重道远。
这个世界永远存在竞争。因此兵马未动,粮草先行!对于DAPP项目,首先你就需要建立好或确定好整个项目发展的基金组织。
独立的、去中心化的基金会可以保证财务的公开透明。如果结合智能合约,那么其可靠性是可以大大提升的。
也有一些项目早期的资金会选择捐助方式获取资金,请注意大众的捐助率通常不到5%,非常低。
如果是商业项目,那么你可以通过传统的风险投资来解决资金需求。投资公司会监督资金的使用。公司内部会有会计、董事会管理资金——不过我们已经知道,该模式下资金的合理使用很难,杜绝贪污腐化也很难。
现有手段:
非盈利项目
只要有盈利,就难免其私心,也就难免最终的腐败。
成立非盈利基金会管理发展基金
永续的发展基金
发展方案通过审核即拨付资金或者选择性拨付项目发展资金
现有难题:
如何设计永续的发展基金?
工作和贡献的量化。
如何建立公平公正的决策模式?
我们寄希望于以区块链打造的协作平台解决这些问题。
也许不久就会有专门帮大家选择协议的公益区块链项目产生。
现在需要我们自己钻研一下,或者主动请教国内外有经验的人士。
github.com
github.com是全球最大的基于代码的开源软件交流社区,也可以说是项目代码的托管平台,总共托管了3800万个项目!它也是全球最大的开源项目托管平台!参与交流的人数高达1500万。大多数都是专业人士。
《在Github和Git上fork之简单指南》:
https://linux.cn/article-4292-1-rss.html
bitbucket.org
并不太适合开源项目,比较适合私有项目。但它里面的项目可以转移到GitHub,虽不算很容易。
史上最详细bitbucket入门手册:
http://www.open-open.com/lib/view/open1420034265890.html
sourceforge.net
SourceForge曾项目代码托管的是霸主。它和github.com的主要区别是GitHub带有很强的专业社交功能。
以上这些平台并不完美,因此它们都缺乏直接的激励工具(譬如按代码贡献量打赏代币)。尝试以区块链打造的协作平台有gitcoin、ellcrys.co、cardstack.com、bounties.network、staking.network,等等。
项目的发展光有代码层面的合作是远远不够的,你还必须有一个基地。这个基地一般是一个网站而不是一个app。因为网站是开放性的,app则是封闭性的,我们可以通过搜索引擎搜索到网站里面的内容,但对于app,在你没有安装它之前,你不知道里面发生了什么。
网站或者Dapp里通常会有白皮书或者文档(documentation),或者还有api接口文档。
再就是需要有交流区。有了交流区,你甚至就不再需要技术方面的客服了。只要你把api文档(或者开发文档)写详实了,开发者们自己会相互交流,并且在交流中为你带来项目发展的种种反馈——如果像施比爱(shibe.io)那样加上狗狗币打赏功能来激励大家的交流,那就更好了。
反面的例子就在国内,为第三方开发服务的微博和微信的所谓开放平台上,居然偏就缺失了交流区。
建立各种志愿者团队——志愿者团队的建设和管理,是构建好社区的重中之重。其实志愿者模式是最有效的促进社区发展的模式。你最好有代币作为激励工具,甚至必须有更好的手段构建社区精神文明,这样可以激发起志愿者们的热情,激励更多的人参与进来。
你还可以增加一个意见池。让大家对你的项目提供需求建议。建议按支持人数排列,这会给你带来很大的帮助!
要注重各种层面的协作和交流——开源项目Joomla有一个让全体社区成员都可以参加的活动,叫“JoomlaDay”。它和我们区块链界的专业活动差不多。一般就是一些主题演讲。活动谁都可以发起。主题演讲从用户体验、市场发展到项目开发,范围非常宽泛,并且多数是纯粹的分享,很少王婆卖瓜。全球这样的交流活动每年都有上百个!目前国内区块链业界内的交流很活跃,不过基本还是中心化的模式。
开源也已经成为当今软件开发的主流模式,内容的开源和硬件的开源(如树莓派Raspberry)也已经如火如荼地发展起来。相信未来开源摸索会渗入到各行各业中。开放源代码有很多优越于非开源的特性。它非常适合于去中心化协作。
本章开篇列出的“开放源代码应用实例”里的哪一个实例没有惠及全人类?
这是开源的最重要的目的!开源最重要的目的是汇集更广泛的智慧,并最广泛地惠及全世界的人和组织。
和Windows相比,26年来一直免费的Linux系统通过开源,不但惠及全人类,而且从桌面到服务器到手机到树莓派,无论这个世界在怎么变化,它都一路畅通无阻。这是因为开源的无私,导致它对于人心有更大的召唤力,可以得到更多的人的协助,成功地突破了距离、国界、价值观的限制,最大程度地凝聚了人们的智慧!形成鲜明对比的是,Windows已经止步于手机和树莓派领域,所以,无论是从智慧的凝聚这方面来讲,还是说到软件的未来远景,Windows和Linux显然不可同日而语。
今天有很多公司,IBM、Microsoft、Samsung……都在抢占区块链高地。但是最伟大的区块链项目,早就不在它们能够企及的范围了。这个项目的名称是:
Ethereum。
1999年Lawrence Lessig教授出版专著《Code》,提出Code is law。其思想发端,据教授本人介绍,是在伟大的1989年。直到今天,在中国接触过Code is law这个概念的人都还很少。可想而知,在1999年的很多人眼里,恐怕Lawrence Lessig教授当时跟个疯子似的。
简单说吧:网络世界完全是由代码构成的,代码也一代比一代智能,越来越多的事实也证明了代码比人更可靠,那么我们为什么不能让代码本身成为法律呢?你知道吗,在互联网的早期,我们的期待和网络本身的承诺都是要构建一个自由的世界,但我们没能让代码成为法律,因此迄今我们还在这种期望和承诺里挣扎!
代码越来越比人可靠,机器掌握学习能力和自编程能力的那一天的到来,也不会太遥远——那时候的代码将是由已经比所有棋类游戏里战胜了人类的AI更聪明的AI来编写,其可靠性将远远超过人类!所以让代码成为法律,恐怕也是难以抵挡的潮流和必然归宿。
要想达到Code is law,那么很自然地,我们就必须开放源代码。
2011年12月21日国内最大的开发者社区CSDN.NET的用户密码遭到黑客泄漏,证实他们用明文保存用户密码。接下来一周,巨大规模的用户密码泄漏事件纷至沓来,全国网民的嘴都一直没来得及合上。
按照当时的网络情况,全国百分之八九十的网民都是受害者。
百度下“不堪回首:细数2014年最严重的数据泄露事故”即可见国外同类事件一样屡见不鲜。
最让人纠结的是,这些泄漏了用户密码的网站,毫发无伤,完全不承担任何责任。而此类事件,年年都层出不穷!
因为未开放源代码,我们无法知道数据泄露的真实原因!对此也就完全束手无策。
但因为开源软件里也一直存在各种各样的bug,虽然总体情况越来越好,Code is law还是一直无法得到很好的实践。不过到了区块链时代,我们突然发现这个划时代的技术能够我们可以开始践行更合理的“Smart Contract is law”:
智能合约的代码已经采用公开透明的原则。
智能合约能够抗干扰地(无私地)直接决定我们的代币按照既定协议条款处置。
在开源的前提下,智能合约可以做到公平公正。
配合数据的公开透明,智能合约的公信力能够碾压一切其它解决方案。
回想一下,智能合约标准都是用代码写就的,那么你就不难理解,Code is law 还有一层积极的意义,就是区块链的开发,往往是从代码找到基础和方向!
很多项目在初期,其实只有一个idea,需要有试错的机会,需要有多方面摸索的机会,需要有一个慢慢丰满羽翼的机会。区块链现在还在起步阶段,你还有充分的时间试错(因为大家都在摸索阶段),而开放源代码恰恰能配合这样的试错机会。
我们来看看Ethereum:
Ethereum由一家非盈利性基金管理,它本身是一个非盈利项目。
Ethereum C++ client是一个自由软件,供全球自由使用。
Ethereum会持续升级并修复各种bug,不用你担心项目的基础工作;
从前面我们讨论的EIPs,可以看出:全球很多专业人员和用户都一直在为Ethereum作贡献。第三方贡献的标准或者功能扩展越来越丰富。
Ethereum有一个越来越庞大、越来越团结的社区,未来一片光明。
就像雷锋做了好事,几代人一直在讴歌他,开放源代码软件能够让全球用户收益,因此开源就是在给自己做广告。
开放源代码之后,各种人才也会接踵而至——因为他可能会对项目一见钟情,而且所有的开源项目都欢迎新成员的加入。人多力量大。
代码开源之后,任何人都可以迅速了解背后的结构与基础,可以直接下手,可以更好地与现有团队成员协作,或者通过fork机制贡献其成果——如果他觉得自己有新想法,他还可以直接创建分支。即使他另起炉灶,毕竟你启发了他或者刺激了他,这也算你做了贡献,而并不是说有了竞争你就失败了。
譬如,比特币核心钱包是整个比特币技术应用链里的核心基础。现在在开发比特币核心钱包的就有好几个团队,其中影响比较大的有Bitcoin Core、Bitcoin Classic、Bitcoin Unlimited和Bitcoin XT。用户可以自由选择他们使用哪一个钱包。特别是在比特币面临扩容而需要区块链分叉的时候,不同的钱包开始蕴含不同的技术解决方案,这时候的用户的自由选择就是比特币去中心化的最好体现。否则如果根本就没有选择,那么所谓社区共识就是一句空话,或者一场没完没了的全球争论!
当然,要尽可能多地吸引人,你就应该把项目托管到一个程序员多、开源项目也多的平台,这是大家首选github.com托管代码的原因。
一些人只知道stackoverflow.com,reddit.com,codeproject.com。这些的确也是交流的好地方,但是在自由的开发协作、项目开源、代码学习等等方面,项目托管网站才是最好的选择!
知道以太坊在这些项目托管网站现在有多少个协作者吗?
这个网站可以查询到:CoinGecko (http://coingecko.com)
2018年5月9日,我看到有5544个Fork,235个贡献者,过去四周递交了30份修改工作。
2001年Joomla的前身Mambo创建的时候,只是一个小软件,本身还特别简单。今天如果从功能上讲,它甚至更小了——你能相信吗,一个小软件发展了17年后,功能变得更少、让人觉得更小了!
这是真的。四年前Joomla就开始做减法,逐步剥离掉核心里面的第三方插件以及做得更好的新闻联播(新闻聚合)、旗帜广告、联系我们、站内搜索、智能搜索、重定向、站内短信等功能组件。这是因为Joomla从一开始就把自己定位成了系统,通过开放模式,很快它也的确就成为了系统。它成功实现这一目标的手段,是从一开始就不仅通过源代码,还通过技术文档(documentation)把自己完全开放出来。而作为系统,有了很多第三方开发的功能扩展(extension),它本身就不再需要那么多功能,它要做好的更多的是为第三方开发的功能扩展提供最好的底层支撑。
最多的时候,整个社区贡献了2.5万套开源扩展(extension),从商城到学习管理到租房,几乎什么类型都有。一个小小的核心,带动了这2.5万套扩展的开源,想想这是多么激动人心的事情!
Joomla还是一个小软件吗?
这和我们手机里的Android也是一样的:Android本身能打电话能发短信能拍照就可以了。它只要把蓝牙、GPS、摄像头等等基础准备好,用户使用第三方开发的美图秀秀、Pokémon Go、微信、大众点评、京东商城、饿了么……大家就都可以愉快地享受低头族的美好时光了!
请记住:开源是能让你的区块链项目,从一个项目变成一个社区,从一个软件变成一个平台,从一个组织变成一个小世界的最可靠甚至是今天唯一的手段。同一类项目,如果你开源你的竞争对手闭源,你想想你十年后,他还可以与你平起平坐吗?
优秀的开源论坛程序数量目前已经很庞大了:phpBB、Simple Machines Forum、bbPress、Discourse、Vanilla、miniBB、YetAnotherForum、IceBB、YaBB、MyBB、DeluxeBB、PunBB、FluxBB、Phorum、UseBB、XMB……
知道phpBB最早是什么时候推出的吗?
2000年。
一个论坛程序被一个团队不间断地开发了18年,就算是天才,也得结合最前沿的区块链技术才能挑战他们!
最最典型的还有TinyMCE编辑器、Bootstrap前端框架、Google的reCaptcha验证码。如果你没有天才的想法,最好不要去做同类的开发。
Google的reCaptcha验证码也许你用过吧:
reCaptcha并非一个简单的项目,它是全自动区分计算机和人类的公开图灵测试——这个概念已经如雷贯耳了。现在它有三个分支技术。有图有真相:
reCAPTCHA
SQUIGL-PIX(自动识别你是不是人)
ESP-PIX(通过做题判断你是不是人)
介绍下看上去不那么高科技的reCAPTCHA吧:
美国宾夕法尼亚州匹兹堡市的CMU研究小组受一家名为“互联网档案馆”的非营利组织委托,要将海量的古老书籍及手稿通过OCR(光学字符识别)软件转化为电子文本,以方便电脑存档和查询。但由于原稿的质量太差,电脑每扫描十个单词就会错识别一个,这种情况的唯一的解决办法就是人工核对。这海量的工作显然不是一个人或一个小组可以胜任的。CMU研究小组设计了一个名叫reCAPTCHA的强大系统,让他们的电脑去向人类求助。具体做法是:将OCR软件无法识别的文字扫描图传给世界各地的网站,用以替换原来的验证码图片;那些网站的用户正确识别出这些文字之后,其答案便会被传回CMU。【5】
我们是不是应该多做这样的巧妙且有意义的工作!即使是学习,这一理念也会让你更有热情,也更有机会卓尔不凡!
Linus's Law:Given enough eyeballs, all bugs are shallow.
只要有足够多的眼球,所有的错误都是肤浅的。
“群众的眼睛是雪亮的”——这句话大家耳朵里都听出来茧子来了吧?所以开源软件一旦出现bug,开发者其实能够很快获得反馈。单从代码上讲:开源软件一定比商业软件更少bug!其质量和安全性相应也就优于商业软件。
用过开源文件压缩软件7-Zip的都是知道它也就是个小软件。而说到压缩软件,DOS 年代有一个很多人买不起的统治性的压缩软件ARC——那时候电脑特别贵,有些软件很多人是真买不起。后来一个叫Phillip W.Katz(菲利普·卡兹)程序员改造ARC被吃官司,一怒之下,创建并开放了ZIP压缩格式,在此基础上还开发出免费的PKZIP,迅速干掉了ARC。开放的ZIP格式让任何人都可以自由使用ZIP编码算法而不需要缴纳任何专利费用。这个决定彻底改变了压缩软件的世界,使得数据压缩领域再也无法出现垄断性的商业巨鳄。
可惜菲利普·卡兹英年早逝,他的PKWare公司后来似乎不再想和竞争对手分享技术,江湖风云又起!
Windows成为霸主后商业软件WinZip趁机利用一张皮(它是调用DOS下的压缩软件的外壳程序)捷足先得,雄霸天下好几年。其后在中国又被来自于江湖的商业软件WinRAR取而代之——因为2千年初中国盛行破解软件,其中有个叫ODAY的破解组织发布的资源全部都是使用RAR格式打包,WinRAR于是扶摇直上,在中国也流行起来。WinRAR既非免费软件,又在很长时间内都没有开放算法,所以这只是不得已的情况。
7-Zip 于1999年随着其LZMA 压缩算法而创立。更优秀的LZMA压缩算法本身和7-Zip一样都发布于GNU的LGPL许可协议之下。7-Zip的另一个特点是它也支持解压RAR格式。我们还有理由不放弃收费的WinZip和WinRAR吗?
折腾了多年,是不是又绕回来了?
在一类软件或者平台的萌芽阶段,创新和发展是至关重要的因素;进入上升阶段,往往市场竞争能力成为第一要素;成熟阶段,所谓路遥知马力,可持续性成为它的命脉!所以往往十几二十年后,当那个领域不再是热点,特别是受到新流行起来的热点的影响,开发人员和市场份额都大大减少(相对减少)的时候,一轮大淘汰就开始了。
因此我们可以预期的是:和当年的Nokia差不多,iPhone慢慢要变成美好的回忆了。iPhone的系统iOS是苹果公司自己开发的,首次发布于2007年1月9日;而Android则是谷歌收购的团队开发的,首次发布于2007年11月。故事的起点差不多,不同的是Android从一开始选择以Apache免费开源许可证的授权方式开源,iOS则选择不开源。iOS是中心化管理的典型例子。早期iOS曾一路领先于Android,但到2017年底,它总共有210万个应用程序,比年初的220万有所减少。iOS开发人员在2017年推出了755,000个新应用程序,比上年同期相比下降了29%。Google Play商店应用数量则整体上涨了30%,达到360万。其开发者在2017年发布了150万个应用,发布量增加了17%。
造成Android后来居上的根源,就是开放与否——在这个日新月异的年代,它是决定其命运的最关键的因素!
值得一提的还有:iOS还已经而且必将继续对区块链的发展带来很大的阻碍!比如苹果公司之前曾禁止发布所有的“数字加密货币”App,包括比特币。直至2014年6月,苹果公司才重新调整了他们的条例,把比特币作为认可的数字加密货币。但这恰好证实了其局限性,从而加深了人们的不信任感。想想吧,苹果商店现在有210万个app,而且其数量还在增长,审核制度的工作量多大可想而知。
区块链最重要的核心是去中心化的时间轴数据库,其中公有链(Public Blockchain)将是区块链领域份额最大的类型。比特币区块链就是公有链的一个典型的代表。它的特点为:
数据公开透明。
任何人都可以参与其共识过程。
以去中心化的密码经济学(如POW工作量证明)提供安全保障。
任何人都可在其上部署应用。
看到这里你有没有热血沸腾的感觉?
按照以上的特点,每个公有链项目都不会只是一个项目,而会是可以非常非常庞大的一个生态系统! 所以以太坊不只是有矿池、矿工,不只是有电脑钱包、手机钱包、硬件冷钱包、浏览器钱包,不只是有全球数百个中心化交易所和一些去中心化交易所,不只是有众多的类似CoinDesk、ETHNews的新闻媒体,不只是有ERC-20通证标准让大家从以太坊区块链衍生出来各种各样的包括去中心化数字货币交易所、网络流量交易平台、数据交易平台、音乐创作平台、健康档案管理平台、医疗平台……它已然构造出了一个庞大的生态系统,而且它还必将迅速而深入地遍布我们生活的方方面面!
公有链完全开放透明之后,程序方面如果不开源,请问:用户如何能完全信任你怀揣着的那个黑匣子呢?
公有链将是未来区块链应用的主流
公有链项目不会只是一个软件,它几乎一定是一个平台、一个生态系统、一个社区,或者甚至最终你可以把它理解成虚拟的人类世界。
公有链的数量会大大低于现在的预期
2017年底光Google Play中的应用总量就达到了360万个,同时我国市场上监测到的移动应用为403万款。全球手机操作系统你能数出几个?
所以最极端的情况是,未来全球只有以太坊这么一个公有链!
去中心化自治组织(项目)将是区块链组织化(项目运作)的重要模式
要注意到的是:去中心化自治根本不是说完全不需要分工和权威!专业决策并不能让非专业人士来左右。比特币扩容问题难以达成全球共识,一个重要的原因就在于参与讨论的人里面,有相当一部分缺乏必备的专业知识!鸡同鸭讲,共识如何能达成?!
去中心化自治只是说,即使是由专业人士来决策,也要遵循去中心化模式。
达世币(DASH)是一个典型的去中心化自治组织(Decentralized Autonomous Organization)实例。它将区块奖励分为三部分:45%作为矿工挖矿奖励,45%分给所有主节点,最后的10%作为达世币本身发展的基金。
任何人都可以参与挖矿。
任何人只要能质押1千个达世币,就能成为主节点。
任何人都可以提交开发/推广方案并申请相关预算,由主节点投票来决定该申请是否通过。若方案通过,预算将从区块奖励最后的那10%不断积累出的项目资金中拨出——代表官方的技术开发团队也不例外,其开发预算一视同仁,也要经过主节点投票来决定。
但达世币的DAO,还实在太低级了。目前已经有Wings、Colony、Giveth、ARES protocol、Boardroom、Aragon (District0x)、RootProject等等项目在摸索。
如果你不想了解跟区块链应用开发关系不大的,直接了解CC0即可。
区块链里有很多项目都是开源的,比如数字货币遵循的发布协议最常见的就是开源协议,比特币、狗狗币、达世币等等,都是开源的。重量级区块链项目如以太坊(ethereum.org)、Openchain(openchain.org)、Multichain(multichain.com)、Hyperledger(hyperledger.org)等,也都是开源的。
我们可以很方便地在维基百科里查阅到这几个概念。比较可惜的是由于世人皆知的原因,在这些领域真正有实践经验的国人太少太少了!
开放源代码描述了一种在产品的出品和开发中提供最终源材料的做法。在这个词广泛使用前,开发者和生产者使用过很多词去描述这个概念,开放源代码在互联网上已经获得广泛使用。开放源代码意味着一个产品授权其用户得到其源代码、设计文档(技术文档)以及内容。开放源代码使得生产模块、通信管道、社区交流获得很大改善。随后,一个新著作权、新词“开源软件”和“开源模型”(也常被称为“开源模式”)诞生。
开源模型概念包括同时间不同时程和方法来生产,相对而言,更加集中式的软体设计模型,例如典型的商业软体公司。一个开源软件开发的主要原则和惯例是易货贸易和合作的同侪生产,经由免费公开的最终产品、原始信息、蓝图和文件。这逐渐应用在其它领域,例如生物技术。
开放源代码由Debian的创始人之一Bruce Perens 定义如下:
自由再散布(Free Distribution):允许获得源代码的人可自由再将此源代码散布。
源代码(Source Code):程序的可执行文件在散布时,必须以随附完整源代码或是可让人方便的事后获取源代码。
派生著作(Derived Works):让人可依此源代码修改后,在依照同一许可协议的情形下再散布。
原创作者程序源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的代码做分别,保障原始的代码完整性。
不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设置限制,除非法律有特别规定(如:美国政府限制高加密软件的出口)。
对程序在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。
散布许可协议(Distribution of License):若软件再散布,必须以同一条款散布之。
许可协议不得专属于特定产品(License Must Not Be Specific to a Product):若多个程序组合成一套软件,则当某一开放源代码的程序单独散布时,也必须要匹配开放源代码的条件。
许可协议不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光盘),不得限制其他软件的授权也只能遵照开放源代码的授权。
许可协议必须技术中立(License Must Be Technology-Neutral):亦即许可协议不得限制为电子格式才有效,若是纸本的许可协议也应视为有效。
开放源代码促进会(Open Source Initiative,OSI),又译作开放原始码组织,是全球最重要的旨在推动开源软件发展的非盈利组织。在业界有很强的权威性。
开放源代码产品已经涵括:
开源软件(Open-source software)
开源硬件(Open-source hardware):又常被称为“开放硬件”。
开源视频游戏(Open source video games)
开源唱片厂牌(Open source record label)
开源电影(Open source film)
开源可乐(Open source cola)
开源内容(Open source content或Open content【2】)
开放源代码应用实例
1. 应用软件
7-Zip——文件压缩软件。
Blender——三维绘图及渲染软件。
Eclipse——集成开发环境。
GIMP——GNU图像处理软件。
Scribus——桌面出版软件。
Inkscape——矢量图形编辑器。
Ardour——数字音乐工作站(DAW)。
Audacity——数字声波编辑软件。
Emacs——纯文本编辑器。
Vim——纯文本编辑器。
Chromium——网页浏览器。
Mozilla Firefox——网页浏览器。
Mozilla Thunderbird——电子邮件客户端软件。
NASA World Wind——虚拟地球软件。
Open Broadcaster Software——在线直播软件。
DocFetcher——桌面搜索软件。
2. 操作系统
Android——基于Linux的操作系统。
Firefox OS——基于Linux的操作系统。
FreeBSD——类Unix的操作系统。源自加州大学伯克利分校开发的伯克利软件套件(Berkeley Software Distribution,BSD)产品。
Linux——类Unix操作系统家族。三大开源社区版本:CentOS、Ubuntu、Debian。
OpenIndiana——类Unix操作系统家族。
ReactOS——创建在Windows NT架构的操作系统。
Haiku——与BeOS兼容的操作系统。
3. 编程语言
Python——一种通用的编程语言。
Golang——Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
Solidity和Vyper——一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
Perl——一种通用的编程语言。
Figure 7文档. Solidity 0.4.25
PHP——适用于网络开发的编程语言。
Ruby——一种通用的编程语言。
Swift——一种支持多编程范式,编译式编程语言。
4. 服务器软件
Apache HTTP Server——一种网页服务器。
Drupal——内容管理系统。
Joomla!——内容管理系统。
MediaWiki——运行于维基百科的Wiki引擎。
MongoDB——文件导向数据库管理系统。
Moodle、Claroline——课程管理系统、虚拟学习环境。
Arduino——单片机微电脑,由艺术家、设计师、业余爱好者所使用。
饮料
Open-source cola——一种配方开源的可乐。
内容
维基百科(Wikipedia)——全世界最大的百科全书(wikipedia.org)。
国内常将“开放源代码”简称为“开源”。
名单里一定有你正在使用的开源软件,比如网页浏览器Chromium、Mozilla Firefox(火狐)、手机操作系统Android(安卓)——红极一时的iPhone的操作系统iOS不在名单之列,也就是说iOS并非开放源代码软件。
名单里可有中国人创建的开放源代码实例?一个没有。因为糟糕的英语教育和世人皆知的原因,我们连参与都很少很少。
是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进这款软件的质量。开源协议通常匹配开放源代码的定义的要求,并遵循业界广泛接受的开源协议。一些开源软件被发布到公共领域。开源软件常以公开和合作的形式进行开发。开源软件是开放源代码开发最常见的例子,也经常与用户生成内容做比较。 开源软件的英文“open source software”一词出自自由软件的营销活动中。
开源软件同时也是一种软件传播模式。非开源软件仅可获取已经编译过的二进制可执行文件,通常只有软件的作者或著作权所有者等拥有程序的源代码。这种模式仅仅只是传播了软件的使用权,而封闭了软件的学习、修改、嵌入等权限。
有些软件的作者只将源代码公开,却不匹配“开放源代码”的定义及条件。作者可能设置公开源代码的条件限制,诸如限制可阅读源代码的对象、限制派生产品等,此称之为公开源代码的免费软件(Freeware,例如知名的模拟器软件MAME),因此公开源代码的软件并不一定可称之为开放源代码软件。
根据自由软件基金会对其的定义,是一类可以不受限制地自由使用、复制、研究、修改和分发的,尊重用户自由的软件。这些方面的不受限制正是自由软件最重要的本质。与自由软件相对的是专有软件(proprietary software)即非自由软件,或被称为私有软件、封闭软件(其定义与是否收取费用无关──自由软件不一定是免费软件)。自由软件受到所选定的“自由软件许可协议”保护而发布(或是放置在公共领域),其发布以源代码为主,二进制文件可有可无。自由软件许可证的类型主要有GPL许可证和BSD许可证两种。
自由软件基金会(Free Software Foundation,FSF,www.fsf.org)对自由软件的定义首次于1989年发表。这份定义后来被布鲁斯•裴伦斯(Bruce Perens)改写为《Debian自由软件指导方针(DFSG)》。
根据斯托曼和自由软件基金会(FSF)的定义,自由软件赋予用户四种自由:
自由之零:不论目的为何,有使用该软件的自由。
自由之一:有研究该软件如何运作的自由,并且可以修改该软件来匹配用户自身的需求。获取该软件之源码为达成此目的之前提。
自由之二:有重新散布该软件的自由,所以每个人都可以借由散布自由软件来敦亲睦邻。
自由之三:有改善再利用该软件的自由,并且可以发表修订后的版本供公众使用,如此一来,整个社区都可以受惠。如前项,获取该软件之源码为达成此目的之前提。
如果一软件的用户具有上述四种权利,则该软件得以被称之为“自由软件”。也就是说,用户必须能够自由地、以不收费或是收取合理的散布费用的方式、在任何时间再散布该软件的原版或是改写版,在任何地方给任何人使用。如果用户不必问任何人或是支付任何的许可费用从事这些行为,就表示他拥有自由软件所赋予的自由权利。
许多人将开放源代码与自由软件(free Software)视为相同,但若以定义条件而言,自由软件仅是开放源代码的一种,也就是自由软件的定义较开放源代码更为严格,并非开放源代码的软件就可称为自由软件,要视该软件的授权条件是否合乎自由软件基金会对自由软件所下的定义:
自由软件是在电脑为个人或为公共利益,而非私人公司或政府等企图限制或监视我们工作时,我们在家、学校和公司使用时,我们具有其控制权。
开放源代码有时不仅仅指开放源代码软件,它同时也是一种软件开放模式的名称。使用开放源代码开放模式的软件代表就有Linux操作系统。
严格地说来,开放源代码软件与自由软件是两个不同的概念。所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为“自由”。但在现实上,绝大多数开源软件也都匹配自由软件的定义。比如,遵守GPL和BSD许可的软件都是开放的并且是自由的。
“开放源代码软件运动”是一个主要由程序工程师及其他电脑用户参与的声势浩大的运动。它是自由软件运动的一个分支,但两者的差别并不明显。一般而言,自由软件运动是基于政治及哲学思想(有时被称为所谓黑客文化)的理想主义运动,而开放源代码运动则主要注重程序本身的质量提升。
免费软件(Freeware)【5】
是指不需以金钱购买使用授权的电脑软件,但使用上会有一种以上的限制,例如禁止反编译软件以研究软件写法、禁止修改软件源码、禁止再次散布出去给其他人使用等。免费软件是与商业软件 (Commercial Software) 相背的概念;商业软件通常需要收取使用授权费以营利,但有时候商业软件基于商业目的,如想让“收费版”软件 (专业版、商业版) 扩大市场占有率,而提供免费版 (免费版、个人版) 软件——但只是说那个版本的软件是免费软件,而不能说那个软件是免费软件。
根据自由软件基金会 (Free Software Foundation) 的说法,“免费软件”是种定义不够严谨的软件类别,缺乏明确接受的定义;但自由软件基金会仍表示免费软件与自由软件不同,必须区隔两者。有些自由软件(Free Software)虽然免费提供,但因自由软件授权不限制发行者再次向使用者收取费用之权利,所以不可称之为免费软件,只能称为免费提供的自由软件。知名的闭源免费软件有 Adobe Reader、Skype 等。
绿色软件(Green Software)——一般不需要安装,而可以直接点选执行的软件,以避免如果不想使用而要删除后,在系统某些位置留下无法去除的档案。有许多免费的软件被制作成绿色软件,可置于随身碟中携带,所以也称为Portable software。
广告软件(Ad-ware)——附带宣传广告的软件,当中部分是恶意软件。
赞助软件(Donationware或Beggarware或Nagware)——透过自愿性赞助或捐献,软件开发者从而获得补酬。
被放弃的软件(Abandonware)——一些商业软件因日子久远或失去利润价值而免费使用,甚至开放源码,放弃版权。
附带的软件——如一些公司的宣传光碟经常包括的阅读/多媒体软件,例:Adobe Reader、RealPlayer、Flash Player或游戏光碟附带的Direct X等。
其它还有试用软件(Trial ware)或共享软件(Shareware)等过了一段时间后不能再使用或功能有所限制的软件。有时亦有伪装成免费软件的间谍软件(Spyware)或垃圾广告软件(Spam ware)。
这是西方工业革命的结晶:你的软件属于哪种类型,自己说了不能算,必须要看你是否采用了哪种软件社区普遍认同的协议。
以下内容来自维基百科词条“自由及开放源代码软件许可证比较”[6]
这个表格列出所有被自由软件社区所认可的许可证——无论是“自由软件”或是“开放源代码”许可证,这些组织通常也会将其分类。组织通常只会认可特定版本的软件许可证。自由软件基金会(FSF)的认可表示自由软件基金会认为该许可证为自由软件许可证,因为他们不认同专有软件,不过他们建议至少是与GPL兼容且最好是以Copyleft的方式发布。
许可证与特定版本
FSF“认可”
与GPL兼容
OSI 认证
Copyfree 促进会认证
Debian 认可
Fedora项目认可
Academic Free License
是
否
是
否
?
是
Affero通用公共许可证第三版
是
是
是
否
是
是
Apache许可证版本1.1及1.0
是
否
是
否
是
是
Apache许可证第二版
是
是
是
否
是
是
苹果公共源代码许可证版本1.x
否
否
是
否
否
否
苹果公共源代码许可证版本2.0
是
否
是
否
否
是
艺术许可协议 1.0
否
否
是
否
是
否
艺术许可协议 2.0
是
是
是
否
是
是
Berkeley Database License
是
是
是
否
是
是
原始的BSD许可证
是
否
否
否
是
是
修改后的BSD许可证
是
是
是
是
是
是
Boost许可证
是
是
是
是
是
是
CeCILL
是
是
是
否
是
是
通用开发与散布许可证
是
否
是
否
是
是
Common Public License
是
否
是
否
是
是
创作共用授权(标签:署名及相同方式共享)
是
否
?
否
限≥3.0之版本
是
创作共用授权(标签:非商业性使用及禁止演绎)
否
否
否
否
否
仅限署名-非商业性使用
Cryptix General License
是
是
否
是
是
是
WTFPL
是
是
否
是
是
是
Eclipse公共许可证
是
否
是
否
是
是
Educational Community License
是
是
是
?
?
是
Eiffel Forum License第二版
是
是
是
?
是
是
Fair License
?
是
是
是
?
是
GNU通用公共许可证
是
是
是
否
是
是
GNU宽通用公共许可证
是
是
是
否
是
是
Hacktivismo Enhanced-Source Software License Agreement
否
否
否
?
否
否
IBM公共许可证
是
否
是
否
是
是
英特尔开放源代码许可证
是
是
是
?
?
否
ISC许可证
是
是
是
是
是
是
LaTeX项目公共许可证
是
否
是
否
是
是
微软公共许可证
是
否
是
是
?
是
微软互惠许可证
是
否
是
否
?
是
MIT许可证
是
是
是
是
是
是
Mozilla公共许可证版本1.1
是
否
是
否
是
是
Mozilla公共许可证版本2.0
是
是,除了"Incompatible with Secondary Licenses"一节特别标示部分
是
否
是
是
网景公共许可证
是
否
否
?
?
是
Open Software License
是
否
是
?
否
是
OpenSSL许可证
是
否
否
否
是
是
PHP许可证
是
否
是
否
是
仅限v3.0/3.01其余未知
POV-Ray-License
否
否
否
?
否
?
Python软件基金会许可证2.0.1;2.1.1及更新
是
是
是
否
是
是
QPL
是
否
是
?
否
是
Reciprocal Public License 1.5
否
否
是
?
?
否
Sun Industry Standards Source License
是
否
是
?
?
是
Sun Public License
是
否
是
?
?
是
Sybase Open Watcom Public License
否
否
是
?
否
否
W3C Software Notice and License
是
是
是
否
是
是
XFree86 1.1 License
是
是
否
?
?
?
Zlib授权
是
是
是
否
是
是
Zope公共许可证版本1.0
是
否
?
否
?
是
Zope公共许可证版本2.0
是
是
是
否
?
是
这些协议是软件业最重要的基石,因为它们绝大多数不是来自任何政府,任何法院,而是来自于软件社区(community)——和很多区块链项目一样(其实应该反过来说,因为区块链吸纳的正是以开源协议为核心的开源运动的成果),它们是社区达成共识的结果。准确地说,它们往往是由某个杰出的人,或民间组织,或企业制订,最终由社区优胜劣汰而确定,并且非常有意思的是,这样产生的许可证在欧美国家已经反过来被纳入法律法规的范围!反观我国,虽然已经是伯尔尼公约签约国,但在实际操作层面,还没有上升到这一高度。
自由软件基金会非常强调与GPL的兼容性,可见GPL之重要。这里的GPL,全称是GNU General Public License即GNU通用公共许可协议。
比特币核心钱包Bitcoin Core,采用的即为MIT license(MIT许可证)。
GNU通用公共许可协议(英语:GNU General Public License,缩写:GNU GPL、GPL),是一个被广泛使用的自由软件许可协议条款。其核心是保证终端用户运行、学习、分享(复制)及修改软件之自由。GNU GPL最初由理查德•斯托曼(Richard Matthew Stallman)为GNU计划而撰写。此许可证最新版本为“第3版”(v3),于2007年6月29日发布。
GNU宽通用公共许可证(GNU Lesser General Public License,LGPL)改自GPL的另一个版本,其目的是为了应用于一些软件库。
GPL给予了计算机程序自由软件的定义,并且使用Copyleft来确保程序的自由被完善的保留。
自由
GPL授予程序接受人以下权利,或称“自由”,或称“copyleft”:
以任何目的运行此程序的自由;
再发行复制件的自由;
改进此程序,并公开发布改进的自由(前提是能得到源代码)。
相反地,随版权所有软件的最终用户许可证几乎从不授予用户任何权利(除了使用的权利),甚至可能限制法律允许的行为,比如逆向工程。
GPL与其它一些自由软件许可证(比如BSD许可证)相比,主要区别就在于GPL寻求确保上述自由能在复制件及演绎作品中得到保障。它通过一种由斯托曼发明的叫Copyleft的法律机制实现,即要求GPL程序的演绎作品也要在GPL之下。相反,BSD式的许可证并不禁止演绎作品变成专有软件。
由于某些原因,GPL成为了自由软件和开源软件的最流行许可证。到2004年4月,GPL已占Freshmeat上所列的自由软件的约75%,SourceForge的约68%的份额。类似的,2001年一项关于Red Hat Linux 7.1的调查显示一般的代码都以GPL发布。著名的GPL自由软件包括EMACS,Linux核心(并非所有Linux发行版的核心都是开源的)和GCC。
鉴于GNU通用公共许可协议是应用最广泛的自由软件许可证,建议大家仔细研究下。
这是GPL v2非正式简体中文译本:http://www.thebigfly.com/gnu/gpl
GPL v3非正式简中译本:https://sites.google.com/site/bergwolf02/gplv3_zh
GNU通用公共许可协议的英文非常晦涩难懂。官方坚持只有www.gnu.org网站里发布的英文版才有法律效力,中文版和其它语言版都仅仅只是供大家理解其条文的参考资料。
GPL的核心在于:
1. 保证任何人都能自由使用、发布、修改、复制和传播遵循其许可证的软件!
2. 修改之后仍然必须遵循GPL许可证而发布或传播!
3. 任何人都可以通过任何媒介发布原程序源代码的未被修改过的完整副本(需显著而适当地标注版权),可以为其副本的分发收取任何价格的费用或者免费,也可以提供技术支持或者责任担保来收取费用,但许可证不得变化。
Creative Commons license(知识共享许可协议,创用CC许可)是一种公共著作权许可协议,其允许分发受著作权保护的作品。一个作者可使用创作共享许可授予他人分享、使用,甚至创作派生作品的权利。创作共享提供给作者灵活性(例如,他们可以选择允许非商业用途使用他们的作品),保护使用或重新分配他人作品的人,所以他们只要遵守由作者指定的条件,不必担心侵犯著作权。
知识共享许可协议有多种不同类型。许可证可以有不同的组合,由分发条款决定。
许可协议最初由知识共享于2002年12月16日发布,其是一家美国非营利性组织,于2001年成立。
2011年,自由软件基金会添加了CC0到其自由软件许可,让CC0成为发布软件到公共领域的推荐方式。 CC0现在正在成为区块链行业最流行的开源协议。
无著作权
在作品上适用该文本的人已经将作品 贡献 至公共领域,在法律允许的范围,放弃所有他在全世界范围内基于著作权法对作品享有的权利,包括所有相关权利和邻接权利。
您可以复制、修改、发行和表演本作品,甚至可用于商业性目的,都无需要求同意。请看以下其他信息。
其他信息
CC0不影响任何人可能拥有的专利权或商标权,也不影响其他人可能拥有的对本作品本身的权利,或者决定本作品如何使用的权利,比如形象权或隐私权。
除非另有明确声明,本文件项下的作品关联人,在可适用法律所允许的最大限度内,不对本作品提供担保,不承担因本作品使用产生的责任。
当使用或引用本作品时,您不得暗示 作者或声明人为您的行为背书。
CC0在区块链行业的应用始于以太坊发展提案(EIPs,详见提案模板),之后慢慢蔓延到dApp,NFT产品。因为以太坊发展提案是区块链行业最重要的技术标准产生之地,结合区块链的价值观,我们认为CC0非常可能成为区块链最主要的开放协议。
以下是我们推荐大家认真了解的资料:
a16z 在 CC0 协议的基础上,推出了 CantBeEvil License 。并对推出这组协议的动机做了详细的介绍。
请你仔细评判下这组协议的合理性。
项目是由一家名为人类工具(Tools for Humanity, TFH)的公司发起的,该公司由山姆·奥特曼(Sam Altman)、Max Novendstern 和 Alex Blania 于2019年创办。
Worldcoin的成立使命是创建一个全球包容性的身份和金融网络,由大多数人类拥有。如果成功,Worldcoin将大幅增加经济机会,提供一种可靠的在线区分人类与AI的解决方案,同时保护隐私,促进全球民主进程,并展示AI资助的基本收入(UBI)的潜在路径——。
相信心细的读者已经产生了第一个疑问: 为什么这个全球包容性的身份和金融网络,只能由大多数而不是所有人类拥有? 比较容易想到的可能原因是,这个项目认为无法覆盖到那些生活在偏远地区的人类。
第二个疑问是: AI 给大多数人资助(这是多么令人感动的用词)基本收入,那么,那些生活在偏远地区的少数人类岂不就更不幸了?
当然,从这几天第三方所写的 Worldcoin 专题文章看,大家更担心的恐怕是另一个问题:为了获得基本收入,地球上大多数人就必须通过 Worldcoin 的虹膜生物识别设备Orb,将自己的隐私数据,交给一家中心化公司?这是保护隐私,还是隐私隐患?
而在我看来,“AI资助的基本收入”就是资本家俯视之下的资本主义福利制度,如果让它得逞,最终的结果将是隐私隐患中最恐怖的那种:数字牢笼。
大多数中国人应该还记得:马斯克所预见的共产主义,是不需要基本收入的,因为是按需分配!
在人们的疑虑中,2023年7月24日 Worldcoin 开始发行其代币WLD。75%分配给社区、9.8%团队、13.5%TFH投资者、1.7%TFH储备。流通量为1.43亿,有1亿贷款给做市商。发布前共分配了超4300万个WLD代币,各地区分发比例如下:亚洲32.1%、非洲31.6%、拉美18.8%、欧洲17.1%,其馀地区0.1%[3]。WLD 的发行总量100亿 WLD,还有通膨,最高为每年1.5%,具体protocol governance说了算,预计最早会在15年后开始。
在区块链行业摸爬滚打过一年以上的人都知道,这就是妥妥的资本家割韭菜的 ICO!在有近50亿人陷入贫困的今天,拿全人类的福利做伪装来割韭菜,何其可耻!
2021年10月21日,在其发布的“启动工作原理”中,Worldcoin资本家们遗憾地说,“……加密技术作为一种技术迄今为止只达到了全球人口的约3%。 虽然已经取得了惊人的技术突破,但尚未齐心协力地成功实现广泛的全球采用。”2是的,从2011年8月出现名为 IXCoin的第一款竞争币起,资本家们通过13年包含ICO、空投等各种极端手段的疯狂的反扑,迄今为止只圈到了全球人口的约3%,何其幸哉!
参考文献:
[1] 维基百科,
[2]
[3]
智能合约是以太坊的灵魂
如果你想开发智能合约,那么请看。
如果你不想编程,只是想了解下其中的主要原理和工作,阅读谭粤飞老师编写的即可:
比特币只有个币,而以太坊在它问世后五年,就已经一纸白皮书从技术上超越了它。但16年来,比特币就是牛币!它一直高居区块链市值榜首。 2025年1月7日,比特币市值占比高达56.4%,排名第二的 ETH 市值占比仅为12.3%! 耐人寻味不是吗?
2013年11月的某天,Vitalik Buterin 发布了他写的《以太坊:下一代智能合约和去中心化应用平台》(.")。
这样的标题当然是激动人心的。
白皮书中说,以太坊的目标就是提供一个带有内置的成熟的图灵完备语言的区块链,用这种语言可以创建合约来编码任意状态转换功能,用户只要简单地用几行代码来实现逻辑,就能够创建当时人们所热议的所有货币和金融方面的应用以及许多人们还想象不到的其它应用。
图灵完备意味着以太坊提供的是全球公共的通用智能合约云服务器——是的,Vitalik 从一开始就将以太坊定位为世界计算机,并且他希望这一愿景在 ETH 2.0 计划中能够得以实现。而提升以太坊效能的分片(sharding)技术就曾是ETH 2.0最主要的攻关目标。当时以太坊采用的从比特币那里山寨来的 PoW 共识机制的效率非常低,每秒仅能处理15笔转账。我们都知道转账是gas(交易手续费)最低的交易类型,如果是合约交互产生的交易,其 gas 高十倍或更高都很正常,也就是每秒可能仅能处理一笔甚至零点几笔交易了。而此时倘若又不幸因 ETH 市场价格暴跌或暴涨导致交易拥堵,gas 再暴增几十几百倍,加上以太坊又有最高gas限制,对多数正在发起交易的用户来说,此时就与宕机无异了!
因此整个行业都翘首以盼分片能够大大提升以太坊的性能。早在《BeyondBlock Taipei 2017》会议上, Vitalik 就已经开始推动这一技术更新。整整七年过去,实际发生的却是 ETH 2.0 的流产。而在当前的以太坊技术发展路线图中,再也找不到了。
显然我们需要彻底的反思!
Vitalik 的区块链职业生涯源于17岁的他联合创立的Bitcoin Magazine。可惜的是,这位技术上的天才少年非但没有继承中本聪倾注在 PoW 工作量证明中的治理思想,甚至对于金融的根本作用以及资本所构建的不平等的社会关系,都一无所知。
我们不能苛求的是,比特币因中本聪自身的局限性,其 PoW 工作量证明只实现了一个非常粗糙的软件模型。加上我们迄今尚不得而知其原因的中本聪的突然消失,使得他也没有继续伴随着区块链的实践,通过广泛的开源协作对比特币做进一步的改进。
回过头来看,中本聪留给大家的课业貌似并不多,也就比特币白皮书和Bitcoin 0.1.0(即投入使用的首版)。但绝大多数人不是啃不了代码就是看不懂白皮书,无法继承其大业。即使他们中的很多人绞尽脑汁去琢磨中本聪留下的其它极为稀少的文字,也于事无补。
譬如,2009年1月3日,中本聪推出创世区块(Genesis Block)时,引用了《泰晤士报》的头版: “即将向银行提供第二轮救助的财政大臣”(The Times 03/Jan/2009 Chancellor on brink of second bailout for banks)。它被广泛认为是中本聪对08年金融风暴后英国央行滥发货币的不满。但也正是过于执着于这条信息与货币的关联,反而让所有人忽视了另一种解读。并且这一解读就隐藏在 PoW 工作量证明中:
资本主义难以为继,比特币是一个不想走资本主义道路的项目。
我在上一篇文章中已经解读了中本聪的思想:PoW 工作量证明是中本聪对资本主义的宣战!比特币毫无疑问不是想给资本主义续命,而是在尝试铺就通往人类新文明的道路。若非如此,中本聪煞费苦心地摸索一种建立在去中心化、抗审查、无需许可、公开透明、毋庸置疑的中立性等等特性上的金融体系,不但用上面这句话影射资本主义金融的末日,并且还自始至终坚持隐匿自己的行踪,就一点意义都不存在了!
我们知道,当今人类世界正处于资本主义的统治之下。即资本是人类世界最根本的硬核。马克思早在里就揭示出资本的无可抵挡的沉默的力量:它赋予资本家特殊的社会权力,并用政治权力和以法律为主的社会契约为其提供保障,直至构建起一个以支配、统治、奴役关系为核心骨架的人类世界,即资本主义社会。这也就是说,如果我们还想推动人类社会的进步,那么唯一的办法就是摧毁资本的力量!
中本聪通过 PoW 工作量证明根植于比特币里的人类社会的伟大治理思想,正是马克思的哲学思想!PoW 工作量证明通过比特币落地,也正是马克思所期望的通往共产主义的伟大实践!
令人遗憾的是,2013年以太坊发起时,联合创始人除了资本家,就是想成为资本家的大神。2015年6月30日以太坊上线,其公共区块链迟至7月30日启动。有点诡异是吧?因为早在一年前,以太坊创始团队,并取得巨大成功!
以太坊2014年7月的 ICO,预售出超过6千万个 ETH,融得31000BTC,当时价值1800万美元,另有9.9%的 ETH 留给创始团队,再加9.9%的 ETH 留给以太坊基金会。公共区块链的迟到,最重要的原因就是要关起门来完成预挖。这种预挖毫无疑问是对比特币的PoW工作量证明的亵渎!
以太坊的ICO就是被中本聪所唾弃的极为地道的技术资本化,就是把“电子现金” ETH 作为资本来预售,让更多资本家一起来获取剩余价值的资本主义生产方式。是的,以太坊创始团队把”实现世界计算机“这一区块链发展的巨大的技术创新,锁死到了正在给人类社会的进步带来巨大阻碍的资本主义生产方式里。
以太坊资本家的疯狂,还不仅限于此。
2016年4月30日,一个号称去中心化的自治组织 The DAO 在以太坊上诞生,这是一个用智能合约开发的投资项目。在代币销售开始三周后,从超过11,000名资本家和准资本家那里筹集了占总量14%的 ETH,总价值在1.5~1.66亿美元之间波动,使其成为当时历史上最大的众筹活动之一。
这是我在项目结束之前某天截的屏:
The DAO 的宣传语念起来激动人心:
The DAO is revolutionary. The DAO is autonomous. The DAO is rewarding. The DAO is code.
嗯,很快我们就会明白,只有第三句才是真正的重点。那是这一群资本家最为真实可靠的野心。
我在2016年主编的一本书里介绍过这起事件。6月17日黑客利用 The DAO 智能合约中的bug,劫持了360 多万个ETH,折合人民币5亿元。以 Vitalik 为首的以太坊的官方团队第一时间将事件通知了整个社区,并迅速启动拯救计划。最终,香港时间7月21日下午2点30分左右,所有资本家达成共识,以太坊执行硬分叉,被盗资金被强制回到资本家们的账户里。
是的,严肃地说,以太坊的 ICO 颠覆了中本聪在 PoW 工作量证明中的伟大设计!作为应用发展基础的它对于整个区块链的发展因此起到了巨大的阻碍作用。特别是对于之后以太坊生态内成千上万的 dApp 疯狂输出 ICO ,带头大哥以太坊难辞其咎!
而 The DAO 事件的后果就变得更为严峻!包括以太坊发起人 Vitalik 在内的所有资本家,以实际行动向全世界展示了,为保证其利益,他们如何粗暴地践踏中本聪以呕心沥血的实践构建出的抗审查(anti-censorship)等区块链核心价值。是的,令人痛心的是,以太坊资本家示范性的作为不但让整个行业在长达十年的时间里窒碍难行,还让不少骗子通过简单的复制得以大行其道,伤害了很多人。甚至也严重污染了中本聪的伟大创新!
总之,到目前为止,以太坊有的只是两大治理共识 PoW 和 PoS 的外壳,而违背了中本聪为我们呈现的真正的治理思想。十年宝贵的时间就这样浪费掉了。ETH 2.0 计划的流产,对于以太坊来说就是再正常不过的事情。
那么,一起来想象下,如果我们想要拯救以太坊,中本聪给的首个建议会是什么?
……
我2019年发起的项目“道易程”构建了一个新的治理共识,叫做价值证明(Proof-of-Value, PoV)。这个共识的重任之一就是为以太坊重构其公共治理基金,并对包括其自身在内的智能公器(简单地说就是公共品)和通证经济进行治理。
届时将有50个“中本聪”一同启动锻造,触发出一个公共治理基金。名曰“中本聪UTO基金”。
中本聪UTO基金是整个以太坊生态的公共治理基金。
UTO是ERC-20类型的通证。也就是说,中本聪UTO基金是通过智能合约和 AI 等来实现其最终的去中心化自治。
有一定经验的人也许会产生这一疑问:为什么我们不重新设计一个新的公链,而继续改造以太坊?
最主要的原因是,以太坊被天才少年 Vitalik 定位为世界计算机后,带来的贡献是巨大的:它拓展了公链的治理范围,增加了对应用程序的某些关键点的基础治理。即吸纳比特币账单的成功治理经验,将智能合约的部署和自运行等等交给共识机制去做去中心化治理。这就开辟了区块链特有的 dApp 的发展之旅。
再强调一下,关于智能合约这一创新,作为互联网网民的我们,都知道它注定会青史留名。因为只有智能合约,才能构建出真正符合比特币启发出的区块链的所有的价值观(要求)的dApp:公共、去中心化、去审查、无需许可、毋庸置疑的中立性,等等。
我们是致力于构建人类新文明的一群人,我们理当尊重所有人的贡献,也相信大家更希望我们能以友好协作的方式继续完善以太坊,而不是踩着它往上爬!
从软件上说,以太坊有两重结构:执行层和共识层。我的意思是:我们要对共识层进行彻底的改造。这需要大家在 PoV 价值证明这一共识机制的基础上,通过广泛的协作完成历史交给我们的重大使命!
现在问个有意思的问题:就编程语言来说,Java、Go、Pathon、C++……能开发出智能合约吗?
不能。必须使用智能合约编程语言,如Solidity等。
那比特币的核心客户端(Bitcoin core)和Ethereum最重要的客户端是用什么语言开发的呢?
C++和Go。
OK,我们来理理:我们必须用智能合约开发语言如 Solidity 写好代码,部署到以太坊去运行,才能符合我们对区块链合约安全可靠性的要求!
那么,以太坊(公链)和矿工之间的合约完全在智能合约之外执行,这不就有违知行合一了吗?!
对于分别于2009和2012年问世的 Pow 和 PoS 这两种治理共识,其治理能力不够的根本原因就是技术应用的不当:它们都属于用传统web技术构建的治理共识。而 PoV 是用智能合约构建的治理共识。而我们刚说过,只有用智能合约构建出的合约才能真正达到区块链对安全可靠的要求。用 PoV 价值证明来解决以太坊公链的治理,势在必行。
以太坊有两重结构:执行层和共识层。我们要对共识层进行彻底的改造:
重构出公共的治理基金“中本聪UTO基金”。 没有合理奖励机制的共识,是比空中楼阁更糟糕的资本收割机!
采用智能合约来治理自身,道易程提供的解决方案就是 PoV。 web2包庇了种种特权,只有智能合约能保证公开透明、公正且可靠。
摒弃区块链大小的限制。 有区块链大小限制,就必然有竞价。这就是资本主义的生产方式之一!
价值证明指的是一种系统化的发展,实际上将由多个去中心化应用程序和人工智能组成。道易程完成的是其公共治理基金和一些具体的治理方式,以上任务的每一项,都需要第三方的参与甚至技术的主导。至于需要多少个第三方项目,现在尚不得而知。
接下来的内容,我将继续分享通过道易程的开发中获得的认知。
请注意:我要谈的是整个项目的安全,光谈你的代码安全已经远远不够。
以一个像比特时代(aex.com)那样的交易所网站为例,它最少的软件构成为:
各类型软件的安全漏洞,都可能让你的网站被黑客侵入。
2000年起,信息安全专业进入中国高校。不过如果你去看看他们的课程安排,只有少数几个会让你有安全感。
由于基础制度的影响,国内早期在服务器底层的操作系统上选择了windows而非Linux,这是我们在开源领域严重缺乏参与、缺乏经验传承的一个重要原因。国内开发网站比较少使用开源软件,这其实会导致更大的安全问题。
像Joomla这样的开源建站系统,平均每个月有一次升级。有些升级就是专用于解决安全隐患。另外一些升级则是为了修复涉及功能的bug。按这种频率,基本上比特时代网站每天都有升级工作,而每一次升级之前,都必须对升级包进行全面的备份和安全评估——同时还要做兼容性、稳定性等方面的评估和测试,绝非易事。
以上列出的绝大多数软件都是开源软件,而开源软件有个问题:它们都是全球黑客的重点研究对象,你是一次疏漏都不能出现的,其艰难程度可想而知!
比如最不应该出问题的比特币核心钱包本身也出过几次重大问题,如2010年8月15日,有人通过bitcointalk报告他在比特币区块链的第74638块上发现了匪夷所思的交易,这笔交易竟然涉及184,467,440,737.09551616个比特币,即1844亿多个比特币——这是因为黑客利用核心钱包程序里的大整数溢出漏洞,绕过了系统的平衡检查,成功实现了一次偷袭。
幸运的是,在发现这一异常现象后不到半天的时间,比特币核心开发人员就开发完成了比特币补丁版本,并启动了硬分叉,最终有惊无险地解决了这次比特币历史上最为重大的危机。
2016年5月份刚创造众筹项目世界记录的以太坊上的区块链项目The DAO,6月17日就遭遇了重大事故:一份合约(或者说黑客)利用DAO的代码漏洞,劫持了高达360 多万以太币(事发时的价格折算约合5亿人民币)!这一事件不光震惊了整个区块链业界,全球软件界和金融界都为之震动!
好在按照智能合约的技术设定,child DAO里面的资金28 日之内无法被提走,因此以太坊官方团队迅速启动拯救计划:先是尝试以更新以太币协议即软分叉的形式将所有此期间The DAO相关的交易做无效处理,以追回被劫持的以太币。不幸的是:该软分叉出现严重bug,攻击者可以利用它瘫痪整个以太坊网络。不得已官方马上启动了硬分叉方案。北京时间7月21日下午2点30分左右,以太坊在得到社区多数人的支持后开始执行区块链硬分叉,新区块链开始把The DAO被盗资金返还到初始投资者的账户里。
问题是:硬分叉是采用区块链回滚到事发前的某天,然后重新以一个新分支分叉,这直接导致那以后的实际交易全部无效,很容易想到的一个问题是:一些交易是没法自动还原到交易前的状态的。好比有人拿支付宝在网上买了个手机,现在他和商家支付宝里面的钱都自动恢复到交易前的状态,但是手机已经到了买家的手里,如果买家不退还手机,商家就会蒙受损失!
于是一个更严重的问题爆发了:在受损者、投机者、盗取The DAO的黑客以及不同理念者的共同参与下,社区发生了严重的分裂!一种币分裂出两种币:不接受硬分叉的ETC和接受硬分叉的ETH。
实际上,在黑客和数字货币的较量中,数字货币还从来没有赢过,哪怕一次都没有!黑客简直可以说为所欲为!
51%攻击(51% Attack)、双花攻击(Double-spending)、拒绝服务攻击 ****如果一些区块链网络参与者(如矿工)掌握了全网的51%算力,或获得大多数“投票”,他们将能够控制共识,并达到以下目的: 修改自己的交易记录,这可以使他进行双重支付(双花攻击); 阻止区块确认部分或者全部交易(拒绝服务攻击) 阻止部分或全部矿工开采到任何有效的区块。 2018年4月4日,匿名加密货币Verge的网络遭受了所谓的“攻击51%”。结果在3小时内,攻击者完全控制了网络以及其内进行的交易。而且它是首次因代码中的错误而不是因为攻击方掌握计算能力或者通过贿赂等手段而发生:其代码中存在一个错误,允许黑客每秒,而不是规定的30秒,向网络添加新区块!
女巫攻击(Sybil Attack) ****大规模的p2p系统面临着有问题的和敌对的节点的威胁,为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏了系统的冗余策略。我们把这种模仿多个身份的攻击定义为女巫攻击(Sybil Attack)。对于区块链,攻击者利用单个节点来伪造多个身份存在于P2P网络中,从而达到削弱网络的冗余性,降低网络健壮性,监视或干扰网络正常活动等目的。
垃圾信息攻击(粉尘攻击) ****一则假说是这样的:“Bitcoin现在非常拥挤,超过220,000未确认交易,于是Bitcoin cash可以进行粉尘攻击,加入超级多的超小交易来让Bitcoin更加阻塞更加慢。” 在具体的技术实施上,攻击者可以把1个比特币作为输入,1亿个1聪作为输出(就是通过脚本同时给1亿个地址中的每个地址转账1聪),比特币转账手续费是按每千字节(kilobyte)数多少比特币来收的,如果手续费过低,那么就很容易受到粉尘攻击,造成其它正常交易被阻塞。另外,在网络效率较低时,超多的交易请求也是粉尘攻击。
重放攻击 ****传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。 在区块链技术中,重放攻击是指“一条链上的交易在另一条链上也往往是合法的”,重放攻击通常出现在区块链硬分叉的时候,因为硬分叉的两条链如果没有经过防范处理,它们的地址和私钥产生的算法相同,交易格式也完全相同,因此导致在其中一条链上的交易在另一条链上也是完全合法的,也就是在其中一条链上发起的交易,可以到另一条链上去重新广播,也会得到交易确认。这就是“重放攻击”。 2016年7月,以太坊The DAO事件造成社区分裂而发生硬分叉。两个以太坊网络(以太坊和Ethereum Classic)都没有提前准备好应对重放攻击,结果一些交易所深受其害。
可塑性攻击(延展性攻击) ****转帐比特币需要用户的签名,而这个签名是通过数学算法生成的。签名的这种数学算法有个特性:它会导致签名被更改后,这个签名可以依然有效,这笔交易依然会被验证通过。 换言之,交易签名具有可塑性,有多种写法。修改交易签名引起交易的哈希值改变,即TXID改变,导致原TXID无法找到,但两个TXID都有效,通过劫持等手段,造成攻击漏洞。
智能合约的回调攻击 ****只要一个智能合约在调用外部未知函数之后还修改状态值,就可能遭受到回调攻击。回调该合约的某个函数“抢先”修改本来要修改的状态值,这样就会造成数据混乱。 The DAO的失败,就是源于智能合约的回调攻击。
日食攻击(Eclipse Attack) ****在日食攻击(日蚀攻击)中,攻击者控制所有来自以目标受害者的节点及将要连接目标受害者的节点。这样,攻击者就可以防止受害者获得关于网络其他部分的完整信息。 2018年3月,波士顿大学副教授Sharon Goldberg在一篇题为《对以太坊点对点网络进行的低资源日蚀攻击》披露了在以太坊网络上进行日食攻击的方法。他们发现针对比特币网络节点的“日食攻击”需要数千个恶意节点才能拿下某个受害者的节点,而以太坊网络中,攻击者仅需两个恶意以太坊节点就能隔离并影响另外一个节点。而且“日食攻击”还能通过覆盖被遮蔽节点的区块链视图针对以太坊合约发动攻击,从而延迟该节点对可能为智能合约内部计算所使用的多种参数的视图,导致产生遭攻击者利用的不正确的智能合约内容。 好在早在1月9日他们就已经通过以太坊的的bug bounty program(漏洞奖励计划)提交了他们的发现,并协作了补丁代码的评估工作。
网络攻击 ****譬如DDoS攻击(分布式拒绝服务,Distributed Denial of Service)。
欺诈 ****通过伪造分发糖果等欺诈手段,获得用户的私钥或者授权。
基于以太坊网络中每笔交易都是公开透明的原则,还经常会出现以下几种影响正常交易者交易的“攻击”:
抢跑(front-running):指在同一个区块中,通过让某笔交易排在目标交易(被攻击交易)前而获利;在清算和套利交易中常发生。
尾随(back-running):指在同一个区块中,通过让特定交易排在目标交易后而获利;在Oracle交易或大额交易中常发生。
三明治夹击(sandwich Attacks):该方式是以上两种形式的结合,让被攻击的交易夹在两笔矿工“伪造”的特定交易中间而获利。
三明治攻击通过“前后夹击”的方式极大地拓宽了矿工凭藉其对交易顺序的熟悉度而可进行攻击的范围,哪怕是一笔普通的去中心化交易所的AMM交易,都有可能成为被攻击对象。
方式是:攻击者先开启第一笔“前”交易以便制造巨大的token价格波动,待被攻击交易执行完之后紧接着执行第二笔“后”交易,换回发动攻击的token而获取利润。
黑客侵入 ****很尴尬的现实是:在软硬件领域,黑客是真正的专家!所以代码bug,可能才是给我们造成最大损失的主因。
区块链未来会否有自己的解决方案?
以上问题都非区块链本身的问题。不是说区块链技术本身经常出现漏洞。恰恰相反,正是因为区块链技术固若金汤,它才突然火起来的!
但因为公开、透明等等都是区块链的特性,所以区块链需要一个应对黑客破坏的解决方案!否则一旦被黑客乘隙而入,后果就不堪设想。
从目前情况来看,通过智能合约标准的发展,特别是去中心化自治的身份管理协议等等,应该慢慢会找到靠谱的方法。就区块链的价值、现状以及未来的发展前景来说,在这个领域还有很多工作值得大家去探索。
剩下的便只能说,开放源代码要写严谨,要重视平台的安保工作!
项目开源更安全还是更危险? 2018年2月23日,有人使用工具对以太坊上面的近100万份智能合同分析,发现其中34,200份(大约3.4%)是易受攻击的。研究报告【Finding The Greedy, Prodigal, and Suicidal Contracts at Scale】)更惊悚地指出,目前在以太坊中,有89%的智能合约代码都或多或少存在安全漏洞或安全隐患! 那么开源更安全吗? 这是一个比较难回答的问题。因为我们缺乏这方面的详尽的统计数据。 说项目开源更安全,一大原因是开发团队明白开源后的巨大风险,在写代码和做测试时,更重视代码中是否有安全bug。这有点像飞机如果出现动力故障,那会死很多中上层人士,并且上了天就必死无疑,而汽车则完全没那么严重,所以我们相信飞机的动力故障一定比汽车的动力故障少。另一大原因是开源后,你会获得很多的用户和参与在项目里的程序员,人多眼杂,安全bug难逃他们的法眼(Given enough eyeballs, all bugs are shallow),这样你能在很短的时间内得到反馈。 尽管更多的人认为非开源软件的安全漏洞更多,但因为开源软件的代码是公开的,相比非开源软件,黑客更容易乘虚而入。而且,譬如一旦黑客找到Joomla某个最新版本的安全漏洞,他往往能黑掉一批网站!并且还名利双收!所以更大的问题是:黑客更乐意花大量的时间精力研究开源软件。一旦你的区块链项目成为一个承载很多项目的系统,围攻的黑客可就乌泱乌泱的了!
建立多重安全保护机制
激励式开源协作
开源内容管理系统Joomla官方除拥有自己的Joomla Bug小组(Joomla! Bug Squad)外,还有作为oCert(开源软件及系统紧急反应小组)之分支小组的Joomla安全小组(Joomla! Security Strike Team),以及Joomla功能扩展漏洞监控小组(The Joomla! ® Vulnerable Extensions List)。另外,应急事件追踪小组(Issue Tracker Team)和众多的用户交流小组(User Group)也可以起到一定的信息传递作用。
如果你需要最高级别的保护,你应该深入到每种软件领域之内。我在2.5.1里列出的交易所网站所需十多种软件里,每一个领域都有它自己的安全小组。你可以与它们保持密切的合作!而如果你的人力有限,那么Joomla安全小组(Joomla! Security Strike Team)就是一个典型的精简模式——oCert(Open Source Computer Security Incident Response Team)是一个开源软件及系统紧急事件反应小组。
这样通过各公司网站服务器的专业管理员、全球程序员、全球用户、自身的多种安保小组以及跨领域的专业安保小组的监测和反馈,能够确保Joomla对安全问题具有非常快速的反应,确保Joomla能够及时监测和修复其安全Bug隐患,确保Joomla网站所遭遇的安全问题能够得到最快速、最专业和最彻底的处理。
黑客分布于软件的各个层次,潜伏于白天与黑夜,并且也有自己的社区与专业化团队,如果缺乏多重安全小组,你如何赢得胜算?
见招拆招不是高手的做法,在一个技术仍然在快速发展的阶段,要懂得如何充分利用开源社区的力量。
严格的区块链开发的安全管理
安全培训
开源激励式协作
理论攻击
内部攻击测试
部署测试网络
公测
应急预案
用户教育
比特币引导我们奔向人类新文明!
T·S·艾略特:
我们必不可停止探索,而一切探索的尽头,就是重回起点,并对起点有初次认识般的了解。
比特币只有个币,而以太坊在它问世后五年,就已经一纸白皮书从技术上超越了它。但16年来,比特币就是牛币!它一直高居区块链市值榜首。 2025年1月7日,比特币市值占比高达56.4%,排名第二的 ETH 市值占比仅为12.3%! 耐人寻味不是吗?
本小节内容也可以直接看视频:
都说开门见山,我们一起来看看《比特币白皮书》的摘要。
摘要:一种完全的点对点电子货币应当允许在线支付从一方直接发送到另一方,而不需要通过一个金融机构。数字签名提供了部分解决方案,但如果仍需一个可信任的第三方来防止双重支付,那就失去了电子货币的主要优点。我们提出一种使用点对点网络解决双重支付问题的方案。该网络通过将交易哈希进一条持续增长的基于哈希的工作量证明链来给交易打上时间戳,形成一条除非重做工作量证明否则不能更改的记录。最长的链不仅是被见证事件序列的证据,而且也是它本身是由最大 CPU 算力池产生的证据。只要多数的 CPU 算力被不打算联合攻击网络的节点控制,这些节点就将生成最长的链并超过攻击者。这种网络本身只需极简的架构。信息将被尽力广播,节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。
摘要向我们描述的是比特币最重要的核心:工作量证明(Proof-of-Work,简称PoW)。 工作量证明重要到它贯穿了白皮书的首尾。中本聪在白皮书结尾的最后一句把工作量证明称为一种共识机制:
Any needed rules and incentives can be enforced with this consensus mechanism. 任何必要的规则和奖励都可以通过这个共识机制来强制实施。
这句话明确告诉我们,工作量证明是一种治理共识,也就是一种治理协议。并且,在中本聪的设计里,工作量证明由两大部分组成:必要的规则和奖励。 强制实施则说明工作量证明这一共识是一种治理协议。 (查下英文词典你就知consensus的原意为“a generally accepted opinion or decision or agreement among a group of people”)
所以你看,《比特币白皮书》主要就是在介绍工作量证明,但有点遗憾的是,它本身并没有对工作量证明做一个明确的定义或者完整的描述。
所以更遗憾的是,维基百科以及其它你现在能快速搜到的网页,它们都有意无意地抓住了中本聪的这一遗漏,并且无视中本聪在《比特币白皮书》里的最后那句话!以及白皮书第六小节对于工作量证明的奖励机制的特别介绍,也就是他们只强调工作怎么做,而不强调奖励的必要性及其意义——在一个资本主义高度发达的时期,“工作量证明”被重点介绍为你要努力打螺丝才能赚到钱,确实很合理。所以令人可惜的是,如果中本聪之前将这个共识机制命名为奖励证明(Proof-of-Reward),强调系统奖励的重要性,可能区块链的发展就大为不同了!
我在我的教材里给的描述是这样的: 工作量证明是一套以奖励为驱动力、以记账为核心任务的治理共识。
再强调一下,比特币的工作量证明成功的关键,就是它提供了奖励。看第六小节的内容我们知道比特币给矿工设计了双重回报机制:一是所有转账的交易手续费都奖励给矿工。交易手续费没有归中本聪所享有,这个设计就超越了所有的中心化交易所。不过,这种奖励归根结底还是用户贡献的。第二就是比特币通过不断发行给矿工产生的BTC奖励。比特币的发行总量为2100万,每一个都是通过系统奖励给矿工,慢慢发行出来——这就是被资本家遮蔽了十多年的比特币的工作量证明所蕴含的惊天大“秘密”!
是的,2100万总量的 BTC 全都是通过系统奖励给矿工而发行出来,这一设计是工作量证明的点睛之笔!我相信中本聪当初主要是想让BTC的发行摆脱资本主义的铜臭味,而采用一种无可挑剔的合理方式。对于这样的设计,我稍换个角度表述就能让很多人惊掉下巴:中本聪设计出的2100万总量的 BTC 不就是比特币的工作量证明的公共奖励基金吗!!
那么重点来了:中本聪在 PoW 工作量证明的设计中,抛弃了资本主义的左手画大饼(比特币俗称大饼),右手将技术资本化的典型做法。所谓技术资本化,就是把“电子现金” BTC 作为资本来进行预售,且预售是可以让更多资本家一起来获取剩余价值的一种未来预期行为。中本聪抛弃技术资本化,本质上就是抛弃了地地道道的资本主义生产方式。
因此,更为神奇的是,中本聪对于比特币公共奖励基金的设计思想,意义非凡!它最终会启发人们,按照比特币的工作量证明的这一治理共识所构建的,不是资本主义,而是直指人类社会的一个新文明:共产主义!
……先冷静下……我们继续……
对于比特币的工作量证明,至为重要的还有投票表决,对吧? 那么我的问题是:是谁在投票? 你不已经说了是比特币节点吗? 一个已经有比特币或者其它代币的人,基本上都会说没错就是比特币节点。 但这只是中本聪设计出的假象。 其实投票的,是拥有比特币节点的人!
中本聪在白皮书中说:“如果多数的 CPU 算力被诚实节点控制……”,我认为他是太希望大家能够认同他的设计了。因为真实情况应该是“如果多数的 CPU 算力被诚实的人控制……”
那么请问,如果把记账权交给了人,我们能不能确保比特币或者另一条公链以太坊或者任何一条公链的节点被足够多的诚实的人所控制? 诚实的答案显然只有一个: 无法确保!
不过这个世界好像除了我,再也没有几个人会对中本聪吹毛求疵。但其实我真心觉得中本聪当初这样设计是非常聪明的。我不认为那时候他还有更好的办法,如果他的离开是因为他知道自己将不久于人世,那就更为合理了。最后,无论如何,实践证明中本聪依靠这一收买人心的策略,成功地为人类世界打开了一扇大门!
但这仍然只是一个很好的临时解决方案。不要被51%这个数字所迷惑!如果我们一味地因循守旧,迟早只要一个人都能颠覆比特币,或者号称不超过2/3的节点作弊都扛得住的以太坊。
这是因为熊市币价下跌,就会淘汰掉一些矿工。这样慢慢淘汰,节点就会聚集到越来越少的人手上。节点运营者的中心化在所难免! 实际中心化发生的方式更多也更快!如矿池、矿机带来的中心化。 仅以比特币矿池为例, 它是由矿工组成的集体,矿池成员贡献他们的算力,共同解决复杂的数学问题以获得记账权。当一个区块被挖掘出来时,奖励根据每个参与者贡献的计算能力进行分配。矿池提高了每个矿工的效率和盈利能力, 因此比特币推出5年后,矿池就让独立的矿工彻底失去了生存空间。
所以。比特币的工作量证明或者以太坊山寨的点点币所创新的权益证明或者其他现有的任何治理共识。都是安全性远远不够的,我们应该创建新的治理共识来解决他们的根本问题——先别急,虽然显然你已经猜到这个治理共识叫做价值证明(Proof-of-Value)。
也许还是有人会想,那我们对上面说的那几个人进行治理不就可以避免灾难发生了吗?
有人肯定想知道到底比特币是怎么做到让用户都匿名的了。
成功的匿名技术,是比特币最重大的创新。这部分内容在白皮书的”10. 隐私“一节。
中本聪用这张示意图描述了其新隐私模型和传统隐私模型的不同:
参与交易时,传统市场要求你为第三方(一个或多个中心化机构)提供你的实名信息,但新隐私模型无此要求。 中本聪的设计利用了密码学原理:当你使用钱包时,钱包为你随机生成一个私钥,唯一的私钥为你产生唯一的公钥,这个公钥再产生唯一的地址。此流程无法反向破解。 在交易信息中,你的钱包地址和公钥都是公开的,但保持公钥匿名。也就是说,产生这一公钥的私钥会签署交易,即签名,但通过签名信息你无法获知私钥!
很遗憾的是,几乎整个行业的人,在过去7年里,一直认为我们还要另想办法加强保护我们的隐私信息。他们担心两件事:
因为区块链的交易信息是公开透明的,警察和绑架犯通过交易信息里的钱包地址、余额、交易金额和IP地址等信息的分析,找到交易者。
未来如果把他们的健康信息等保存到链上,和上面一样,能够被任何人分析出到底是谁得了艾滋病。
绑架犯要找到有钱人,譬如马斯克,很难吗?张三资产匿名就找不到他,那一定是张三穷吧。 如果未来是美好的,隐私本身只会越来越小。如果李四天生雌雄俩性器官,今天他是会要求保密的,可我根本就不信未来有人会因此歧视李四。
我觉得中本聪自己都没完全搞明白他的新隐私模型已经足够匿名了。因为私钥是不会示人的,也无人可破解,因此私钥的归属别说其他人,其主人都不一定知道:
私钥在不在隔壁老王手上,你永远没有直接证据。犟你就告诉我哪个钱包地址是中本聪的吧。
隔壁老王被你屈打成招,交出了私钥,但你还是不可能知道这枚私钥是他自己生成的,还是其他人给他的(这个”其他人“被屈打成招那也可能是另一个人给他的,同样的问题在延伸而已)。
你也不可能知道这枚私钥是隔壁老王独有的,还是和其他人一起共享的。不要犟,如果老王和赵六俩人歃血为盟共同管理这枚私钥,那也没用。谁能保证老王或者赵六不会偷偷地把私钥告诉给了他的老婆(请注意老婆要和老王或者赵六对齐,我没别的意思。他们有没有别的意思我不知道)。
某人有多少钱包地址,你不可能知道。犟你就告诉我中本聪有几个钱包地址吧。
私钥有没有暴露(如被盗),穷主人也可能永远不知道。
一句话总结: 比特币为人类的未来构建了新隐私模型。
把通证翻译成代币,在投资交易市场是极为贴切的。 通证(token)的原意是以一样东西代表或者象征另一样东西,后者可以是物质的也可以是精神的,可以是实实在在的也可以是虚拟的。 我们在游戏厅或者赌场代替人民币使用的,用合金或者塑料制作的圆形物,就是最典型的通证。在这种场合中,代替法定货币使用的它,常常就被称为“代币”。 那么至此,我们就厘清了一件事: 通证不等于货币。只是我们不排除一件事:某种通证可能成为未来全球通用的货币。 别痴心妄想这个中奖者会是比特币。
比特币是一种支付币种。这样说其实是废话,但有人就是搞不清楚。这个世界有不具备支付功能的币种吗? 重点是,比特币不是一种结算币种!无论你的目的是投资结算,还是其它的交易结算。事实上,如果有人捐赠比特币,捐赠者和受赠人至少有一方智商不在线!
比特币发行总量约2100万枚,考虑到遗失的不断发生,以及科学的度量衡的基本要求,可以肯定它是永远不可能达成其白皮书的目标,即成为电子现金。所谓现金,本质应该是一种通用的结算币种,或者说一种定价货币。而如果要成为现金,那么首先它就不能是一个固定的发行总量,否则市场的需求量增加的时候,它自身的价格能不变吗?!至于定价……你不会选择比特币来做定价货币的,对吧?
就这么简单的道理,过去十年来,却没几个人搞明白。因为貌似所有人都缺乏司空见惯且人人日常都在使用的科学的度量衡知识!
中本聪通过比特币,为我们实现区块链价值观带来希望。 我之所以这样说,其一是因为这些价值观本来就存在于人世间。只是它们无法通过良好的技术保障落地。其二是这些价值观的实现在比特币之上是阶段性的,或者说并不完美。这只是提醒我们要继续努力!
这一点,体现在白皮书的“2. 交易”以及“6. 奖励”里。
比特币就是一个公开透明的去中心化账单系统,它把账单完全公开透明地交给全球所有的比特币用户监管。比特币的所有转账数据是公开透明的,比特币的所有全节点钱包的代码也都是公开透明的。
2100万枚比特币是作为公共奖励基金,按照预设好的规则和算法,全部发放给诚实的记账者(矿工)。进一步表明比特币就是定位于服务于全人类的公共项目。
比特币被设计为去中心化自治系统。所谓去中心化,是指这个系统自2009年1月3日创世后,即以既定规则在因特网中自主运行,不依赖某个机构的服务器,也无须某个机构来监管。
请注意,这里的抗审查指的是比特币交易不可纂改,而并非某件事没有门槛没有限制的那种抗审查。后者叫“无需许可”。
任何比特币交易都是不可撤销的。这也就是说:一个人给你转了账,一旦你收到到账通知,他就不可能单方撤销、偷偷冻结或者收回这笔交易。
我们称比特币的这一特性为抗审查(anti-censorship)。在比特币的实际应用中,抗审查直接体现在没有人可以伪造、修改、撤销或废除交易。这一特性也使得比特币的交易数据是可永久溯源的。
无需许可最早是表示所有(任何)节点都可以请求将任何交易添加到区块链中,也就是说你想做矿工就能做。 还表现在任何人都可以自由地拥有自己的比特币钱包地址,可以用一个删一个(不是开玩笑,比特币钱包早期就是这么干的),想要多少有多少。
这一点,在白皮书的“1. 简介”和“12. 结论”里。 比特币交易被记账员(矿工)确认后作为账单分发给所有节点确认,并且通常要在系统里总共做6次这样的确认才被最终接纳,再加上所有的账单都是透明可查的,因此交易的参与方不需要相互了解或者彼此信任,不再需要中央银行这样的中介,就能安全可靠地完成交易。
比特币账目完整、完全公开且所有记录永久保存(永远不能被删除或篡改),意味着它就是一个公开透明的分布式账单系统,它把账单完全公开透明地交给全球所有的比特币用户维护。而正因为所有用户都有一份公开透明的账单,至少要事先串通51%的矿工造假,才可能让伪造的交易被整个网络信以为真。因此当匿名矿工数量足够且足够分散时,比特币是值得信赖的。
请注意,比特币的设计中是存在一些瑕疵的!它也错过了升级换代的时机。也就是说,比特币公链是不可能成功的了。公链的升级换代在以太坊上进行,才是明智之举!
不过,比特币在产生第一个区块的那天,它就已经成功了!
总之,比特币带给我们的重点,是其治理思想,而不是其并不完美的技术细节。中本聪不辞而别,是一种功成名就。
(更多细节参阅:、)
我在价值证明中引入了“”,即通过一个智能合约烧毁掉ETH,再采用一个算法给用户锻造出一个新币种:UTO!
(更新:由匿名者自由参与的五十个中本聪行动已经完成,。)
其二,如果你了解过以太坊改进提案(),那么你就知道,以太坊的技术发展凝聚了很多人的心血。
彻底隔离人的干扰。 “”,这样的标题很多人以为是去中心化,资本家则分外眼红!因为他们看到的是他们的某几个杰出代表的又一次伟大的胜利。区块链不需要资本家作为我们的账房先生!
作者的Enki:
到目前为止,极少有人真的理解透了比特币的工作量证明! 现在我们就追本溯源,重新翻开中本聪在十六年前发表的《比特币白皮书》: 英文版:
很有意思的是,有个国内的传奇人物李笑来在比特币白皮书发布十年后,也做了一版翻译,阅读起来很流畅(不愧为新东方高级英语教师),但专业性就差远了!如果上面这个版本你感到阅读艰难,可以试试这个。
我们看看是怎么描述的: 工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。 一般要求使用者进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。
当实际掌控权力的人数足够少,譬如少至个位数,而其中有一个敢于胡作非为的坏家伙的时候,记假账的灾难就可能发生。而这个临界值,早就已经成为现实。详见此内容中的最后一节“”。
中本聪在设计比特币的时候,要对抗的就是这样的想法。他想达到的目标是确保任何国家的政府甚至全地球所有国家的政府联合起来,都无法控制矿工。为此中本聪采用了较为复杂的加密技术。而他的方案也几乎就是达到这一目的的唯一解: 匿名! 是的,从记账的矿工到比特币用户,所有参与的人都匿名后,即使全球所有国家的政府都联合起来,也没有办法完全摧毁比特币。秘诀在于比特币本身是公共的(公链),那么记账工作匿名后,任何人都可以通过分叉死里逃生。如果你不懂什么是分叉,你可以阅读!
作者的Enki:
软件类型
常用可选软件
操作系统
Debian或Ubantu或Centos
Web服务器
Nginx或Apache
数据库服务器
MySQL或PostgreSQL
邮件服务器
Exim或SendMail
FTP服务器
VsFTP
服务器日志文件监控
AWStats或Analog
程序语言支持
PHP
数据库管理
PHPMYADMIN
PHP执行速度优化
Zend Optimizer
安全防护
ASSP或Devil-Linux
各种钱包
Bitcoin core等超过30个钱包软件
网站程序
多个开发小组开发的网站程序
【1】区块链开发与实例,亓兵、周朝晖等,中国金融出版社,2017年6月第1版
【2】Bootstrapping A Decentralized Autonomous Corporation: Part I,Vitalik Buterin, https://bitcoinmagazine.com/articles/bootstrapping-a-decentralized-autonomous-corporation-part-i-1379644274
【3】DAOs, DACs, DAs and More: An Incomplete Terminology Guide,Vitalik Buterin, https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/
【4】P20, Bancor Protocol Whitepaper(May, 2018)
AiXing19780110
【5】Governance Minimization,Fred Ehrsam, DAN ROBINSON, https://www.fehrsam.xyz/
人类文明的程度(教育、科技、管理水平等)的高低决定了世界的格局。资本主义以不平等方式实现了经济的全球化,但其治理依赖于国家这一古老的框架。
联合国对全球治理的失败就是有力的证据!即使是对实名世界,全球所有国家联合起来也无法形成有效的治理——因为它们根本就联合不起来!过去一个世纪联合国对全球的治理不能说一无是处,但其本质,仍然是资本主义版本的皇帝们的新衣。
正如我在《比特币的启迪》一文里所揭示的,中本聪在比特币的 PoW 工作量证明的设计中,抛弃了资本主义生产方式。而在《以太坊的重大创新和严重过失》一文中,我们清晰地看到,资本主义的复辟,源于失败的万事达币(Mastercoin),爆发于以太坊的 ICO。并且比特币构建的匿名金融体系,破解了国家治理框架。也就是说,基于国家治理这样的框架,人类根本就无法有效地治理匿名的资本主义。这就是披着 PoW 外衣的区块链早期资本家们的狡诈之处。此后区块链匿名资本主义的肆虐,不仅已经导致了普遍的道德败坏,更糟糕的是,尾随而来的全球的诈骗者和盗币者,很快就发现“匿名资本主义”加上“高科技行业”简直就是他们做梦都无法想象的绝佳外衣,而在过去八年里,区块链成为他们取之不竭用之不尽的大金库!
区块链的发展还有不到两个月就16年了,2024年11月11日,CMC 的数据显示比特币市值占比仍高达58.7%,号称创造了资本主义首次融资记录的ETH市值占比才12.4%,其余多达 10065 个代币的总市值占比才29.0%!如果剔除掉稳定币(市值第三名即为稳定币USDT),剩下的一万多个项目缘何如此卑微?
与此同时,CoinGecko 收录的代币高达 15375 个。虽然我们无从得知没有被它收录的代币还有多少,但即使有5千甚至1万5千个,我想也没有多少人会感到惊讶。
更严峻的问题是:面向未来,真正有价值的区块链项目有几个?
有意思的是,过去11年蓬勃发展起来的掠夺型匿名资本主义和伪资本主义的疯狂肆虐,事实上也就敲响了资本主义的丧钟!
这正是中本聪根植于比特币技术之中的治理思想的最精妙之处!
道易程返璞归真,通过七大协议构建出 PoV 价值证明这一治理共识。特别是继承比特币 PoW 工作量证明的治理精髓,通过在以太坊中重构出 Satoshi UTO Fund 这一惠及每一个地球人的公共治理基金,帮助人类摆脱资本主义,进入到下一个璀璨的新文明!
The Worldcoin project was initiated by a company called Tools for Humanity (TFH), founded by Sam Altman, Max Novendstern, and Alex Blania in 2019.
The mission behind Worldcoin's establishment is to create a globally inclusive identity and financial network owned by the majority of humanity. If successful, Worldcoin will significantly increase economic opportunities, provide a reliable online method to distinguish humans from AI, while protecting privacy, promoting global democracy, and showcasing a potential pathway for AI-funded Universal Basic Income (UBI) – as outlined in the Worldcoin white paper published before Oct 1st 2024.
Readers paying attention might have their first question: Why can this globally inclusive identity and financial network only be owned by the majority and not all of humanity? A likely reason is that the project assumes it cannot reach people living in remote areas.
The second question is: If AI funds the basic income for the majority, won’t the few people in remote areas be even worse off?
Of course, judging by recent articles written by third parties on Worldcoin, people are probably more concerned about another issue: To receive basic income, does the majority of people on Earth have to provide their privacy data to a centralized company through Worldcoin's iris biometric device, Orb? Is this protecting privacy or creating privacy risks?
In my view, "AI-funded basic income" is a welfare system under the gaze of capitalists, and if it prevails, the ultimate result will be the most terrifying kind of privacy risk: a digital prison.
Most Chinese people should remember that the communism envisioned by Karl Musk doesn’t require a basic income because it distributes according to need!
Amid people’s doubts, Worldcoin began issuing its token WLD on July 24, 2023. Of the total distribution, 75% was allocated to the community, 9.8% to the team, 13.5% to TFH investors, and 1.7% to TFH reserves. The circulating supply is 143 million, with 100 million loaned to market makers. Over 43 million WLD tokens were allocated before the launch, with regional distribution as follows: 32.1% to Asia, 31.6% to Africa, 18.8% to Latin America, 17.1% to Europe, and 0.1% to other regions. The total issuance of WLD is 10 billion, with inflation capped at 1.5% per year, determined by protocol governance, expected to start no earlier than 15 years from now.
Anyone who's been involved in the blockchain industry for over a year knows this is a classic case of capitalists trying to fleece investors in an ICO! In a world where nearly 5 billion people are sinking into poverty, it's downright shameful to use the welfare of humanity as a cover to loot others!
On October 21, 2021, in its "Launch Working Principles," the Worldcoin capitalists sadly remarked that “... crypto as a technology has only reached about 3% of the world’s population to date. While there have been amazing technological breakthroughs, there has yet to be a successful, concerted effort to achieve widespread, global adoption.” Yes, since the emergence of the first competitive coin called IXCoin in August 2011, capitalists have, through extreme measures including ICOs and airdrops, frantically tried to reach a broader audience, and up to now, they have only managed to engage about 3% of the global population—how fortunate!
Rejecting Technological Capitalization to Create a New Human Civilization
It looks like that there's only a sort of currency, BTC, in Bitcoin, while Ethereum, five years after Bitcoin's inception, has technically surpassed it with a white paper. Yet for 16 years, Bitcoin has been the dominant token! It has consistently ranked at the top of the blockchain market. On January 7, 2025, Bitcoin's market cap accounted for as much as 56.4%, while the second-ranked ETH's market cap was only 12.3%!
Isn't that thought-provoking?
Proof-of-Work (PoW)
So far, very few people have truly understood the concept of Bitcoin's Proof-of-Work (PoW)! Let’s trace back to the source and revisit the Bitcoin White Paper (Bitcoin: A Peer-to-Peer Electronic Cash System) published by Satoshi Nakamoto sixteen years ago.
Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone.
The abstract describes the most crucial aspect of Bitcoin: Proof-of-Work (PoW). PoW is so important that it runs throughout the entire White Paper. In the very last sentence of the paper, Satoshi Nakamoto refers to PoW as a consensus mechanism:
“Any needed rules and incentives can be enforced with this consensus mechanism.”
This statement clearly tells us that PoW is a governance consensus. In Satoshi's design, PoW is composed of two main components: needed rules and incentives. The enforcement implies that PoW is indeed a governance protocol.
As you can see, the White Paper primarily introduces PoW, but unfortunately, it does not provide a clear definition or complete description of PoW itself.
When I searched Proof of work, google listed the first link which introduced it as this:
What Is Proof of Work (PoW)?
Proof of work (PoW) is a blockchain consensus mechanism that requires significant computing effort from a network of devices. The concept was adapted from digital tokens by Hal Finney in 2004 through the idea of "reusable proof of work" using the 160-bit secure hash algorithm 1 (SHA-1).
Following its introduction in 2009, Bitcoin became the first widely adopted application of Finney's PoW idea (Finney was also the recipient of the first bitcoin transaction). Proof of work is also the mechanic used in many other cryptocurrencies.
Let’s see how long and how bad Wikipedia, which is listed in the 2nd place, describes it:
Proof of work (PoW) is a form of cryptographic proof in which one party (the prover) proves to others (the verifiers) that a certain amount of a specific computational effort has been expended. Verifiers can subsequently confirm this expenditure with minimal effort on their part. The concept was invented by Moni Naor and Cynthia Dwork in 1993 as a way to deter denial-of-service attacks and other service abuses such as spam on a network by requiring some work from a service requester, usually meaning processing time by a computer. The term "proof of work" was first coined and formalized in a 1999 paper by Markus Jakobsson and Ari Juels. The concept was adapted to digital tokens by Hal Finney in 2004 through the idea of "reusable proof of work" using the 160-bit secure hash algorithm 1 (SHA-1).
Proof of work was later popularized by Bitcoin as a foundation for consensus in a permissionless decentralized network, in which miners compete to append blocks and mine new currency, each miner experiencing a success probability proportional to the computational effort expended. PoW and PoS (proof of stake) remain the two best known Sybil deterrence mechanisms. In the context of cryptocurrencies they are the most common mechanisms.
A key feature of proof-of-work schemes is their asymmetry: the work – the computation – must be moderately hard (yet feasible) on the prover or requester side but easy to check for the verifier or service provider. This idea is also known as a CPU cost function, client puzzle, computational puzzle, or CPU pricing function. Another common feature is built-in incentive-structures that reward allocating computational capacity to the network with value in the form of cryptocurrency.
The purpose of proof-of-work algorithms is not proving that certain work was carried out or that a computational puzzle was "solved", but deterring manipulation of data by establishing large energy and hardware-control requirements to be able to do so. Proof-of-work systems have been criticized by environmentalists for their energy consumption.
So, even more regrettably, Wikipedia and other easily accessible online sources have intentionally or unintentionally seized on the omission by Satoshi, ignored the last sentence of the White Paper, and the special description of the reward mechanism for PoW in the sixth section of the White Paper. These sources tend to emphasize how the work is done but not the necessity and significance of built-in incentive-structures. In a highly developed capitalist era, the concept of "proof of work" is emphasized as the idea that you must work hard (to earn money), which is indeed quite reasonable. It's a pity that if Satoshi had named this consensus mechanism “Proof-of-Reward,” highlighting the importance of rewards in the system, I think the trajectory of blockchain development might have been vastly different!
In my textbook, I describe it this way: Proof-of-Work is a governance consensus driven by rewards and centered on the core task of bookkeeping.
Incentive
By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended.
The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free.
The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth.
To reiterate, the key to the success of Bitcoin's PoW is its reward mechanism. From the content of the sixth section, we know that Bitcoin provides miners with a dual reward mechanism: the 2nd paragraph tells us, all transaction fees from transfers are rewarded to miners. These fees are not claimed by Satoshi, which surpasses all centralized exchanges. However, this reward fundamentally comes from user contributions. The second reward, described in the first paragrah, is that Bitcoin gradually issues BTC to miners as a reward. The total issuance of BTC is capped at 21 million, and each one is slowly issued as a reward to miners by the public chain Bitcoin—this is the shocking “secret” of Bitcoin's PoW that capitalists have obscured for over a decade!
Indeed, all 21 million BTC were issued as rewards to miners through the system. This design is the crowning touch of PoW! I believe Satoshi’s primary intention was to remove the capitalist stench from BTC's issuance by adopting a perfectly rational approach. This design, viewed from a slightly different perspective, would astound many: the 21 million BTC designed by Satoshi are essentially a public reward fund of Bitcoin's PoW!
Now, here's the key point: In the design of PoW, Satoshi rejected the typical capitalist approach of promising a big pie with one hand (Bitcoin, often nicknamed the "big cake" by Chinese) while capitalizing on technology with the other. Technological capitalization refers to the practice of pre-selling “electronic cash” BTC as capital, allowing more capitalists to gain future anticipated value. By rejecting technological capitalization, Satoshi fundamentally rejected the traditional capitalist mode of production.
Therefore, Satoshi’s design of Bitcoin’s public reward fund carries profound implications! It ultimately inspires us that, guided by the governance consensus of Bitcoin’s PoW, what is being built is not a capitalist future. And it leads to a new civilization for humanity: communism!
One day in November 2013, 19-year old Vitalik Buterin published his paper, "Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform."
The title of this white paper was certainly exciting. It stated "what Ethereum intends to provide is a blockchain with a built-in fully fledged Turing-complete programming language that can be used to create 'contracts' that can be used to encode arbitrary state transition functions, allowing users to create any of the systems described above, as well as many others that we have not yet imagined, simply by writing up the logic in a few lines of code."
Turing-completeness meant that Ethereum provided a global, public, universal smart contract cloud server – yes, Vitalik positioned Ethereum as a world computer from the beginning, and he hoped that this vision would be realized in the ETH 2.0 plan. Sharding, a technology that enhances Ethereum's performance, was once the primary goal of ETH 2.0. At that time, Ethereum was using the PoW consensus mechanism, which it had copied from Bitcoin, and its efficiency was very low, only processing 15 transactions per second. We all know that account transfer are the lowest-gas transaction type. For transactions generated by a contract interaction, gas is often ten times or more higher. So, Ethereum might only handle one or even a fraction of a transaction triggered by a contract interaction per second. If, unfortunately, the price of ETH drops or rises sharply, causing congestion and gas prices to skyrocket several hundred times, and there is a maximum gas limit on Ethereum, then for most users who are initiating transactions, it's essentially the same as a crash!
The entire industry was eagerly waiting for sharding to significantly improve Ethereum's performance. As early as the "BeyondBlock Taipei 2017" conference, Vitalik had already begun to push for this technology update. Seven years have passed, what has actually happened is the abortion of ETH 2.0 and sharding has already been removed from the roadmap.
Clearly, we need a thorough reflection!
Vitalik's blockchain career began in 2011 when he co-founded Bitcoin Magazine. Unfortunately, this teenage technical genius not only failed to inherit Satoshi Nakamoto's governance ideas in the proof-of-work consensus, but also remained ignorant of the fundamental role of finance and the unequal social relations built by capital.
What we can't fault is that Bitcoin, due to Satoshi Nakamoto's own limitations, only achieved a very crude software model with its PoW. Plus, Satoshi Nakamoto's sudden disappearance, for reasons unknown to us, meant that he could not continue to be involved in the practical implementation of the blockchain, improving Bitcoin through extensive open source collaboration.
The lesson that Satoshi Nakamoto left behind doesn't seem to be much: just the Bitcoin white paper and Bitcoin 0.1.0 (the first version to be used). However, most people either couldn't understand the code or the white paper, and unable to attain true enlightenment of thought and knowledge. Even if many of them racked their brains to ponder other extremely scarce writings left behind by Satoshi Nakamoto, it was to no avail.
For example, on January 3, 2009, when Satoshi Nakamoto launched the genesis block, he quoted the front page of The Times: "Chancellor on brink of second bailout for banks." This message is widely seen as Satoshi Nakamoto's dissatisfaction with the Bank of England's excessive money printing after the 2008 financial crisis. However, it is precisely because of excessive adherence to this information and its connection to money that everyone has overlooked another interpretation. This interpretation is hidden in the proof-of-work:
Capitalism is unsustainable. Bitcoin is a project that doesn't want to take the capitalist path.
I have already interpreted Satoshi Nakamoto's thoughts in my previous article: proof-of-work is Satoshi Nakamoto's declaration of war against capitalism! This is of paramount importance to Satoshi Nakamoto! Because he undoubtedly did not intend to extend the life of capitalism, but was trying to pave the way for a new civilization of mankind. Otherwise, his painstaking efforts to explore a financial system built on decentralization, anti-censorship, permissionless, public (open and transparent), trustless trust, etc., not only foreshadowed the end of capitalist finance with the aforementioned quote, but also consistently remained anonymous so hard, making no sense!
We know that the contemporary human world is under the rule of capitalism, where capital is the most fundamental core of the human world. Karl Marx, as early as his Economic and Philosophic Manuscripts of 1844 revealed the unstoppable silent power of capital: it gives capitalists special social power, and provides them with guarantees through political power and social contracts primarily based on law, until it builds a human world based on dominance, control, and enslavement, namely, capitalist society. In other words, if we want to advance human society, the only way is to destroy the power of capital!
Satoshi Nakamoto, through the PoW embedded in Bitcoin, is the great governance idea for human society that Marx envisioned! PoW has landed in Bitcoin, and it is precisely the great practice leading to communism that Marx described and desired!
Sadly, in 2013 when Ethereum was launched, the co-founders were either capitalists or talented guys aspiring to become capitalists. Ethereum went live on June 30, 2015, and its public chain was not activated until July 30. It's a bit strange, isn't it? Because a year earlier, the Ethereum founding team launched a successful fundraising activity called ICO, and it needs time to pre-mine a huge number of Ethers.
The famous ICO was held in July, 2014, and it sold out over 60 million ETH, raised 31,000 BTC, which was $18 million at the time. Also, 9.9% of ETH was determined to be pre-mined for the founding team at no cost, and another 9.9% of ETH would be pre-mined for the Ethereum Foundation at no cost. The delay of the public blockchain was primarily due to the completion of pre-mining.
This is the typical technological capitalization that Satoshi Nakamoto despised, using "electronic cash" ETH as capital for pre-sale, enabling more capitalists to participate in the capitalist mode of production to acquire surplus value. Yes, the Ethereum founding team locked down the great technological innovation of blockchain development – "realizing a world computer" – to the capitalist mode of production, which is causing great obstacles to human social progress.
The madness of Ethereum capitalists does not end there.
On April 30, 2016, a decentralized autonomous organization called The DAO was launched on Ethereum, an investment project developed by smart contracts. After three weeks of token sales, it raised 14% of the total ETH, valued between $150 and $166 million, from over 11,000 capitalists, making it the largest crowdfunding event in history at the time.
This is a screenshot I took the day before the project ended.
The DAO's slogans were thrilling:
The DAO is revolutionary.
The DAO is autonomous.
The DAO is rewarding.
The DAO is code.
Well, only the third statement is truly the point. That's the most real and reliable ambition of these 11,000 capitalists.
I introduced this event in a book I edited (in-chief) in 2016. On June 17, hackers exploited a bug in The DAO's smart contract and hijacked 3.6 million ETH. Ethereum's official team immediately notified the entire community of the incident and quickly launched a rescue plan. Initially, Ethereum founder Vitalik proposed a soft fork of the Ethereum network, adding a line of code to blacklist the attackers and prevent them from transferring the stolen funds. Ultimately, around 2:30 pm Hong Kong time on July 21, 11,000 capitalists reached a consensus, Ethereum executed a hard fork, and the stolen funds were forcibly returned to the capitalists' accounts.
(For more details, see: What Was The DAO?、The Dao attack)
Yes, seriously, Ethereum's ICO obscured Satoshi Nakamoto's great design in PoW! This is primarily due to the lack of understanding by its founding team members, and as a foundation for application development, it has greatly hindered blockchain development. Especially for the thousands of dApps in the Ethereum ecosystem that went on a crazy ICO spree afterward, Ethereum can't escape the blame!
The consequences of The DAO event have become even worse! Including Ethereum's initiator Vitalik, 11,000 capitalists have shown the world how they ruthlessly trampled on the core values of the blockchain, such as censorship resistance, built through Satoshi Nakamoto's painstaking practice, to ensure their own interests. Yes, Ethereum capitalists' exemplary actions have hindered the entire industry for ten years, even allowing many scammers to thive through simple copying and harm many people. It has also discredited Satoshi Nakamoto's great innovation!
In short, so far, Ethereum only has the outward shells of two governance consensuses, PoW and PoS (originally introduced by Peercoin in 2013), but violates their true governance ideas. Ten precious years have been wasted like this. The abortion of the ETH 2.0 plan is only natural for Ethereum.
So, let's imagine, what would be the first suggestion Satoshi Nakamoto would give us if we'd like to save Ethereum?
Rebuild the public governance fund!
Absolutely.
The project I launched in 2019, DAism, has built a new governance consensus called Proof-of-Value (PoV) . One of the responsibilities of this consensus is to reconstruct the public governance fund for Ethereum and govern Smart Commons (public goods) and tokenomics.
Proof-of-Value introduces "ETH Forging", burning ETH through a smart contract, and then using an algorithm to forge a new token UTO for users.
When forging, 50 "Satoshi Nakamoto" will participate and rebuild a public fund with the rewards theoretically belonging to them. The name is "Satoshi UTO Fund."
The Satoshi UTO Fund is the public governance fund for the entire Ethereum ecosystem.
UTO is an ERC-20 type token. In other words, the Satoshi UTO Fund ultimately achieves its decentralization and autonomy through smart contracts, and AI.
(Update: The 50Satoshis event involving voluntary participation by anonymous individuals have been completed. Here you can have a look at the Satoshi UTO Fund.)
You may have this question: why don't we redesign a new public chain, but continue to modify Ethereum?
The main reason is that after being positioned as a world computer by the genius boy Vitalik, Ethereum has made huge contributions: it has expanded public chain's governance scope and increased the basic governance of some key points for applications. This is absorbing the successful governance experience of the ledger, leaving the deployment and self-execution of smart contracts to the consensus mechanism for decentralized governance. This has opened up the development journey of dApps.
It must be emphasized that, as internet users, we all know that smart contracts, as an innovation, are destined to be remembered in history. Because only with smart contracts can we build dApps that truly comply with all the values (requirements) inspired by Bitcoin: transparent, decentralized, censorship-resistant, permissionless, trustless trust—so far, no one has figured out these features, which actually means that Ethereum has taken the public nature of the dApps we can develop to an incredibly reliable level like never before!
Secondly, if you've learned about EIPS, Ethereum Improvement Proposals, then you know that Ethereum's technological development has been a collective effort.
We are a group of people dedicated to building a new human civilization, and we should respect everyone's contributions. We also believe that everyone wants us to continue to improve Ethereum through friendly collaboration, rather than stepping on it to climb up!
Now, let's ask an interesting question: in terms of programming languages, can Java, Go, Python, C++, develop smart contracts?
No. You must use smart contract programming languages, such as Solidity.
Then, what language is used to develop Bitcoin's core client (Bitcoin core) and Ethereum's most important client?
C++ and Go.
Nothing Weired?
We must write code in smart contract development languages like Solidity, deploy it to Ethereum to run, in order to meet our requirements for blockchain contract security and reliability!
Then, the contract between the Ethereum's consensus and miners is completely executed outside of the smart contract, isn't this a violation of knowing and doing?
For the PoW and PoS governance consensuses that were launched in 2009 and 2012, respectively, the fundamental reason why their governance capabilities are insufficient is the improper use of technology: they both belong to governance consensuses built with traditionary web technology. While PoV is a governance consensus built with smart contracts. We have just mentioned that only a contract built with smart contracts can truly achieve blockchain's security and reliability requirements. It is imperative to use PoV to solve the governance of public chain Ethereum.
Ethereum has a two-layer structure: the execution layer and the consensus layer. We need to completely transform the consensus layer:
Reconstruct the public governance fund, the "Satoshi UTO Fund." A consensus without a reasonable reward mechanism is a capital harvester worse than a castle in the air!
Use smart contracts to govern itself. DAism's solution is PoV. Web2 has shielded all kinds of privileges, only smart contracts can guarantee public, transparency, fairness, and reliability.
Completely isolate human interference. "Ethereum's 13,900 nodes are running 1 million validators, with 26% of the supply staked", many people think this is decentralization, while capitalists are particularly envious! Because they see this as another great victory for a few of their outstanding representatives. Blockchain doesn't need capitalists as our accountants!
Discard the size limitations of the blockchain. If there are blockchain size limitations, there will inevitably be bidding. This is one of the modes of production of capitalism! Also, I believe these improvements will instantly and permanently eliminate the MEV (Maximal Extractable Value) problem, and leave a bunch of vampire-like Layer 2 with nowhere to go!
Proof-of-Value refers to a systematically development which actually will be composed of a number of dApps and AIs even. DAism has completed its public governance fund and some specific governance methods. Every task above requires participation and even technological leadership from third parties. How many third-party projects are needed is still unknown.
In the following content, I will continue to share the insights I have gained from the development of DAism.