区块链是什么
区块链到底是什么?他的内涵和外延在哪里?底层存储逻辑上把区块按照顺序相连形成区块链,这一点是毋庸置疑的。在此基础上,那些节点能够参与到区块链中形成了公有链、私有链和联盟链;那个节点具有生成区块权利,形成了基于POW,POS,DPOS,PBFT等所谓的共识算法; 那些交易是能够写入区块中,比特币基于非图灵完备的脚本,以太坊基于图灵完备的脚本,任何数据都可以写入也没有问题。
从存储角度看区块链分为记录在区块内的操作序列以及记录在区块外的操作结果。对于比特币,区块内记录的每一笔转账记录(挖矿收入可以看作无输入方的转账记录),区块外记录是UTXO;对于以太坊,区块记录是对于智能合约的调用(特殊的是挖矿记录和智能合约创建),区块外记录的是世界状态。
共识是一切
合约模型可以分为Agreement:协定; Formalization:形式化 ;Execution/Enforcement:执行。(来自网络,非本人独创)
协定确定了游戏规则,我称之为共识(不同于区块链常说的POW,POS共识)。形式化是使用某种方式或手段记录下协定成果。执行则是根据形式化的记录运行达成的共识。
以社会运行为例,协定由讨论、争吵、打架、战争等方式达成;形式化包括法律法规、制度等;执行包括惩罚、罚款等。
在区块链环境中,形式化是区块链系统代码或基于区块链开发的智能合约(区块链代码是一个共识,规定区块链使用者必须使用gas生成和运行合约等;开发的每个智能合约又是新的共识,如某代币智能合约制定了此代币体系的共识:发行总量是多少,如何分配).执行就是对智能合约的运行,区块链系统提供了运行以及对运行结果的确认和记录。在上述合约模型中,区块链唯一不能涵盖的是协定阶段。
因此,我认为区块链的本质是 在共识的前提下,区块链通过代码把共识形式化和客观地执行。
共识的含义
共识是信任和资产的所有权的因
在比特币或以太坊的公有链环境下,共识使得节点互相信任,因为运行其他共识的节点会被边缘化。
同样,共识决定了资产的所有权。因为无法提供需要的签名。,属于某账户的比特币其他账户无法转走.
然而这一切在无共识的环境下没有任何意义。比特币和以太坊就有节点共识的分歧导致硬分叉。而共识的变更同样能导致资产所有权的混乱。我们的财产属于我们是基于现有的法律法规,而在原始社会,一切都属于部落,你的衣服、武器都不属于你。以比特币为例,如果规则修改为生成创始区块的地址有权利消费其他账户的比特币,则你的比特币就不一定属于你了。
共识是设计区块链体系的关键
既然共识是一切的关键,那么设计区块链体系就是设计共识的达成和维护机制。不管是公有链、联盟链还是私有链,所有参与方形成一个社区。设计的目的就是得到共识能够得到社区的认可。这是一个社会学问题,与世界秩序的制定,国家法规执行,公司员工手册制定类似;又是一个博弈学问题,虽然重口难调,但是还是要达成共识。
具体又分为共识的达成和维护。达成在区块链体系的创建期间,往往由某人/组织带领下达成。如比特币由中本聪以及他朋友制定,共识包括10分钟出块、每个块挖矿奖励50个比特币、奖励(大概)每4年减半、使用POW等等。达成往往不是最难的,维护才是最大的挑战。比特币的各个BP就是对共识的维护。
DAO以及CSDN蒋涛说的DCO都是设想通过新的组织架构模型来维持共识。
特点和解读
在百度上搜索区块链特点,无外乎一下几个,其他都是各种copy&paste.我认为他都不是区块链的本质,而是共识的一些具体体现。
去中心化
其核心思想在于大量的节点参与到区块里系统的运行(记账),这样可以防止某些个体对系统的控制后轻易修改共识。从现状来看,矿池的出现已经使得其价值大大弱化。比特币前3大矿池已经控制超过50%算力,而一个不大的矿池也可能导致硬分叉。
EOS的DPOS在这方面比较有意思,实质是与其让矿池通过堆硬件来中心化,还不如在设计系统的时候让他们去争21个节点。
因此,海量权益均等节点的去中心化是不可能的,人性使然。多节点是必然,最终可能的情形是:核心节点行使记账功能,参与节点行使监督功能(有全量数据但是不记账)以及使用节点(SPV).
信息不可篡改/可靠数据库
区块链数据存储在硬盘上,而不是存储在ROM里,肯定是可以纂改的。说不可纂改主要体现在,第一修改以后能发现,因为会导致对应区块的哈希值变化。另外一个就是,修改后的区块也无法同步到其他节点,因为会导致校验错误而被其他节点抛弃。另外,因为有多节点,导致你无法修改所有节点(如果黑客能够修改所有节点的数据,则是可能纂改区块数据,因为虽然导致和区块哈希值变化。但是一般不会对历史区块哈希值做校验)。
唯一干净修改的方法把要修改的区块以及以后的区块都抛弃后重新记账。这就是通过POW等机制防止,代价太大。
虽然上面的感觉象废话,但是如果设计一个分布式存储的区块链需要考虑。因为,很多小白感觉区块链有黑科技科技可以无条件的做到不可纂改。
去信任
信任源于对游戏规则/共识的认同。去银行取钱,会领取一个叫号代码,然后只需要安静等待,你可以信任银行到了你的号码就可以去取钱。但是如果游戏规则是可变的,譬如其他人可以插队,这是你对银行的信任就不存在。所以,信任是共识的结果。
比特币体系下,节点互相信任是不按照共识执行的节点会被边缘化;对于每个账号来说,按照共识规则,除非数学上有重大突破破解了椭圆曲线加密法,你的比特币其他人是无法拿走的。
自治性
我认为使用”自洽”更加准确,也是我认为区块链非常重要的一个特点。传统关系型数据库有不同范式,如每个表格列数相同,每列具有相同的类型,主键不能重复等等。区块链系统在此基础上更进一步,他可以给出更加复杂的范式。从这个角度看,他不仅仅是一个存储,而是一个能自动维持共识的系统。比特币系统中无法记录一笔异常(不符合共识规则)交易,如双花或输入不存在。
匿名性
匿名性是指信息世界个体和物理世界个体的隔离。
在银行系统里开一个账号,银行需要知道你是谁以及你的背景资料(KYC)[譬如你叫”张三”],然后给你开了一个账号123456.在银行系统里,张三和123456是关联的。比特币等系统里,张三申请一个账号567890,张三和567890之间没有任何地方记录其关联。
实现匿名性与否取决于共识,并不是区块链或代币的本质特征。如基于以太坊开发一个智能合约发行代币要求必须是KYC完全没有问题。实现可以是:第一,合约创建者做KYC后维护一个白名单;第二,所有转账目标地址必须是在白名单内。
胡说八道
以下是喝醉酒写的,写的对不要夸,写的不好不要骂,写错了不要喷;另外很多分析是基于现有实现,区块链架构肯定会有突破和改变。
架构架构
区块链说的最多的是”分布式账本”。从表象看,一个区块链系统由很多计算设备通过网络形成一个系统,很分布式。但从存储和计算两个角度看,又有一些不同的解读。
从存储的角度看,我们说一个分布式的数据库或文件系统,往往是指数据分片存储在多台设备里,同一数据可能有多个拷贝,但每台设备不存储全量数据。而比特币系统区块数据是所有节点全量存储(轻量节点或SPV节点是另外一个概念),很不分布式。
从计算角度看,我们说一个分布式的系统,往往是指通过一个负载均衡把请求分布到多台服务器上,每个节点执行全部请求中的部分。而比特币系统中所有节点必须运行所有的记账过程,挖矿成功的节点执行后其他节点验证,好像也不分布式。
所以区块链系统是一个效率很差、存储昂贵的系统,标定值取决于最弱的节点(如果他没有被抛弃的化)。另外需要注意,比特币的记账以及以太坊的智能合约并没有占用太多计算资源,大量的算力用的是用于POW挖矿,所以不能认为他们算力很大就是一个”强大”的系统。
从这个角度看,区块链不会取代现在互联的而是互联网的一块拼图,用于做一些附加值高的场景。
比特币的UTXO和以太坊的世界状态
这两者从概念上非常类似,都是区块链交易运行的结果。比特币交易是一笔笔的转账,未消费的转账形成UTXO;以太坊运行智能合约,智能合约的存储形成世界状态。但是这些数据都不是区块链的一部分,也不能在节点间同步,从这个角度看形成了某种割裂。某种意义上,结果比历史过程更加重要。譬如比特币中我要看某账号有多少比特币,直接看UTXO即可,要查看某笔交易是否可用也只需要关注UTXO.
因此把UTXO/世界状态作为区块链的一部分是有价值的。但是把全量UTXO/世界状态附在每个区块上是不现实的,需要找到一种类似增量的模式。
一种折中方法是在一定区块高度做一个快照,通过同步快照+运行剩余区块中交易的方式实现世界状态同步。如以太坊当前区块高度为5501994,如果每1000个做一个快照(其实保留2个快照就够了)。则同步世界状态逻辑为同步5501000时生成的快照,然后同步并运行后续区块即可。仔细想想,5501000以前的区块对我没有太多意义(除了某些区块里保存的智能合约)。我感觉我有点绕回去了,传统系统是存储结果而弱化过程;区块链刚好相反。
智能合约
智能合约名字很高大上,实际上功能很弱,完全无法和主流编程语言的能力相提并论。以太坊智能合约的一个方法,如转账操作,其输入只有两个:调用时的参数(目标地址,转账金额)以及世界状态(账户余额等,与区块链里记录的历史交易都没有关系)。
这样的结果就是智能合约无法和外部世界交互,除非在调用时通过参数传递给合约。智能合约具备和外部世界交互能力,不是一个合约语言升级的问题,而是整个体系架构的革新。把外部世界作为一种输入,如调用web service获取某地温度,某股票实时价格,从某设备读取参数,现在需要记账节点调用后其他验证节点也调用,而不同节点调用的返回值可能是不同的从而导致验证失败。同样如果把外部世界作为一种输出,如支付成功后启动洗衣设备提供洗衣服务,同样不能是所有节点都调用。另外,外部世界的不可控会影响区块链的成本控制、效率和可靠性。但从发展的眼光看,区块链系统如果不能和外部世界交互,他永远只能是封闭的系统,最大价值就是发币或纯粹的数字资产交易。
一种可能的思路是调整验证的方法。现在是验证节点运行相同代码验证,如果记账节点处于强信任的情形或可以证明记账节点确实是通过对某方法的正确调用,则验证节点可以信任其运算结果。
合约漏洞是另外一个阿喀琉斯之踵,特别是对以太坊。DAO以及最近的ERC20合约漏洞影响都很大,结果可能导致回滚和硬分叉,从另一个角度说明了智能合约的脆弱性。通过合约升级来修补漏洞,从技术上是没有问题,以太坊升级基础代码肯定能搞定。问题在于谁有资格去进行智能合约升级,如果合约创建者能够随意升级合约,意味着他可以随意修改游戏规则,与区块链形式化/固化共识的初衷是矛盾的。
EOS本质就是一个昂贵的BaaS
EOS很热,找了很多资料,无非是说两点:DPOS共识机制,每秒百万级的交易。这只能说明有人在铺天盖地的炒作,另外很多小白在不懂装懂,人云亦云。
首先说DPOS,议会制,不象POW需要消耗大量电力,看上去很美好。实际上呢,全球21个超级节点。根据雷锋网的报道,中国3个节点为EOS Gravity(引力区)、EOS UNION以及EOS Shenzhen,都是以EOS开头!用脚趾头都能想到,最后节点都是EOS或者为EOS站台的大佬控制。你想投票,多买点币吧!多你还能超过创始人?
再说每秒百万级的交易(顺便说下,2017年双11支付宝峰值完成每秒25.6万笔交易!)。首先这个说法就不专业,智能合约的复杂程度决定了吞吐量,我们就以转账作为考量的基准。如果以一台服务器每秒处理1万条,需要100台服务器,生成存储2.5M,一天210G。每个节点确实是一个小数据中心,别忘了P2P网络还需要同步,而且EOS也没说清楚怎么控制并发。最好结果就是21个节点自己玩,其他都是SPV节点。
如果把整个事情分为两个阶段:开发阶段和运营阶段。开发阶段,开发团队通过售卖代币得到百亿的收入,完成系统的开发,结果是这套系统的开发成本是百亿。从运营阶段来看,用户购买的代币实际是用于支付使用EOS的费用(类似于以太坊的gas).从这个角度看,开发团队套现的百亿需要运营团队来承担。虽然运营的超级节点也有一定的”挖矿”收入,什么时候能把这个大坑填掉?
另外一点是EOS在智能合约上并没有太多创新。如果EOS能做的以太坊也能做,仅仅通过节点集中化来提升处理效率,会不会辜负了大家的期望?
总结,EOS项目最好的结果结果就是一个昂贵的BaaS服务商。
代币
比特币是一个典型的虚拟货币/资产,其本身没有任何价值,但是炒作的人多就有价格。很多人认为比特币是”数字黄金”,总数2100万个具有很强的稀缺性,但是我不这么认为。比特币现在由矿霸和码霸控制,随着挖矿收入的减少,那天觉得挖矿无利可图,提高发行量完全可行,修改一行代码就结束了。得不到多数同意也可以分叉出一个新的货币BTX!比特币不是由代码控制的,而是代码后面的人!
以太坊/EOS的代币是用于支付区块链的使用,类似于租用云服务的付费。云服务是用户向云服务提供商支付后使用其提供的服务,区块链生态里是用户使用矿工提供的区块链服务时支付代币,而代币向矿工(中间可能经过多次交易)购买并在矿工提供服务时产生。从这个角度看,代币在一个区块链生态中是有价值的,能够简化价值转移。当然现在有些过度炒作反而忘记了其原始目的。
关于炒币
技术很理性,市场很感性
一个人很冷静,一群人就是从众
代币就是(国家眼中的)数字货币吗?代币就是区块链(的未来)吗?
炒什么都可以,总比大蒜有价值
比特币转账成本分析
转账成本定义为每笔交易为比特币系统运行支出承担的份额。
按照10分钟一个块作为计算单元,假定块中包含x个交易。比特币运行成本主要是矿工挖矿成本,挖矿成本=收益/利润率(y)。收益=(12.5+z)*比特币单价。z为交易费。
按照上述计算,最理想情况下 x=4000,y=2(1倍利润),z=0(忽略),结果为78人民币。简单点说,一笔交易花费了78元的(电费,设备费)!
有人会说矿工收益不是靠手续费,而是靠挖矿收入,挖矿收入是什么?本质上是一种通货膨胀。
随着挖矿数量减少,单纯靠手续费比特币系统还能运行吗?唯一可能性就是比特币单价飙升。
区块链系统
公有链的两个悖论:用的人越多,公有链越有价值;但是用的越多,区块链就越大甚至太大,限制了全量节点的数目;挖矿的人越多,公有链系统越有效,但是矿工越多,共识成本就高。所以通用的公有链系统未必是未来的方向,百花齐放的专用公有链肯定会越来越有价值。
随之,跨链交易会成为一个非常重要的课题,实现链和链之间的信任交换。
另外一个公有区块链也可以作为其他链的总链,如记录私有链区块的哈希,从而利用公有链的公信力来强化私有链的公信力/防篡改能力。
===未完不续,欢迎讨论
网友评论