【论文笔记15】以太坊智能合约去中心化的链上数据访问

【论文笔记15】以太坊智能合约去中心化的链上数据访问,第1张

原文作者:Mohd Sameen Chishti , Farhan Sufyan , and Amit Banerjee , Member , IEEE*
原文标题:Decentralized On-Chain Data Access via Smart
Contracts in Ethereum Blockchain*
原文链接:Decentralized On-Chain Data Access via Smart Contracts in Ethereum Blockchain | IEEE Journals & Magazine | IEEE Xplore
原文来源:IEEE Transactions on Network and Service Management 2022
笔记作者:quangaoyuan
笔记小编:quangaoyuan

0x00 关键词

智能合约、链上数据、顺序和并行查询处理、Merkle-Patricia Trie (MPT)。

0x01 摘要

以太坊区块链网络中的智能合约是可自我执行的脚本,用于管理区块链网络上不同实体之间的代币化资产和访问权限。它们是区块链技术的重要补充,可在维护两个或多个实体之间的数字关系时实现数据透明度和可靠性。然而,智能合约处于起步阶段,并受到各种限制,包括不变性和代码保密性。在本文中,我们解决了智能合约无法访问链上数据的问题。智能合约目前通过外部预言机协助获取链上数据,这可能会影响客户。为了解决这个问题,我们提出了一种去中心化机制,通过使用 Merkle-Patricia Trie (MPT) 索引每个块中交易的单个或多个参数,直接从智能合约访问区块链数据。这个想法是增加区块链应用程序的数据透明度。该论文提供了一种顺序搜索方法,可以在 O(N) 中从 N 个块中检索满足特定条件的交易。通过将区块链数据划分为 k 个不相交的子集以实现搜索过程中的并行性,复杂性进一步降低到 O(N/k)。我们通过对以太坊区块链数据的案例研究,通过实验验证了所提出方法的有效性。

0x02 INTRODUCTION

智能合约受到各种限制,限制了其适用性 [6]。限制之一是脚本在部署到区块链网络后变得不可变。对于任何修改,比如修复错误,在修改脚本 [7] 后部署一个新合约。另一个问题是部署合约的保密性。与区块链账本一样,智能合约脚本对网络中的每个完整节点都是开放的。因此,很难对业务领域的竞争对手隐藏应用程序逻辑 [8]。最后,用户需要支付执行合约的费用,金额取决于脚本中的 *** 作次数。对于更多 *** 作,执行智能合约的总成本会增加 [9]。除上述问题外,智能合约无法直接访问区块链数据。位于智能合约范围之外的数据(称为范围外数据)通过使用 Chainlink [10] 或其他外部预言机 [11] 的 API 调用访问,如图 1a 所示。更具体地说,当前的区块链架构不支持来自智能合约的链上数据查询。本文解决了这个问题,并提出了一种高效、分散的搜索机制,用于从智能合约访问区块链数据。图 1b 总结了所提出的方法。在此,我们使用 Merkle-Patricia Trie (MPT) 数据结构来存储和搜索区块链的相关信息。全节点可以使用相同的索引来索引交易的单个或多个参数。所提出的机制通过将区块链数据划分为多个不相交的集合来并行化搜索过程(图 1b)。

 

0x03 贡献

1.作者探索了一种直接从智能合约访问区块链数据以根据用户要求检索相关信息的最佳方式。

2.作者所提出的方法可以通过将区块链数据划分为不相交的交易子集来实现搜索过程中的并行性,这可以降低访问数据的时间复杂度。

3.通过实施智能合约来测试所提议的方法在气体消耗方面使用消耗。此外,作者研究了索引和搜索事务所需的时间,并推断并行搜索过程对降低时间和空间复杂度的效果。

 4.作者提供了一个案例研究,使用定制的以最终客户为中心的信誉机制从可用列表中选择最好的供应商。

0x04 相关工作

A.区块链数据查询的方法

