LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 社区互动|看不懂aelf白皮书?是因为你不懂这些

社区互动|看不懂aelf白皮书?是因为你不懂这些

2020-08-18 ?lf 来源:区块链网络

前不久,社区用户代表艾斯为大家介绍了aelf BingoGame这款测试DApp的demo,这篇文章将向大家介绍aelf区块链项目。

在上篇文章中我们提到了真随机数生成器,用于生成一个0-255之间的随机数,它不可预测,满足了可信性的需求,但这仅仅是aelf众多技术的冰山一角。在BingoGame这个DApp中我们还能看到,对于其他的交互逻辑,在后端上其实和一般的区块链智能合约的原理是一样的。不过这个DApp并不需要使用aelf的所有技术,因为它实在是再简单不过了。aelf真正的用武之地在于能够支持企业级应用的强大配套性能和独特设计,对于一个刚接触aelf项目的人而言,该如何去了解这些技术细节呢?最好的方式就是看项目官方提供的白皮书。

如果你看过一些其他区块链项目的白皮书,你会发现这些白皮书并不容易读懂,甚至不知其所云,就更别提理解这个项目实际存在的意义了(当然前提是你不是为了炒币而来)。其实任何区块链项目的发起者都认为所有的读者都是内行,理应理解项目的内涵,否则就是读者的问题。不过,由于绝大多数区块链项目的机制都比比特币复杂的多,如果读者只理解了比特币的原理,还是理解不了其他项目的白皮书。所以要想吸引某个潜在开发者理解一个区块链项目的白皮书,项目团队就应该为这些新手提供白皮书的通俗解读,以适应他们的了解程度,可谓是因材施教。

因此,aelf也会为各位开发者准备白皮书的解读。在这之前,你可以打开aelf的官网浏览一番,看一看aelf官网首页的宣传视频,看一看标语,然后下载白皮书看一下,想必你很快就会看到难以理解的内容。不过没关系,我们可以从项目的标语入手,因为对任何一个项目来说,标语就是它想展示给用户最关键的特色:

aelf,一个去中心化的云计算区块链网络

在aelf的区块链生态中,云计算是区块链运行效率的驱动力。因为比起让一台大型机执行高强度的计算量,让多台计算机共同承担这种计算显然更划算。如果一个像亚马逊这样的公司把几千台这样的计算机放在一个叫“数据中心“的地方,那么我们就可以说这些数据中心形成了云(亚马逊云,AWS)。

但就算如此,初学者还是很难理解为什么云计算对aelf项目而言是一个难以替代的优势。因为很多人,包括区块链从业者,对区块链很多关键原理的理解是有偏颇的,就如同学习一门学科的基础知识不牢固一样,要想理解更高层次的复杂技术就一定会感到一头雾水、寸步难行,更别说理解一个区块链项目的特质和潜力了。

目前来说,我认为下面两个区块链的概念原理是需要特别纠正的。

1.什么是区块链?

这乍一眼看起来就是废话,谁还没有被天天灌输区块链是什么?不就是一个去中心化的、不可更改的账本或者数据库技术么?你甚至已经把这种说法背的滚瓜烂熟,只要有人问,你就原封不动地用这句话回答他……然而,这种区块链的解释具有很强的误导性。

首先,区块链并不是什么新技术,没有什么神奇的特点和技术(比如神奇的“不可篡改”),这和炼金术士炼金火炉里的神奇物质不是一回事。与其关注区块链的账本和数据库特征,不如说区块链是一种“分布式系统“,更能让人抓住本质。那什么是分布式系统呢?

分布式系统,就是许多相互连接的计算机,所以自然是点对点的。它在1960年左右的时候就被发明使用,然而十几年后互联网才被发明。现在其实已经有了很多分布式的软件,它们都比区块链诞生的早,比如Bit-torrent、Netflix等。在这些分布式系统软件里,某用户会在自己的电脑上存储一些文件,如果他把这些文件上传到这个点对点的网络上,只要网络里有人想要这个文件,就可以随意下载。但分布式系统并不只关心这些,在分布式的学科里,人们需要解决一个问题,那就是对于网络中的每一台计算机(节点)而言,不管它接收到了什么信息,网络中的所有节点都要做出统一的决策。该“统一的决策”就是我们熟知的“共识”,而这个问题就是大名鼎鼎的“拜占庭将军”问题。

从前,有三个不同位置的拜占庭将军想要率领各自的军队攻打同一个城池,因为他们在不同位置,所以他们之间只能通过信使传达信息。在这种情况下,每个将军只能根据从其他两个将军那儿收到的信息内容来进行决策:是去进攻还是撤退?如果其中有一个将军想进攻,那他就会向其他两个将军传达进攻的信息,而其他两个将军收到这个信息之后也会相互传达信息。如果三个将军都是一条心,每个将军都会收到“进攻、进攻”这样的消息组合,这样三个将军都会去攻打城池并获得胜利。但是如果其中一个将军是叛徒,他可能给一个将军传达进攻的消息,而向另一个将军传达撤退的消息,那么后者的将军就会收到“进攻、撤退”的消息组合,如果他按照少数服从多数的原则决策,他显然就没办法决定是进攻还是撤退,因为进攻的票数和撤退的票数是相同的,都是1票。同时,其他将军会进攻,结果就是三位将军并没有做出统一的进攻决策。

