Ethereum学习之路 ——账户模型

概述

1.mining puzzle: 相较于比特币的 ASIC 矿机,以太坊为了避免挖矿专业化,采用了 memory hard mining puzzle 的挖 矿方式.这样设置的目的是在一定程度上限制了 ASIC 芯片的使用。将来以太坊将会从PoW 转为 PoS.

2.智能合约: 比特币之后,人们不禁会想,除了货币可以去中心化,还有什么是可以去中心化的?以太坊提供了一种 去中心化的合约 的支持。所谓的 去中心化的合约 是什么呢?现实中的合约是靠第三方可信的机构来维持的,如:合约有问题,想解决就要到法院打官司。如果合同是可以通过代码来实现,就可以将其放到区块链上,通过区块链的不可篡改性来保证代码的正确运行。什么时候用呢?如果一个合同的签署方是来自世界各地的,没有一个统一的司法机构,这时要用司法手段来维护合同的有效性是比较困难的,这时用智能合约就比较合适了。

账户模型

比特币是基于交易的模型,以太坊是基于账户的模型。系统中要显式的展示账户中有多少个以太币,A转账给B,不用说明币的来源,只需查看A的账户是否有足够多的余额。

基于账户的模型对于double spending attack 有天然的防范。

  • 重放攻击:A转帐给B,A认为转账已经完成了,这时假设B是有恶意的,将该转账在区块链上重新广播一次,A便会再给B转账一次。

以太坊是如何防范重放攻击呢?
很简单,加一个交易次数计数器。这个交易次数要成为交易内容的一部分,一起发布出去,交易和交易次数都是受到交易者的签名保护的。每次发起交易时,计数器加1。如果有人重放该交易,其他节点会发现该交易已经被执行过了,就不会再执行。假设A当前的nonce是13,A发起一个对B的转账,nonce+1,其他节点发现nonce为13的交易没有被执行,就会执行该交易,并将自己所维护的nonce改为13+1即14,如果B重放该交易,其他节点则会发现nonce为14的交易已经被执行过了,就不会再执行。

以太坊中的账户分为两种,一类是 外部账户 ,一类是 合约账户

  • 外部账户
    • 外部账户是通过公私钥对来控制的,一个外部账户有 balance(余额) 和 nonce (计数器)。
    • 外部账户可以发起交易。
  • 合约账户
    • 合约账户有 balance,nonce,code(代码),storage(代码状态)。
    • 合约账户不能主动发起一个交易,只有外部账户才能发起交易,但如果外部账户发起一个交易,调用了一个合约账户,这个合约账户可以发送一个 message 来调用另一个合约账户。
    • 创建合约账户会返回一个地址,通过该地址可以调用合约账户 。
    • 合约账户中的code是不变的,storage是可变的。

为什么要设计一种新的账户模型,而不用比特币的基于交易的模型呢?
因为智能合约的存在,以太坊中比较希望使用者有一个固定的身份,如果是基于交易的模型,合约账户的地址发生改变的,使用者向合约账户中转账后,可能找不到当初转账的那个合约账户。

你可能感兴趣的:(Ethereum)