以太坊。有没有办法知道我的智能合约需要的存储量 space?
Ethereum. Is there a way to know the storage space needed by my smart contract?
我如何量化以太坊交易需要多少存储空间 space(大约)?是按功能/交易计算还是如何计算?对此的任何线索表示赞赏。我正在尝试量化我的智能合约创建的交易所需的存储 space...
如何计算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);
Returns
0xa9059cbb00000000000000000000000012312312312312312312312312312312312312310000000000000000000000000000000000000000000000000000000000000001
a9059cbb
是函数签名
0000000000000000000000001231231231231231231231231231231231231231
是 address
类型(256 位,64 个十六进制字符)第一个参数
0000000000000000000000000000000000000000000000000000000000000001
是 uint256
类型(256 位,64 个十六进制字符)第二个参数
所以结果是 0x
和 136 个十六进制字符,即 68 个字节。
我如何量化以太坊交易需要多少存储空间 space(大约)?是按功能/交易计算还是如何计算?对此的任何线索表示赞赏。我正在尝试量化我的智能合约创建的交易所需的存储 space...
如何计算data
字段大小
(当您发送调用智能合约函数的交易时)
data
字段值可以分为三部分:
0x
- 4 字节(8 个十六进制字符)- 这是函数签名,它标识您将要调用的函数。
- 该值是函数名称和参数类型的 keccak256 散列的前 4 个字节。示例:
transfer(address,uint256)
=>a9059cbb
- 该值是函数名称和参数类型的 keccak256 散列的前 4 个字节。示例:
- 其余数据 - 传递给函数的参数。
最简单的方法是使用为您计算大小的库。 :) 例如 web3js
函数 encodeFunctionCall().
示例:
const result = web3.eth.abi.encodeFunctionCall({
name: 'transfer',
type: 'function',
inputs: [{
type: 'address',
name: ''
},{
type: 'uint256',
name: ''
}]
}, ['0x1231231231231231231231231231231231231231', '1']);
console.log(result);
Returns
0xa9059cbb00000000000000000000000012312312312312312312312312312312312312310000000000000000000000000000000000000000000000000000000000000001
a9059cbb
是函数签名0000000000000000000000001231231231231231231231231231231231231231
是address
类型(256 位,64 个十六进制字符)第一个参数0000000000000000000000000000000000000000000000000000000000000001
是uint256
类型(256 位,64 个十六进制字符)第二个参数
所以结果是 0x
和 136 个十六进制字符,即 68 个字节。