一.比特币的局限:
中本聪发明比特币是为了实现一个自运行的货币。不由任何人或组织控制。继续上一节末的问题?难道只是货币嘛?能否利用比特币的技术去做更多事呢?
回归一下比特币技术:
密码学: 例如不可逆的非对称的加密算法(既私钥可以得出公钥),hash算法:整个区块做hash运算,得到区块的hash值,每个区块保存前一个区块的hash值从而相互连接。mk树的树根hash值是对整个树做hash运算的来的。树的每个跟节点都是由儿节点的数据hash运算的来。
区块+链的结构: 区块头,交易信息等。
p2p的对等的网络节点+共识机制: 解决不同节点直接的协调一致(解决拜占庭军事问题),实现货币发行,激励节点。
大概总结: 没有控制人的对等节点的分布式数据库+共识机制。
做到了什么?
去了中介,数据不可串改,数据可追踪等等。
相信你一定有这个疑问,仅仅只能用它做货币嘛?有个人和你一样有疑问,并且践行了,给予他更多可能性:
###二.以太坊【ethereum】:
2.1 以太坊诞生背景:
Vitalik Buterin(简称v神)为什么创造以太坊?
1994出生,父母原因较早接触计算机编程,并在父亲影响下,17岁接触btc,后来创办了比特币杂志。
在玩暴雪的游戏时,因为暴雪公司改了游戏规则,让v神很不满意,开始思考中心化的不完美。开始思考去中心化。
后来13年v神退学,发表了以太坊白皮书。
并且在14年初在自己的比特币杂志上发表《以太坊:一个下一代加密货币和去中心化应用平台》(Ethereum: A Next-Generation Cryptocurrency and Decentralized Application Platform),提出了创造一个去中心化应用平台,即去中心化的网络操作系统的概念。
后来,v神发起了ico,并到处演讲宣传他的思想,让别人相信他能做成这个项目。
以太坊技术成型
直到一个叫gavin wood(加文.伍德)的博士加入,以太坊才步入正轨。 wood是在朋友介绍下和v神见面。wood在自己博客下写过这段经历:
“And Ethereum has dominated my life since” 「此后以太坊主宰了我的生活」。
他的贡献:
1.它创造了以太坊的技术黄皮书。
知识点:做过产品经理的知道,pm要写prd(产品需求文档),mrd(市场需求文档)等等,是面向不同的人的。
而白皮书和黄皮书也如此,白皮书给普通人看,主要是介绍项目。黄皮书则侧重技术规范,数学公式化具体实现方面,主要给专业技术看。
2.创造了evm,和合约语言solidity,以及支持一个连接以太坊世界的wenb3.js
evm世界上就是每个节点都有的客户端,也是合约语言的运行环境。
web3.js是一个可以支持使用js语言连接evm的桥梁。现在web3已经有不同的编程语言实现。java,python等。
2.2 以太坊具体的技术特征
以太坊基于账户的区块+链:
比特币中没有账户,你持有多少btc,是通过计算mk树上的交易记录,得出的。
而eth是基于账户的,有了账户你不需要遍历整个mk树去获取你有多少eth币或其他数据。
因此:比特币无法做轻,以太坊可以做到很轻的节点。首先他分成了两种账户:
一.普通的账户 就像比特币的私钥一样,可以转账,记录以太坊上的token数据。
二.合约账户大家上文中肯定好奇智能合约纠结怎么存在,其实智能合约也是有一个公钥地址的,而不同于普通账户,合约账户里要定义数据规范,以及触发条件,也就是函数。
第一篇文章提到比特币的区块包括:区块头,交易记录两部分,其中区块头又包括:前一个区块hash值,交易记录mk树根hash,Nonce;而交易记录是一种树状的结构,并没有记录比特币数量,只会在树上记录交易记录,这块专业点说叫utxo(未花费交易输出),感兴趣可以查阅。
而以太坊不同于比特币,只有一个交易记录树,以太坊包括3个Merkle树:
- 交易(Transactions)
- 收据(Receipts,基本上,它是展示每一笔交易影响的数据条)
- 状态(State)
关于这一部分可以参考:https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/
以太坊在创建时,也和比特币一样采用pow共识机制(现在还是,后面会在以太坊下的章节里给大家介绍新以太坊的pos共识),解决网络节点共识,以及节点激励。 不同于比特币是2100枚在挖矿中产生。eth众筹时,是发了7000万枚eth,然后挖矿每年会产生新的增发(具体视情况而定)
需要额外补充的是: 比特币转账有固定的手续费,而eth是怎么做的呢?因为以太坊有智能合约概念,那么在执行合约时就相当于在做一件事或者说完成一个功能,那么是需要消耗资源也是不一样的。
那就需要有个资源消耗的单位对吧,是的以太坊有gas的概念:
gas可以当作燃料,也可以比拟现实世界里的电的度数,你可以联想在现实世界里洗一次一次需要消耗多少度电量,看一集电视剧需要消耗多少电量,开车跑两公里需要消耗多少油。gas在也在eth中做为类似的基本但是,即你在合约里执行一个循环消耗多少gas,做一次+-法消耗多少gas等等。
类似现实,电有电费,燃料有燃料费用。而以太坊的gas也有它的费用。电是由供电公司决定一度电多少钱,石油则大国政治,石油巨头,石油国都可以做文章决定涨跌,那gas呢?它是矿工决定的。也就是贡献网络节点的人的。
智能合约环境
首先谈到一个词,合约: 提到合约大家想到什么呢?合同?定义一些规则?方案?
以太坊呢,是一个支持可编程合约的平台: 可编程的合约也就是所谓智能合约呢。
智能合约呢,实际上是定义了一套数据规范+以及一个方法,在编程语言里也叫函数,其实就是执行一些步骤,那他怎么执行呢,他是被动的,需要外界调取他。所以,如果你了解数据库你大概知道数据库有一个触发器,实际上智能合约相当于是数据库+触发器。
所以,以太坊(Ethererum)是: 一个开放的去中心化的区块链自治系统,更确切的说,是一个可编程的区块链系统。任何人都可以基于以太坊构建和使用运行合约。
智能合约语言:eth有专门的智能合约编写语言叫solidity。
而以太坊虚拟机(Ethereum Virtual Machine): 以下简称EVM,可以执行合约代码也就是solidity(所以evm是智能合约的允许环境)。
智能合约(代码)保存在哪里?evm是执行环境,那么代码保存在那里呢,是的区块链上!上面提到了以太坊的是基于账户的区块+链,以太坊的区块中有3个Merkle树,其中保证状态的树会记录合约账户,合约账户是有可执行字节码(大家可以理解成合约内容,只不过以太坊会把它保存成字节码)
那么一个合约到底是怎么产生,怎么允许,有是怎么构成去中心化应用的呢?
- 程序员写好合约代码(可以用solidity),用专用的工具(如:remix,mist,geth等)去把合约代码部署到以太坊网络上。
- 以太坊网络上会创建一个合约账户,其中就包括合约的地址和合约代码(字节码)
- 同时提供一个叫abi的接口可以供网页开发者,移动开发者去写客户端应用。
- 客户端开发者去访问一个以太坊节点,通过abi和合约账户的地址,去调取合约中的方法去完成一件事。
通风上面这种方式,去创建的应用,是没有服务器的应用(其实以太坊网络相当于是这个应用的服务端,但以太坊网络没有控制人)也叫去中心化应用也称为dapp。,我们会在以太坊下种讲以太坊生态上的各种dapp。
2.3 以太坊可以做什么?
基于智能合约可以做什么?贫穷会限制想象力,以太坊的智能合约不会。 仅举几例,但不局限这几个:
1.现实中的押金收取退回的自治理
大家在日常生活中有押金的场景,比如租房:房东收取你的押金,并要求你没各一段时间打房租给他。房子到期后,检测没有问题会退回给你押金。
理想化一点没有问题,但往往会遇到不退押金的房东,以及破坏房子的租客。
中介也就产生了,但是中介如果也作恶呢?报警,警察不会管,会让你去法院。
合约如何做:
一个合约账户中定义有房东的公钥地址,房客公钥地址以及相应金额。合约本身保存你的押金。
房客可以调取方法去执行存押金,也就是这个押金是交给合约保存的。
正常情况下:
在房客需要退押金的时候,房东去调取方法触发同意的操作。
房东不同意呢:
押金自然是不退的,得双方协商一致后,如果都同意,合约会处理。如果有争议怎么办,合约中标记一个数据说明这个有异常。
这时候引入第三个角色(代替法官了),进来,对争议做判断。要求双发提供证据。并做出裁决。
2.赌场&博彩
类似上文,合约中可以定义几个参与房角色,各种角色将钱存入合约。
合约方法中定义规则,比如自动开奖,每个人去触发这个方法,可以开奖,也就是你中奖了呢,钱都自动打到你的私钥里。
3.基于合约做ico以及发行代币(又名token)
首先说eth上的代币,也叫erc20代币,其实这些代币本质上都有一个智能合约,这些代币按一套规范的数据结构规则定义,而这套规范呢,得到各种以太坊钱包的支持,以及交易所的支持。于是成了一个通用的标准。
通常一个ico的发型:
国外许多网站,这种众筹是通过合约做的,即你调去合约转入你的eth,合约自动想你转出项目发行的erc20代币。
补充:(国内9.4以前,往往是有第三方的众筹网站在中间负责收币,并发新币给参与者。)
其实以太坊是想做一个去中心化的应用平台。如果做过开发的同学应该知道一个应用有前端后端之分,而在用以太坊时:大家大可把以太坊当初一个记录状态的账本或者说数据库(区块+链的结构)以及运行环境(evm)。
2.4 以太坊又出现了哪些问题?
合约易用性,开发者容易写出不安全的合约
1.以太坊经常被黑的案例之一,就是the dao事件。 the dao 是一次ico众筹,结果众筹合约有漏洞,被黑客盗走了百万eth。 为此,eth做了一次升级,回滚数据。
而由于有节点不愿意升级,于是出现了两种eth区块链。出现了eth,etc两种数据货币。(这就是硬分叉,关于这个词大家可以自行查询,这里不多解释)
2.17年波卡项目众筹 以太坊创始人加文.伍德自己的矿链项目Polkadot做ico,由于合约bug,这次ico的一半token被锁死在合约里,没有人能取出。
合约不可维护
智能合约一但被部署到以太坊网络里,就无法在修改这个合约了,唯一的升级办法是将旧合约迁移到新合约。
缺乏明确的升级,社区治理机制
由于没有升级方法,以太坊的策略只能是在升级的时候,如果有节点不同意,就分叉,the dao事件后硬分叉,就是这一大问题。
数据吞吐量&拓展性
所有的应用都跑着一个相同的以太坊网络里,如果其中一个应用出现访问过大,将导致整个以太坊网络的拥堵。而其他应用也将遭殃
想想一下:如果以太坊上存在一个天猫,和一个facebook。天猫在做双11,由于交易量过大,facebook也将无法使用。这就体现了以太坊吞吐量的需要了,以及拓展性(应用要隔离开吧,不能互相有影响吧)
以太坊网络和比特币一样,出块有时间限制,而每个区块中能够保存的数据也有限制。(大约每秒15币交易)。因此也时常被黑拥堵。(甚至有项目方故意推卸责任说是以太坊网络拥堵造成token还没有到)。
知名的事件:17年的以太坊爆款游戏加密猫导致整个网络拥堵。
那么思考题就来了:
关于交易吞吐量,你有什么解决方案呢?有没有提升以太坊拓展性,能对不同应用作隔离的方式呢?
关于区块链的社区治理,你有了解嘛?
我听说过我听一个项目负责人说以太坊白皮书提出ico是以太坊最初设想的应用场景,你怎么看?
很多dapp发token去做支付,请问有没有必要,如果直接用eth是否可以完成? 很多dapp做凭证做追溯独立做一个公链,请问这样做有什么弊端,不做独立公链,用以太坊的合约能否完成?
版权属于blockman.org和我这个账户,转载请说明:
内容来自:blockman.org(公众号:blockmanorg)
Congratulations @liu3550361! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit