白皮书系列解读-ETH(以太坊)
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
白皮书系列解读-ETH(以太坊)
白皮书是区块链投资项目的必备知识,是判断你投资成败的依据,也可以分享出来帮你发现自己的问题。我对白皮书的解读,是阅读白皮书过程中的一个思考、一个注解、一个要点,甚至是一次“灵光闪现”,我不会对背后的逻辑和可行性做任何进一步的判断。
我选择解读项目的原则之一,就是看项目目前的热度。一方面可以了解它为什么热,另一方面可以提高自己的判断力。同时,我也开通了微信公众号(丁昆鹏YKPD),喜欢写作、英语、编程、区块链的朋友可以关注,一起成长。
点击进入官网:
.png
比特币的简史是什么?
1998 年,魏代提出的[b-money]成为第一个提出通过解决计算问题和去中心化共识来创造货币理念的提案,但该提案对于如何真正实现去中心化共识的细节却很少。
2005 年imToken下载,哈尔提出了可重复使用的工作量证明的概念,该系统利用 b-money 的理念和亚当·巴克 (Adam Back) 提出的计算难度较高的谜题,创建了加密货币的概念,但由于依赖可信计算作为后端,再次失败。
2009 年,去中心化货币首次在实践中实施,将通过公钥加密管理所有权的既定原语与追踪货币所有者的共识算法(称为“工作量证明”)相结合。
“工作量证明机制”解决了什么问题?
首先,它提供了一种简单且适度有效的共识算法,允许网络中的节点集体同意比特币分类账状态的一组规范更新。
其次,它提供了一种允许自由进入共识进程的机制,解决了决定谁影响共识的政治问题,并防止了女巫攻击。
比特币作为国家转型系统如何发挥作用?
.png
比特币等加密货币的分类账可以被认为是一个状态转换系统,其中有一个“状态”,其中包括所有现有比特币的所有权状态,以及一个接受交易并输出新状态(即结果)的状态转换函数。
例如,在标准银行系统中,状态是资产负债表,交易是将 ¥X 从 A 转移到 B 的请求,状态转换函数将 A 账户中的值减少 ¥X,并将 B 账户中的值增加 ¥X。如果 A 的账户首先变得小于 ¥X,则状态转换函数返回错误。
比特币中的“状态”是所有已开采但尚未使用的货币的集合,每个 UTXO 都有一个面额和一个所有者(由 20 字节的地址定义),本质上是一个加密公钥。
一笔交易由一个或多个输入组成,每个输入包含对现有 UTXO 的引用以及由与所有者地址相关联的私钥生成的加密签名;以及一个或多个输出,每个输出包含要添加到状态的新 UTXO。
状态转换函数定义如下:
1. 对于每个输入 TX:
如果引用的UTXO不在S中,则返回错误;
如果提供的签名与 UTXO 的所有者不匹配,则返回错误。
2. 如果所有输入UTXO的面额总和小于所有输出UTXO的面额总和,则返回错误。
3.返回S'时,删除所有输入UTXO,添加所有输出UTXO。
第一步的前半部分防止交易发送者花费不存在的币,第一步的后半部分防止交易发送者花费别人的币;第二步强制保护价值。
如何理解以太坊挖矿?
.png
比特币的去中心化共识过程需要网络中的节点不断尝试生成称为“区块”的交易包。
该网络设计为每十分钟产生大约一个块,每个块包含一个时间戳、一个随机数和一个参考。
前一个区块的哈希值以及自前一个区块以来发生的所有交易的列表。随着时间的推移,这将创建一个持续增长的“区块链”,该区块链不断更新以代表比特币账本的最新状态。
检查一个区块是否有效的算法如下:
检查该块引用的前一个块是否存在且有效;检查该块的时间戳是否大于前一个块的时间戳,并且小于未来2小时;
检查区块上的工作量证明是否有效;
我们的 S[0] 是前一个区块末尾的状态;
假设tx为包含n笔交易的区块的交易列表,若有应用程序返回错误,则退出并返回false;
返回 true 并且 S[n] 被注册为此块末尾的状态。
区块中的每个交易都必须提供从交易执行之前的规范状态到某个新状态的有效状态转换。
有两点需要注意:
首先,状态不以任何方式编码在块中;它纯粹是一种由验证节点记住的抽象,并且任何块都只能通过从状态开始并按顺序应用每个块中的每个交易来(安全地)计算;
其次,矿工将交易包含在区块中的顺序很重要;如果一个区块中有两个交易 A 和 B,使得 B 花费由 A 创建的 UTXO,那么如果 A 先于 B,则该区块有效,否则该区块无效。
如何攻击比特币?
比特币底层的密码学是安全的,因此攻击者会直接攻击比特币系统中不受密码学保护的部分:交易序列。攻击步骤如下:
1. 向商家发送 100 BTC 以换取一些产品(最好是可以快速交付的数字商品)。
2.等待产品发货;
进行另一笔交易,将相同的 100 BTC 发送给自己。
4.尝试让网络相信他的交易是第一个。
需要注意的是:
当原有的链和攻击者的新链完全分离时,判断的规则是,分叉时,最长的区块链被认为是事实。
如何认识树?
.png
比特币的一个重要可扩展性特征是,区块存储在多级数据结构中。区块的“哈希”实际上只是区块头的哈希,大约 200 字节的数据包含时间戳、随机数、前一个区块哈希以及称为树的数据结构的根哈希,该树存储了区块中的所有交易。
树是由一组节点组成的二叉树,树的底部有大量的叶子节点,包含底层数据;一组中间节点,每个节点都是两个子节点的哈希值;最后是一个单独的根节点,也是由两个子节点的哈希值组成,代表树的“顶部”。
树的目的是允许块中的数据被零碎地传送:一个节点可以从一个来源只下载一个块的头,从另一个来源下载与它们相关的树的一小部分,并且仍然确保所有数据都是正确的。
有哪些可替代的区块链应用?
1998年,尼克·萨博提出了用所有权来保障产权的概念;
该文件描述了“复制数据库技术的新进展”将如何允许基于区块链的系统存储土地所有者的登记,创建一个复杂的框架,其中包括自耕农、逆权侵占和格鲁吉亚土地税等概念;
它创建于 2010 年,被描述为一个去中心化的名称注册数据库。
人们希望能够拥有一个名为“”的账户。但问题是,如果一个人可以创建一个名为“”的账户,那么其他任何人都可以使用相同的流程为自己注册“”并冒充他们。唯一的解决方案是第一个文件范例,其中第一个注册的人成功,第二个注册的人失败 - 这个问题与比特币共识协议完美契合;
彩色币是作为一种协议而创建的,目的是让人们创建自己的数字货币,或者在大量铸造货币的情况下,在比特币之上创建一种数字代币化单位。
在彩色币协议中,通过公开为特定的比特币 UTXO 分配颜色来“发行”新货币,并且该协议递归地将其他 UTXO 的颜色定义为与创建它们的交易的输入的颜色相同。
- 其背后的想法是建立一个基于比特币的协议以太坊和比特币区块链钱包,使用比特币交易来存储交易,但具有不同的状态转换功能;
它已被用于实施某些类别的金融合同、名称注册和去中心化交易所。
如何理解“脚本”?
比特币脚本语言的局限性如下:
1.缺乏图灵完备性;
比特币脚本语言支持大量计算,但几乎不支持所有内容。缺少的主要类别是循环。
2.价值盲目性;
UTXO 脚本不提供对可提取金额的细粒度控制。
3. 缺乏状态;
多阶段合约或脚本没有机会维护任何其他内部状态。这使得制定多阶段期权合约、去中心化交易所要约或两阶段加密承诺协议(安全计算奖励所必需的)变得困难。这也意味着 UTXO 只能用于构建简单的一次性合约,而不是更复杂的“有状态”合约,
4.区块链盲目性;
UTXO 对于区块链数据(例如随机数、时间戳和前一个区块哈希)是盲目的。
什么是以太坊?
以太坊的目的是创建一种用于构建去中心化应用程序的替代协议,该协议提供了一组不同的权衡,我们认为这对于大量去中心化应用程序非常有用,尤其强调快速的开发时间、小型和很少使用的应用程序的安全性以及不同应用程序高效交互的能力。
以太坊的抽象基础:具有内置图灵完备编程语言的区块链,允许任何人编写智能合约和去中心化应用程序,他们可以在其中创建有关所有权、交易格式和状态转换功能的任意规则。
以太坊背后的哲学是什么?
1.简单;
以太坊协议应该尽可能的简单,即使是以牺牲一些数据存储或时间效率为代价;
2.普遍性;
以太坊设计理念的一个根本就是,以太坊没有“功能”;
3.模块化;
以太坊协议的各个部分应该尽可能设计成模块化和可分离的。
4.敏捷性;
以太坊协议的细节尚未确定;
5. 不歧视、不审查;
协议不应试图主动限制或阻止特定类别的使用。
如何理解“以太坊账户”?
在以太坊中,状态由被称为“账户”的对象组成,每个账户都有一个20字节的地址,状态转换是账户之间价值和信息的直接转移。
以太坊账户包含:
1、该随机数用于确保每个交易计数器每次只能处理一笔交易;
2. 账户当前的以太币余额;
3.账户的合约代码(如有);
4.账户的存储空间(默认为空)。
“以太币”是以太坊的主要内部加密燃料,用于支付交易费用。
账户有两种类型:外部拥有的账户,由私钥控制;合约账户,由合约代码控制。
外部拥有的账户没有代码,可以通过创建和签署交易从外部拥有的账户发送消息;在合约账户中,每当合约账户收到一条消息时,其代码就会激活,允许其读写内部存储并发送其他消息或依次创建合约。
如何理解“消息和交易”?
以太坊中使用“交易”来表示一个签名的数据包,其中存储了要从外部拥有的账户发送的消息。
此次交易包括:
1.电子邮件的收件人;
2.寄件人签名;
3. 从发送者转移到接收者的以太币数量;
4.可选数据字段;
5. 表示交易允许执行的最大计算步骤数的值;
6. 表示发送者为每个计算步骤支付的费用的值。
如何理解“新闻”?
消息是永远不会序列化的虚拟对象,并且仅存在于以太坊执行环境中。
消息包含:
1. 消息的发送者(隐式);
2.电子邮件的收件人;
3. 随消息传输的以太网数量;
4.可选数据字段;
5. 一个值。
本质上,消息就像一笔交易,只不过它是由合约而不是外部参与者生成的。
当正在执行代码的合约执行生成并执行消息的 CALL 操作码时,就会生成一条消息。
与交易一样,消息会导致接收方账户运行其代码。因此,合约可以像外部参与者一样与其他合约建立关系。
如何理解“以太坊状态转换函数”?
.png
以太坊状态转换函数定义如下:
1. 检查交易格式是否正确(即值的数量是否正确)、签名是否有效以及 nonce 是否与发送者账户中的 nonce 匹配。如果不匹配,则返回错误;
2. 计算交易费用,并从签名中确定发送地址。从发送者的账户余额中减去费用,并增加发送者的 nonce。如果没有足够的余额来使用,则返回错误;
3、初始化GAS=,从每个字节中取出一定量的“gas”,用于支付交易的字节数;
4. 将交易价值从发送方账户转移到接收方账户。如果接收方账户尚不存在,请创建该账户。如果接收方账户是合约,请运行合约代码直至完成或直到执行耗尽“gas”;
5、如果由于发送者资金不足,或者代码执行耗尽,导致价值转移失败,则除支付费用外,所有状态变化都将被还原,并且费用将添加到矿工的账户中;
6.否则,所有剩余的gas费用将退还给发送者,并且消耗的gas费用将发送给矿工。
状态转换函数的流程如下:
1.检查交易是否有效、格式是否正确;
2. 检查交易发送者是否至少有 2000 * 0.001 = 2 以太币。如果是,则从发送者的账户中减去 2 以太币;
3.初始化“gas” = 2000;假设交易长度为170字节,字节费用为5,减去850,这样还剩下1150“gas”;
4.从发送者的账户中扣除10+以太币并将其添加到合约的账户中;
5.运行代码;
6.将 963 * 0.001 = 0.963 以太币添加回发送者的账户,并返回结果状态。
注意:
首先,消息在恢复方面与交易等效:如果消息执行耗尽了 gas,则该消息的执行以及由该执行触发的所有其他执行都会恢复,但父执行不需要恢复;
其次,有一个操作码,用于创建合约;它的执行机制通常类似于CALL,但是执行的输出决定了新创建合约的代码。
如何理解“代码执行”?
以太坊合约中的代码是用一种低级、基于堆栈的字节码语言编写的,称为“以太坊虚拟机代码”或“EVM 代码”。
代码执行是一个无限循环,包括在当前程序计数器(从零开始)重复执行操作,然后将程序计数器加一,直到代码结束或到达或检测到错误或 STOP 指令。
有三种类型的空间可用于访问存储的数据:
一种是栈,是一个后进先出的容器,其值可以被压入和弹出;
第二个是内存,一个可无限扩展的字节数组;
第三是合约的长期存储,即key/value存储,不同于计算结束后被重置的堆栈和内存,存储可以持续很长时间。
代码还可以访问传入消息的值、发送者和数据以及块头数据,并且代码还可以返回数据的字节数组作为输出。
如何理解“区块链与挖矿”?
.png
以太坊与比特币在区块链架构方面的主要区别在于,与比特币(仅包含交易列表的副本)不同,以太坊区块包含交易列表和最新状态的副本。
以太坊中基本的区块验证算法如下:
1.检查引用的前一个区块是否存在且有效;
2. 检查该区块的时间戳是否大于所引用的前一个区块的时间戳,并且小于未来的15分钟;
3. 检查区块编号、难度、根、叔根和 gas 限制(各种低级以太坊特定概念)是否有效;
4.检查区块上的工作量证明是否有效;
5.我们的S[0]处于前一个区块末尾的状态;
6. 令TX为该区块的交易列表,包含n笔交易;
7、我们是S[n],将向矿工支付区块奖励;
8. 检查状态的树根是否等于区块头中提供的最终状态根。如果是,则该区块有效;否则,则无效。
执行合约代码的过程是状态转换函数定义的一部分,而状态转换函数是区块验证算法的一部分,因此如果将交易添加到区块中,则该交易 B 产生的代码执行将由现在和将来下载并验证区块 B 的所有节点执行。
以太坊有哪些应用?
第一类是金融应用,为用户提供更强大的资金管理和合约方式;
其中包括子货币、金融衍生品、对冲合约、储蓄钱包、遗嘱,甚至最终包括某些类别的全面雇佣合约。
第二类是半金融应用,其中涉及金钱,但所做的工作也有大量非金钱方面的内容;一个完美的例子是对解决自我执行的计算问题的赏金。
第三类应用,例如在线投票和分散治理,根本不是金融应用。
如何理解“代币体系”?
区块链代币系统的应用如下:
代表资产的子货币(例如美元或黄金);
公司股票;
智能财产的个人代币;
安全、不可伪造的优惠券;
与传统价值无关联、作为积分激励体系的代币体系。
在以太坊中,代币系统非常容易实现。关键在于,货币或代币系统本质上是一个具有以下操作的数据库:
从 A 中减去 X 个单位,并将 X 个单位给予 B,前提是 (1) A 在交易前至少拥有 X 个单位,且 (2) 该交易得到 A 的批准。*
实现代币系统所需要做的就是将此逻辑实现到合约中。
理论上,基于以太坊的代币系统作为子货币可以包含基于比特币的链式元货币所缺乏的另一个重要功能:直接用该货币支付交易费用的能力。
实现这一目标的方式是,合约将维持以太币余额,它将向付款人退还以太币,并通过获取其收集的内部货币单位并在持续进行的拍卖中转售来补充该余额。
如何认识金融衍生品和稳定价值货币?
金融衍生品是“智能合约”最常见的应用,也是用代码实现最简单的应用之一。金融合约实施的主要挑战是大多数合约都需要参考外部价格代码。
最简单的方法是通过由特定方(例如纳斯达克)维护的“数据馈送”合约,以便该方能够根据需要更新合约,并为该合约提供一个接口,允许其他合约向该合约发送消息,并获得提供价格的回复。
对冲合约如下:
1、等待甲方输入1000以太币;
2、等待乙方输入1000以太币;
3. 通过查询数据馈送合约计算得出的1000以太币的美元价值记录在存储中,例如$x;
4. 30 天后,A 或 B 中的任何一个都可以“重新激活”该合约,这样价值 x 美元的以太币(通过再次查询数据馈送合约来计算新的价格)就会发送给 A,其余的发送给 B。
如何理解“身份与声誉体系”?
合约很简单;它只是以太坊网络中的一个数据库,可以添加,但不能修改或删除。
任何人都可以注册一个具有特定价值的名称,并且该注册将永久有效。更复杂的名称注册合约还将具有允许其他合约查询该名称的“功能条款”,以及允许名称“所有者”(即第一个注册商)更改数据或转让所有权的机制。甚至可以添加声誉和信任网络功能。
如何理解“去中心化文件存储”?
以太坊合约可以允许开发一个去中心化的文件存储生态系统,其中个人用户可以通过出租自己的硬盘来赚取少量钱,而未使用的空间可以用来进一步降低文件存储的成本。
这个装置的关键支撑部分是“去中心化合约”,其原理如下:
首先,将所需数据分成块,对每个块进行加密以保护隐私,并由此构建一棵树;
然后根据以下规则签署合约:每 N 个区块,合约将在树中选择一个随机索引(使用可从合约代码访问的前一个区块哈希作为随机源),并将 X 个“以太币”提供给第一个为交易提供简化付款验证的实体 - 就像树中该特定索引处的区块所有权证明一样。
当用户想要重新下载他们的文件时,他们可以使用小额支付通道协议(例如每32千字节支付1萨博)来恢复文件;
该协议的一个重要特性是,虽然看起来可以相信许多随机节点不会决定忘记该文件,但通过秘密共享将文件分成多个部分可以将风险降低到接近零。
如何理解“去中心化自治组织”?
“去中心化自治组织”的一般概念是一个虚拟实体,拥有特定的成员或股东,这些成员或股东可能拥有 67% 的多数票,有权使用实体的资金并修改其代码。成员将集体决定组织应如何分配资金。
另一种方案或许可以称为“去中心化自治社区”,即让所有成员在决策中享有同等份额,并要求 67% 的现有成员同意添加或删除成员。一人只能拥有一个会员资格这一要求需要整个团体共同执行。
另一种模式是去中心化的公司,任何账户都可以拥有零股或多股,需要三分之二的股份才能做出决定。
完整的框架将涉及资产管理功能、提出买卖股票的能力以及接受报价的能力(最好在合同中采用订单匹配机制)。
还有哪些其他应用程序?
1.储蓄钱包;
2.农作物保险;
3. 去中心化的数据馈送;
4、智能多重签名托管;
5.云计算;
6. 点对点赌博;
7.预测市场;
8. 使用身份和声誉系统为基础的链上去中心化市场。
©版权归作者所有,转载或内容合作请联系作者。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。