EOS - The platform for Dapp
从区块链开始
我们先回顾比特币。
我们简单概括比特币,基于去中心化信用的且具有稀缺性的商品。去中心化信用,本质上是由于所谓的账务公开决定的,只要你想,你可以追溯每笔钱从诞生到到你手里的所有过程。在由初始设定保证了稀缺性的前提下,由密码学实现了绝对的个人权利。比特币极端的保护个人权益,没有人可以从你的账户不经过许可里划拨任何一聪比特币,比特币不可通胀,没有人能用各种手段从你手里获得一丝一毫的价值,比特币永远不会丢失,它永远在万千网络的某一个比特里,等待着有动用权力的人拿住他的钥匙过来。从一个浪漫的角度来想,很多年之后,新时代基督山伯爵一定是会拿者私钥复仇的。
比特币代表着存放资产没有摩擦成本,只要网络还在,资产就永远还在。比特币的另外的身份是这个价值网络的分红权,这个网络有多少价值,比特币自然而然的会拥有这么多的权益,比特币永远不能伪造,能伪造的从来就不是比特币。
比特币是近乎完美的数字货币。我们甚至极端情况下这样去做理解,比特币是可以适用于所有的经济体系的,所有的 altercoin , 都是针对某个具体场景的数字代币。
比特币同时也是一个区块链应用。我们这里对区块链技术加上一个冒昧的定义,区块链技术是人类在技术上排除时间和使用时间之外,重新发明了不可变性。区块链和数据库的区别在这,区块链上数据的不可变性是默认的,可变性是可选择的。这点和数据库是相反的。区块链可以给特定数据维度加上可追述的时间维度。
我们接着来看智能合约,如果把区块链想象成 iPhone, 智能合约就是 iPhone 的自带应用,一定程度上扩展宿主的的能力。交易其实本身就是使用最广的智能合约。而分发代币的智能合约只做一件事,给特定区块链资产赋予自由且自动的兑换链上权益证明的能力。至于权益证明的兑换过程,没必要也暂时无法上链,链只需记录权益的能否兑现,市场会给予权益的可靠比例合适的估值。
这里有一个问题是,为什么是资产兑换权益证明,而不是资产直接兑换权益。我的理解是,各个权益证明有各个权益证明所关注所附带的信息,厨子不用关心收银台货款的真伪,这个世界运转的目的是更为简单高效,只当厨子对个人而言更为简单,同理只做权益证明,对智能合约而言更为简单。权益的兑换只需要结果上链,权益的兑换过程比例影响网络的价值,从而影响权益本质的估值,这个中间过程是不可能完全控制的,但是可以确定的是,市场按照可追述的结果,得到到一个基本公平的估值方式。
什么是智能合约
从一个抽象的角度来说。btc 所提供的交易功能就是一个状态机。
F(tx,state) -> state 即交易加上当前区块状态,得到一个新的状态。 之后的一致性机制,不管是pow或者pos,会将新生成的状态固化到区块上。一旦固化后,新的状态转移函数可以运转。对于 btc 来说,交易功能,从另外一个角度来说也是一个脚本。比特币的脚本也是需要公钥,和脚本的地址。
Eth 其实解决了两个问题,一个是 btc script 的完善,另外一个是,脚本可以更改本地其他储存状态的问题。F(tx,state,localstate) -> state, local state,localstate 和 gas 相关,想让合约运行起来,每次都要销毁一定的gas,这从经济上来说,是有成本的,所以即使 eth 引入了循环,但是任意合约也不会无限制的运行下去。我们梳理下 eth 智能合约是怎样的。
Eth把地址分为两类,普通地址和合约地址。eth转币到地址,即会触发对当前地址的检查,如果当前地址是有合约的。
创建合约意味着在某一个地址上放上合约,因为合约运行需要消耗整个网络的资源。eth默认是gas,gas的意思是,给合约运行者的奖励。
Eth的运行模式是这样的,广播交易全网分发,相当于,所有的eth全节点就都会执行这个合约,具体谁执行完成了,依赖一致性协议反向判断。eth 合约和btc比较大的不同点在于,合约地址上也是可以储存代币资源的。另外一点,eth 本身来说,可以储存结构化的其他的相关信息。
任何一个基于ico,都是eth币上的附带信息。当然现在的token会要求遵守 erc 20,erc 20实际上就是编程的接口,你实现了这些功能,那我们就可以叫你token了,就比如,你通过了围棋的入门考试,那我们就可以叫你棋手了。erc 20 方便token通用实现,从而依托于eth网络,实现其他非 token 本身的价值交换。
Eth的问题在于,资源的隔离,之前会有ddos全网网络的事情发生,原因也在于此,更抽象的来说,eth 就是一条跑着许多代币和合约的链,任意合约的执行时,都是在竞争同一计算资源。
另外一些,eth 对于 token 来说是异常成熟,但是eth是很难支撑起DAPP的,原因如下:
一,基础设施不完善,所有的 DAPP 的 ico 的承诺都是,基于eth分发代币,之后兑换成自己的链,原因就在于次,基于智能合约去创建DAPP的业务,实际上成本还是相当的高,任何实际的业务,难度都是创建token的10倍以上
二, 资源的竞争,不考虑现有执行效率的问题,但是在eth解决资源隔离之前,DAPP 是无法运行的。打个比方就是,淘宝流量大了之后,腾讯的所有服务也都不可用了,这对DAPP的服务商来说是不可控的也不可接受的。
三, ETH 是基于状态的系统,基于状态的系统,实际上就是要有非常多的锁去做竞态限制,简单来说,eth 目前的设计是很难充分利用机器资源的,可以改,但是不经过硬分叉很难。
EOS for DAPP
为了更好的理解 DAPP ,我们重新回顾一下 DAPP 是什么意思。
通俗的话说,Dapp 就是前端加合约,前端和用户交互,合约和区块链交互。
这个抽象有一个隐含的前提,这个 blockchain,是足够支撑起数据储存的部分。毕竟任何一个DAPP除了区块信息之外,都会有大量的领域信息。为了保证合约的可靠性,于合约相关的内容实际上都是要上链的。但是如果所有信息都上链,那必然会导致区块膨胀。另外一点是处理能力的分配,实际上,每个智能合约的处理能力都是依托于区块链的,在这个角度上,每个DAPP都会是链的性能杀手。
Eos 的设计不是为了智能合约平台设计的,eos 的目的是设计成 DAPP 的平台。对于资源分配,eos实际上是依靠代币对dapp进行资源隔离,触发智能合约的计算资源由DAPP持有的代币决定,本质上就是隔离开来所有的DAPP,防止资源竞争和恶意的ddos。本质上把一个技术问题,漂亮的给转化成了一个经济问题。
EOS 预设DAPP的一些基础框架,eos 的合约本身是 要求用 C++ 编写,C++ 继承合约的接口,之后编程成 WASM 部署地址上解释运行。相比于 solidity的现在的设计,这是一个模式问题,简单来说目前这种预设可能的功能的问题,在灵活性上可能不如 solidity,但是在之后的合约大小上,和执行效率上来说,必然会占些便宜。EOS 可以一直升级整个的预设DAPP框架。
DPOS 的争论较多,我们目前只关注两点,第一点是 DPOS 是目前最快的一致性算法,副作用是不是那么的去中心化,第二点是 DPOS 基本上杜绝了硬分叉的可能,所以,任何的DAPP的升级与修复,是可以建立在不会硬分叉这个前提上的。这个硬分叉不是说不会,而是最终必然是所有的运行的都是新的共识。
EOS 的链是基于消息的,简单来说就是把 BTC 的 utxo 搬到了块的生产领域。这里会解决一个问题,就是当一笔交易有很多条记录的时候,没有必要把整个交易打进block里。同时这样的设计也会减少基于状态的同步性锁的问题,让机器性能可以最大化。这里有一个思考题,基于状态的区块链和基于消息的区块链,如何设计手续费的问题。
EOS 没有从根本上解决区块膨胀问题,但是允许轻客户端,可以只下载DAPP相关的部分的区块数据。这样的设计缓解了区块膨胀的问题。
最后再说点争议性的问题,BM 说,EOS 可以在之上构建一个 eth,理想态上来说实际上是可能的,ETH 也是一个智能合约,从工程角度考虑,不太可能,我们可以当做嘴炮来理解。
按我们的论述,btc 带来了智能合约的雏形,eth真正带来了真实世界里的智能合约,eos将带来 Dapp 的平台。作者个人的利益取向是,观念的冲突不影响三者可能都会长期存在,因为专注领域的在笔者看来相对隔离。
因为这是一篇概览性的文章,细节繁多不可能一一尽述,细节问题欢迎指出下次套路。另外,作者能力有限,欢迎指正。
参考文献
https://steemit.com/eos/@iang/the-message-is-the-medium
https://github.com/ethereum/wiki/wiki/White-Paper
https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md
https://iang.org/papers/EOS_An_Introduction.pdf
https://theethereum.wiki/w/index.php/ERC20_Token_Standard
https://en.bitcoin.it/wiki/Script