研究人员探索了从智能合约 [44]、[45]、[46]、[47] 访问链内和链下数据的各种技术。在 EtherQL [44] 中,作者向以太坊区块链添加了一个查询层,允许块级和事务级查询。通过配置区块链事件侦听器,EtherQL 实时监视块更改。处理程序链充当对以太坊客户端将传入的区块链数据转换为 SQL 模式,不断尝试从缓存中检索区块链数据并将其提取为三个不同的数据结构:块、事务和帐户,每个结构都有其数据处理程序。之后,一个基于 MongoDB 的持久性框架来存储数据,最重要的是,一个开发人员接口通过本地 API 调用和 RESTful 服务访问数据。类似地,Etherscan [46] 和 Graph [47] 等工业计划也证明了一种使用 Web 界面和 API 调用查询区块链数据的机制。

与上述不同,[45] 中的研究人员试图通过引入 B + 树数据结构来索引交易来访问链上数据。 B+树的特性有利于区块链中的搜索机制,不会对挖掘区块所花费的时间数据的安全性产生任何不利影响。实现是通过扩展Geth1.8 软件来完成的。该方法类似于所提出的方法,因为两者都使用新的数据结构来促进查询过程。但是,两者之间存在显着差异。首先,用于索引的数据结构不同。也就是说,前者使用 B +,其中建议的方法使用 MPT 数据结构来索引交易。使用 MPT 的原因是它在一个块中的搜索复杂度是 O(1)。其次,当前版本的[45]可以用单个参数搜索区块链;而在本文中,演示了具有 2∼3 个参数的搜索查询。最后,与[45]相比,在本文中,我们试图通过并行化搜索过程来提高搜索性能。

B.外部预言机的应用

外部预言机可以执行各种 *** 作,例如从区块链、互联网、物联网设备访问范围外的数据以及控制智能家电。在下文中,我们将讨论使用外部预言机服务来访问区块链历史的应用程序。

1)声誉管理:一般来说,声誉显示了一个实体过去的表现,并表明了它未来行为的可能性。目前,我们有很多去中心化的基于区块链的应用程序的信誉计算机制。参考文献[48]总结了区块链领域的信任建立和声誉管理领域的研究。参考文献 [49] 提出了一种信誉机制,用于提高基于 X 证明 (PoX) 的共识模型的挖掘效率。它降低了知名矿工开采区块的难度级别,如果矿工未能在给定的时间间隔内开采区块,则会对其进行处罚。参考文献 [50] 使用链下数据库来存储有关雾节点声誉的日志。它使用五种不同的智能合约来管理和更新节点的声誉。参考文献 [51] 使用链上信任机制来确定源自物联网网络中传感器的数据的可靠性。

2)智能家居:区块链技术可以为构建智能家居环境提供安全和隐私保护的底层基础设施[52],[53]。在[54]作者中强调将区块链技术融入智能家居的先决条件,包括为最终客户提供量身定制的解决方案、访问管理、公用事业支付服务和智慧城市服务。研究人员正在提出各种解决方案来解决这些挑战。参考文献 [55] 在智能家居中使用基于智能合约的基础设施来提供紧急服务。参考文献 [56] 使用 swarm 文件系统 (SFS) 以原始格式存储数据以及数据查询机制。

C.总结

目前,智能合约可以通过外部预言机访问范围外的数据,这可能会损害数据的完整性和安全性 。在本文中,我们通过智能联系人直接访问区块链数据来解决这一限制。也就是说,我们通过使用 MerklePatricia Trie (MPT) 数据结构索引交易来向区块链引入去中心化访问机制。此外,我们展示了数据结构可以并行化以在区块链中高效搜索交易,这是任何业务应用程序的基本要求。服务提供商需要搜索之前的交易以提供定制服务。从客户的角度来看,搜索可以找到提供有竞争力的价格和超值服务的最佳业务提供商。除此之外,所提出的机制也可以用于上面讨论的应用程序。因此,通过直接访问数据,智能合约可以提供一整套去中心化的解决方案,并为最终客户提供更好的服务。

0x05 智能合约搜索机制 A.顺序搜索机制

我们首先介绍一种搜索机制,该机制使用单个参数来查询区块链中的交易。为此,我们可以使用任何交易字段(如图 2 所示)来发起搜索请求。但是,在下面的讨论中,我们将交易发起者地址视为搜索参数。后来,我们概括了这个概念,并包括了用于访问区块链数据的多个搜索参数。所提出的方法可以顺序搜索区块链并检索满足 O(N) 搜索条件的交易,其中 N 是块的数量。 1) 使用单参数访问数据:该方法为区块链架构引入了一种新的 MPT 数据结构,称为 Search Trie (SMPT)。除了索引之外,较轻的节点可以使用 SMPT 发起搜索查询和获取数据,而无需在本地下载完整的区块链。如上所述,该实现使用交易发起者地址和交易的哈希作为(键,值)对来构造每个块的 SMPT。智能合约可以顺序遍历每个区块的 SMPT 结构,以找到特定用户发起的交易的哈希值。较轻的节点可以使用哈希值下载相应的块或通过向全节点发送请求直接获取数据。请注意,较轻的节点也可以保持部分 SMPT结构(最近开采的块)来执行本地化搜索。

 

算法 1 描述了搜索过程。该算法的输入参数是账户地址 inp(即搜索参数)、用于搜索的开始和结束块编号(sBlk∼()eBlk)以及所需的交易数量(num)。请注意,该算法按块编号的递减顺序执行搜索 *** 作。即,搜索 *** 作从起始块开始并在结束块编号处终止。为了搜索整个区块链,eBlk 是创世区块(区块编号为 0)。假设智能合约需要查找特定地址(0x1a23e···f 4)的最后 10 笔交易的详细信息。假设当前挖出的区块数为 10000,用户定义的总搜索空间为 1000 个区块,智能合约需要探测 10000 到 9000 之间所有区块的搜索尝试,找到 0x1a23e···f 4 的匹配条目。如果地址trie包含0x1a23e···f 4作为key,则返回对应的交易hash值,可用于提取交易明细。搜索将继续,直到找到最后 10 笔交易,或者智能合约到达区块号 9,000。 2) 使用多个参数访问数据:在上面的讨论中,SMPT 结构考虑了访问区块链数据的单个参数。但是,在业务领域中可能存在应用程序可能需要基于多个参数启动复杂搜索 *** 作的情况。例如,最终用户可能会根据 gas 价格或交易时间来搜索记录。因此,我们将 SMPT 数据结构概括为在搜索过程中包含多个字段。生成的搜索树可以支持查询,例如 (a) 返回用户发起的所有 gas 价格 ≥ 19 Gwie 的交易,或 (b) 查找在特定时间间隔内发起的 gas 价格 ≥ 19 Gwei 的交易。广义的 SMPT 结构(下面讨论)可以顺序地从 N 个块中获取满足上述 O(N) 约束的所有事务。

为了在一个块的广义搜索树中包含多个参数,比如 (pi = gas_price, pj = trans_value),我们需要为相应的参数分配唯一 ID。请注意,事务发起者分配参数值并且通常对于每个不同交易,如图 5 所示。此外,搜索查询通常会找到特定范围内的交易参数,例如 1 ≤ pi ≤ 3。为了支持这种范围查询,我们可以对交易进行聚类。例如,为了基于 gas 价格对交易进行聚类,我们通过使用 etherscan.io.1 提取其在 2015 年 13 月 8 日至 2021 年 1 月 29 日之间的交易中的每日平均值来分析以太坊区块链中的 gas 价格模式然后,我们应用 K-Means 聚类算法将 gas 价格划分为 5 个簇,如表一所示。每个簇可以关联一个唯一的哈希标识符,作为广义搜索中找到相关数据的关键特里(下面讨论)。在表 I 中,我们假设 0x601a3···8 对应于属于 Class4 的事务。所提出的方法假设网络中的所有参与者都知道集群的哈希值。

 

 为了构造广义搜索树,我们可以如下定义每个参数 p1 的 (keyi , valuei )pi 对。 keyi 是参数 pi 的 hash-id,valuei 包括具有相同 keyi 的交易(在块中)的标识符。例如,在图 5 和表 I 中,Class4 gas 价格的 (keyi , valuei )pi 对为 (0x601a3 · · · 8, T1, T4, T10, T12)。搜索过程与我们在算法 1 中讨论的相同。智能合约可以使用广义搜索树来根据用作键的任何字段查找交易。考虑一个搜索查询,用于查找地址为 0xa71fe···8 且 gas 价格在 12 到 20 Gwei 范围内的用户的最后 10 笔交易。从表一,智能合约可以确定指定范围属于Class4,并且可以探测hash-ids为0xa71fe···8和0x601f 0···c的块的SMPT。在图 6 中,我们展示了一个包含三个事务的块的快照,地址为 0xa71fe···8、0xa7109···b 和 0x601f 0···c。密钥为 0x601a3···8 的第四个叶子对应于 Class4 事务。对于搜索,智能合约会探测每个区块两次并合并结果。也就是说,它检查发起者地址的指定哈希 ID,并且 Class4 集群存在于同一个 SMPT 中,并检索满足这两个条件的所有事务的哈希值。

