主页 > imtoken下载app > 区块链2.0 以太坊谈话(3)

区块链2.0 以太坊谈话(3)

imtoken下载app 2023-01-18 19:20:12

进一步应用:

(1)保存钱包。假设爱丽丝想保护她的资金安全,但她担心丢失或破解她的私钥。她将自己的以太币放入和鲍勃签署的合约中,如下图所示,这份合同是一家银行:

(1)Alice 一个人每天最多可以提取 1% 的资金。

(2)Bob 一个人每天最多可以提取他资金的 1%,但是 Alice 可以用她的私钥创建一个交易来取消 Bob 的提款权限。

(3)爱丽丝和鲍勃一起可以随意提款。一般来说爱丽丝每天1%就够了,如果爱丽丝想提多可以联系鲍勃帮忙。如果爱丽丝的私钥被盗,她可以立即找到 Bob 将她的资金转移到一个新的合约中。如果她丢失了她的私钥,Bob 可以慢慢取款。如果 Bob 行为不端,她可以关闭他的取款权限。

(2)@ >作物保险。人们可以轻松地创建一份以天气条件作为数据输入而不是任何价格指数的金融衍生品合约。如果爱荷华州农民根据爱荷华州降雨条件金融衍生品购买反向支付以太坊全节点挖矿,那么如果干旱时,农民会自动收到补偿,如果雨水充足,他会很高兴,因为他的收成很好。

(3)去中心化的数据发布者。对于基于差异的金融合约,实际上可以通过“谢林点”协议将数据发布者去中心化。谢林点的工作原理如下:N方为给定数据(例如 ETH/USD 价格)向系统提供输入值,所有值都被排序,每个提供 25% 到 75% 值之间的节点都会得到奖励,并且每个人都被激励提供别人会提供的答案,大量玩家实际上能认同的答案显然是默认的正确答案。去中心化协议。

(4)云计算。EVM 技术也可用于创建可验证的计算环境,允许用户邀请其他人执行计算,然后有选择地要求某些证据表明计算在随机选择的检查点正确完成. 这使得创建一个云计算市场成为可能,任何用户都可以使用他们的台式机、笔记本电脑或专用服务器参与其中,可以使用现场支票和保证金 确保系统值得信赖(即没有节点可以从作弊中获利) . 虽然这样的系统可能并不适合所有任务;例如,需要高级进程间通信的任务在大型节点云上不容易完成。但是,其他一些任务可以轻松并行化;遗传算法等项目可以轻松完成在这样的平台上进行。

(5)点对点赌博。任何数量的点对点赌博协议都可以迁移到以太坊区块链上,例如 Frank Stajano 和 Richard Clayton 的 Cyber​​dice。实际上最简单的赌博协议是如此简单的合约押注下一个区块的哈希值和猜测值之间的差异,从中可以创建更复杂的赌博协议,以实现接近零的费用和无作弊的赌博服务。

(6)预测市场。无论是预言机还是谢林,预测市场都将很容易实现,而带有谢林的预测市场可能会被证明是第一个主流“futarchy”作为去中心化组织管理协议的应用.

(7)链式去中心化市场,基于身份和信誉系统。

其他杂项:

改进的 Ghost 协议的实现:

以太坊全节点挖矿

“Greedy Heaviest Observed Subtree”(GHOST)协议是由 Yonatan Sompolinsky 和 ​​Aviv Zohar 在 2013 年 12 月开发的创新引入。 Ghost协议提出的动机是,目前快速确认的区块链由于区块无效率高而存在安全性低的问题;因为区块需要一定的时间(设置为 t)才能传播到整个网络,如果矿工 A 挖了一个区块,然后矿工 B 在 A 的区块传播到 B 之前恰好又铸造了另一个区块,则矿工 B 的区块无效并且不贡献到网络安全。还有中心化问题:如果A是一个拥有全网30%算力的矿池,B拥有10%的算力,那么A将面临70%的时间产生无效块的风险,而B 90% 的时间。生成无效块。因此,如果失效率高,A 会因为拥有更高的算力份额而变得更高效,结合这两个因素,一个出块速度快的区块链很可能会导致一个矿池拥有实际可以控制的算力在挖矿过程中所占的份额。

