LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > btc和eth的比较

btc和eth的比较

2020-06-12 牵手看世界 来源:区块链网络

本文原作者,来自其他,转载的一篇文章

一、比特币

比特币是一个分布式点对点网络系统,实质上,比特币本身也是协议,是一种网络,比特币类似于互联网货币。

二、比特币客户端

完整客户端

一个完整客户端,也称“全节点”, 是存储所有比特币交易的整个交易历史(由每一个用户完成的每一笔交易,曾经所有的每笔)的客户端,管理用户的钱包,并可以在比特币网络上直接开始交易。这类似于一个独立的电子邮件服务器,因为它处理着协议的各个方面,而不依赖于任何其它的服务器或第三方服务。

轻量级客户端

一个轻量级客户端存储用户的钱包,但需要依赖第三方服务器才能进行比特币交易,才能接入比特币网络。轻量级客户端不保存所有交易的完整副本,因此必须信赖第三方的服务器来获取交易确认。这就类似于-个独立的电子邮件客户端,能够通过邮箱服务器来访问一个邮箱,因为它在网络交流中依赖于一个第三方服务器。

在线客户端

在线客户端通过网页浏览器在第三方服务器上访问和储存该用户的钱包。这类似于在线邮件,因为它完全依赖于第三方服务器。

三、比特币的原理

比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共账簿,包含所有发生在比特币系统中的交易)组成。

交易:交易就是告知全网:比特币的持有者已授权把比特币转账给其他人。而新的持有者能够再次授权,转移给该比特币所有权链中的其他人。交易也包含每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。

四、比特币的交易

比特币交易的周期:

a.创建:可以被任何人在线上或线下创建,可以不是账户的授权签字人。一旦被创建,会被资金所有者签名,合法创建并签名就是有效的交易,可以接入比特币网络。

b.传送到比特币网络中:一笔交易需要传递至比特币网络,才能被传播,才能加入区块链中。

c.比特币交易在比特币网络中的传播:一旦一笔比特币交易被发送到任意一个连接至比特币网络的节点,这笔交易将会被该节点验证。如果交易被验证有效,就会将这笔交易传播到这个节点所连接的其他节点,交易发起者会收到一条表示交易成功的返回信息。如果验证无效,该节点就会拒绝同时发送拒绝的验证信息给发起者。比特币网络是一个点对点网络,每个节点的地位相等。每个节点都对外传播至它的相邻接点,使得一笔有效的交易可以以指数级传播,为了避免垃圾信息的溢发、拒绝服务攻击或其他针对比特币系统的恶意攻击,每一个节点在传播每一笔交易之前均需进行独立验证。

比特币交易的基本单位是未经使用的一个交易输出。UTXO,不能在分割的、被所有者锁住的或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。不存在储存比特币地址或账户余额的地点,只有锁住的、分散的UTXO。即在比特币的世界里,没有账户,没有余额,只有分散到区块链里的UTXO。系统的整个状态就是一组UTXO的集合,每个UTXO都有一个所有者和一个面值(可以理解为不同的硬币面值),而交易会花费若干个输入的UTXO,并根据规则创建若干个新的UTXO。

对于一个交易,必须包含有与每个输入的所有者匹配的签名;总输入必须大于等于总输出值。也就是说系统中用户的余额( balance)是用户具有私钥的UTXO的总值。

交易结构:包含输入值和输出值的数据结构。

五、比特币区块的确认

比特通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。确保只有有效的区块会在网络中传播。

当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有通过验证,这个区块将被拒绝。这些标准可以在比特币核心客户端的CheckBlock函数和CheckBlockHead函数中获得,它包括:

a.区块的数据结构语法上有效

b.区块头的哈希值小于目标难度(确认包含足够的工作量证明)

c.区块时间戳早于验证时刻未来两个小时(允许时间错误)

d.区块大小在长度限制之内

e.第一个交易(且只有第一个) 是coinbase交易。区块中的第一笔交易称为创世交易或coinbase交易。该交易是挖矿节点构造并用来奖励矿工们。创世交易没有输入,不消耗UTXO。只包含一个被称作是coinbase的输入,用来创建新的比特币。创世交易有一个输出,支付到这个矿工的比特币地址。

f.使用检查清单验证区块内的交易并确保它们的有效性

g.“交易的独立校验”。独立校验还确保了诚实的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。

每一个节点对每一个新区块的独立校验,确保了矿工无法欺诈。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。矿工们必须构建一个完美的区块,基于所有节点共享的规则,并且根据正确工作量证明的解决方案进行挖矿,他们要花费大量的电力挖矿才能做到这一点。

六、比特币的生成

新比特币的生成过程被称为挖矿是因为它的奖励机制被设计为速度递减模式。比特币的货币是通过挖矿发行的。矿工通过创造一个新区块得到的比特币数量大约每四年(或准确说是每派210,000个块)减少一半。比特币挖矿奖励以指数方式递减,直到2140年。届时所有的比特币(20999,999,980) 全部发行完毕。

七、以太坊

以太坊是一个开源项目,在“黄皮书”中定义了以太坊客户端的标准行为。以太坊客户端是一个软件应用程序,它实现以太坊规范并通过p2p网络与其他以太坊客户端进行通信。即使是不同的以太坊客户端,只要符合参考规范和标准化通信协议,就可以交互。以太坊有多种客户端,官方推荐,开发者使用最多的就是Geth,也就是Go-Ethereum。Geth是由以太坊基金会积极开发的Go语言实现

八、以太坊客户端

以太坊全节点

全节点是整个主链的一个副本,存储并维护链上的所有数据,并随时验证新区块的合法性。每个全节点都可以帮助其他新节点获取区块数据,并提供所有交易和合约的独立验证。运行全节点将耗费巨大的成本(硬件资源和带宽)

远程客户端

不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到现有网络,如我们常用的MetaMask。

轻节点

不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证。

九、以太坊的原理

以太坊的目的是基于脚本、竞争币和链上元协议(on-chain meta-protocol)概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、特性完备的、易于开发的和协同的应用。以太坊通过建立终极的抽象的基础层,内置有图灵完备编程语言的区块链,使得任何人都能够创建合约和去中心化应用并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。

以太坊中重要概念:

账户:包含地址、余额和随机数,以及可选的存储和代码的对象

-普通账户:可发送交易(转币或触发合约代码),由用户私钥控制,没有关联代码

-合约账户:有对应的以太币余额,有关联代码,由代码控制,可通过交易或来自其它合约的调用消息来触发代码执行,执行代码时可以操作自己的存储空间,也可以调用其它合约。

地址:账户地址,可以接收或发送交易

交易:可以发送以太币和信息,签名的数据包,由EOA发送到另一个账户。向合约发送的交易可以调用合约代码,并以信息数据为函数参数;向空用户发送信息,可以自动生成以信息为代码块的合约账户

Gas:以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源的消耗

十、以太坊的交易

以太坊是一个全局单例状态机,有且仅有交易可以触发状态更改,导致合约在EVM中执行。以太坊上的一切变化都始于交易。交易是由外部拥有的账户发起的签名消息,由以太坊网络传输,并被序列化后记录在以太坊区块链上。

以太坊的“状态”,就是系统中所有帐户的列表。每个账户都包括了一个余额(balance) ,和以太坊特殊定义的数据(代码和内部存储)。如果发送帐户有足够的余额来支付,则交易有效;如果接收帐户有相关代码,则代码会自动运行,并且它的内部存储也可能被更改,或者代码还可能向其他帐户发送额外的消息。

以太坊交易数据结构

交易是包含以下数据的序列化二进制消息:

nonce: 一个标量值,等于从这个地址发送的交易数,用于防止交易消息重播。nonce不会明确存储为区块链中帐户状态的一部分。相反,它是通过计算发送地址的已确认交易的数量来动态计算的。nonce强制来自任何地址的交易按顺序处理。使用nonce确保所有节点计算相同的余额和正确的序列交易,等同于用于防止比特币“双重支付”(“重放攻击”)的机制。

