· 计较区块中可用于容纳生意业务的空间:10,000,000 – 187,000 = 9,813,000 gas
从下图可以zkRollup吞吐量的晋升与单个生意业务本钱低落有直接的干系。· 计较单个区块可容纳生意业务个数:9,540,000 gas / 1020 gas = 9,000 tx
· 以太坊每个区块发生的时间为15s
按照上面的数据,我们可以计较出以太坊主链的最大吞吐量:
· 计较TPS:40,000 tx / 15s = 2,666 tx/s
表格比拟
EIP-1108
今朝,椭圆曲线运算所需的gas用度太高,为了辅佐隐私方案以及扩容方案在以太坊上的大局限应用,EIP-1108对椭圆曲线运算的gas用度举办了贬价。
下图是压缩后zkRollup每笔生意业务数据的名目:
ScalarMulGas暗示一个椭圆曲线乘法耗损的gas,假如涉及到多个椭圆曲线乘法运算那么耗损的gas为:n * ScalarMulGas,PairingBaseGas暗示椭圆曲线双线性映射运算基本gas用度,PairingPerPointGas暗示每个椭圆曲线双线性映射运算gas用度。
The elliptic curve arithmetic precompiles are currently overpriced. Re-pricing the precompiles would greatly assist a number of privacy solutions and scaling solutions on Ethereum.
zkRollup事情道理
伊斯坦布尔分叉后calldata的gas为每字节16 gas,所以给个生意业务的本钱为:15 bytes * 16 gas/byte = 240 gas
· 计较TPS:476 tx / 15s = 32 tx/s
2019年12月7号产生的伊斯坦布尔硬分叉中有两个低落在链上执行零常识证明运算gas用度的提案:EIP-1108与EIP-2028
下面是引用EIP-1108提案中的部门原文:
zkRollup在链下操作Merkle tree存储账户状态,由Operator收集用户的生意业务,生意业务收集完成后Operator会执行每个生意业务(校验余额,校验nonce,校验签名,执行状态转换),当生意业务执行完成后会发生一个新的Merkle tree Root,为了证明链下状态转移是正确的,Operator会在生意业务执行完成后生成一个零常识证明的proof。· 计较zkRollup单个生意业务gas本钱:15 byte * 16 gas/byte = 240 gas
ZkRollup (伊斯坦布尔分叉后)
当前以太坊主链
· 伊斯坦布尔分叉前calldata的gas为每字节68 gas,所以给个生意业务的本钱为:15 bytes * 68 gas/byte = 1020 gas
EIP-2028将calldata的存储本钱从每字节68 gas低落到每字节16 gas,zkRollup的生意业务数据是存储在calldata上,这意味着我们可以在calldata上存储更多的生意业务数据,极大提高了吞吐率。
80,000 * k + 100,000中的k暗示有几个椭圆曲线双线性映射运算,100,000暗示椭圆曲线双线性映射运算基本gas用度。
以下是伊斯坦布尔分叉前后的椭圆曲线运算的gas用度比拟
· 一个区块中可最多容纳的生意业务数量:10M / 21k = 476 tx
· 计较零常识证明校验gas耗损:公式:VerificationGas = n * ScalarMulGas + PairingBaseGas + 4 ∗ PairingPerPointGas,个中:PairingBaseGas = 45,000 gas,PairingPerPointGas=34,000,ScalarMulGas=6,000 ,假设zkRollup只涉及到一个public input,所以n=1。VerificationGas = 1 * 6,000 + 45,000 + 34,000 * 4 = 187,000 gas
Operator把prev state root,post state root,生意业务数据和proof证明提交至链上合约,合约校验proof通事后会未来新的状态写入到链上,合约不需要单独校验每笔生意业务的正当性,只需要校验proof是否有效,低落了链上gas耗损,个中生意业务数据是存储在较自制的位置CALLDATA上。链下每一次的状态转变都需要提供零常识证明,由主链上的合约举办验证,只有验证通过才气变动状态。即每一次状态转变都严格依赖暗码学证明。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。