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