Py学习  »  区块链

开垦区块链,不能没有的模型

汤强 • 6 年前 • 244 次点击  

3月5日,蓝港互动创始人王峰问比特币首富:传言你有6位数比特币,真的么?李笑来答:曾经有过,现在没那么多。


听到首富光环叮当落地的声音,多少会让你停顿半秒,虽说去年我们就知道《李笑来的比特币账户并没有余额》,但那只是为理解UTXO模型、把银行的余额模型抽出来写的对比文章。


其实,区块链世界也有余额模型,又称账户模型或账户余额模型。 


一、什么是账户余额模型?


如果UTXO是掰不开的硬币,那账户余额模型就是撕不掉的存折,存折上印着你在区块链上拥有的一切。


我们用以太坊举例,下文特别感谢Draveness的智力支持,很难找出比他《UTXO与账户模型》更简明的文章,不愧是写了三年博客的编程大神。


以太坊外观复杂,但掀开盖子往里一看,其实只有三块钢板:账户、交易和区块。 

图1 以太坊账户模型


账户就是存折,记着你的余额;

交易就是汇款单,你负责填单签名输密码;

区块就是银行,柜员把交易录入系统,相当于矿工把交易刻进区块,都能改变账户信息。


以上就是账户余额模式的基本逻辑,这与UTXO模型有很大不同。


UTXO模型中,每笔输入都是前一笔交易的未花费输出,环环相扣,不会出现重复交易。


而账户模型则与之不同,每次账户变动就像涂一层修正液,只能看到最新结果,一旦重复记账就会次次都错,那如何防范这种隐患?


以太坊的做法是:在账户里增加一个标签,交易后标签数字+1,每次交易前检查标签有无重号,一旦重号则取消交易。


这个标签的名字叫nonce,看起来和比特币工作量证明中找的随机数(nonce)一样,但以太坊中nonce意指“序号”,有了它你就能安心付款。


可是,账户中最重要的不是序号,而是余额。交易的本质是改变双方余额矿工一旦挖到交易信息,就会记入区块,从而改写账户信息。

图2 以太坊账户基本结构


序号和余额构成账户最基本的结构,以太坊账户的特别之处在于:它有两种类型。


二、以太坊账户类型和内部结构


一种是外部账户,它和比特币地址的功能相同,靠私钥撬动余额,如图2。


另一种是合约账户。每次收到消息时,账户中的合约代码会智能地跑起来,这就是以太坊“智能合约”的来历。


合约账户的基本元素就如下图: 

图3 以太坊合约账户基本元素


序号能防重复交易,余额表示当前权益,合约代码能够响应特定请求,比如你可以教你男友设置:今年生日发你1个以太币,以后每年增加1倍。


另外,每个账户还配备存储空间,内部存有合约代码和其他数据的哈希值,技术上能防篡改。这就构成合约账户的基本框架。


以太坊最著名的合约账户当属ERC20,ERC指以太坊认证请求(Ethereum Request for Comment),20是账户编号。ERC20是发行Token的合约,转Token给别人只需调用该合约。


所以你看,发行Token很简单,只需在以太坊上开个账户,这和你去银行柜面开张卡没什么区别,YouTube上有很多手把手教程,练顺手之后,发一种币就像发一圈牌一样简单。


在以太坊上开好户,然后用这个账户发出的Token换别人手上的BTC或ETH,这是大多数ICO在技术上的实现方式。


ERC20最大的功能是让所有人都能当亿万富翁,很简单:发行1万亿个以你名字命名的币,让你朋友花1块钱买一个玩玩,这样你的币就有了1元的市场价格,于是一转身你就身价万亿。


在技术上,这都得归功于以太坊的账户模式。


此模式中,序号、余额、合约代码和存储信息等,都称为状态。状态相当于忽明忽暗、五颜六色的灯,整个以太坊就是盖在我们头顶上的不停闪烁的霓彩。这也是为什么人们把以太坊称为“状态机”的原因。



账户模型能高效切换状态,这为区块链应用撒出更多可能,比如每个账户都既能用智能合约向其他账户发消息,又能设定收到消息后如何应对,于是只要把规则写进代码,不需要运营人员,仅凭代码就能干活。


效率方面,账户模型完胜UTXO,比如当我们计算某个地址的余额时,账户模式会秒出结果,而UTXO模型会遍历网络中全部的区块,再加总得出余额,但UTXO并不在乎慢,因为它坚守的是写入的数据不可更改。


