LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 以太坊伊斯坦布尔升级对KEY ID用户的费用分析

以太坊伊斯坦布尔升级对KEY ID用户的费用分析

2020-01-05 沙漏时间 来源:区块链网络

以太坊伊斯坦布尔升级对KEY ID用户的费用分析

作者:沙漏时间、Chester、福

Istanbul升级对gas费的影响

2019年12月8日,以太坊在9,069,000区块高度完成了“伊斯坦布尔”硬分叉升级,主要包括了6个提案。其中,EIP-1108、EIP-1884、EIP-2028、EIP-2200四个提案都是和OPCODE的费用相关的,具体来说:

EIP-1108和EIP-2028主要采取降低bls签名的价格和Calldata的gas单价的方式,来降低zk-SNARKS的费用。EIP-1884则提升了与状态树读取相关操作的价格,而EIP-2200则根据调整后的单价重新优化了SSTORE操作的计费。

以太坊的计费

当一笔以太坊的事务最终执行时,所有的操作都在EVM中被编译为最低级的操作码OPCODE,OPCODE类似于计算机的汇编语言。每个OPCODE都有着单独的定价,单位为GAS。例如ADD操作需要消耗 3 GAS。一笔事务最终需要消耗多少gas,就是根据其编译后的OPCODE和单价决定的。

调整的原因

以太坊的计费系统调整主要包含两方面原因。(1)为了鼓励某些类型的应用(2)为了保证计价规则与实际成本相匹配。

其中EIP-1108和EIP-2028都是出于原因(1),即鼓励zk-SNARKS的应用。目前,直接使用零知识证明的应用还不太多,以太坊希望通过降低相关费用,鼓励应用使用零知识证明保护隐私。

而EIP-1884和EIP-2200都是根据目前以太坊虚拟机的实际开销情况进行的调整。具体来说,每一个操作码在虚拟机执行的时候都有着实际的资源开销,随着以太坊网络的变化和计算机硬件参数的变化这些开销会发生变化,而操作码的定价却在一段时间内是保持不变的。随着以太坊的运行,许多定价已经不符合当前实际情况。尤其是随着状态树的增大,与状态树读写相关的操作消耗资源都在持续增加,尤其是存储读取和账户读取这两个操作消耗了大量的处理时间。EIP-150曾在2016年对SLOAD、BALANCE等操作码的价格进行调整。

根据https://eips.ethereum.org/EIPS/eip-1884,SLOAD是单位gas消耗资源最多(资源度:毫秒/兆gas)的操作码。EIP-150让SLOAD的单价提升了3倍,让资源度从67降到了23;而目前SLOAD的资源度已从23增长到150左右,在三年半的时间里足足翻了6倍。为此,EIP-1884将SLOAD的价格从200修改为800,增长为4倍,使得SLOAD的资源度降为平均水平。其它的调整还有:

· BALANCE400提升到700,

· EXTCODEHASH400提升到700,

· 引入了新的OPCODE,SELFBALANCE用于查询用户自己的余额。

KEY ID的部署和应用模式

KEY ID是一套自主身份协议,基于智能合约技术实现了可恢复的区块链账户,并通过元交易等方式,降低了用户使用区块链的手续费摩擦。KEY ID用户可以在手机丢失的情况下通过恢复码或紧急联系人恢复账户,同时只需要支付统一的网络费,便可便捷使用多条区块链。【有关KEY ID的更多介绍】

KEY ID中的用户账户实际上是一个智能合约。由于智能合约的逻辑相对复杂,部署成本较高。此外,一旦合约需要升级,在以太坊上需要重新部署合约,则每个用户账户又需要重新付出这份部署成本。如此高的开销不适用于大规模应用。

根据Vitalik的文章【https://www.reddit.com/r/ethereum/comments/6c1jui/delegatecall_forwarders_how_to_save_5098_on/】,“代理合约”(forwarding contracts)是解决这个问题的方式。简单来说,代理合约是这样一种合约,它接受任意输入,并立即将输入转发到一个特定的合约地址。真正的合约逻辑在那个特定的合约地址处,所有操作也均在那里执行,并通过代理合约将输出结果转发回来。

