区块链:科普 | 如何开发出好用的轻量级客户端_以太坊交易流程

大约5年前,我们开始构建Trinity——以太坊网络上的新型“轻量级客户端”。那时候Geth刚刚发布了第一版LES协议,而我们曾心怀远大的梦想。

远大的梦想往往被现实所击倒。这些年来,我们得到了一些教训:

EVM计算从根本上来说是“繁重的”。

LES如同茫茫沙漠,客户端就是沙漠中渴求数据的旅人。

同步并维护状态的难度过高。

区块链上的历史记录在绝大多数情况下是无用的,却是必不可少的。

核心以太坊协议在本质上对“轻量级”不友好。

Python太慢了。

我们的目标是远大的,方法是有缺陷的。现在是该从头再来的时候了。

访问以太坊协议

如果你想要与以太坊协议交互,摆在你面前的是两个选择:

自己运行客户端。

亿万富翁Paul Tudor Jones:总是在投资组合中保留少量的比特币:金色财经报道,亿万富翁、传奇基金经理Paul Tudor Jones表示,总是要在投资组合中保留少量的比特币。[2023/5/15 15:04:25]

使用Infura等中心化提供商的服务。

上述两个选择可以满足大多数用例的要求,但是它们位于两个极端。以太坊客户端需要消耗大量磁盘空间,花费数小时乃至数天时间进行同步,而且对CPU和内存的占用通常很大。中心化提供商是一种简单可靠的方案,但是要以牺牲隐私性、安全性和去中心化原则为代价。

为什么我们不能有介于二者之间的第三种选择?互联网已经证明过很多次了了,在困难模式和简单模式之间,人们往往会选择后者。

自己托管邮件vs.Gmail

购买DVD或CDvs.盗版

盗版vs.流媒体

多位高管:区块链在投资、抵押贷款、支付方面取得了进展:金色财经报道,几家金融公司在第四季度财报电话会议中指出,区块链技术为金融公司及其客户提供速度、效率、24/7 执行和成本节约。

WisdomTree Investments?创始人兼首席执行官Jonathan Steinberg在公司 1 月 28 日的财报电话会议上表示,区块链技术在支付和金融服务领域变得无处不在,区块链技术与通用智能手机所有权和代币化与智能合约的融合,将有效地模糊储蓄、支付和投资之间的界限,从根本上改变消费者看待自己的钱和资产并与之互动的方式。

NBH银行(NBHC)首席数字官Valerie Kramer表示:USDF促进了区块链上美元价值的合规转移,消除了金融系统中的摩擦,扩大了数字获取金融的机会。

FB金融(FBK)首席行政官Wade Peery表示,在支付和结算方面,我们将能够从这些系统中削减大量成本,并在区块链上获得24/7、365实时结算。[2022/2/14 9:49:27]

自己运行以太坊节点vs.Infura

动态 | 南非女性亿万富翁在投资BTC亏损后已后悔其投资选择:南非女性亿万富翁Magda Wierzycka在投资比特币遭受巨额损失后已后悔了自己的选择。这位金融服务公司Sygnia Asset Management的首席执行官兼联合创始人将加密货币称为其投资组合里最大的“骷髅”。据悉,Wierzycka的第一个比特币是以4000美元左右的价格购买,其最后一次购买尝试则是在BTC价格为18000美元左右时。由此可推测,这位女性亿万富翁很可能在2017年12月历史性的牛市期间购买了她的最后一枚比特币,当时比特币曾一度逼近2万美元的历史高点,但之后BTC的价格暴跌至3100美元。 Wierzycka表示,把比特币贴上数字黄金的标签是一种,她自己也被了。她已不再相信加密货币,尤其是比特币——“我损失了这么多钱,我不再相信比特币了”。(Todays Gazette)[2019/8/25]

我想过采用隐私保护型解决方案。然而,我的所有交易都是通过MyCrypto或Metamask完成的。这两款钱包都来自中心化提供商。它们都支持用户使用自己的节点,但是就现有的客户端来说,我认为这么做成本太高。如果我们想与这些中心化解决方案争夺市场份额,我们需要为用户提供更好的选择。