正如 Sompolinsky 和 ​​Zohar 所描述的以太坊全节点挖矿,通过在计算哪条链“最长”时包含陈旧块,ghost 协议解决了第一个降低网络安全性的问题;也就是说,不仅是一个块的父块和更早的祖先块,而且祖先块的过时的后代块(以太坊术语中称为“叔块”)也被添加以计算哪个块具有最大的工作量证明支持它。我们超越了 Sompolinsky 和 ​​Zohar 描述的协议来解决第二个问题 - 集中化趋势,以太坊支付“叔块”的 87.5% 的奖励用于标识有助于确认新块的过时块, 12.用​​于将它们纳入计算的“侄子块”@>5%,但是,交易费用不会奖励给叔块块。以太坊实现了幽灵协议的简化版,只下到第 5 层。它的特点是废弃的区块只能被其父代的第二代到第五代后代块用作叔块,而不是其父代的后代块。更远的相关(例如,父块的第六代后代块。块,或祖父块的第三代后代)被包括在计算中。有几个原因。首先,无条件的幽灵协议会在计算给定块的哪个叔叔是合法的时引入过多的复杂性。其次,以太坊使用的带有补偿的无条件幽灵协议剥夺了矿工在主链而不是开放的攻击者链上挖矿的动力。最后计算表明,带激励的五层幽灵协议即使出块时间为 15 秒也能达到 95% 以上的效率,而拥有 25% 算力的矿工从中心化中获得的收益不到 3%

费用。

由于每个发布到区块链的交易都会产生下载和验证成本,因此需要有一个规范的机制,包括交易费用,以防止垃圾邮件。比特币使用的默认方法是纯自愿交易费用,依靠矿工充当看门人并设置动态最低费用。由于这种方法是“基于市场的”,使矿工和交易发送者能够根据供需确定价格,因此这种方法在比特币社区中很受欢迎。然而,这种逻辑的问题在于交易处理不是市场;虽然很容易将交易处理直观地解释为矿工向发送者提供的服务,但矿工包含交易这一事实要求每个节点都对其进行处理,因此交易处理成本的最大部分由第三方承担,而不是由第三方承担。决定是否包含交易的矿工。因此,公地悲剧很有可能发生。

然而,当给出一个特别不精确的简化假设时,这种基于市场的机制的漏洞奇迹般地消除了它的影响。论据如下。假设:

一笔交易需要 k 步,向包含该交易的任何矿工提供奖励 kR,其中 R 由交易发布者设置,并且 k 和 R 对矿工提前(大致)可见。每个节点处理每个操作的成本为 C(即所有节点的效率相同)。有N个挖矿节点,每个节点的算力相同(即全网算力的1/N)。没有不挖矿的全节点。

当预期回报大于成本时,矿工愿意挖矿。这样,由于矿工有 1/N 的机会处理下一个区块,因此预期收益为 kR/N,矿工的处理成本仅为 kC。这是当 kR/N > kC 时,即 R > NC。矿工愿意将交易包括在内。请注意,R 是交易发送方提供的每步费用,是矿工从处理交易中获得的收益的下限。 NC 是整个网络处理一个操作的成本。因此,矿工只有在收益大于成本的情况下才会被激励。然而,这些假设与现实有几个重要的偏差:

由于额外的验证时间延迟了区块的广播,从而增加了区块成为陈旧区块的机会,因此处理交易的矿工比其他支付更高成本的验证人更有效率。存在没有挖矿的完整节点。在实践中,计算能力的分布最终可能会非常不平衡。

投机者、政敌和疯子确实存在破坏网络的使命,他们可以巧妙地设置合约以使其成本远低于其他验证者。上述第 1 点驱使矿工减少交易,第 2 点增加 NC;所以这两点的影响至少部分抵消了。第 3 点和第 4 点是主要问题;作为一种解决方案,我们只需构建一个浮动上限:没有一个块可以包含比 BLK_LIMIT_FACTOR 乘以长期指数移动平均线更多的操作。具体来说:

BLK_LIMIT_FACTOR 和 EMA_FACTOR 是设置为 65536 和 1.5 的常量,但可以进一步分析。

计算和图灵完备:

以太坊全节点挖矿

需要强调的是,以太坊虚拟机是图灵完备的;这意味着 EVM 代码可以实现任何可以想象的计算,包括无限循环。 EVM 代码以两种方式实现循环。首先,JUMP 指令允许程序跳回到代码中较早的某个位置,还有 JUMPI 指令允许像 while x < 27: x = x * 2 这样的条件语句来实现条件跳转。其次,合约可以调用其他合约,可能通过递归实现循环。这自然会引出一个问题:恶意用户是否必须通过强制矿工和全节点进入无限循环来关闭?之所以会出现这个问题,是因为计算机科学中有一个称为停机问题的问题:一般来说,没有办法知道给定程序是否会在有限的时间内结束。

如状态转换部分所述,我们的方案通过为每个事务设置运行的最大计算步骤数来解决该问题,如果超过计算步骤,则恢复计算但仍会产生费用。消息的工作方式相同。为了说明该方案背后的动机,请考虑以下示例:

(1)攻击者创建一个无限循环运行的合约,然后向矿工发送一个激活循环的交易,矿工将处理该交易,运行一个无限循环直到gas耗尽. 即使在gas耗尽的情况下交易中途停止,交易仍然是正确的(回到原来的地方),矿工仍然从攻击者那里赚取每一步计算的费用。

(2)攻击者创建了一个很长的无限循环,目的是迫使矿工持续计算很长时间,以至于在计算结束之前已经生成了几个块,矿工无法收集交易赚取费用。但是,攻击者需要发出一个 STARTGAS 值来限制可以执行的步骤数,因此矿工会提前知道计算将采取太多步骤。

(3)攻击者看到一条包含类似 send(A, self.storage); self.storage = 0 格式合约的消息,然后发送一笔交易,费用仅够执行第一步但不足以执行第二步(即提款但不减少账户余额)。合约作者无需担心防御类似的攻击,因为如果执行中途停止,所有更改都会恢复。

(4)金融合约通过提取九个专用数据发布者的中位数来最小化风险,攻击者接管其中一个数据提供者,然后将这个数据提供者变成可变的,如 DAO 部分所述, 运行无限循环以试图从该金融合约强制任何资金请求 所有尝试都因 gas 耗尽而终止. 但是, 金融合约可以在消息中设置 gas 限制以防止此类图灵完备性的替代方案是图灵不完备性,其中不存在 JUMP 和 JUMPI 指令,并且在某些情况下,在给定时间调用堆栈上只允许每个合约的一个副本存在。在这样的系统中,两者可能不需要上述收费系统以及围绕我们方案效率的不确定性,因为执行合同的成本将取决于其规模。

此外,图灵不完备性甚至不是一个很大的限制,在我们内部设想的所有合约示例中,到目前为止只有一个需要循环,甚至这个循环也可以被 26 行的重复所取代代码段。鉴于图灵完备性的严重问题和有限的好处,为什么不简单地使用图灵不完备语言呢?事实上,图灵不完备远非一个简单的解决方案。为什么?考虑以下合同:

现在,向 A 发送一个这样的交易,这样,在 51 笔交易中,我们有一个需要 2^50 步来计算的合约,矿工可能会尝试通过为每个合约维护最大可执行步骤来进行预检测,并且计算递归调用其他合约的合约的可能步骤 这样的逻辑炸弹,但它会阻止矿工为其他合约创建合约(因为上述 26 个合约的创建和执行可以很容易地放在一个合约中)。另一个问题点是消息的地址字段是一个变量,因此通常甚至可能无法提前知道合约将调用其他合约中的哪一个。

所以最后我们得出了一个惊人的结论:图灵完备的管理出奇的简单,而图灵不完备的管理在没有相同控制的情况下出奇的难,那么为什么不让协议图的精神完备呢?

货币和发行:

以太坊全节点挖矿

以太坊网络包括自己的内置货币以太币,它起到双重作用,为各种数字资产交易提供主要流动性,更重要的是它提供了支付交易费用的机制。为了方便和避免未来的争议期(参见当前的 mBTC/uBTC/satoshi 辩论),将提前设置不同面额的名称:

1:wei

10^12 : 萨博

10^15:芬尼

10^18:以太币

