科普 | 如何开发出好用的轻客户端,Part-1
现在是 2021 年,以太坊区块链已经运行 5 年多了。但目前还没有不使用中心化提供者就能与以太坊协议交互的可靠的轻量级方式。各种研究表明,只要你能够访问必要的数据,就可以构建这一功能。在本文中,我们将介绍什么是区块链历史记录,以及需要解决哪些问题才能让轻量级客户端轻松获得这些历史记录。
“区块链历史记录” 指的是所有区块头、区块体和收据的历史记录。在当前所有以太坊客户端用来通信的以太坊协议中,节点可以使用以下消息对来互相请求区块链历史记录:
GetBlockHeaders?>?BlockHeaders
GetBlockBodies?>?BlockBodies
GetReceipts?>?Receipts
点击此处,查看以太坊协议的完整规范。
欧科云链集团正式启动区块链科普行动“星途计划”:欧科云链集团于4月26日,正式宣布启动了区块链科普行动——“星途计划”,行动包括将在全国范围展开系列沙龙,加大力度推进区块链科普进机关、进国企、进校园等,联合政府部门、行业协会等共同构建起更加完善和有效的区块链科普教育生态,与此同时,直击区块链科普现存痛点,推出简单易懂的“秒懂区块链”公益短视频课。
该计划旨在全维度推动社会建立对产业更清晰的认知,与“鲲鹏计划”一道助力数字经济及区块链产业本身健康发展夯实“人才”和“产业认知”两大基础。[2021/4/26 20:59:37]
区块链历史记录是一个相对简单的数据集。你可以把它当成是一个只能添加的文件。矿工每挖出一个新的区块,这个区块的区块头、交易、叔块和收据都会被添加到文件中。
以太坊协议已经为这部分需要而优化过,所以一个新加入网络的节点可以高效地检索区块链的所有历史记录。一旦客户端实现完全同步,除了响应 JSON-RPC 请求之外无需使用这些数据。客户端自己也不会频繁用到这些数据,因为它们会通过 gossip 消息获取新的区块和区块头。作为区块执行的一部分,收据会在本地生成。尽管如此,协议还是强迫客户端要保留完整的历史记录。
声音 | 浪潮集团云南分公司总经理:云南区块链产业发展需从“科普”到“专精”不断深化:据昆明日报消息,浪潮集团云南分公司总经理郑昕表示,云南区块链产业发展需从“科普”到“专精”不断深化。下一步,浪潮将继续加大云南农业产业高质量发展体系建设力度,重点以普洱茶等云南优势产业为切入点,打造云南“绿色、有机农产品高地”的品牌形象,并在此基础上,开展基于区块链的供应链金融服务,解决中小企业贷款难、贷款贵问题。[2019/11/11]
因此,我们需要的数据在以太坊节点所组成的网络中其实都有,只不过网络的架构没有考虑过我们的用例。在以太坊协议上构建轻量级客户端需要解决三大问题:
A:我们需要对正统链有一个简明的了解
B:我们需要使用索引,便于按区块号查找区块,并按哈希值查找交易
C:我们需要减少单个节点存储的总数据量
要找到区块链最新区块,最免信任的方式是从头开始构建一条完整的区块头链(由区块头组成的链条)。为此,我们需要获取大约 1100 万个区块头,并为其提供大约 6GB 的存储空间。
声音 | ETC Labs主管:科普教育是未来几年公链面临的巨大挑战:ETCLabs主管Darin Kotalik认为,科普教育是未来几年公链面临的巨大挑战,人们必须要对区块链有基本的认识,分清楚公链和私链的区别。[2019/8/25]
如果没有完整的区块头链,客户端就无法辨别区块头是属于正统链还是叔块的。对于手机和树莓派等低资源设备来说,6GB 的存储成本过于高昂。如果用户要先获得 1100 万个区块头才能发出第一个请求的话,那就违反了客户端无需同步的要求。
幸好我们可以借鉴信标链的机制来解决这一问题。我们只需在以太坊协议上添加一个 “双倍批量默克尔 log 累加器(double-batched merkle log accumulator)”,就可以构建一个简单易懂的机制来提供某个区块头是否包含在正统链上的证明。客户端只需准确掌握最新区块头的信息,并通过累加器生成的简单默克尔证明来证明历史区块头包含在正统链上。
声音 | 中科院姚建铨:要加快推进区块链与物联网融合的科普 培训:据新华网消息,日前,在区块链与物联网融合发展峰会上,中国科学院院士姚建铨说,关注区块链技术里面的大数据,跟区块链技术结合起来进行测量和检测,能更好地提升激光清洗技术。姚建铨建议,无锡今后要加快推进区块链与物联网融合的科普、培训,正确引导广大人民群众对技术的认知;同时,建立专业、权威,但又普适、成套的理论体系和标准,以此切入区块链的实际应用。[2018/9/18]
同步问题是一个可以在客户端层面解决的用户体验问题。有两种解决方案:1. 设置区块头“检查点”;2. 信任观察到的链首块,并执行实际的工作来获取该链首块,然后对其进行异步验证。我们可以将这些作为功能标志(feature flag)提供给用户,让用户在安全性和便捷性方面自行权衡取舍。
有一些 RPC 端点很难直接构建在现有网络架构上。客户端目前可以通过在区块链历史记录上创建索引来服务这些端点。存在问题的端点主要有:
声音 | 火星人朋友圈科普RAM:火星人在朋友圈发文称,“什么是RAM?简单来说就是EOS这个国家的土地,所有的经济行为都离不开土地。只要EOS的BP们能投票形成一个稳定的供给预期,并且不改变目前的Bancor算法,那么RAM后续的价格有可能会像北上广深的房价走势。房价下跌不行,房价过快上涨也不行,EOS的生态越来越像某国了,真有意思。”[2018/7/6]
eth_getBlockByNumber
eth_getTransactionByHash
eth_getBlockByNumber端点的难点在于叔块。任意区块高度都有可能出现无限个有效区块,但是只有其中一个区块在正统链上。因此,客户端在拼凑正统链时也会构建自己的索引来将 block_number 映射到 block_hash 上。当客户端通过 JSON-RPC 请求某个区块号的区块时,该索引会将这一请求转化为请求某个哈希值的区块。
eth_getTransactionByHash也存在同样的问题。如果我们将叔块纳入考虑,一笔交易可能存在于多个不同的区块中。但是,单就正统链而言,一笔交易只存在于一个区块内。客户端在处理正统链时会创建一个索引来将 transaction_hash 映射到 (block_hash, transaction_index) 上。当客户端收到对某笔交易的数据请求时,该索引会将这一请求转化为允许查找该交易以及包含该交易的正统区块。交易和区块都必须包含在 JSON-RPC 响应内。
因此,我们需要一个机制来显示这些索引。
区块头累加器为我们提供了一种机制,可以让索引数据成为正统链的一部分。
以太坊协议自设计之始,就将 DevP2P 以太坊网络中的节点设想为能够响应任何关于查找区块链历史记录的请求 —— 无论是最新的区块、很老的区块还是介于二者之间的区块。以太坊网络没有机制可以让节点仅存储区块链历史记录的子集。从根本上来说,整个网络都依赖于所有节点都存储所有数据这一假设。网络本身无法强制节点存储所有数据,但是客户端会与无法响应其请求数据的对等节点断开连接。这在一定程度上保障了安全性,因为无法响应请求的客户端不太可能会维护健康的对等连接。
因此,首先需要解决的问题是,创建一种机制让单个节点可以仅存储区块链历史记录的子集,同时让网络为节点提供一种机制,以便节点快速找到拥有它们所需数据的节点。
事实证明,这是 Kademlia DHT 网络的新兴属性。该网络拓扑自身的系统就可以在任意大的密钥集中进行?O(log(N))?查找。假设我们要查找区块哈希和交易哈希之类的数据。我们可以通过 DHT 查找它们,使用对应区块头对其进行验证,并使用区块头累加器来证明它们在正统链上。
“Alexandria” 是Kademlia DHT 网络的暂定名称。该网络旨在按需提供区块链历史记录的访问权限。该网络本身构建在 Discovery v5 协议上(信标链和以太坊网络也是基于该协议构建的)。这就意味着,绝大部分(乃至所有)语言编写的客户端都会有可用的实现。
虽然我们没有严格要求修改核心协议来添加区块头累加器,但是这样做确实可以大幅改善这一情况。即使没有Alexandria,使用累加器也会让核心协议如虎添翼。
我们还需要解决可扩展性问题。将区块号映射到的正统区块哈希值的正统区块头索引相对较小,仅包含一个条目(每个区块头对应一个条目)。然而,交易索引很大,包含近十亿个条目(每发送一笔交易都会有一个条目)。相比之下,广泛使用的 BitTorrent DHT 包含大约 2600 万个不同的种子。以太坊主网需要在我们的 DHT 上存储大约 50 倍的数据。
构建 Alexandria DHT 并为其制定规范是一个持续性的研究主题,目前已经有了一个还在不断完善中的大致规范和概念证明客户端。我们还在继续进行开发,之后会公布新的进展。
(未完)
(文内有许多超链接,可点击左下 ”阅读原文“ 从 EthFans 网站上获取)
原文链接:
https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients-part-2/
作者:Piper Merriam
翻译&校对:?闵敏 &阿剑
Kine?LBP 将于 3 月 11 日晚 10 点(北京时间)正式开始,在?Balancer?LBP 中拍卖 500 万枚 KINE 代币.
1900/1/1 0:00:00近日,获得Framework Ventures、Three Arrows Capital等机构投资的DeFi衍生品协议Futureswap发布了V2 Beta测试版.
1900/1/1 0:00:00根据市场需求以及上一轮测试中用户的反馈,Smoothy经过数月的开发如今正式推出了2.0版。新版本将提供一个可容纳20多种不同稳定币的单一币种池(相比之下,Curve最多可在一个池中支持4种稳定.
1900/1/1 0:00:00NAOS Finance 的目标是允许链外借款方通过 DeFi 协议获取资金,并通过 KYC 和保险池为贷款方提供风险垫,连接 DeFi 和链下资产随着 DeFi 浪潮的兴起.
1900/1/1 0:00:00很多朋友关注HyperGraph Token(HGT)如何挖矿,下面就以火币钱包为例,详细解析HGT挖矿步骤.
1900/1/1 0:00:00一个自由开放的网络是当代社会的基石,但其实你和我们一样深刻的知道:自由的网络正在受到威胁。这就是为什么我们要建立Fractal协议:重新平衡网络的激励机制,从而保持它的自由与开放.
1900/1/1 0:00:00