B.区块链数据的并行搜索

如上所述,智能合约可以使用通用 SMPT 结构对区块链数据执行复杂的搜索查询。但是,由于区块链的线性链结构,搜索 *** 作是顺序进行的,复杂度为 O(N)。为了降低搜索复杂性,我们将区块链数据分配到不相交的子集中以并行化搜索过程。我们可以通过各种方式在逻辑上将区块链划分为不相交的子集。例如,要将其划分为 k 个子集,我们可以使用以块号为参数的简单哈希函数。也就是说,h(block num)%k 可以将每个块划分为 k 个子集。执行智能合约的节点可以选择这 k 个分区中的一个或多个,并使用相应的广义 SMPT 来执行搜索查询。并行搜索过程可以将复杂度降低 k 倍。不幸的是,在这种方法中,节点需要跟踪每个子集中存在的块以并行执行搜索 *** 作,从而为维护不相交的链(集合)创造了额外的开销。为此,我们使用并行挖掘模型 [57](下文讨论)来创建 k 个独立链。

并行挖掘模型允许多个矿工通过将事务池划分为 k 个不相交的子集来同时挖掘块,这些子集在 [57] 中定义为区域。可以使用任何预定义的标准对区块链进行分段。为简单起见,并行挖掘模型考虑使用 (1) 对交易池进行分区的交易发起者地址。在等式中,Adr(Ui ) 对应于交易发起者地址,k 是子集(或区域)的数量,R(Ui ) 是存储 Ui 交易的区域。请注意,在并行挖掘模型中,每个用户的交易属于特定区域,并由该区域的矿工挖掘。并行挖掘模型使用之前区块的哈希值创建单个区块链并维护数据完整性。

 参考文献[57]讨论了区域数量对并行挖掘模型的影响,并表明使用n≥7个区域可以将现有基于状态的以太坊区块链(150到200个交易/块)的TPS率提高到45∼ 50 TPS。但是,可以为多个参数包含额外的链,以增加并行搜索的搜索粒度。例如,我们可以创建一个单独的链,根据交易的 gas 价格将交易分成五个类别(如上所述,表 I)。为此,我们可以修改 (1) 并使用 Ri ≡ h(classi ) (mod 5) 映射类和区域。请注意,额外的链可以减少搜索空间并在特定区域执行搜索 *** 作。但是,请注意维护额外数据(或搜索尝试)需要存储空间。因此,在性能和存储之间存在权衡。图 7 是一个并行挖掘的示例,其中 k = 3 个区域,即 R0、R1 和 R2。根据(1),区域 R0 由用户 Ui 的交易组成,其中 Adr(Ui ) (mod 3) ≡ 0,其他区域也类似。从并行挖掘中获得的不相交链有助于创建非重叠搜索空间和并行化搜索过程。为了执行搜索查询,节点需要相应区域的广义 SMPT 结构。所提出的并行搜索 *** 作可以由具有多核处理器[58]的节点独立执行,也可以与多个节点协作执行。前者可以提供更高的数据可靠性,因为所有执行智能合约的节点都可以验证输出的完整性。也就是说,我们假设智能合约(与其他交易一样)由网络中的多个节点执行和验证。也就是说,多个矿工可以同时执行合约并在网络中广播结果[59]。

 

 算法2所示的并行挖掘过程有以下两种情况。首先,要查找特定用户的交易,智能合约只需要扫描特定区域的块,仅(第 1 ∼ 5 行,算法 2)。也就是说,如果搜索查询以发起者地址作为参数之一,那么它可以使用 (1) 来确定发起者的相应区域,并使用属于该区域的块的广义 SMPT 执行搜索 *** 作。 Search_Region 方法是对算法 1 的修改,其中区域编号是附加的输入参数。其次,为了执行搜索查询没有发起者地址作为其参数,算法2同时对所有区域进行并行搜索 *** 作。这是因为区块链使用发起者地址分割成多个区域,如上所述。为了实现并行性,每个区域都可以由随机矿工搜索,如 [57] 中所示。此外,可以将这些区域分配给知名矿工以增加系统信任 [60]。并行搜索的另一种技术是使用单独的用户级线程为每个区域执行 Search_Region 方法。用户线程和内核线程之间的映射可以使用对 *** 作系统的系统调用来处理。建议的方法没有任何并发​​或同步问题,因为它是在只读模式下对不相交的数据集执行的。不幸的是,当前的区块链架构不允许来自智能合约的此类系统调用。因此,在我们的实现中,我们使用 Python 中的独立进程来模拟并行搜索 *** 作。

