【白皮书系列】以太坊白皮书(比特币篇)

本来想再看一遍《精通比特币》,没想到打印的前面的一部分放在公司没有拿回来,也就看看以太坊的白皮书吧。好在以太坊白皮书前面的部分是对历史的回顾,主要是聊比特币,所以,就趁着比特币白皮书刚看完,把这一部分看了,进行一个梳理把。

[0. 摘要]

[译文] 向世界引入了两种未经测试的革命性的新概念。第一种就是比特币(bitcoin),一种去中心化的点对点的网上货币,在没有任何资产担保、内在价值或者中心发行者的情况下维持着价值。

[注] 网上发行、没有资产担保、没有中心化发行结构、没有内在价值,但是有价格,有交易,这本身就是一种奇迹。感觉像是互联网刚刚开始起步的时候,马云为他的中国黄页四处宣传时,人们大都不相信他。虽然可能通过电脑等几个小时看到一个页面,但是这个是虚拟的,总让人感觉不真实。区块链刚开始的时候也是这样,仅仅是区块上多了一笔交易,同样感觉到不真实。好在经过互联网、移动支付的洗礼,国人还是很容易理解和信任的。

[译文] 基于工作量证明的区块链概念使得人们可以就交易顺序达成共识。

[注] 区块中存储的是交易记录。而区块头中是有时间戳,所以区块链的区块是有时间顺序。但是交易也有时间戳,能够确认交易的顺序吗?有两种情况:交易一:A发送比特币给B,B在这笔交易之前没有比特币,那么交易二:B在发送比特币给C。两笔交易是有相互的关联关系的,这时很容易确认交易顺序。但是A发送所有的币给B,同时发送所有的币给C。那么这里的双重支付问题的交易顺序如何确定?是通过广播的形式来交给节点,节点之间来进行验证吗?验证的方法是收到交易的时间?

[译文] 区块链怎样应用于货币以外的领域。

有人说以太坊的作用:可以发行其他的货币。当然通过区块链的功能,还有一些游戏,如加密猫。一些社交应用,如qunqun。基本的套路是将一些信息应用到区块上。当然还有一些事物的资产来上链,如股票、房产等,不过这类应用还不够成熟。

[译文] “智能合约”- 根据事先任意制订的规则来自动转移数字资产的系统。以太坊的目标就是提供一个带有内置的成熟的图灵完备语言的区块链。

[注] 即以太坊可以进行比比特币更为复杂的应用:编写智能合约。这是以太坊的核心点,后面慢慢学习了解。

[1. 历史]

[术语] 拜占庭问题

[术语] 女巫攻击

[注] 比特币通过工作量证明来解决了拜占庭问题:谁的算力大,谁先解决掉计算难题,谁就有发言权。比特币通过计算机算力而非节点等解决了女巫攻击问题,因为算力的成本要比创建节点的成本高。

[2. 作为状态转换系统的比特币]

[注] 比特币只是进行交易(即转移),这里抽象成状态切换。其将UTXO集合视为一个状态,每次交易都会引起这个状态的切换。每笔交易又是一个转换函数:

  1. 交易的每个输入:
    . 如果引用的UTXO不存在于现在的状态中(S),返回错误提示
    . 如果签名与UTXO所有者的签名不一致,返回错误提示
  2. 如果所有的UTXO输入面值总额小于所有的UTXO输出面值总额,返回错误提示
  3. 返回新状态S’,新状态S中移除了所有的输入UTXO,增加了所有的输出UTXO。

第一步的第一部分防止交易的发送者花费不存在的比特币,第二部分防止交易的发送者花费其他人的比特币。第二步确保价值守恒。第三步是UTXO的状态的转换。

[注] 由于UTXO不在区块链中存储,其只会在节点中进行更新。节点中的UTXO是由创世区块开始遍历而得来的,全网络的区块链是一致的,更新得到的UTXO也是一致的。

[3. 挖矿]

一个节点要检查一个区块,要完成下列操作:

  1. 检查区块引用的上一个区块是否存在且有效。(这里应该是防止恶意的节点广播一个没有引用之前区块的区块,如创建了类似创世区块的区块,不过其伪装成第27000个区块。或者再一个无效区块上进行打包)
  2. 检查区块的时间戳是否晚于以前的区块的时间戳,而且早于未来2小时[2]。(保证时间的同步,这里使用节点时间的中位数)
  3. 检查区块的工作量证明是否有效。
  4. 将上一个区块的最终状态赋于S[0]。
  5. 假设TX是区块的交易列表,包含n笔交易。对于属于0……n-1的所有i,进行状态转换S[i+1] = APPLY(S[i],TX[i])。如果任何一笔交易i在状态转换中出错,退出程序,返回错误。
  6. 返回正确,状态S[n]是这一区块的最终状态。

这里的状态S,即前面的UTXO,并不在区块链中保存。挖矿的过程是计算SHASH256的难题。如:将得到的哈希视为长度为256比特的数值,该数值必须小于不断动态调整的目标数值,本书写作时目标数值大约是2190,也就意味着平均需要尝试264次才能生成有效的区块。因为是遍历试错的,且这里得到的哈希值与输入的交易值有关,所以无法得到一个很小的哈希值一直使用。

[4. 默克尔树]

默克尔树的主要作用是SPV(简化支付确认),由于交易记录的存在,全节点需要存储所有的交易记录,而其占据的存储空间较大,不利于手机等轻量级设备存储。那么轻量级设备只存储默克尔树的根,就可以进行验证交易是否正确。

[5. 其它的区块链应用]

以太坊之前有莱特币、狗狗币、达世币、比特币现金等一些山寨币或分叉币。以太坊之后又基于以太坊的ERC20协议创建出更多的币,据说有10万种的级别。感觉有点像早期联发科提供了CPU的硬件支持,来提供给各个山寨手机厂商来做手机。不过联发科没有像以太坊那样设定交易的手续费必须使用以太坊那样强势规定。哈哈,如果联发科设定类似以太坊的规定,又是什么现象?可是类似以太坊的规定如何在手机行业中设定?专利费?手机出货抽成类比都不大对。一个较为恰当的类比应该是:联发科免费提供芯片,每交易一台山寨手机(手机厂商卖给用户,用户之间买卖),都要消耗联发科股票(如何消耗,卖联发科的股票给联发科)。哈哈,天马行空的挺逗的。

[6. 脚本]

这类主要是讲解比特币的缺点,同时也是以太坊克服比特币缺点形成的优点:

. 缺少图灵完备性(没有循环语句)
. 价值盲
. 缺少状态(只有花费和未花费两种状态)
. 区块链盲

由于还没有深入学习以太坊,无法深入对比比特币和以太坊。所以,这里无法进一步解释。希望学习以太坊之后,能够清晰的理解这一小节的内容。

你可能感兴趣的:(【白皮书系列】以太坊白皮书(比特币篇))