引言
在一堆不同的项目中,我们需要允许用户从EVM存入某种链下状态,该状态在链上表示为Merkle累加器。该Merkle树根据有效性证明或欺诈证明+同步假设进行更新。
SNARK友好的哈希函数非常昂贵,因此有必要最小化它的成本。在optimisticrollups世界中,它并不那么昂贵,但每次存款的成本限制了它在某些场景下的应用,例如大规模迁移。
要从EVM存入Merkle树,需要执行tree_depth哈希从而能够包含一个叶子节点。甚至在一个区块中有两笔存款都需要tree_depth的哈希值。那么有必要将它们合并在一起,这样它们只需要花费个哈希值。
这些存款为
在这里,我们提出了一种存储批处理方法,即
在另一篇文章中,我们将这些优化应用于mixers和optimisticrollups。
之前的工作
MerkleMountainRanges专注于创建深度随时间增长的Merkle树。在这个使用案例中,我们需要一个恒定深度的树,并且不能有可变数量的哈希值。在optimisticrollup中,这也不理想,因为随着树的深度的增长,需要更改放在链上的数据。
SEC对币安和赵长鹏提出13项指控,包括客户资金处理不当等:金色财经报道,美国证券交易委员会(SEC)对币安和赵长鹏提出 13 项指控,包括客户资金处理不当以及对监管机构和投资者谎报了其运营情况等。SEC 表示,币安一直在混合数十亿美元的客户资金,并秘密将其转移到由赵长鹏控制的一家独立公司。此外,币安在其系统是否足以检测和控制操纵交易行为上误导了投资者。SEC 还表示,币安没有采取足够的措施来限制美国投资者使用不受监管的交易所。[2023/6/6 21:17:47]
将此用于存储是有问题的,因为随着数据集变大,峰值袋变得越来越稀少,因此存款速度变得越来越慢。这可能导致用户无限期地等待他们的资金存入。
另一种方法是多重证明但在这里不能使用,因为它需要在存款人之间安排协调员。鉴于不断变化的存款队列,状态很可能在协调更新得到处理之前已经改变。
方法
创建存款队列
如果您曾经玩过2048,您可能会从合并两个相同值的区块中获得乐趣。我们在这里对于Merkle树也这么做。
我们从一个空的存款树开始。当存款进来时,我们将其存储在队列中并等待。当下一笔存款进入此哈希时,将此哈希保存到我们当前深度为1、同时有2个待处理存款的存款树。然后我们可以停止存储与第一笔存款相关的任何数据。
当另一笔存款进来时,我们会再次存储它。然后对于下一个存款,我们用指定值对其进行哈希,然后用存款树对结果进行哈希。创建我们的深度为2、有4个待处理存款的存款树。
合肥市筹备成立元宇宙产业协会:金色财经报道,近日,合肥市元宇宙产业协会筹备组发布《关于筹备成立合肥市元宇宙产业协会的公告》。公告中称,经合肥市民政局审核同意,核准成立“合肥市元宇宙产业协会”(合民许准字2023011号)。业务主管单位为合肥市科技局。记者采访了合肥市元宇宙产业协会筹备组联系人杨玉凤女士。她表示,目前,合肥市元宇宙产业协会正处于筹备期,前期已经筛选了50多家与元宇宙产业相关的企业。后面等协会正式成立后,还会邀请元宇宙产业链相关企业加入。(大皖新闻)[2023/5/6 14:46:25]
我们已经有效地合并了存款。
将存款树插入余额树中
此时,我们有一个深度为2的存款树,其中有4个待处理的存款。我们还有一个余额树,它包含一些先前存入的账户,其他地方都是零。我们不想覆盖树中的帐户。因为这会毁掉这些用户的账户。我们只需要将它们替换0。
为了将新叶子插入余额树,我们需要证明:
一个节点的子节点全为零。我们需要这样做以防止覆盖已经有过存款的账户。
举个例子,假设我们有一个节点有2个子节点。我们知道,如果2个子节点都是0,那么节点==hash(0,0)。
但是如果树真的很深,在EVM/SNARK中计算这个哈希可能效率不高。因此,不如预先计算这个列表,并将其作为一个映射存储在智能合约中进行部署。
美联储:尚未决定发行CBDC:金色财经报道,美联储发布文章称,FedNow不是CBDC,数字FedNow与数字货币无关。FedNow是美联储为银行和信用社提供的一种支付服务,用干转移资金。它与美联储的其他支付服务一样,如Fedwire和FedACH。联邦现在服务既不是一种货币形式,也不是消除任何形式支付的一个步骤,包括现金。FedNow服务是美联储提供的即时支付服务,于2023年7月推出。FedNow将提供给美国的存款机构,如银行和信用社,使个人和企业能够通过其存款机构即时付款。账户即时支付允许个人和企业在一天中的任何时间,在一年中的何一天,在几秒钟内发送和接收付款,以便付款的接收者几平可以立即使用资金。
美联储尚未决定发行央行数字货币(CBDC),如果没有国会和行政部门的明确支持,最好是以具体授权的形式。[2023/4/10 13:53:54]
然后每当我们想要检查一个节点的子节点是否全为零时,我们只需查找此映射。所以有用Merkle证明该节点在树中,然后通过检查存储的映射证明它的子节点全为零。新的Merkle根只更改了零节点,其他一切都相同。
我们之前已经证明了一片叶子的子节点全为零,现在我们想要改变那片叶子,同时保持树的其余部分不变。
使用相同的Merkle路径,我们计算了用deposit_tree替换的没有叶子的根。
然后我们将这个新的Merkle根存储为包含所有存放叶子的新余额树,使用我们用来证明叶子在树中的相同Merkle路径确保了所有其他叶子不会改变,并且只允许我们更新零节点的子节点。
报告:阿联酋与新加坡的NFT行业预计将以每年45.5%、51.2%的速度增长:金色财经报道,报告显示,阿拉伯联合酋长国的NFT行业预计将以每年45.5%的速度增长,到2022年达到9.821亿美元。预计NFT行业将在预测期内稳步增长,2022-2028年的复合年增长率为32.1%。该国的NFT支出价值将从2022年的9.821亿美元增加到2028年的47.463亿美元。
此外,新加坡的NFT行业预计将以每年51.2%的速度增长,到2022年达到18.793亿美元。预计NFT行业将在预测期内稳步增长,2022-2028年的复合年增长率为36.9%。该国的NFT支出价值将从2022年的18.793亿美元增加到2028年的111.802亿美元。[2022/12/9 21:32:50]
同步的注意事项
像zksnarks/optimisticrollup这样的一些系统需要证明时间才能执行存款。如果在这种情况下存款树发生变化,则证明可能无效。因此,最好有一种方法可以在某个存款树被存入时暂停更新。
概括
这里我们提出了一种合并存款的方法。我们在EVM中查询存款,当它们被存入更大的Merkle树时,它们会将它们合并。
在后续文章中,我们将把它应用到mixer存款和optimisticrollup存款/大规模迁移。
加密投资产品交易量创两年新低:金色财经报道,根据CoinShares的数据,上周加密投资产品的交易量触及 2020 年 10 月以来的最低水平,因为 8 月资金继续流出。?这些产品上周的交易量达到了9.01亿美元,大大低于截至 8 月 8 日的 24 亿美元的年初至今每周平均水平。数据显示,数字资产投资产品上周也出现净流出 2700 万美元,略高于前一周的 900 万美元。CoinShares 研究负责人表示,比特币产品的资金外流部分是由于美联储的鹰派言论。[2022/8/30 12:56:14]
讨论:
weijiekoh
假设队列长度是8而不是4。
令storage为存储一个值所需的gas量。
令hash为哈希两个值所需的gas量。
这是否意味着存储在2^n位置用户由于其在队列中的位置而处于劣势。
barryWhiteHat
与现状相比,对每个人来说都更便宜?
weijiekoh
它确实对每个人来说都更便宜,在我看来,当考虑到每次哈希的成本时,这种权衡是一个偏好问题。如果哈希函数是便宜的(例如kecack),那么成本差异可以忽略不计,但如果哈希函数是昂贵的(例如Poseidon)那么
的使用者的gas花费加起来也比较昂贵。
vbuterin
因此KateCommitment值得探索。使用KateCommitment,只需一个组元素就可以轻松证明来自单个状态的任意数量的位置。这可以与队列方法结合使用,以确保有大量存款可以批量处理。Kate方法的另一个好处是很容易将其插入基于椭圆曲线的SNARK/PLONK证明中。
weijiekoh
请问你对使用KateCommitment有什么想法?是把所有的存款根积累到KateCommitment而不是余额树的吗?
vbuterin
将KateCommitment使用于存款和余额。
weijiekoh
尽管用我们拥有的最好的开发工具(带circom的BN254)来验证在snark中的KateCommitment仍然是不可行的。但我的意见是,我们必须等到更先进的snarks变得可行。
vbuterin
我没想过让snark从字面上验证椭圆曲线配对计算。我正在考虑使用类似PLONK的多项式证明,其中KateCommitment和opening作为两个参数传入,您只需直接对它们进行多项式检查。所以没有“一个系统验证另一个系统”的开销。
weijiekoh
请问这是你心目中的snark吗?
在这种情况下,像commit()函数需要一个SRS并且还需要对EC取幂来计算Kate承诺。我可能是错的,但由于在现有的alt_bn128的SRSes上执行EC操作的成本很高,我们是否需要在BabyJub曲线上进行新的'PowersofTauCeremony',以便我们可以拥有对snark友好的KateCommitment?
MichaelConnor
可以批量处理成KateCommitment的项目数量是否有实际上限?限制是SRS的大小?如果是这样,Merkle树不是提供更大的匿名集吗?
vbuterin
我的意思是直接对KateCommitment进行多重证明。所以你会有一个承诺P,你只需做一个标准的muti-opening来证明对于一组(x,y)有P(xi)=yi成立。
可以更进一步:为了避免每对都进行一次EC乘法,(x,y)对本身可以用多项式承诺进行编码,muti-opening将变成一个等价证明:,然后这些多项式承诺将同时成为PLONK证明的一部分。
weijiekoh
也许我应该从不同的角度去看问题。我主要关心用户的gas成本,其次才是协调器。这毕竟是批量存款技术要解决的问题。
在MACI中,我们需要证明ZK中余额树中每个叶子的事情。即在余额树中,每个叶子可能会或可能不会根据其解密内容修改状态树。由于我们要确保协调器以正确的顺序处理每条消息,我们的Groth16snark必须证明每个叶子的成员资格和消息树中的位置。
这已经花费了几十万gas。如果我们执行Kate多重证明,将至少添加另外193kgas。
如果/当我们转向PLONK,我们是否可以避免这种额外成本?
在短期内,如果没有PLONK,在BabyJub中使用Kate承诺可能会有好处,因此我们可以在Groth16snark中验证Kate承诺或Kateverkle树。
每个存入队列的用户只需支付存储32个字节的费用。
一旦存款队列已满,协调员就会累积成一个凯特承诺,这应该很便宜。例如,Kate提交16个值需要223454个gas,这比波塞冬二叉Merkle树有很大的改进,后者需要797835个gas来提交16个值。这样,用户和协调者都可以节省gas。
为了构建最终的余额树,协调器还将使用Kate承诺,从而生成Verkle树。由于我们可以以更低的gas成本承诺更多的价值,我们可以拥有更大的树容量。
当我们处理余额树时,我们会检查snark中每条消息的成员资格和位置,然后照常进行。
也许我们可以使用Verkle树(Merkle树使用Kate承诺作为哈希函数而不是Poseidon/MiMC)。
Pratyush
KZG10Commitments需要配对;BabyJubJub不是一个友好的配对曲线
weijiekoh
使用这种技术可以节省更多的gas。子树的哈希函数可以是SHA256,这在EVM中比较便宜。树的其余部分(从子树深入到根)可以用Poseidon进行哈希。
这样做的代价是,任何snark都会增加每个子树级别大约90k约束。从这个角度来看,TornadoCash的抽屉式电路有28271个约束条件。因此,这种方法只对MACI这样的用例有意义,在这种情况下,验证者可能不介意(粗略地)将他们的验证时间增加一倍甚至三倍。
DAOrayakiDAO研究奖金池:本文的某些内容涉及潜在的法律风险和策略。作者不是律师,而且这些内容也不构成法律建议。所以在作出任何决定前,请咨询律师.
1900/1/1 0:00:00持续的财阀统治目前流行的共识机制,即“工作证明”和“权益证明”,大致上是按照某个节点在网络上的买入比例——分别是通过计算能力或代币持有量——授予治理权.
1900/1/1 0:00:00前言北京时间12月13日,知道创宇区块链安全实验室关注到针对Definer预言机的攻击事件。作为第三方区块链安全机构,受Definer、Cherryswap和OEC组成的调查小组邀请参与本次攻击.
1900/1/1 0:00:00前言北京时间10月20日晚,知道创宇区块链安全实验室监测到BSC链上的DeFi协议PancakeHunny的WBNB/TUSD池遭遇闪电贷攻击,HUNNY代币价格闪崩.
1900/1/1 0:00:00虚假信息——即为了或经济利益而故意误导的内容——并不是什么新鲜事。但正如我们在去年所看到的,数字平台使传播危险的阴谋论变得更加容易,因为在疫情、种族抗议、加利福尼亚野火和总统选举结果等热门的.
1900/1/1 0:00:00播报数据由Greeks.liveDataLab格致数据实验室和Deribit官网提供。一般季度交割后都会出现一段时间的稳定期,目前虽然行情脆弱,但是各项市场数据都比较稳定,市场整体情绪比较稳定.
1900/1/1 0:00:00