繁体   English   中英

以太坊。 有没有办法知道我的智能合约需要的存储空间?

[英]Ethereum. Is there a way to know the storage space needed by my smart contract?

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

如何计算data字段大小

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

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

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

最简单的方法是使用为您计算大小的库。 :) 例如web3js function 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是 function 签名
  • 0000000000000000000000001231231231231231231231231231231231231231address类型(256位,64个十六进制字符)第一个参数
  • 0000000000000000000000000000000000000000000000000000000000000001uint256类型(256位,64个十六进制字符)第二个参数

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM