GEM^2-Tree: A Gas-Efficient Structure for Authenticated Range Queries in Blockchain
Ce Zhang, Cheng Xu, Jianliang Xu, Yuzhe Tang,et al.GEM^2-Tree: A Gas-Efficient Structure for
Authenticated Range Queries in Blockchain.Proceedings of the 2019 IEEE 35th International Conference on Data Engineering (ICDE)
DOI: 10.1109/ICDE.2019.00080
gas :In asmart contract-enabled blockchain like Ethereum, users needto pay gas for storage and computation as the smart contractexecution costs miner’s resources.
本文中的两个创新点(主要挑战):
设计一种可认证数据结构authenticated data structure(ADS),可由块链有效地维护
GEM^2 Tree :这可以显著地减少智能合约的存储和计算成本。
GEM^*2 Tree:在不牺牲查询性能的条件下,可以进一步降低维护成本。
区块链2.0,即以太坊可以为更多的数据类型提供服务,例如text,documents,images,但这些类型的数据通常数据量巨大,并且直接在链上存储原始数据是不可扩展的。为了解决这个问题,常用的方法是采用混合存储体系结构:
原数据存储在专用存储服务器上,同时,将每个数据对应的密码哈希作为原始数据的公证保留在链上。虽然该方案很好地用于简单的键值查询,范围查询,但是不支持其他广泛使用的查询类型。
更新相关的问题,如果仅仅用简单的Merkel Tree作为ADS,由以下于三个方面导致更新代价高:
1.插入可能会导致叶节点中的一系列更新,以保持原数据的顺序;
2.插入需要更新所有祖先节点的huah;
3.插入可能导致递归节点分裂,这消耗大量的存储和算力来创建新节点并重新分布索引键。
因此需要提出新的ADS。
ADS> 在外包数据库中受到身份验证的查询处理的启发,直观的方法是利用智能合约在blockchain的搜索关键字的顶部构建经认证的数据结构(authenticated data structure,ADS,例如MerkleHash树)。
智能合约是一个可信的程序,允许用户在区块链中处理数据。程序由矿工执行,分块协商一致协议保证了程序的正确性。在执行过程中,产生的交易费用,因为矿工花费计算资源,以gas为单位。表1显示了Etherum平台中某些主要存储和计算操作的费用。
ki is the value of the search key vi denotes the rest of the data object
当有数据插入或者更新时,DO将oi=
ADS由SP和智能合约共有,查询过程如下:
在系统模型中,假设DO、Blockchain和查询客户端是受信任方,第三方SP被视为不受信任的一方,因为它可以有意或无意地修改、添加或删除数据。因此,SP必须证明查询结果的正确性soundness和完整性completeness:
Soundness. All of the answers in the result satisfy the query criteria and are originated from the DO;
Completeness. No valid answer is missing from the query result.
主要思想:SP和blockchain都维护相同的MB-tree版本,以支持在混合型存储区块链上实现认证查询。
MB-tree可用于验证范围查询。因此可以分别构建和维护两个相同的MB-tree作为SP和智能合约的ADS,。在块链中。
验证步骤:
client --Q–>SP ==>遍历MB-Tree,得到一个VOsp(基于ADS的认证对象)
1.client从区块链上检索认证摘要VOchain
2.利用result 、VOsp在本地重构MB-Tree root
3.对比重构的MB-Tree root 与VOchain(即区块链中的Merkle root)
接下来,分析区块链中MB树的维护成本:
插入一个对象:为了减少gas cost,假设MB-tree节点容量与区块链数据访问的粒度相同,假设MB-Tree中扇出F,当前数据库大小为N。
在最坏的情况下,单个对象产生的gas:
个人想法: 该公式中logFN 应该是忽略了MB-tree中索引节点的大小。
对象插入需要查找叶节点来存储对象
1.要查找可以插入的位置需要消耗 logFNCsload gas
2.存储该对象 Csstore gas
3.更新logFN个祖先节点,每个都需要获取所有扇出的hash值、重新计算hush值、更新值 F · Csload + Chash + Csupdate gas
此外,在最坏的情况下,对象插入可能导致O( logFN)(个)节点分裂,以保持平衡的树结构。在每个节点拆分中,将创建一个新节点,同时进行密钥重新分配和更新节点的哈希值
4.节点创建消耗2Csstore gas来存储节点的内容和hash,因为发生了拆分所以被拆分的索引节点分为两个部分,所以公式中*2。最后将插入节点存储。
维护区块链中的MB-tree会由于大量的写操作(即存储和更新),消耗大量的gas。同时,可以观察到,在查询处理期间仅使用根hashVOchain。提出SMB-Tree 只实现块链中的根节点(抑制其他的节点)。插入对象时,智能合约将在Fly上计算SMB-tree的所有节点,并且只将根hash更新到BlockChain存储。
1.智能合约将所有数据从块链存储加载到内存中:N· Csload
2.对一存在内存中的数据进行排序: NlogN· Cmem,其中 NlogN 应该为排序的复杂度,查阅资料后满足的排序方法为分治排序。
3.计算hash值,需要计算N/F个hash: N/F · Chash
4.将插入对象和更新的根hash写入区块链存储:Csstore + Csupdate。
基于以上MB-Tree和MBS-Tree
1.避免维护长排序列表。随着数据库规模的增加,高的更新成本会削弱系统的性能。
2.采用更多的读操作(减少写操作)。由于共识协议,区块链中的写成本远高于读成本。因此,对于中间变量,我们可以在内存中计算它们,并且只在块链中维护最终的计算结果,以降低存储成本。
3.适应不同规模的数据库。数据库大小对ADS的维护性能有影响,ADS应该能够适应不同大小的数据库。
支持多种独立的结构:一个大型的完全结构化的MB树作为主要索引;一系列小型结构压制的SMB-Tree用于索引新插入的对象。
优势:
1.一个新的对象可以插入到较小的SMB-Trees,这是更节省gas开销
2.由SMB-树索引的对象可以批量合并到MB-Tree中,以节省更新开销
关于SMB-Tree,每个对象插入都需要重新构建SMB-Tree的内部结构,以便更新根哈希。为了降低更新成本,我们将存储空间构建为一组指数大小的分区,每一个分区,最多可以维护两个SMB-Tree,因此可以合并多个插入。分区是合乎逻辑的,因为它们将随着合并而动态更改。分区优点:
1.由于可以将新对象插入定向到最小的分区,所以在根哈希更新期间需要读取和计算的数据更少;
2.对象写入储存后不需要对其重新排列;
3.节省了SP端的维护成本,不需要在每次插入对象后都重建整棵树;
4.这将确保分区总数为O(logN),这将有利于查询处理。
1&2在区块链和SP之间共享,3只存在于区块链中
值得注意的是,区块链中的搜索键(3)仍未排序,以降低gas成本;它们基本上是按插入顺序存储的。此外,虽然SMB-Tree结构在区块链中被抑制,但它们在SP处完全实现,以支持高效查询。
(2)对于每个分区,最多含有两个SMB-Tree(分别表示用Tl和Tr表示)
GEM 2-树有三种维护操作:
(1)插入(2)更新(3)删除(删除操作可以看作是用虚拟对象更新数据对象,因此,我们只关注插入和更新操作。)
算法不做详解
由于GEM2-Tree由一个MB-Tree组成和多个SMB-Tree组成,SP需要遍历所有树,对每一棵都进行范围查询,SP将每个树的结果对象和VO组合起来生成最终查询结果和VOsp。
首先SP检查查询范围是否与当前树根的边界重叠。
没有重叠,则表示当前树对查询结果没有作用,在这种情况下,编码边界信息的root hash可以直接用作VO,并停止查询。
重叠,范围查询可以作为广度第一搜索。从根节点开始,如果某个非叶节点与查询范围相交,将进一步探索其子树;如果非叶节点与查询范围没有交集,则其hash将作为VO的一部分。
到达叶节点时,SP将查询每个基础对象。属于查询范围的对象将被添加到查询结果中,而其他对象的hash将被附加到VO中。
在客户端,验证过程由两个步骤组成,即检索VOchain和结果验证。