比特股中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

比特股中文网 首页 以太坊 ETH教程 查看内容

用最短的时间全面了解以太坊(Ethereum)

2016-2-20 13:17| 发布者: admin| 查看: 1819| 评论: 0

本文是播客Teahour以太坊专访文字版,收听地址 http://teahour.fm/2016/01/19/talk-with-jan-about-ehtereum.html ,也可以在喜马拉雅、iTunes搜索Teahour收听。屏幕快照 2016-02-19 上午11.47.15

 

(前边的开场白与区块链和以太坊无关,略去)Terry:OK!接下来我们要说说第三则新闻,就是万向区块链实验室在上海举行了一个全球性的区块链Hackathon(黑客马拉松),我们也去参加了这个Hackathon。然后……我们有没有得奖?哈哈哈!!

Jan :有幸有幸。

Terry:嗯,有幸获得了一万美元的奖金。我以前也参加过几次Hackathon,你以前也参加过吗?

Jan :也参加过,我参加的比较少,参加过一次。

Terry:那你对这次Hackathon有什么想法?

Jan :我觉得要感谢一下万向还有德勤,Hackathon组织的非常好,感觉也非常好。因为当时比赛的地点是在外滩中心。然后…

Terry:很高大上?

Jan :对,奖金又高。在那么高大上的地方从事着这么有意义的事情,感觉非常好。

Terry:我参加过很多Hackathon不管是线下线上的,这也是我参加所有Hackathon里面办得最高达上的,吃的也是最好的!虽然吃的东西很简单,但是也算是吃的好的了。吃的喝的随便供应,环境也非常不错。每个Team还有一个办公室!其他地方能给一个大长桌就不错了。环境真是……这些搞区块链的金融公司有钱是吧。然后奖金也挺高,我们不是第一名,第一名是三万美元,我们得的算是第三名的奖金。第三名和其他的奖项奖金都是一万美元,一万美元也算是很高了,里面一共是有二十多个队参加,能够有幸得到这个奖。
我们做的这个项目叫……要不要说一下?名字叫NEVER MORE!好,现在你们猜一猜NEVER MORE是什么意思?

Jan :这是本期的提问吗?

Terry:(笑)没有没有。

Jan :观众来信有奖吗?

Terry:OK,我觉得玩dota的人应该都知道,NEVER MORE就是影魔,这个也可以说是我们的小文化吧。这个就是我和Jan一起做的东西,因为我们两个都喜欢玩dota,然后我们做的项目都会以一个英雄来命名,对不对?

Jan :对。

Terry:然后这次我们为了拿到奖金,不惜拿出了我们最酷的一种NEVER MORE。幸好拿了奖,不然就完了。OK,这三则新闻我们就说到这,关于Hackathon我们鼓励黑客去参加一下,我觉得这个在国外特别流行而且很多大神参加。你会发现很多一线的 Rails commiter 都会去参加 Hackathon,当然他们当中有人可能甚至还没得奖,我不知道是不是面子思想的原因,在中国稍微有点背景,有点资历的程序员就不愿意去参加这个Hackathon,怕得不到奖多丢脸。其实有什么啊,对吧?Hackathon又不是比技术,很多都是比你的idea,甚至是 presentation。所以去hack本来就是一件很愉快的事情,不要太在意奖金,能不能拿奖,这个过程本来就是一件很好玩的事情。但也不要参加太多,这个对身体可能……会有影响。(笑)

Jan :需要补肾吗?

Terry:(笑)OK,我们新闻就说到这些了,接下来我们要聊一聊我们今天的正题了。首先我们简单回顾一下,我们上一期说到的最后的部分。
上一期我们谈到了Bitcoin script(比特币脚本),我们谈到了在Bitcoin 上面它除了有数据库的性质之外,它还有计算的性质。但由于Bitcoin 它不算是一个有图灵完备的语言,于是我们就引入了一个项目叫Ethereum。它是要来解决这个问题,把这个语言变成一个图灵完备的语言,那么我们就先深入了解一下这个项目。
首先,这个项目叫做Ethereum,这个名字好难念。Ethereum对吗?

Jan :对。

