首页 > 解决方案 > 以太坊。有没有办法知道我的智能合约需要的存储空间?

问题描述

如何量化以太坊交易需要多少存储空间(大约)?是按功能/交易计算还是如何计算?对此的任何线索表示赞赏。我正在尝试量化我的智能合约创建的交易所需的存储空间......

标签: transactionsstorageblockchainethereumsmartcontracts

解决方案


如何计算data字段大小

(当您发送调用智能合约功能的交易时)

data字段值可以分为三部分:

  • 0x
  • 4 个字节(8 个十六进制字符) - 这是函数签名,它标识您要调用的函数。
    • 该值是函数名称和参数类型的 keccak256 哈希的前 4 个字节。示例:transfer(address,uint256)=>a9059cbb
  • 其余数据 - 传递给函数的参数。

最简单的方法是使用为您计算大小的库。:) 例如web3js函数encodeFunctionCall()

例子:

const result = web3.eth.abi.encodeFunctionCall({
    name: 'transfer',
    type: 'function',
    inputs: [{
        type: 'address',
        name: ''
    },{
        type: 'uint256',
        name: ''
    }]
}, ['0x1231231231231231231231231231231231231231', '1']);
console.log(result);

退货

0xa9059cbb00000000000000000000000012312312312312312312312312312312312312310000000000000000000000000000000000000000000000000000000000000001
  • a9059cbb是函数签名
  • 0000000000000000000000001231231231231231231231231231231231231231address类型(256 位,64 个十六进制字符)第一个参数
  • 0000000000000000000000000000000000000000000000000000000000000001uint256类型(256 位,64 个十六进制字符)第二个参数

所以结果是0x136 个十六进制字符,即 68 个字节。


推荐阅读