LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 表哥大讲堂4:以太坊生态

表哥大讲堂4:以太坊生态

2021-06-11 星链投研大表哥 来源:区块链网络

励志小韭菜速成班第四个课:认识以太坊生态!以太坊最值得投资项目bzz即将上线!

产生背景:

比特币开创了去中心化密码货币的先河,用时间充分检验了区块链技术的可行性和安全性。比特币的区块链事实上是一套分布式的数据库,如果再在其中加进一个符号——比特币,并规定一套协议使得这个符号可以在数据库上安全地转移,并且无需信任第三方,这些特征的组合完美地构造了一个货币传输体系——比特币网络。

然而比特币并不完美,其中协议的扩展性是一项不足,例如比特币网络里只有一种符号——比特币,用户无法自定义另外的符号,这些符号可以是代表公司的股票,或者是债务凭证等,这就损失了一些功能。另外,比特币协议里使用了一套基于堆栈的脚本语言,这语言虽然具有一定灵活性,使得像多重签名这样的功能得以实现,然而却不足以构建更高级的应用,例如去中心化交易所等。以太坊从设计上就是为了解决比特币扩展性不足的问题。

设计原则:

简洁原则

以太坊协议将尽可能简单,即便以某些数据存储和时间上的低效为代价。一个普通的程序员也能够完美地去实现完整的开发说明。这将最终有助于降低任何特殊个人或精英团体可能对协议的影响并且推进以太坊作为对所有人开放的协议的应用前景。添加复杂性的优化将不会被接受,除非它们提供了非常根本性的益处。

通用原则

没有“特性”是以太坊设计哲学中的一个根本性部分。取而代之的是,以太坊提供了一个内部的图灵完备的脚本语言以供用户来构建任何可以精确定义的智能合约或交易类型。想建立一个全规模的守护程序(Daemon)或天网(Skynet),你可能需要几千个联锁合约并且确定慷慨地喂养它们,一切皆有可能。

模块化原则

以太坊的不同部分应被设计为尽可能模块化的和可分的。开发过程中,应该能够容易地让在协议某处做一个小改动的同时应用层却可以不加改动地继续正常运行。以太坊开发应该最大程度地做好这些事情以助益于整个加密货币生态系统,而不仅是自身。

无歧视原则

协议不应主动地试图限制或阻碍特定的类目或用法,协议中的所有监管机制都应被设计为直接监管危害,不应试图反对特定的不受欢迎的应用。人们甚至可以在以太坊之上运行一个无限循环脚本,只要他愿意为其支付按计算步骤计算的交易费用。

认识以太坊

很多人即使看了许多相关的技术资料,仍然难以清晰的理解什么是以太坊,为了让你更加简单直白的理解什么是以太坊,我们以传统的Client/Server的架构来作对比。

传统的Web应用一般都由两部分组成,客户端(Client)和服务器端(Server)。

用户通过客户端的应用例如(浏览器,curl/wget 命令行工具)与服务器端的web应用交互。这种情景下,服务器端是中心化的,所有的客户端都是通过访问这个唯一的中心化服务器获取资源以及进行用户想要实现的功能操作。

这里需要记住两个概念。

1. 中心化系统(即传统的Client/Server架构)

2. 去中心化系统(以太坊)

可以把以太坊想象成一个由来自全世界成千上万的一个个计算机节点组成的一个超大计算机平台,你可以在这个平台上面开发去中心化应用(Dapp),编写智能合约(Smart Contract),执行转账交易等。所有的节点相互连接并且每个节点可以拥有整个平台的代码和区块链数据的完整备份。由于节点数量众多,只要你开发的应用已经在以太坊上面成功部署,那你的应用几乎是永远可以被随时访问的(即使有部分节点宕机或出现故障,仍有很多其他的节点在维持网络的运行。这个是传统的中心化系统(C/S架构)无法做到的,只要系统的中心服务器出现一点小故障,都可能导致客户端无法访问服务器的资源)。

以太坊架构与以太坊区块链

没有中心化的服务器端,所有客户端通过与节点上的实例化应用进行交互。

那么,什么是以太坊区块链呢?以太坊区块链主要由2部分组成。

1. 数据库: 以太坊网络的所有交易都会储存在区块链里,部署一个Dapp,就算是一次交易。举个实际应用例子,比如我们开发一个投票的应用,每个用户都可以给候选人投票,那么每次投票给候选人就可以当作是一次交易。所有这些交易记录都是公开可见,可被验证并且无法篡改。那么以太坊是怎么实现这些功能并且保证整个网络的安全性呢?这就涉及到密码学技术以及分布式系统的共识机制。