Terry:先从名字开始吧,Ethereum是什么意思?

Jan :他应该是一个合成词吧。

Terry:Ether应该是以太的意思。

Jan :Ether是物理学里面的那个以太,绝对静止的存在于空间的那种物质,最后被证明为是不存在的。中文翻译成以太坊。

Terry:感觉挫了很多……

Jan :我也不知道这个坊从何而来,当时不知道是谁翻译的,总之后来大家就这么叫了,叫它以太坊。坊是红磨坊的那个坊。

Terry:那么我们先就来说说这个项目,首先大体介绍一下这是个什么项目?它为什么会诞生,它要解决什么问题?

Jan :首先第一个理由就是我们上一期说到的,比特币script有很多限制,上面有很多东西都做不了,所以很自然的想能不能把它扩充,把它变得更完备。但实际上,它也不算是完全的图灵完备的。以太坊它的目的是图灵完备的,但实际上它并是完全的图灵完备。它上面有一个叫gas的限制,这个我们可以在接下来详细聊。但是现在大家就是说它是准图灵完备的。

Terry:但是它是朝着目标去的。

Jan :但是它是朝着目标去的,而且比比特币的script已经强了非常非常多,能够做很多事情了。

Terry:那你上次说Bitcoin script没有循环?那么现在的以太,此时此刻的以太一定已经有循环了?

Jan :对,此时已经有循环了。然后第二个原因是,在以太坊出现以前当时已经有很多Altcoin,中文翻译成山寨币或者叫二代币什么的,就是有很多其他的密码学货币项目。但是这些项目的模式都是fork一个代码库,然后去改底层代码。

Terry:fork Bitcoin.

Jan :嗯,然后去实现一个功能。当时Vitalik就说为什么要这样做?为什么不能把功能层或者应用层给抽象出来?这样的话我们大家就不需要去fork了,就直接在这个平台上写程序就好了。因为fork是一件很麻烦的事情,你可能是一个ruby程序员,你不会写C或者C++,那如果有这样一个平台的话,任何一个人都可以参与进来实现区块链上的功能,不是很好么。

Terry:所以这个项目听起来像是说它想建立一个平台,然后你可以在上面做一个基于区块链的应用?

Jan :对,没错。

Terry:那这么一抽想来看的话,是不是比特币也是Blockchain上的一个应用了?

Jan :对,实际上比特币就是实现了一个转账嘛。我发布一个请求,然后这个账簿里面A减掉50块B加上50块,这个事情在以太坊上面两句话就写完了。

Terry:OK,那就是我要在以太坊上面建立类似一个比特币的应用是一个很简单的事情。

Jan :对,很简单的事情。而且他们现在在以太坊上正在提出一个标准,如果你想在以太坊上面写出一个coin出来,你的程序需要有什么样的接口。然后,它又定了另外一个标准就是一个注册表,这个注册表又有一些什么样的接口。这样一来的话,每个人都会发行自己的coin,而且你发行的coin是可以在注册表上注册的。而且因为接口是相同的,你这个程序无论是想用Terrycoin还是想用Jancoin都很方便,因为接口都是一样的。而且由于它有一个统一的接口、统一的注册表,它的钱包软件就会自带这个功能,把这个注册表上所有的coin展示给你。你就可以很方便的查找或者转账,就是这个钱包不仅可以转以太,而且可以转任何个人发行的自定义的coin。

Terry:那我做一个不恰当的比喻,可不可以是这样,Bitcoin有点像一个人造了一个计算器。而Ethereum有点像一个iPhone,上面可以跑一个计算器的应用程序?

Jan :对!而且它现在还在尝试做一个开放的APP store,这个APP Store不是掌握在以太坊手里的,而是一个标准一个接口一个interface。只要你遵循这个interface你的APP就能在APP Store上被看到。

Terry:那我想问一下,你一说到这种APP Store人们就会想到苹果、Google,主要是想到苹果。这后面有一个很大的利益集团,我和你三七分或者怎么样,那Ethereum它是一个公司啊还是一个开源的项目或者怎么样,它是把握在一个公司手里的吗?