上述的将军就是分布式系统(即区块链)中对节点的比喻。所以我们会至少意识到两件事:第一,所有的消息(即交易)都需要被传达给所有其他的将军(节点),并让他们得知这个消息;第二,所有的节点必须做出一致的举动。第一条意味着对于比较大的分布式网络,想把一个消息传达给其他每一个节点,绝非高效的事情;第二条意味着,在一个新的区块打包好被广播出去之后,需要有一个使得所有节点都认同这个独一无二的区块的机制,而这也不是一件省时的工作。

2.什么是智能合约

很多书籍、文章或视频对智能合约的解释都会对开发者造成很大的误导。他们通常说智能合约是一种新一代的法律性条约、契约或者所有权证明等,而且说因为这种智能合约是代码构成的,所以它具有高度的智能性。但是,这些说法都是给外行(金融或其他行业)看的,他们不懂代码和计算机科学,所以区块链人士只想说外行能听明白的话,让他们觉得智能合约很高大上就行了(某种意义上讲,这是好事情)。不过智能合约到底是什么呢?

实际上,智能合约既不智能也不是合约,它只是一段代码而已。那为什么人们管这段代码叫智能合约而不是一个更直观的名字呢?只是因为以前就这样叫的,程序员也很懒,所以就一直这样称呼了。智能合约和python或者java代码一样都是用高级语言写的,都得被编译成字节码,然后让虚拟机一条条地运行指令。你可能已经知道了JVM和Python-VM这样的东西,或者是以太坊专属的EVM。对于aelf区块链项目,我们使用C#写智能合约,当它被编译之后,就运行在.NET的框架上。

想触发一个智能合约的执行,在某种程度上与做一个http请求很类似。在传统的请求过程中,你输入一个URL告诉远程服务器去给你传回一些数据(html、css、javascript等),或者说让服务器执行一些服务端的代码去改变服务端的一些状态,比如java,对智能合约而言同样如此。和请求一样,我们总是向目标的智能合约地址发一个交易,不管它是否耗费加密货币。当这个合约收到了这个交易的调用,它便会被触发去执行里面的某些方法,至于这些方法需要的参数,就看你在给智能合约发交易的时候会携带哪些参数。如果gas是足够的,智能合约执行之后就会改变它自身的一些状态,并把一些结果数据返回给你,或者给你发送一些虚拟货币

不同之处在于,当你向远程服务器发请求,它会立刻给你一个响应,但是如果你向智能合约发交易,要过一段时间智能合约才会执行。在BingoGame的文章中我已经提到,当你发送交易的时候,这个交易会广播到分布式系统尽可能多的节点,每一个挖矿节点会把它收纳到它的候选区块里,过一会,当一个挖矿节点产生了新区块,他会把这个区块广播给别的节点,当然这个区块是被承认的。你会发现这个过程就耗费了时间,而且对于很多实际应用而言,只产生了这一个新区块并不能保证这个交易的安全和有效,所以在这个区块之后还需要再连续产生更多的区块,在aelf区块链里便是如此。当然,当一个包含该交易的区块被挖矿节点打包,如果满足了某种共识条件,那这个智能合约就会被指派给一个全节点执行(全节点可以是一个挖矿节点,反之亦然)。但只有越来越多的区块在它之后产生,想通过分叉的方式篡改这个智能合约执行结果的可能性将无限趋于0。

在BingoGame的例子里,这个“bet”按钮其实就是智能合约的一个方法,当我们下注的时候,其实在向这个合约发起交易。当一个区块完成打包后,这个智能合约的方法就开始执行,这样,合约就会知道你想下注多大的数量。为了让合约一直知晓你这次下注的数量,而不是被某个恶意的人更改你的下注金额,你需要等待后面几个新区块的产生,这样这个交易才算真的确定下来了,那这个过程要花费多长的时间呢?这个时间就是之前的文章和视频里提到的“等一会,或者30秒”。实际上,没有人知道产生后面这几个新区块的准确时长,但是我们知道的是30秒已经足够让这些区块产生出来了。

有了这两个基础认知,再理解包括aelf之内的其他任何区块链项目的时候就会容易很多。不管一个区块链项目应用是什么高端技术,有了这些基础,这些技术都会变的容易理解。

在下一篇文章中,我们将展开介绍aelf的白皮书内容,为大家解读aelf这个超级企业级项目的所有重要特性。期待在下一篇文章中再见!

—-

编译者/作者:?lf

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...