Vitalik在文章中也谈到,创建代理合约的成本很低,但是输出的长度受限,且每笔调用代理合约的事务会额外消耗大约1100gas。

KEY ID协议采用代理模式的原因是,在Istanbul升级之前,采用代理模式创建账户消耗88,319 gas,采用普通模式851,154 gas。而每次调用代理合约会多消耗一部分gas,具体是多少呢?我们试验了hello空方法,每笔多消耗(22,275 gas-21,418 gas)=857 gas。根据上述数据,(851,154-88,330)/857=890笔,即在不考虑通胀和资金沉淀成本的情况下,使用代理模式创建的账户,只要发送的交易数小于890,便可以认为代理模式是合算的。KEY ID协议面向普通用户,大部分用户都是低频用户,且由于采用元交易的方式代付手续费,每笔事务多出的gas实际上由用户买单,因此KEY ID选择了开户成本更低的代理模式。

这两种方式类似商户的VIP会员和普通会员。普通会员只需要花费很低的制卡费,VIP会员需要缴纳高昂的会员费,但是享有更低的会员折扣。

KEY ID 合约gas费用分析

在Istanbul升级之后,由于OPCODE价格改变,外部账户的ETH和ERC-20 token的转账手续费降低。我们测试了对KEY ID协议的影响。

在代理模式下,Istanbul升级前后KEY ID用户的gas消耗对比:


可见,Istanbul升级之后,KEY ID用户的创建账户成本降低了约7000gas,转账成本也降低了数百gas。

我们分析了此次Istanbul升级所包含的6个提案:

EIP-152:增加 BLAKE2 压缩函数F预编译功能

EIP-1108:降低 alt_bn128 曲线的预编译 Gas 消耗量

EIP-1344:ChainID 操作码

EIP-1884:给与默克尔树大小相关的操作码重新定价

EIP-2028:降低交易数据 Gas 消耗量

EIP-2200:改变 SSTORE 操作的 Gas 净耗用量计量方式

其中,对KEY ID合约gas消耗影响较大的两个提案分别是EIP-1884和EIP-2028,前者把SLOAD操作码的gas消耗从200提升到了800,后者把合约调用输入数据中每个非零字节的gas消耗从68降低到了16,这样一升一降两相抵消,使得Istanbul之后的gas消耗略微减少。

前文提到,代理模式相较于普通模式在gas成本上有一定的优势。但Istanbul升级后gas消耗的变化会不会对这一优势产生影响呢?我们做了实验,测试代理模式和普通模式下创建账户和一个普通操作的gas消耗。

Istanbul升级之前:

由上表可知,代理模式下,每创建一个账户节省约762800 gas,但每次调用多消耗约850 gas。因此,如果单个账户转账(转账是最高频的调用)不超过约900笔,那么代理模式是划算的。

Istanbul升级之后:

由上表可知,代理模式下,每创建一个账户节省约765000gas,但每次调用多消耗约1630 gas。因此,如果单个账户转账不超过约470笔,那么代理模式是划算的。

Istanbul升级前后两相比较,可以发现,代理模式节省gas的优势有所缩减。而由于SLOAD的价格随着以太坊的运行可能再次提高,这个优势会逐步缩小。

结论

本文分析了在Istanbul升级后,KEY ID用户账户各项费用的变化及代理模式的优势变化,得出以下结论:

1、Istanbul升级后,KEY ID账户的创建成本和转账成本均下降;

2、Istanbul升级后,代理模式的优势显著降低,但考虑到(1)普通模式的开户成本仍然很高(2)普通用户的使用频率不会太高(3)合约可能需要更新,KEY ID仍然采用代理模式进行合约配置;

3、随着以太坊状态树的增大,SLOAD等操作码的价格可能会再次提高,代理模式的优势将进一步下降,需要持续观察操作码价格对部署合约模式的影响。

—-

编译者/作者:沙漏时间

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...