安全方面,UTXO模型被公认领先,所以很多人认为UTXO和私钥的搭配更能保护财富,因为私钥代表对财富的拥有权,而UTXO又能确保账户系统安全,这种观点看起来很正确,但却隐藏着一个前提:使用者已经过培训,而且使用和保管私钥过程中能处处小心。


保管难度还在其次,最重要的是,私钥一旦丢失或泄露,用户将失去所有财富,此时UTXO的稳固就会没有意义。


这是加密数字货币普及过程中遇到的首要难题,包括比特币在内的很多数字货币至今束手无策,但这里有一种新的解题思路,它来自6月即将上线、同样使用账户模型的EOS。


三、让财富真正属于普通用户


EOS设计者认为:私钥对普通用户并不代表真正的所有权,因为稍不留心就会丢失财富,这不符合价值保有的本意。


设计系统时,应该分清对财富的控制能力和拥有权利之间的区别。真正的财富应该像本领,即使暂时被别人拿到,但依然属于你。


所以,EOS没有把人的身份绑定在光秃秃的私钥上,而是标注于一个账户,这个账户对应一个密码。


这种设计有什么好处呢?


最大的好处是普通用户的财富得到极大的保障,一旦密码泄露造成财产损失,普通用户可以多一项选择:在预设时间内取消交易


比如,你可以预设转账1万个币以上需要1小时后才确认,所以一旦有人通过密码盗取你的财富,你会收到通知,1小时内,你能通过预设的社交关系人取消交易。


社交关系人可以是默认的身份开设机构,也可以是你指定的亲戚朋友。于是,普通用户突然具备一种能力:在预设时间内,签署消息指明一笔交易无效,而这种能力的存在本身也能压制恶意。


这就是EOS给我们守护财富的新思路。


当然,回到财富保有的初衷,EOS的账户模式保障了普通用户拥有财富的权利,但也意味着放弃了专业用户对财富绝对控制的能力,这部分用户必然会选择留在UTXO+私钥的世界。


之所以两种模型会分家,根源还是来自我们熟悉的不可能三角:分布式、安全和高效三者不可兼得,最多取二。 

图4 不可能三角和两种模型的站位


既然都选分布式,就只能在安全和高效间权衡。比特币要做的是电子现金系统,安全稳健至上,于是抱着UTXO站在图4左边;而以太坊和EOS都希望做成智能合约平台,追求高效灵活,所以靠右选择账户模型。


账户模型的确高效,但必然付出安稳的代价,可这又有什么办法呢,为了开垦区块链的新边疆,总得先付出些什么。 


结语


UTXO是区块链的原生模型,比特币含着它出生,但区块链要长大,就不能没有账户余额模型,因为它可以更快翻出更多姿势。


总之,每个区块链系统最终都面临两种模式间的权衡,但目的只有一个:用更低的代价博取更高的收益。


接受王峰采访前,李笑来说过很多遍:“很少有东西能够跑赢比特币,最好的姿势是持币睡觉。”但他最后却卖了币。


当向王峰解释为什么会卖币时,他说:


开交易所时,银行账户总被冻结,因为要保证挤兑时储备充足,不得不在熊市卖出一些,等几个月之后冻结,再也买不回那么多。


是他当初没有选择抱币安逸不得已的结果,即使明知如此,却依然选择下地干活,因为他的原则是不断成长,成长才能给他欢乐。


那些卖掉的比特币是他的寻欢成本,而正是这些成本让他在成长的跑道上一路狂奔。


一个人之所以值钱,不是他账户余额有钱,而是因为他的原则值钱。


如果这类创业者最终能垦出一片天地,一定不是因为姿势对或者运气好,真正的原因是:在所有人都看不见光的夜里,依然肯付代价。





第二季的进阶概念已渐渐铺开,这是我们在区块链世界的生存装备。如果你是新加入的小伙伴,感觉进阶装备有点重,可以出门左转,抚摸第一季的经典概念,然后和我们一起成长,一起上山。


POS

DPOS

PBFT

zk-SNARK

真伪随机数

法币的僵局

CAP原理

TCP/IP协议

DAG

哈希图


留言就是你的脚步,祝你每周都有进步 。


主要参考资料:

1、Draveness’s Blog面向信仰编程:UTXO 与账户余额模型

2、以太坊白皮书

3、EOS白皮书v2 2018-3-16

4、Dan Larimer:https://youtu.be/sYAktmG1NuA


文献翻译、内容策划:李冰


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/4uQky5qa07
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/10829
 
244 次点击