gas price:交易发起人愿意支付的gas单价(wei) 。

start gas:交易发起人愿意支付的最大gas量。

【当由于交易或消息触发EVM运行时,每个指令都会在网络的每个节点上执行。这都需要成本,用一定量的gas表示。gas 的价格实际上是由矿工决定的,他们可以拒绝处理gas价格低于最低限额的交易。gas不需要专门购买,只要账户中有以太币就可以,客户端在发送交易时会自动用以太币购买gas。

发起交易时的gas limit只是给定的消耗gas的上限,并不是实际要支付的gas数量。实际支付的gas数量是执行过程中消耗的gas ( gasUsed),交易完成后,gas limit中剩余的部分会返回给发送人。最终支付的gas费用是gasUsed对应的以太币费用。totalCost = gasPrice * gasUsed,该费用会作为交易手续费(Tx fee)支付给矿工】

to:目的以太坊地址。是一个20字节的以太坊地址。地址可以是EOA或合约地址。以太坊没有进一步的验证,任何20字节的值都被认为是有效的。如果20字节值对应于没有相应私钥的地址,或不存在的合约,则该交易仍然有效。若将交易发送到无效地址,将销毁发送的以太,使其永远无法访问。

value:要发送到目的地的以太数量。

data:可变长度二进制数据负载( payload)。

【交易的主要“有效负载”包含在两个字段中: value 和data。交易可以同时有value 和data,仅有value,仅有data,或者既没有value 也没有data。仅有value的交易就是一笔以太的付款,仅有data的交易一般是合约调用。没有value也没有data 的交易,只是在浪费gas,但它仍然是有效的交易。】

V,r,S:发起人EOA的ECDSA签名的三个组成部分。

十一、以太坊区块的确认

以太坊的区块链在很多方面类似于比特币区块链。它们的区块链架构的不同在于,以太坊区块不仅包含交易记录和最近的状态,还包含区块序号和难度值。比特币的难度调整是定期调整,以太坊随时调整。以太坊中的区块确认算法如下:

1. 检查区块引用的上一个区块是否存在和有效。

2. 检查区块的时间戳是否比引用的上一个区块大,而且小于15分钟。

3. 检查区块序号、难度值、 交易根,叔根和瓦斯限额(许多以太坊特有的底层概念)是否有效。

4. 检查区块的工作量证明是否有效。

5. 将S[0]赋值为上一个区块的STATE_ROOT。

6. 将TX赋值为区块的交易列表,一共有n笔交易。对于属于0……n-1的i,进行状态转换S[i+1] = APPLY(S[i],TX[i])。如果任何一个转换发生错误,或者程序执行到此处所花费的瓦斯(gas)超过了GASLIMIT,返回错误。

7. 用S[n]给S_FINAL赋值, 向矿工支付区块奖励。

8. 检查S-FINAL是否与STATE_ROOT相同。如果相同,区块是有效的。否则,区块是无效的。

这一确认方法乍看起来似乎效率很低,因为它需要存储每个区块的所有状态,但是事实上以太坊的确认效率可以与比特币相提并论。原因是状态存储在树结构中(tree structure),每增加一个区块只需要改变树结构的一小部分。因此,一般而言,两个相邻的区块的树结构的大部分应该是相同的,因此存储一次数据,可以利用指针(即子树哈希)引用两次。一种被称为“帕特里夏树”(“Patricia Tree”)的树结构可以实现这一点,其中包括了对默克尔树概念的修改,不仅允许改变节点,而且还可以插入和删除节点。另外,因为所有的状态信息是最后一个区块的一部分,所以没有必要存储全部的区块历史-这一方法如果能够可以应用到比特币系统中,经计算可以对存储空间有10-20倍的节省。

十二、以太币的发行规则

以太币(Ether)是以太坊内部的主要加密燃料,用于支付交易费用。

挖矿前:

2014年7月-8月,为众筹大约发行了7200万以太币。这些币有时被称为“矿前”。

众筹阶段后,以太币每年的产量基本稳定,被限制不超过7200万的25%。

挖矿产出:

