学习视频来自:北京大学计算机系肖臻区块链学习视频
关于比特币部分的介绍可以看这篇文章
比特币部分01-13
文章目录
14 ETH 以太坊概述
这节课对以太坊做了概述性的介绍,重点讲述以太坊相比于比特币的重大改进,例如基于ghost协议的共识机制、工作量证明中使用的mining puzzle的设计、智能合约(smart contract)的概念和内涵等。
14.1 BTC与ETH
BTC和ETH为最主要的两种加密货币,BTC称为区块链1.0,以太坊称为区块链2.0。之前文章中提出了比特币设计中存在某些不足,以太坊便对其进行了改进。比特币和以太坊主要区别有以下几点:
- 以太坊的挖矿平均时间是20秒(最新),而比特币是10分钟。更短的挖矿时间更容易主链分叉,而且需要更多的区块确认,该交易才算是安全的交易了,比特币系统建议6个以上的区块确认的交易才是最终的确认的交易。
- 以太币是无限量发行的,挖矿会以通常一致的速度产生新的硬币,在硬叉时期偶尔会发生变化,而比特币则是每4年减半,比特币的总量是2100万。
- 在工作证明方面,采用了ethash算法,降低了专用ASIC在采矿中的优势。
- 交易费用因计算复杂性、带宽使用和存储需求(在一个称为GAS的系统中)而不同,而比特币交易则通过交易大小(以字节为单位)进行竞争。
- 以太坊Gas单位的价格可以在交易中指定。这通常以GWEI为单位进行测量。比特币交易的费用通常以每字节Satoshis为单位。
- 以太币的交易费用通常比比特币低很多。2017年12月,以太币交易费用中位数为0.33美元,比特币交易费用中位数为23美元。
- 以太坊使用的是一种账户系统(状态机),其中wei中的值从账户中借记并贷记到另一个账户中,而比特币的utxo系统更类似于支出现金和接受回报变化。
- 以太坊里面有叔块的概念,对未能成为主链的挖矿成功的区块也有挖矿奖励,相对来说,系统比比特币系统更公平。
- 以太坊最大的区别就是引入了编程上图灵完备的智能合约功能,虽然比特币也支持智能合约脚本的编写,但是这个理念是以太坊的精髓所在,让以太坊不仅仅是投资平台,而提供一种去中心化记账的平台。
14.2智能合约
首先,讨论去中心化货币。货币本身由政府发行,政府公信力为其背书,BTC通过技术手段取代了政府的职能。
现实生活中,我们经常提到“契约”或“合约”。合约的有效性也是需要政府进行维护的,如果产生 纠纷需要针对合法性合同进行判决。ETH的设计目的就是,通过技术手段来实现取代政府对于合约的职能。
那么,去中心化的合约有什么好处?
若合同签署方并非一个国家,没有统一的司法部门(如:众筹)。如果可以编写无法修改的合约,所有人只能按照相关参与方执行,无法违约。
15 ETH账户
本讲介绍以太坊的设计理念、对比了以太坊中account-based ledger与比特币中transaction-based ledger两种方案的优缺点以及由此带来的对double spending等安全攻击的解决方案
15.1 BTC与ETH账户交易
BTC系统是基于交易的账本,系统中并未显示记录账户有多少钱,只能通过UTXO进行推算。优点是隐私保护比较好 。但弊端是使用起来较为别扭,与我们日常生活出入很大。
A转给B钱的时候,需要说明币的来源。实际中只需要存钱说明来源,花钱则不用。此外,账户中的钱在花的时候,必须一次性全部花出去。
如图,B收到A的10个BTC,他想要给C3个BTC,如果按照1中方式,其余7个比特币会以交易费的形式给挖出区块的矿工。
因此,为了避免这种情况,便吸引采用2中方式,将3个BTC转给C,将剩余7个BTC转到自己的另一账户D上面。
Ethereum 采用的是账户模式,每个地址类似一个银行账户,转入转出记录都在同一个账户上,使用独特的参数Nonce来标记交易的先后顺序,系统中显示记录每个账户以太币的数量,转账是否合法只需要查看转账者账户中以太币是否足够即可,同时也不需要每次全部转账。以太坊基于账户的模式,天然地防范了双花攻击。然而,以太坊发这种模式也存在缺点,这种模式存在重放攻击的缺陷。A向B转账,过一段时间,B将A的交易重新发布,从而导致A账户被扣钱两次。
重放攻击(replay attack)应该如何避免?
答:给账户交易添加计数器记录该账户交易过多少次,转账时候将转账次数计入交易的内容中。系统中全节点维护账户余额和该计数器的交易数(nonce),因为有A的签名,收款方无法篡改nonce值,从而防止本地篡改余额或进行重放攻击。
试问:如果有人篡改怎么余额怎么办?比特币每一笔交易都需要说明来源所以无法伪造,以太坊不需要说明来源,如何防范这个问题?
答:每个用户的余额是系统中全节点需要保存维护的状态,下节课将会讲状态树,状态里保存的一个重要的域也就是balance你的余额,这个余额是没有办法篡改的,除非所有全节点都认为你的余额发生了变化
以太坊系统中存在两类账户:外部账户 和 合约账户。
外部账户:类似于BTC系统中公私钥对。存在账户余额balance和计数器nonce
合约账户:并非通过公私钥对控制。(不能主动发起交易,只能接收到外部账户调用后才能发起交易或调用其他合约账户)其除了balance和nonce之外还有code(代码)、storage(相关状态-存储)
合约账户如何调用?
答: 创建合约的时候会返回一个地址,知道这个地址就可以调用合约。调用过程中,代码不变但状态会发生改变
15.2 UTXO与账户模型比较
建议看看这篇文章,写的很清晰比特币和以太坊技术原理对比之账户模型
UTXO模型前面已经讲过第五章有介绍
账户模型:
在以太坊账户中,我们维护以下几个状态:
- nonce:外部账户为交易次数,合约账户为创建的合约序号。
- balance:此地址的以太币余额。
- storageRoot:账户存储内容组成的默克尔树根的哈希值。
- codeHash:账户EVM代码的hash值。合约账户即为合约代码的哈希值,外部账户为空字符串的哈希值。
UTXO优点
- 私密性比较强,理论上可以为每一笔输出设置一个地址。
- 无需维护余额等状态值。
- UTXO是独立数据记录,可以通过并行极大的提升区块链交易验证速度。
- 无需关心事务问题,只需要关心输出脚本即可。
- UTXO无法分割,每次交易都需要多个输出,分别为支出与找零。
账户模型优点
- 可以快速获取账户的余额,而比特币需要将指定地址所拥有的所有UTXO中的未花费交易总值整合。
- 节省空间,因为每笔交易只有一个输入一个输出。
- 可以较容易的实现图灵完备的智能合约。