最后,我们使用以下搜索查询解释并行搜索过程。其中,U1、U2、U3 是属于 2 个不同区域的三个用户。也就是说,U1和U2,用户地址为0x1a23e···f 4和0x2a14e···9c,属于区域R0和U3(地址0x3b3e···2c)在 R2区间(图7)。查询如下:

 智能合约可以并行搜索这两个区域。在每个区域中,智能合约需要探查广义 SMPT 以查找 U1 在相应区块中是否有交易。如果为真,智能合约再次探测相同的广义 SMPT 以找到属于 Class3 的交易。相同的程序可用于 U2 和 U3。让我们再举一个例子,其中搜索查询包含 2 个参数,例如 gas price 和转入金额。要执行搜索查询,例如查找 gas 价格在 12.9048 ∼ 20.45146 之间(第 4 类,中等费用交易)和交易价值在 1 ∼ 5 ethers 之间的交易,搜索程序可以首先找到所有第 4 类 Gas Price 的交易。下一步现在取决于搜索方法是如何实现的,它可以探测第 4 类的每笔交易以找到相关交易(落在给定的 1 到 5 范围内),或者该实现是否构成交易价值的类似聚类,然后找到第二个参数的相关事务,找到两个簇的交集。在我们的示例中,假设总共有 5 个区域,与顺序搜索过程相比,搜索空间减少到大约 40%,搜索复杂度降低了 5 倍。但是,如果节点正在协作(即多个节点搜索不同区域),则需要数据聚合。可以有多个相同的解决方案。首先,可以通过广播区域特定结果并利用矿工或用户或指定节点的资源进行数据聚合来解决该问题。其次,我们可以使用主从架构,执行智能合约的节点指定其他节点搜索特定区域并将结果转发给主节点。然后主节点聚合结果并广播它们。

0x06 总结

目前,智能合约有各种限制,包括无法访问链上数据。本文通过引入一种基于 Merkle-Patricia Trie (MPT) 概念的称为搜索轮胎 (SMPT) 的新数据结构来解决此问题。这个想法是分散搜索机制并直接从智能合约访问区块链。智能合约可以使用建议的顺序和并行搜索方法来执行查询并找到满足多个参数的交易。执行顺序和并行的复杂度使用 SMPT 的搜索查询分别为O(N) 和 O(N/k),其中 N 和 k 是块和区域的数量。实验结果表明了所提出的方法在延迟和空间要求方面的效率。此外,我们通过分析区块链的交易历史进行案例研究,以选择最佳服务提供商。

未来,我们打算通过合并新的数据结构来提高搜索复杂性,并评估其在实际应用中的性能。我们还想建立一个遵循搜索机制的概念验证区块链,并为区块链社区做出贡献。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/1498697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存