Jan :其实并没有,以太坊是有一个基金会,应该就是叫以太坊基金会吧,它是一个非营利性的组织,它没有商业的收入只能靠捐助活下去。以太坊本身实际上也是一个众筹的项目,当时Vitalik发起这个项目的时候也是满世界的飞去游说,让大家相信他的想法,相信他能把这个东西做出来,最后众筹了三万多个币。

Terry:Bitcoin.

Jan :对,Bitcoin.

Terry:相当于那个时候的多少钱?

Jan :市值的话,相当于那个时候的一千八百多万美元。他们筹到了这笔钱才把这个项目做出来。

Terry:而且它是开源的吧。

Jan :而且它是开源的,完全开源的。

Terry:所以以太坊听起来是要建立一个为区块链编程的一个平台。

Jan :对,而且是一个公开的,开源的平台。

Terry:如果你看好区块链,你可以在上面去做基于区块链的一些事情。

Jan :没错。

Terry:我们两期节目无数次的提到了Vitalik,你也说是你很偶像的一个人,那能不能简单介绍一下?他是这个项目的作者是吧。

Jan :Vitalik是俄裔的加拿大人,非常天才。他在做以太坊之前就在研究比特币了,做了一些比特币上的项目。比如说Python的库,实现了比特币里面的一些算法。还有一些小工具吧。他还创建了一个叫Bitcoin Magazine的新闻网站,这个网站在当时非常有影响力。而这个影响力在当时很大程度上是来自Vitalik这个人,因为他会频繁的写一些有深度有内容的文章发布在这个网站上,而这些文章很受瞩目。

Terry:所以他不只办了一个网站,自己还大量的写文章。而且他还写程序?

Jan :对,而且他还写程序。首先,他这个网站当时办的很成功,也因为他做了这么多的研究也看到了当时的一些问题有了一些想法,他当时大概只有18岁。

Terry:wow!几年前?

Jan :两年前18岁,现在大概也就20岁左右。

Terry:那真的是天才!

Jan :对。因为Vitalik访问上海的时候,有个朋友说他当场去用智商测试去测他的智商,测出来有180。

Terry:Vitalik我也见过他本人两三次了,第一次是在韩国的Bitcoin会议,他看起来有点呆呆的。但是你看过了他写得文章,你会发现他不只是编程的天才,他写了很多话很有意思的东西,包括后来提到的有一种语言也是他自己写的。而且他对经济、共识机制也有很深的了解,不知道他读没读大学,我听说他看很多的论文,这点真的是挺厉害的。

Jan :对,他肯定是看过经济学和博弈论方面的资料。成就我就不敢说了,因为我也不是专家。而且他和其他大神有很多不同的地方,很有意思的。

Terry:是什么?

Jan :他是非常积极的参与社区的那种人,就是说比积极还积极。无论多小的一个讨论,无论多小的一个微信,他都能看到然后跑过来回答你的问题。像他那么忙的一个人他还有这种精力,觉得他很了不起。

Terry:对。据我所知这个人博客的更新非常的频繁,而且都是很有深度的文章,读下来都需要花费很长的时间更不要说他写了。然后,还自己写代码,每周还看两本书,每周还要回答各个社区的问题,还要参加各种活动。

Jan :而且更让人震惊的是他在做了这么多事情的同时,就这一两年还抽空把中文学会了。

Terry:哦,他还把中文学会了!

Jan :对,他还可以讲中文。可以在论坛上用中文回答别人的问题。

Terry:wow,那真的是天才!年轻就是不一样!(笑)我们这帮人感觉已经老得不行了。OK,你也说了,这个项目是他发起的吗?他也有参与写代码?

Jan :这个项目是他发起的他也有参与写代码,他更多的项目是用Python去做一些概念原型,把他的思路用Python实现出来,其他团队就可以参照他的想法去做。

Terry:所以这个人是Python爱好者了?

Jan :对。

Terry:那么这样一个大神,听说他搭建Arch的时候都搭建不起来,是真的吗?

Jan :这个事我当时问过他,是真的。

Terry:那只能是Arch的问题了!

Jan :唉,我只能说是Arch的问题了。

Terry:他本身是用Linux是吧?

Jan :他本身是用Ubuntu??