2. 代码: 除了储存所有的交易记录,以太坊区块链还会储存所有智能合约代码。目前,绝大多数的智能合约都是用 Solidity语言编写开发,Solidity Compiler 会把智能合约代码编译成 Ethereum Byte Code 然后把这些 Byte Code 部署到区块链,再在 EVM(Ethereum Virtual Machine 以太坊虚拟机)上执行这些Byte Code。

图 里面的Web3js 是一个js库,通过这个库可以让Dapp的前端与区块链里的智能合约进行交互。

以太坊架构 以太坊区块链

组成以太坊各个部分的概念

2.1????智能合约(Smart Contract)

第一部分里我们讲过,用 Solidity 语言编写开发并部署到以太坊区块链上面的应用,称为智能合约。作为刚开始学习以太坊的你,肯定会觉得懵逼,为什么这些应用会叫做智能合约?通常意义上,合约是双方或者多方之间拟定的具有法律效应的协议。当我们把这些协议通过代码来呈现并把他们发布到区块链上,我们就有了数字合约。以太坊区块链运用技术手段来保证这些数字合约,一旦达成条件,就一定会按照协议强制执行,这就是为什么这些数字合约会被称为智能合约。

那么这些代码是如何强制执行的?发布到区块链上的智能合约,是无法修改的,并且条件达成时,一定会执行相应的代码。

举个实际的应用例子,比如我要开发一个领养宠物的应用,需要募集2万元(通过以太币的形式)来开发这个应用,对这个应用感兴趣的用户都可以捐助10-1000元。那么这个智能合约可以这样写,假如最后我在预期时间内完成了应用的开发,那募集的所有储存在以太坊区块链上面的以太币就会转到我的以太坊账户上,反之,则会相应的转回给每个用户的以太坊账户上。这种情景下,使用智能合约就拥有以下4个优点:

1. 所有用户捐助的以太币都储存在以太坊区块链的智能合约里,我或者用户都无法随意拿走这些以太币。

2. 一旦在预期时间内完成了应用开发,智能合约就会执行相应代码把以太币转到我的账户上。

3. 假如在预期时间内没有完成,智能合约就会执行相应代码把以太币转给相应的用户。

4. 智能合约一旦发布到以太坊区块链上,所有的代码都无法被修改或者篡改。

2.2????以太币和它的不同单位

好比现实世界里,每个国家都有自己的货币比如人民币,美金,英镑,欧元。以太坊也有自己的货币,以太币。

拿人民币作为例子,1元等于10角,1角等于10分。以太币也有相应的换算单位,Ether 以及 Wei。

以太币和它的单位换算

2.3? ? 以太坊地址

当我们登录银行网站时,需要输入用户名和密码进行验证,在银行网站里,用户名就是我们的身份标识。那么在以太坊区块链里,地址就是我们的身份标识。以太坊的地址示例:0x807a59ca6e531225f86dc5f5abfd42f779290325。每个地址都有对应的私钥,私钥就像是你的银行网站密码。你需要 地址+私钥 才能和以太坊区块链进行交互。关于地址和私钥有三点要记住的:

1. 地址是公开的,可以让所有人知道。

2. 私钥不能随意分享给其他人,最好只有你自己知道。

3. 地址和私钥都不保存在数据库里面,要自己保管好。

2.4 ????以太坊账户

有了地址和私钥就形成了以太坊的账户。账户可以保存余额(以太币)以及发送交易,以太坊有两种账户类型。

1. 外部拥有账户(EOA: Externally owned accounts): 地址+私钥的组合形成一个外部拥有账户。

1.1????你可以用这个账户来接收来自其他账户的以太币,也可以给其他账户发送以太币。

1.2????可以给智能合约发送交易。

2. 合约账户(Contract accounts): 这类账户是没有私钥的。当你把智能合约发布到以太坊区块链上时,就会生成这类账户。

2.1? ? 合约账户像EOA一样也可以发送或者接收以太币。

2.2? ? 合约账户里面有智能合约的代码。

2.3? ? 交易必须是通过EOA或者其他合约账户触发的。

2.5????以太坊钱包

钱包用来存放和管理以太坊账户,还有对交易进行数字签名,追踪余额等功能。

2.6? ? 以太坊(Gas, Gas Price, Gas Limit)

