一文读懂以太坊最新二层隐秘手艺Zkopru,已毕ETH、ERC20和ERC721原子互换
区块体(block body)区块主体由往复,大批进款和大领域迁徙构成。 此外,区块头应包含来自区块体的正确信息。 若是区块头的值不正确,提议者将通过质询系统被削减。
往复
大批进款
皇冠hg86a
大领域迁徙(mass migration)
账户
Zkopru将提议了一种新的大师密钥结构。 贵重此表率异日将进行更新。
Zkopru帐户料理着1层和2层密钥对。 率先,该帐户具有一个以立地形状生成的私钥的以太坊帐户。 这用于1层上的交互。 其次,Zkopru钱包从以太坊帐户的私钥中创建一个Babyjubjub私钥和公钥集。 此Babyjubjub密钥集用于二层的EdDSA和加密的备注字段。
这次飞上热搜的薛之谦,真的是太逗了,仅仅凭借两个小动作就博得了网友们的热情关注,不仅把他高超的音乐才能展现得淋漓尽致,还成为一个天才的幽默大师和撩妹高手。
自从和情人海藻同住以后,宋思明就把自己一周的时间分成了两部分,一三五七的晚上,他要陪着老婆和女儿,二四六的晚上,他要在外和情人过夜。
皇冠体育在线UTXO
很快会提议一种新的UTXO表率
Zkopru使用Poseidon哈希计较leaf哈希:
var intermediate_hash = poseidon(ether, pub_key.x, pub_key.y, salt)
var result_hash = poseidon(intemediate_hash, token_address, erc20, nft)
给与者怎样知谈?
zk往复不错为给与者包括81个字节的加密备注字段。 由于具有零学问特色,若是莫得交互历程,给与者也无法知谈何如给与。 因此,为了保抓非交互形状,咱们不错在经受者的备注字段中放入一些加密的数据。
加密(encryption)
使用Diffie-Hellman密钥交换合同生成分享密钥。 为发送者生成分享密钥的详确要道为:
博彩平台彩票1. 创建一个临时密钥过头同态荫藏值:
ephemeral=epublic_ephemeral=ge
2. 将其临时密钥乘以给与者的大师密钥:
recipient_pubkey=gashared_key=(ga)e
3. 准备对压缩数据进行加密:
data = {
salt // 16 byte
tokenId, // 1 byte
value, // 32 byte
}
4.使用chacha20算法对数据进行加密,并使用临时大师密钥创建备忘录数据:
ephemeral = random.new()
皇冠分红public_ephemeral = generator.multiply(ephemeral)
shared_key = recipient_jubjub.multiply(ephemeral)
ciphertext = chacha20.encrypt(data, shared_key)
memo = public_ephemeral + ciphertext
解密(decryption)
使用Diffie-Hellman密钥交换合同,给与者还使用大师临时密钥和相当密钥创建分享密钥。
1. 分解备注(memo)并得到分享密钥:
public_ephemeral, ciphertext = parse(memo)
shared_key = public_ephemeral.multiply(private_key)
申博2. 使用分享密钥解密ciphertext:
decrypted = ciphertext.decrypt(shared_key)
3. 给与者使用解密肃除尝试生成多样可能的UTXO。 这是因为加密的数据唯有49个字节以最小化调用数据(calldata)的大小。 因此,给与者应尝试多样组合以检验往复是否包括被规复的UTXO哈希。 若是未能在TX中找到已规复的UTXO,则以为TX莫得给与方的输出。
压缩数据
为了最猛进程地减少调用数据(calldata),Zkopru将原始数据压缩为49字节数据。 率先,它开脱了加密候选者的公钥,因为给与者将使用我方的公钥来料想出。 而且,它使用Token ID,该Token ID将接济的token地址和索引从0映射到255。然后,由于value不错是ether,erc20Amount或nftId,因此给与者针对这3种情况创建了三种类型的UTXO。 终末,若是在往复的输出列表中存在职何料想出的UTXO,则给与者到手给与了UTXO。
局限性
Zkopru不会强制回路(circuit)检验加密合同。因此,若是发送者未使用适合的分享密钥或数据,则经受者将不会收到备注。
原子交换
Zkopru以径直形状接济原子交换。若是A和B想要交换其钞票,则它们会彼此创建备注(note)并将所需的备注公开在往复数据上。然后,互助者应酬相背的往复进行配对或被削减。
举例,爱丽丝(Alice)想用天的50ETH交换鲍勃(Bob)的1000 DAI。
爱丽丝支拨她的60 ETH note,并为我方创建了10 ETH note,并为鲍勃创建了50 ETH note。
爱丽丝还计较她异日的1000 DAI note的哈希值,并将该哈希值流露给她往复的swap字段。
鲍勃则支拨他的3000 DAI note,并为我方创建了2000 DAI note,为爱丽丝创建了1000 DAI note。
鲍勃还计较他异日的50 ETH note的哈希值,并将该哈希值流露给他的往复的swap字段。
一朝互助者匹配了往复池中成对的往复集,它将把往复对包括在一个新区块中。
若是一个区块仅包含其中一个,则互助者将被削减。
Zkopru正在使用一种简便版块的原子互换。然则若是你想要熟悉一种基于MPC的zk原子互换模子,你不错在这里看到详确信息。
Merkle树结构
UTXO树和withdrawal树中的备注(note)不才一个版块将有64深度。将唯有一个单一的UTXO树和一个索要树。
Zkopru的树林由UTXO树,nullifier树和withdrawal树构成。
UTXO树是仅追加用法,包含UTXO的Merkle树。 通过提交包含Merkle证明,用户不错将UTXO用作往复的流入。 并将往复的输出肃除附加回最新的UTXO树中。
另外,若是zk-transaction创建withdrawal输出,则Zkopru会将它们附加到最新的withdrawal树中。 将树的根被记号为已完成后,统统者不错通过证明统统权来索要钞票。
然后,通过 commitment-nullifier有策画,将用过的UTXO的nullifier记号为在nullifier树(唯独的寥落Merkle树)中使用。 若是往复试图使用也曾无效的叶子(leaf),它将变为无效(nullified),而且挑战者系统会大幅削减区块提议者。
Merkle树表率
{% hint style=“warning” %}
皇冠客服飞机:@seo3687UTXO树&withdrawal树在Burrito版块上有64深度 https://github.com/zkopru-network/zkopru/issues/35
竞技游戏{% endhint %}
怎样料理UTXO树
单个UTXO树是用于成员阅历证明的寥落Merkle树。 它使用Poseidon哈希(SNARK中最低廉的哈希函数之一)生成zk SNARK证明以荫藏支拨哈希过头旅途。
要将新树叶(leaf)追加到UTXO树,互助者将延伸以下要道。 1.准备一个阵列。 2.互助者采选要包括的MassDeposits,并将MassDeposits中的每笔进款附加到阵列中。 3.二层往复生成新的UTXO。 将重生成的UTXO附加到阵列。 4.以区块大小为32瞄准备好的数组进行分割。5. 构造子树(sub-tree)并延伸子树rollup。
假定UTXO树已被(2 ^ 31)个事项统统填充,新宝会员系统将被填充的树进行归档并启动一个新树。 也允许使用归档树来援用往复的包含证明。
Nullifier树
每次转账,支款和迁徙往复皆支拨带有包含证明的UTXO,并记号在nullifier树上使用的派生nullifier。因此,nullifier树是一个很大的寥落Merkle树,它纪录了深度为254的寥落Merkle树中每一个用过的UTXO。因此,Zkopru使用最低廉的哈希函数keccak256看成nullifier树的哈希函数。
要更新nullifier树,互助者延伸以下要道: 采选往复(调度,取款,迁徙)并从往复中汇聚统统nullifier。 检验是否存在职何已使用的nullifier。 将每个nullifier记号为已使用。在更新历程中,若是统统nullifier皆莫得转换nullifier树的根,请丢弃该往复,因为它会尝试进行双花。 就像UTXO树雷同,Zkopru乐不雅地更新了nullifier树的根。若是有任何问题,咱们不错通过生成防诓骗链上证明一个nullifier被使用了不啻一次。要检验职责旨趣,请参阅RollUpChallenge.sol和SMT.sol。
支款树(withdrawal树)
与withdrawal树和UTXO树的唯独永诀在于,withdrawal树使用keccak256看成哈希函数。 之是以使用keccak256,是因为Zkopru在智能合约上需要索要树的Merkle证明,而在SNARK回路中则需要UTXO树的Merkle证明。 在树的根定型后,withdrawal树中的叶子(leaves)在1层智能合约中即是不错索要的。
要更新支款树,互助者延伸以下要道: 汇聚已采选往复的统统withdrawal叶子。 拆分出区块大小为32的withdrawal数组。 构造子树(subtree)并延伸子树rollup。
大批进款(mass deposit)
当用户将钞票存入Zkropu时会发生什么: Zkopru合约将给定数目的钞票从用户帐户调度到本人。 考证note是否带有给定信息的一个灵验哈希。 将note并吞到MassDeposit []列表的终末一项。 什么是MassDeposit?
MassDeposit是用于rollup证明的单个mergedLeaves bytes32值。 可在此处检验什么是rollup证明mergedLeaves。 若是互助员提议一个包含MassDeposits的区块,则该区块会将MassDeposit中的统统note追加到其UTXO Merkle树。
互助员如那边理MassDeposits?
互助员只可包括不再转换的“已情愿(commited)” MassDeposit。 为了包含MassDeposit,互助员将监视Zkopru合约中的进款事件。
MassDeposit什么时候造成“已情愿”?
尽快将进款推到二层汇聚。 因此,当互助员提议每个新区块时,它将冻结最新的MassDeposit。
互助员不错包含多个MassDeposit吗?
一位疑似足坛巨星梅西的人物被曝光在皇冠体育上涉足赌博,引起了舆论哗然。是的,不错在最大挑战资本范围内一次包含多个MassDeposit。
大领域迁徙(mass migration)
皇冠app下载
大领域迁徙的基本念念想尽头简便。 天然1层合约上的进款往复创建了MassDeposit对象,但是往复的“迁徙”类型输出不错创建MassMigration,该MassMigration为其倡导地汇聚构造MassDeposit。
往复不错具有UTXO,迁徙(migration)或取款(withdrawal)类型的输出。
在Zkopru中,要进行迁徙,就会触及到源汇聚和倡导汇聚。 一朝完成源汇聚上的大领域迁徙(关系代码请检验),就不错延伸源汇聚上的migrationTo函数。 该函数不错移动钞票(包括Ether,ERC20和ERC721),同期为倡导汇聚创建MassDeposit对象。
因此,倡导汇聚应已毕acceptMigration函数。 更多信息在这里
rollup之间的迁徙模范将通过EIP进行模范化。

