web3 中智能合约部署的数据部分是什么?
What is data part of the smart contract deployment in web3?
为了将智能合约部署到网络,我们需要以下三个信息:
来自 web3 规范:
// deploy new contract
var contractInstance = MyContract.new([constructorParam1] [, constructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});
如有错误请指正:
constructorParams
- 传递给智能合约构造函数的所有数据,
from
- 确定部署此合约的地址
gas
- 此交易可以消耗多少的 gas 限制
什么是data
,它是合约的编译代码吗?如果是的话,如果我们已经指定了这个合约的 ABI,为什么还需要它?
如何获得这个 data
参数?当我尝试在不指定 data
参数的情况下将合约部署到网络时,我的控制台也出现错误:
Error: "invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go struct field SendTxArgs.data of type hexutil.Bytes"
是的,data
是为您的智能合约编译的字节码。
ABI 没有 运行 合同的代码;它只是描述了接口(什么函数存在什么参数)。
您从编译器中获取字节码。在不知道您使用的是什么工具的情况下,很难说得更具体。
const data = contract.methods.contractFunction(contractArgument).encodeABI()
这会将合约的一个函数编码成字节码,然后可以将其传递到数据参数中。
contractFunction(contractArgument)
您和您要调用的函数会有所不同。
为了将智能合约部署到网络,我们需要以下三个信息:
来自 web3 规范:
// deploy new contract
var contractInstance = MyContract.new([constructorParam1] [, constructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});
如有错误请指正:
constructorParams
- 传递给智能合约构造函数的所有数据,
from
- 确定部署此合约的地址
gas
- 此交易可以消耗多少的 gas 限制
什么是data
,它是合约的编译代码吗?如果是的话,如果我们已经指定了这个合约的 ABI,为什么还需要它?
如何获得这个 data
参数?当我尝试在不指定 data
参数的情况下将合约部署到网络时,我的控制台也出现错误:
Error: "invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go struct field SendTxArgs.data of type hexutil.Bytes"
是的,data
是为您的智能合约编译的字节码。
ABI 没有 运行 合同的代码;它只是描述了接口(什么函数存在什么参数)。
您从编译器中获取字节码。在不知道您使用的是什么工具的情况下,很难说得更具体。
const data = contract.methods.contractFunction(contractArgument).encodeABI()
这会将合约的一个函数编码成字节码,然后可以将其传递到数据参数中。
contractFunction(contractArgument)
您和您要调用的函数会有所不同。