发布智能合约到以太坊区块链以及执行交易等操作都是有代价的,要给予矿工一定数量的以太币以让他们去执行相应的功能操作。那么执行什么操作需要对应什么价格呢?以太坊的黄皮书有写明标准,比如执行两个数相加需要3 units of work,两个数相乘则需要 5 units of work, 这里的unit of work 单位就是 Gas(气).

我们现在知道每笔交易需要多少Gas,但我们仍然不知道我们要向矿工支付多少以太币,这是由Gas价格决定的,比较有意思的是,你可以设置任何想要的Gas价格。例如,你可以说我的交易是"我愿意为每个Gas支付3Gwei"。如果交易需要100000Gas,并且将Gas价格设置为3Gwei,那最终的交易支付便是 3000000GWei。并且你设定的Gas价格越高,交易就开始得越快。因为大多数矿工按照Gas价格从高到低的顺序对交易进行分类,并选择Gas价格较高的交易纳入区块。如果将价格设置得较低,交易虽然总会被写进在区块中,但需要等待的时间就比较久。

要确切知道交易需要多少 Gas 是很困难的。作为开发人员,不能盲目执行交易,并意识到你的交易可能会花费数百美元的以太币。为了避免这种情况,可以指定一个Gas Limit,指明你愿意支付以执行交易的最大Gas数量。

2.7 Byte Code

智能合约代码一般是用 Solidity 语言编写的,接着代码会被 Solidity Compiler 编译成 EVM(Ethereum Virtural Machine 以太坊虚拟机) bytecode。实际上真正被发布到区块链上面的就是这些被编译后的 bytecode. 因为EVM只能读懂也只能执行这些 bytecode。

这样设计的优点是开发者可以选择自己想要的编程语言去开发智能合约。目前还有另外一种编程语言 Vyper (类似Python语言) 也可以编译成 EVM bytecode。假如你是一个语言设计者,你甚至可以根据黄皮书的标准实现自己的编程语言去开发智能合约。

用 Solidity 编写的智能合约代码

2.8 EVM(Ethereum Virtual Machine 以太坊虚拟机)

EVM是一个具备图灵完整,256bit的,并且允许任何人执行任意 EVM bytecode 的虚拟机。EVM同时也是以太坊协议的一部分。

Part 3? ? 以太坊工具与技术

3.1? ? Geth

到目前为止,我们讲解了以太坊基本的理论概念。 现在来看看以太坊有哪些工具,库和应用。

Geth是以太坊基金会提供的官方客户端软件,用Go语言编写。 当启动geth时,它会连接到网络中的其他以太坊客户端(节点)并下载区块链副本。 它会不断和其他节点通信,以保持区块链的最新副本。 它还可以挖掘区块并将交易添加到区块链中,验证区块中的交易并执行交易。

Geth附带一个JavaScript客户端(geth控制台),可用于连接到区块链。

通过Geth相互连接的节点

3.2 ????Web3.JS / Truffle

Web3.JS?是一个很流行的JavaScript库,用于与以太坊区块链进行交互。 你可以在任何前端框架中使用它来开发Dapp。

Truffle就像Web应用程序开发的框架,比如Ruby on Rails,Python的Django等一样,Truffle是用于开发Dapp的最流行的框架之一。 他们将区块链上编译和部署合同的复杂性抽象出来。

3.3 ????Ganache

使用比如geth等客户端进行开发可能效率不高,因为执行每个交易需要15秒。 为了解决这个问题,开发人员通常使用ganache进行开发。 你可以安装 ganache-cli 命令行版本或GUI版本。 Ganache 另一个好处是一开始就有10个测试帐户并且都预先加载了100个以太币。

3.4? ? ?Metamask

Metamask是以太坊社区中的流行钱包之一,你可以在Chrome里面以插件的形式安装他们。

3.5? ? Etherscan

由Etherscan公司提供的一项免费服务,提供方便的前端界面用来探索以太坊区块链。可以在这个网站上查看所有地址,交易,区块详细信息等。

3.6? ? Remix

一个浏览器IDE,可用来编写智能合约。 不仅可以把它用作编辑器,还可以用于编译和将智能合约部署到各种网络,并直接从IDE与它们进行交互。 它具有许多功能来选择各种编译器版本,调试智能合约等等。

以太坊的生态是正个区块链加密行业最庞大也是为了应用最广的,所以ETH能稳住第二把交椅,并在未来的某一天有超越比特币的可能!

目前以太坊生态最值得期待的项目就是bzz了,如果对bzz感兴趣的可以加入我们社群来了解一下!

—-

编译者/作者:星链投研大表哥

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

LOADING...
LOADING...