这应该被视为“元”和“分”或“比特”的Coin和Satoshi概念的扩展版本,在不久的将来我们预计“Ether”将用于一般交易,“Finny”用于微交易,“Sabo”和“Wei”用于讨论费用和协议实施。

发行模式如下:

(1)通过此次发售活动,以太币将以每BTC 1337-2000以太币的价格出售,该基金旨在为以太坊组织筹集资金并成功使用支付开发者补偿的机制在其他一些加密货币平台上。早期购买者将享受很大的折扣,出售的 BTC 将全部用于支付开发人员和研究人员的薪水和奖金,以及投资加密货币生态系统的项目。

(2)0.099x(x为销售总量)) 成功前将分配给BTC融资或其他确定性融资参与开发的早期贡献者,额外的0.099x 将分配给长期研究项目。

(3)自发布以来的每一年都会有 0.26x(x 是释放的总量)由矿工开采。

问题分解:

以太坊全节点挖矿

永久线性增长模型降低了比特币财富过度集中的风险,让现在和未来的人们有公平的机会获得货币,同时保持获得和持有以太币的动机,作为“货币供应增长”率”在长期内趋于零。我们还推断,随着时间的推移,总 会发生由于粗心和死亡造成的硬币损失。假设硬币的损失是年度货币供应量的固定比例,最终流通中的货币总供应量将稳定在等于年度货币发行量除以损失率的值上的值(例如,当损失利率为 1%,当供应量达到 30x 时,0.3x 被开采,0.每年损失 3x,达到平衡)。

除了线性发行方式外,以太币的供给增长率,和比特币一样,长期趋于零。

去中心化挖矿:

比特币挖矿算法基本上是让矿工稍微改变区块头几千次,直到最后某个节点的修改版本的哈希值小于目标值(目前在219左右0)。但是,这种挖矿算法容易受到两种形式的中心化攻击,一是挖矿生态系统是专门设计的,因此在比特币挖矿的特殊任务中,ASIC(专用集成电路)和计算机芯片被效率提高数千倍。意味着比特币挖矿不再是高度去中心化和平等主义的,而是需要大量资金的有效参与;其次,大多数比特币矿工实际上不再在本地完成区块验证,而是依靠中心化的矿池提供区块头。这个问题可以说是很严重了:写在这篇文章中,两个最大的矿池间接控制了大约 50% 的网络' s 哈希率,尽管当一个矿池或联盟尝试 51% 攻击时,矿工可以切换到其他矿池这一事实缓解了这个问题。

以太坊现在的目的是使用一种基于函数的挖掘算法,该函数为每 1000 个随机数随机生成一个唯一的哈希,其计算域足够宽,可以消除专用硬件的优势。这样的策略当然不会将中心化的好处减少到零,但也不需要这样做。请注意,每个个人用户都可以使用他们的个人笔记本电脑或台式机几乎免费完成一定数量的挖矿,但是在 100% CPU 使用率之后进行更多挖矿将产生他们的电力和硬件成本。 ASIC 挖矿公司需要从第一次哈希中支付电费和硬件费用。因此,如果中心化收益能够保持在 (E + H) /E 以下,那么即使做出 ASIC,普通矿工仍有生存空间。此外,我们计划设计挖矿算法,使得挖矿需要访问整个区块链,迫使矿工存储完整的区块链或至少能够验证每笔交易。这消除了对集中式矿池的需求;虽然矿池仍然可以起到平滑收益分配随机性的作用,但这个功能在没有集中控制的 P2P 矿池中同样可以做到。这样一来,即使大多数普通用户仍然倾向于选择轻客户端,增加网络中的全节点数量也有助于抵抗中心化。

可扩展性:

可扩展性问题是以太坊备受关注的地方。与比特币一样,以太坊也遭受着这样一个事实,即每笔交易都需要网络中的每个节点来应对这种困境的考验。比特币目前的区块链大小约为 20GB,以每小时 1MB 的速度增长。如果比特币网络处理 Visa 级的 2000tps 交易,它将以每三秒 1MB 的速度增长(每小时 1GB,每年 8TB)。以太坊也可能会经历类似甚至更糟的增长模式,因为在以太坊区块链之上有很多应用,不仅仅是像比特币这样简单的货币,而且以太坊全节点只需要存储状态,而不是完整的区块链历史使得事情变得更好了。

