Unitrie的统一、面向缓存的存储租金

  • rsksmart
  • 发布于 2022-04-26 15:11
  • 阅读 13

该RSKIP提议用户应为使用账户、合约和合约存储单元支付存储租金,以降低存储垃圾的风险,并使存储支付更加公平。该合约基于RSKIP61,但针对Unitrie中任何类型的节点统一应用存储租金,而不仅限于账户或合约节点。提案详细描述了存储租金的计算方式、交易格式的修改以及未来的改进方向。

RSKIP 113
标题 Unitrie 的统一的面向缓存的存储租金
创建时间 2019
作者 SDL
目的 Sca
层级 Core
复杂度 2
状态 草案

摘要

此 RSKIP 提议,用户应为使用帐户、合约和合约存储单元支付存储租金,以降低存储垃圾信息的风险,并使存储支付更加公平。此合约基于 RSKIP61,但对其进行了调整,使其能够统一地适用于 Unitrie 中的任何类型的节点,而不仅限于帐户或合约节点。

动机

有关存储租金讨论的摘要,请参见 RSKIP61。此 RSKIP 扩展了 RSKIP61,并通过将存储租金统一应用于 Unitrie 的任何类型的终端非空节点来降低其复杂性。

规范

执行交易时,所有查询的 Unitrie trie 键/值对都存储在缓存中。所有写入的 Unitrie 键/值对也是如此。交易完全处理完毕后,将迭代缓存,并为每个项目收取存储租金。如果该项目没有改变节点的状态,那么只有当租金高于 10000 gas 时才会支付租金(见稍后计算租金的公式)。如果节点的状态发生变化,那么只有当租金高于 1000 时才会支付租金。这可以保护网络免受代价高昂的微交易的影响。占位符键/值,例如合约存储根节点,也会被纳入租金计算中。

如果交易被正确调度,此 RSKIP 不会干扰添加并行交易执行的计划,因为不会有键/值重叠。

租金通过扩展交易来支付,以添加一个新字段 “rentGas”。交易消耗的总 gas 将等于消耗的执行 gas 加上消耗的租金 gas。租金 gas 的消耗在交易执行结束时进行检查。如果消耗的租金 gas 高于 rentGas,则交易将被回滚。如果交易由于没有足够的 gas 支付存储租金而被回滚,则存储租金将被全部消耗。如果交易由于之前的 OOG 异常或 REVERT 而结束,那么即使 trie 节点没有被触及,也只会支付 25% 的存储租金。支付 25% 的存储租金是为了补偿从缓存访问合约的成本,但不包括写回修改后的字段以指示最后一次支付的成本。与普通 gas 一样,完整的 rentGas 金额从原始地址中扣除,然后在交易处理结束时返还剩余金额。

每个 Unitrie 节点都有一个新的字段 lastRentPaidTime。设 d 为正在处理的区块的时间戳。这两个字段都以秒为单位给出。请注意,中间节点(没有值有效负载)的访问不支付租金,但是当它的一个子节点被修改时,它的 lastRentPaidTime 总是会被更新。这将使未来节点的休眠(所有类型)成为可能。

以下伪代码说明了如何计算和支付每个节点 “dest” 的租金。

if (d>lastRentPaidTime) {
    useRentGas =  nodeSize*(d-lastRentPaidTime)/2^21
    if ((dest was modified) && (useRentGas>=1000)) || 
       ((dest was NOT modified) && (useRentGas>=10000)) {
        dest.lastRentPaidTime = now
        consumeRentGas(useRentGas);
      }
}

nodeSize 的计算方法是节点值的长度加上 128。因此,nodeSize 只能近似地表示实际消耗的空间,因为它没有考虑嵌入的节点。

设 SecondsAYear 为 31536000。每个字节每秒支付 1/2^21 gas。因此,一个存储字节每年支付 SecondsAYear/2^21=15.03 gas 单位。一个值长度为 10 字节的简单帐户的 nodeSize 为 138。这样的帐户每年将消耗 2070 单位的 gas。如果帐户定期执行支付,租金将大约每年收取两次。如果它不活跃,并且只有合约使用 BALANCE 操作码检查其余额,那么它将每 5 年支付一次租金。代码中有 10K 字节和 100 个存储单元的合约每年将支付大约 38 万单位的 gas。拥有 10 万个单元的合约每天将支付大约 4.4 万 gas

此值 useRentGas 从交易 rentGas 中消耗。

当一个节点单元第一次被创建时,lastRentPaidTime 被设置为未来 6 个月。这意味着一些租金是预付的。

区块 gas 限制不适用于租金:以 gas 支付的租金金额可能高于 gas 限制。因此,租金是矿工的额外无上限收入来源。

新的交易格式

交易格式被修改。目前,交易包含以下字段:

  1. Nonce
  2. GasPrice
  3. GasLimit
  4. ReceiveAddress
  5. Value
  6. Data
  7. v
  8. r
  9. s

如果交易有 10 个或更多字段,那么索引为 10(从 1 开始)的字段将对应于字段 rentGasLimit。字段 gasLimit 的相同大小限制将适用于 rentGasLimit。同样,rentGasLimit 也会从发送者的余额中全部扣除,然后返还未使用的金额。如果交易没有指定 rentGasLimit,那么 rentGasLimit 将被假定为等于 gasLimit。

新的收据状态值

如果交易被手动回滚(REVERT),则在交易收据中记录一个新的状态 (-1)。 如果交易由于标准 OOG 而被回滚,则仍然使用旧的空向量状态。 如果交易由于租金 OOG 而被回滚,则在交易收据中记录一个新的状态 (-2)。

未来的改进

如果合约未支付的节点租金高于某个非常高的阈值,则该节点可能会被休眠。

此外,此 RSKIP 可以与使用状态 trie 更新批处理 (COBLOP) 方法的 SPV 压缩区块传播相结合。

版权

版权和相关权利通过 CC0 放弃。

  • 原文链接: github.com/rsksmart/RSKI...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
rsksmart
rsksmart
江湖只有他的大名,没有他的介绍。