Terry:OK,然后是用Python,editor用什么你有问吗?

Jan :editor好像是用Vim?

Terry:你都没有忽悠他用ruby吗?

Jan :我和他提过,他说可以,他会去看一看。

Terry:OK,我发现在这个社区,Python好像特别火的样子。

Jan :我觉得Python确实很好用,我最近正在用。

Terry:我们这里就要说一下了,虽然teahour没有什么对语言的主见的,但是由于各主播的一个背景,还是写ruby居多,还是做web 多。我现在知道我的好朋友包括我自己在看Python,因为要做一些这方面的工作。所以我想问Jan这样的一个语言问题,就是ruby在其他方面的积累没有其他语言那么足,但唯独web 这个领域,ruby做的很不错。但是假如你选择做web 这个领域你还是会用ruby。其它地方你也不排斥换一种语言?

Jan :我觉得肯定不排斥换语言,因为没有一个语言是适合所有场景的,就像我们刚才说选框架是一个道理,而且我记得以前Terry在做一个ruby的演讲的时候引用过一句话,是参差多态才是幸福的本源。当时他引用是想说明,ruby这个语言里有很多种不同的语法,Python里却只有一种方式,太无聊了,肯定是ruby好。但是退一步,高一个层次看,不同的时候用不同的语言也是一种参差多态。

Terry:我一点反对你的意见都没有!我当时在选ruby和Python的时候,看了the zen of the python ,它里面提到说你做一件事情最好只用一种方法。我当时是认同的, 因为在工程上好像所有人都用一种代码的话,就不需要额外解释,降低了成本。但我又觉得很boring,不过你今天这么说我又觉得是有道理的。我是不排斥,我不是一个ruby的死忠粉,你知道死忠粉遇到这种情况会怎么样么?他们会说,Ruby在Blockchain这个领域不流行,那我就让它去流行。那我就去写它的一个库啊或怎么样,我觉得ruby motion就是一个典型的例子。肯定是一个ruby粉做出来的,因为可能ruby在做mobile的方面不占优势,但是就有人去那么做。我是觉得Jan说了参差多态才是幸福的本源,这种人肯定是要有的,像那种用不同的语言的人也是要有的,都挺好的。

Jan :而且我记得去年还是什么时候流行过一个说法叫poly-glot programmer,就是用各种技术做程序的程序员。

Terry:对,我也很赞同这个。最近我也在看Python看Go啊,但是我不会拿他们来写web 。

Jan :web我肯定是用ruby,rails非常方便。

Terry:我是不太理解Go作为一个system language不错,但是很多人却非要用它来写Web!当时觉得, 这个好像就是为了去证明什么一样。我是觉得没必要,我们更多的是要去放眼你要做的事情,而不是去证明一个语言能做什么。我相信他一定可以证明出来它可以做,但是是否足够好足够实用不太好说。
OK,那我们聊回来这个项目吧。我们知道Bitcoin本身是用C还是C++写的?

Jan :C++写的吧。

Terry:那么Ethereum是用什么写的?

Jan :Ethereum现在有好几种实现,有GO语言的实现,有C++的实现,还有Python的实现。

Terry:这个我就要问了,通常我们要做一个东西的时候都希望用一个东西把它赶快实现出来,但它为什么要用三个不同的语言去实现它呢?

Jan :因为有钱。资金充足是一个原因,当时他们招了很多人支持这三个项目,但是另外一方面我觉得分布式的系统并没有很好的测试方法,所以有一种叫实验的方法,就同时实现三个一样的东西,用不同的方法去做。如果这三个team实现出来的版本能很好的互相协调互相工作的话,那我从经验上来判断可以说它是没有什么大问题的。所以是抱着这样一种想法,我记得是某个造飞机的公司上的控制系统也是有冗余的,我让两个一样的团队去实现两个功能完全相同却独立实现的系统。然后,飞机上所有系统的控制是由这两套系统来完成的,也就是说必需两套系统最后产生的结果一致,才去做这个操作。如果不一致就出现问题了,就要人工干预了。是通过冗余来保证分布式系统的正确性。

Terry:所以他们是可以这么做的?

Jan :可以。