大型区块链的问题在于中心化风险。如果区块链规模增加到 100TB,可能的情况是只有极少数大商家会运行全节点,而普通用户使用轻量级 SPV 节点。这引发了对全节点合作伙伴关系进行欺诈性暴利的风险的担忧(例如,改变区块奖励,给自己 BTC)。轻节点将无法立即检测到这种欺诈行为。当然,至少可以存在一个诚实的完整节点,几个小时后,有关骗局的信息就会通过 Reddit 等渠道泄露,但到那时为时已晚:无论普通用户如何使已经产生的区块失效,在成功发起 51% 攻击的规模上,他们都会遇到巨大的不可行的协调问题。在比特币中,目前这是一个问题,但 Peter Todd 提出的改变可以缓解这个问题。

在不久的将来,以太坊将使用两种额外的策略来处理这个问题。首先,由于基于区块链的挖矿算法,至少每个矿工都会被强制成为一个全节点,这就保证了一定数量的全节点。其次,更重要的是,在处理完每笔交易后,我们将中间状态树的根包含在区块链中。即使区块验证是中心化的,只要有一个诚实的验证节点,验证协议就可以避免中心化的问题。如果矿工发布了不正确的区块,则该区块要么格式错误,要么状态 S[n] 错误。由于 S[0] 是正确的,因此必须存在第一个错误状态 S[i] 但 S[i-1] 是正确的,并且验证器将提供索引 i 以及处理 APPLY(S[i-1] 1] ,TX[i]) -> S[i] Patricia 树节点的期望子集。这些节点将被指示执行这部分计算,以查看结果 S[i] 是否与先前提供的值匹配。

以太坊全节点挖矿

此外,更复杂的是,恶意矿工发布不完整的区块进行攻击,导致信息不足,无法确定区块是否正确。解决方案是挑战-响应协议:验证者向目标交易索引发出挑战,接收到挑战信息的轻节点将不信任相应的块,直到另一个矿工或验证者提供 Patricia 节点的子集作为正确证据。

概述:去中心化应用程序

上述合约机制通过全网共识让任何人都可以在虚拟机上运行命令行应用程序(从根本上说)。 ,它可以将网络可访问状态更改为它的“硬盘”。然而,对于大多数人来说,用作交易发送机制的命令行界面缺乏足够的用户友好性,这使得去中心化成为一个有吸引力的替代方案。最后,一个完整的“去中心化应用程序”应该包括底层的业务逻辑组件【无论是否在以太坊中完全实现,使用以太坊和其他系统的组合(例如P2P消息传递层,其中一个计划放入以太坊)客户端)终端)或仅其他系统方法]和上层图形用户界面组件。以太坊客户端设计为 Web 浏览器,但包括对“eth”的支持,这是一个 Javascript API 对象,客户端中看到的特定网页可以使用该对象与以太坊区块链进行交互。从“传统”网页的角度来看,这些页面是完全静态的内容,因为区块链和其他去中心化协议将完全取代服务器来处理用户发起的请求。最后,去中心化协议有望以某种方式使用以太坊来存储网页本身。

结论:

以太坊协议最初被设想为密码学的升级版,通过高度通用的语言货币提供链上合约、提款限额和金融合约、赌博市场等高级功能。以太坊协议不会直接“支持”任何应用程序,但图灵完备编程语言的存在意味着理论上可以为任何交易类型和应用程序创建任何合约。然而,关于以太坊更有趣的是,以太坊协议比单纯的货币走得更远,围绕去中心化存储、去中心化计算和去中心化预测市场以及数十种类似概念和去中心化应用程序构建的协议,有可能从根本上提高计算效率行业,并通过首次增加经济层为其他 P2P 协议提供强有力的支持。最终也会出现大量与金钱无关的应用。

以太坊协议实现的任意状态转换概念提供了一个具有独特潜力的平台;与为数据存储、赌博或金融等单一目的而设计的封闭式协议不同,以太坊的设计是开放式的,我们相信它非常适合作为极其大量的金融和非金融服务的基础层。未来几年将出现的金融协议。

网址:

想收到造币技术和全套虚拟机资料

区块链技术交流QQ群:756146052 备注:CSDN