MIT Media Lab:大多数ICO不在投资者保护法律范围内:今日日本金融厅第四次加密货币交易所研讨会召开并公布会议资料。公布的资料显示,MIT Media Lab就加密金融话题指出,ICO融资促进投资和消费,表现在开发者可以通过收益来构建网络、发起者可以被分配获得预挖的Token、Token可以互相转换和交易、Token发行后优先服务于网络运行、开源开发大部分是中心化的、促进货币政策的制定。此外,在ICO投资者保护方面要注意几方面,分别为对“投资”和“效用性”Token的错误区分、大多数ICO不在投资者保护法律范围内、ICO局频发、投资者保护框架与消费者利益保护法有偏差、经济增长和发行方的利益来自于投资者信心。[2018/6/15]

我们对客户端的要求是:

能够在资源有限的设备上运行

公开标准“钱包”应用所需的API

不需要同步

从用户的角度来说,我希望让客户端时刻保持运行,而不会影响我的设备的性能。我希望在离线一段时间后,再上线时无需等待客户端同步。

这就是我心中的“圣杯”,是我舍命也要攀登的高峰。

钱包

我们这里讲的是如何为钱包构建一个完美的客户端。钱包无处不在,而且主要由中心化提供商支持。总的来说,钱包要满足以下需求:

追踪区块链的最新区块

查看账户余额和nonce

读取合约信息

估算交易的gaslimit

发送交易

监控需要打包的待处理交易

大多数钱包都采用标准化的JSON-RPCAPI。根据上述需求转化成的JSON-RPC端点如下所示:

eth_blockNumber用来追踪链首块

eth_getBalance和eth_getTransactionCount用来查看账户信息

eth_call用来读取合约信息

eth_estimateGas用来估算gaslimit

eth_sendRawTransaction用来发送交易

eth_getTransactionReceipt表示交易已经被挖出

如果我们更深入分析该功能的必备条件,就会得到更低一级的需求:

访问账户和合约存储以支持eth_call、eth_estimateGas、eth_getBalance和eth_getTransactionCount

访问gossip网络来追踪链首块和eth_sendRawTransaction

访问链上历史记录来获得eth_getTransactionReceipt

因此,如果我们可以满足这些需求,就可以构建一个适合轻量级钱包的客户端,不需要同步,也无需牺牲隐私性和安全性。

如今的以太坊网络

目前,以太坊客户端可以在以太坊协议和LESDevP2P协议之间进行选择。

LES协议采用服务器/客户端模型。在该模型中,数据会根据要求从服务器流向客户端。该协议不允许客户端通过任何有意义的方式返回数据,这点可以从协议状态看出。根据我的经验来看,LES协议中的服务器和客户端在数量上严重失衡。运行服务器的成本很高,现有服务器的数量不足。这就导致LES变得不可靠,而且经常会变得完全不可用。

以太坊协议则另有缺陷。该协议很好地达到了目的,确保网络中所有的节点都尽可能地复制了完整的历史记录和状态数据。这对客户端的要求很高。网络中的每个节点都必须保存完整的历史记录和状态。没有保存这些数据的节点不太可能保持健康的点对点连接,可能会在无法满足对等节点的数据要求时断开连接。

在本系列文章中,我们想要解构以太坊协议这一“庞然大物”。该协议包含了我们理想的客户端类型的所必备的一切功能。它的设计适合全节点和矿工,但是不适合我们所概述的轻量级客户端。

解构以太坊协议

让我们将目光转向以太坊协议……

我们需要解决这个问题。在与以太坊协议交互时,人们可选择的方式有限,而且高度依赖中心化提供商。当前的网络状态就预示了未来可能发生的情况。

我们构想了另一种适用于以太坊钱包的轻量级客户端。这一构想不只是一个想法,而是以实验、原型以及我们对现有协议不断深入的认知为基础的。

我们正在研究的解决方案需要对核心以太坊协议进行一些修改,以便支持该用例。在该系列的下一篇文章中,我将概述需要修改和新增的部分,以及我们计划如何去实现它们。最重要的是,我将讲述我自己对这一新型轻量级客户端的用户体验的期望。

原文链接:https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/作者:PiperMerriam翻译&校对:闵敏&阿剑

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-4:951ms