Terry:那这么做了以后,它的副作用可能是现在你做出来了,想法也证明了,那么我继续去维护这三套代码会不会显得成本很高或者不知道发力在哪里?

Jan :对,成本非常高。就像以太坊基金会他们吃不消,所以前一个月他们公布了开支要缩减的计划。C++的团队大部分都独立出去了,变成了独立的公司,通过为别人提供咨询来赚钱,而不需要基金会去赚钱养C++的团队。Python团队不怎么花钱,现在主力是Go的团队,而且Go实现的客户端也是Ethereum目前唯一的官方客户端。

Terry:所以现在的唯一的官方客户端是用Go写的?

Jan :官方的正式版的….

Terry:官方要继续维护下去的

Jan :官方要大力维护的,然后C++还没有正式版,它还处于一个β阶段。

Terry:所以大家就知道最近为什么要研究Go了(笑)。这个都是些很接近底层的东西,用Go比用C++来的更让人舒服一点。

Jan :其实区块链项目有相当多是用Go来写的,例如factom。因为Go非常适合区块链这个场景,因为它是一个分布式系统又是一个网络系统,Go简直是量身定做的。

Terry:而且它比C++写代码效率高,性能上也不会有太大的损失。所以这有可能是Go一个很不错的应用。如果大家每天做Web的话不要总想着用Go,想点别的事,遇到别的事情再用Go。

Jan :喂你够了。

Terry:嗯,我们继续往下说的话,现在很多人听说想要了解Ethereum,他们也很想要了解我们用white paper,yellow paper,这个在各种币当中也经常提到。我也希望Jan来科普一下,到底什么是white paperyellow paper,它和传统的white paper,yellow paper是不是一个概念?

Jan :传统的我不知道是什么意思,但是区块链这方面white paper一般是说把你的想法说明白。

Terry:就是用文字描述这个东西到底是什么。

Jan :对,到底是干什么的,有什么远景什么的。

Terry:传统的yellow paper你知道是什么吗?就是那种电话簿。所以Ethereum里的yellow paper是什么意思?

Jan :yellow paper是以太坊这个程序的详细描述,它是一个形式化的描述,你去看的时候会发现里面有很多符号、公式、推导,它是一个非常严格的一个形式化的描述。你可以按照这个形式化的描述写出一个程序来,这两个东西逻辑是一样的。

Terry:所以,听起来,这个团队是想对这个做形式化证明这样一个东西吗?

Jan :这都被你发现了!像现在以太坊下一代的共识算法叫Casper,Casper就是Vlad和一个前微软的科学家在一起做,而且他们的做法是先用一种形式化证明的语言先写出一个形式化的定义,通过这个形式化的定义自动生成代码。它的代码是根据它的形式化定义生成的, 所以在数学上是没有问题的,再根据这个生成的代码去实现真正可用的客户端。

Terry:所以未来Ethereum在理论上是不会有bug,它的bug应该出现在生成代码那个上面是吗?

Jan :呃,对代码生成器可能会有bug,然后把生成的那个转换成Go代码应用的那个客户端的时候可能会有bug。

Terry:用代码去做这个形式化的证明是一个成本很高很复杂的事情,现在这个Ethereum已经在做了吗?还是一开始就在做?

Jan :是现在在做的。可以看出以太坊在很多方面都是非常先进的。

Terry:是非常专业我觉得,就好像一个普通的开源的项目不会这么去做。你觉得为什么会用这么专业的去做?是因为很敏感吗?

Jan :因为有钱? 哈哈 -- 最主要对于一个因素才能支撑你招到足够好的人才来做这件事情。

Terry:哦,你说的是他们有钱是么?不是因为上面要跑与钱相关的东西是吧。

Jan :对,是他们有钱。那也是另外一个理由,但是你有这个理由并不能支持你去做这件事情。他们有能力去做这件事情是因为他们有钱,他们筹到了很多钱。然后yellow paper是一个很好的证明,我还没有看到其他的币对自己的平台逻辑有这么严格的描述。所以以太坊有yellow paper。

Terry:所以说一个新的开发人员如果想进来描写一个Ethereum,他可能看white paper就够了是吧。