-区块奖励:没产生一个新区块就会有一笔固定的奖励给工人,初始是5个以太币,现在是3个。

-叔块奖励:有些区块被挖的晚一些,因此不能作为主区块链的组成部分。比特币称之为“孤块”,完全舍弃。以太币称他们为“叔块”,并且在之后的区块中,可以引用它们,如果叔块在之后的区块链中作为叔块被引用,每个叔块会为挖矿者产出区块奖励的7/8.称为叔块奖励。

-叔块引用奖励:矿工每引用一个叔块,可以得到区块奖励的1/32作为奖励,最多可以引用两个叔块。

以太币产量未来的变化

以太坊出块机制从工作量证明(PoW)转换为股权证明(PoS)后,以太币的发行会有什么变化尚未有定论。股权证明机制将使用一个称为Casper的协议。在Casper协议下,以太币的发行率将大大低于目前的幽灵(GHOST)协议下的发行率。

十三、比特币UTXO模式和以太坊账户模式比较

比特币UTXO模式:

隐私性更高:如果用户对于他们收到的每笔交易都使用新的地址,那么通常很难将帐户相互链接。这很大程度上适用于货币,但不太适用于dapps,因为dapps通常涉及跟踪和用户绑定的复杂状态,可能不存在像货币那样简单的用户状态划分方案。

可扩展性: UTXO在理论上更符合可扩展性要求。因为我们只需要依赖拥有UTXO的那些人去维护基于Merkle树的所有权证明就够了,即使包括所有者在内的每个人都决定忘记该数据,那么也只有所有者受到对应UTXO的损失,不影响接下来的交易。而在帐户模式中,如果每个人都丢失了与帐户相对应的Merkle树的部分,那将会使得和该帐户有关的消息完全无法处理,包括发币给它。

比特币的若想查看某个人的余额需要遍历所有的UTXO,比较浪费时间,效率不高。

以太坊账户模式:

可以节省大量空间:不将UTXOs分开存储,而是合为一个账户;每个交易只需要一个输入、一个签名就可以产生一个输出。

更好的可替代性:货币本质上都是同质化、可替代的; UTXO的设计使得货币从来源分成了“可花费”和“不可花费”两类,这在实际应用中很难有对应的模型。

更加简单:更容易编码和理解。

便于维护持久轻节点:只要沿着特定方向扫描状态树,轻节点可以很容易地随时访问账户相关的所有数据。而UTXO的每个交易都会使得状态引用发生改变,这对轻节点来说长时间运行Dapp会有很大压力。

补充1.比特币和以太坊的区别:

比特币是一个点对点的现金交易系统。

以太坊是一个下一代智能合约和去中心化交易平台。应用级。

现在比特币建一个块给12.5个比特币。比特币10分钟一个块。以太坊出块速度十几秒。

比特币限制区块大小1M,以太坊没有限制区块大小。

补充2.比特币和以太币的区别:

比特币本质就是数字货币,主要作用就是货币。

以太币主要作用是用来计量和约束执行资源成本。

Nonce:一种用在挖矿中,是一个随机数,另一种在交易中和账户绑定的,类似于计数器,防止重放攻击。

补充3.幽灵协议(GHOST:Greedy Heaviest Observed SubTree)

就是目前以太坊基于POW的奖励机制下的协议。

以太坊出块时间:设计为12秒,实际14~15秒左右,快速确认会带来区块的高作废率,由此链的安全性也会降低。

·“幽灵”协议: Greedy Heaviest Observed SubTree,”GHOST"

-计算工作量证明时,不仅包括当前区块的祖区块,父区块,还要包括祖先块的作废的后代区块(“叔块”),将他们进行综合考虑。

-目前的协议要求探到第七层(最早的简版设计是五层),也就是说,废区块只能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而不能是更远关系的后辈区块。

-以太坊付给以“叔区块”身份为新块确认作出贡献的废区块7/8的奖励,把它们纳入计算的“侄子区块”将获得区块奖励的1/32,不过,交易费用不会奖励给叔区块。

—-

编译者/作者:牵手看世界

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

LOADING...
LOADING...