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)

您和您要调用的函数会有所不同。