Jan :对,看white paper就够了,可能刚接触看yellow paper就有点太早了。

Terry:那我们也畅想一下未来,未来Ethereum的维护者就是去书写形式化证明或者是规则,它的client可能是完全生成出来的。

Jan :有这种可能但是非常远,那要形式化证明或者代码生成技术成熟才有可能。

Terry:那我们接下来要聊一聊EVM和gas。刚才也多次提到了gas,说白了我们以太坊就是在 Bitcoin加上一个循环,那它为什么要加上一个gas,gas是一个什么概念?

Jan :gas直译是汽油,为什么要加上gas?大家可以想象一下,如果只有循环,会发生什么问题。就是中本聪当时为什么不在Bitcoin加入一个循环,也就是说任何人写入一个程序它就是死循环,那矿工如何决定要不要放弃。因为要证明一个程序能不能终止是不可能的,停机定理,图灵或者有人证明过的。所以无法判断,那在这种情况下怎么办?此时就是科学家和工程师的不同。工程师就引入一个gas,你每做一步就要花钱。

Terry:就是科学家告诉你不可能,工程师要想个办法解决这个问题。

Jan :如果花钱的话相当于引入经济激励,你可以写个死循环,但是这个死循环唯一的作用就是把你的钱耗光。所以,在以太网上执行一个程序是要付费的。

Terry:所以就是说如果我要让以太坊执行我的这个程序我要给他付钱,那这个就有点像云计算的感觉。就像我要在亚马逊上租一个服务器我是要给钱的。

Jan :对,只不过它的粒度已经细到了最底层。实际上,它是对一个比如加法操作需要多少gas,一个减法需要多少gas。

Terry:那我有一个问题,可能Ethereum上面是有一个币的吧?

Jan :叫以太币。

Terry:然后又引入了gas,gas和以太币不是一个东西是吧?

Jan :是两个东西。

Terry:那为什么不用一个东西呢?

Jan :这是个很好的问题。如果只有以太币,会有问题。如果以太币是需要大家买卖的,以太币的价格我肯定是用人民币去买或者美元去买,市场就会有价格波动。可能会出现比特币这样的状况,一天跌50%涨50%。这个对计算的成本是不能接受的,例如今天做一个加法需要十块钱,明天做一个加法需要一百块钱。所以这里引入gas来解耦。把市场的波动和计算的开销来解耦,也就是说以太币和gas之间是有汇率的,以太币涨没关系,gas价格下降就可以了。它要保证我做同样的计算,消耗的法币是一致的。

Terry:啊,是这个意思。你刚才做的例子会把大家吓到,做一个加法十块钱。实际上,我在用以太坊做计算的时候,成本是?

Jan :现在的成本非常低,不到一分钱吧,看你做什么事情了。可能做复杂一点的几分钱。

Terry:其实这个价格是可以接受的。那这个钱最终给了谁?

Jan :这个和比特币里的手续费是一样的,最后被矿工拿走了。因为矿工提供了计算。

Terry:其实说白了,是他帮你做这个运算。所以你付给他一点费用,让整个事情继续流转下去。听起来很合理,有点意思。那evm是什么东西?

Jan :evm是以太坊的virtual machine,Ethereum virtual machine(以太坊虚拟机)。类似Java jvm 是一个基于栈的vm。上面有一些opcodes,类似于汇编语言。

Terry:所以你编程就是在evm上编程?

Jan :对,实际上你编出的程序就是运行在evm之上的。

Terry:我们可以把它看成一个普通的虚拟机吗?有没有很大的区别?

Jan :没有很大的区别,比如它和jvm最大的区别就是它简单很多,opcode简单很多,引入了gas。

Terry:就是它在virtual machine这个级别是gas。这也是它和其他的虚拟不一样的地方

Jan :所以在看yellow paper的时候可以在附录里看到一张表,每一个opcode对应的要消耗多少gas。

Terry:那我基于jvm的开放我有很多选择,如Java包括ruby,那在以太坊的evm上面有什么语言选择吗?

Jan :以太坊上的高级语言主要有solidity和serpent。Solidity是类JavaScript语言&l

比特帝国区块链交易所
返回顶部