即时取款(instant withdrawal)
在Zkopru中,索要者不错通过设立每个索要note的即时索要用度来央求即时索要。 然后,任何东谈主皆不错提前为未完成的支款付款并收取用度。
为了央求即时支款,统统者为她的note生成ECDSA签名并进行播送。 领有填塞钞票且可支付的任何东谈主皆不错使用签名提前支付取款。 一朝Zkopru到手包含该往复,智能合约便将支款note的统统权调度给付款东谈主。 终末,预支款东谈主在完成往复后将其索要。
金沙国际娱乐城咱们不错有一个散播的公开市集来收取即时取款费。 要跟进最新施展,请订阅此github: https://github.com/zkopru-network/zkopru/issues/333 论断
说明此表率,咱们已到手使用Circom,Solidity,Typescript等构建了测试网。
使用zk-SNARK和Optimistic rollup的以太坊二层私东谈主往复扩展处分有策画。 -zkopru-network / zkopru
率先,咱们不错已毕了一种每笔zk往复可承受的gas资本。 平均值约为8800gas,当gas适度为1,150,000且区块时间为13.2秒时,表面上最大的TPS为105。 在Zkopru中,往复数据花费约534个字节。 由于证明数据为256字节,因此若是将来应用证明团员,咱们不错减少大致两倍的往复资本。 不然,每个区块提议和最终笃信的存储资天职别约为168k gas和55k gas。 当咱们包括350笔往复时,此资本约为区块生成资本的6.7%。
此外,咱们不错欺骗Optimistic Rollup的机动性来已毕很多功能。 率先,Zkopru通过多个SNARK考证密钥接济多样类型的往复。 您以至不错使用1个输入和4个输出,或4个输入和1个输出完成一笔往复。 通过Optimistic Rollup的机动性,使其接济多种类型的往复尽头简便。 其次,Zkopru已毕了精准类型的挑战案例。 这意味着,若是区块的第n个往复有问题,则质询仅检验该特定往复。
另外,Zkopru需要您在计较机上驱动节点,这极少也很进犯。 因此,SNARK高后果性和轻节点是软件已毕要有计划的进犯要素。 因此,咱们将使用Typescript和NodeJS构建该技俩,以供将来在基于本机的移动应用程序中使用。 瞻望轻型节点将仅花费约50〜100 MB的存储空间用于树料理。
追忆一下职责,咱们但愿Zkopru不错用于以太坊的隐秘情易层。 它既快速,低廉,又可移植到升级版块。 迎接感兴味的东谈主为该技俩进行捐钱。 您不错通过Zkopru的文档页面(https://docs.zkopru.network)检验一个也曾组织过的版块。
感谢你阅读本文。
参考文件:
Ethereum 9 3/4: Optimistic rollup for zk-Mimblewimble1
BarryWhitehat’s zk-rollup1
John Adler’s Minimal Viable Merged Consensus1
Plasma-group’s Optimistic Rollup
Batch Deposits for [op/zk] rollup / mixers / MACI
Mass migration to prevent user lockin in rollup
澳门永利炸金花