Web3中智能合约部署的数据部分是什么?

时间:2018-08-29 02:40:19

标签: blockchain ethereum solidity smartcontracts web3

为了将智能合约部署到网络,我们需要以下三种信息:

根据web3规范:

// deploy new contract
var contractInstance = MyContract.new([constructorParam1] [, constructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});

如果我错了,请纠正我:

constructorParams-传递给智能合约构造函数的所有数据,

from-确定此合同的部署地址

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"

2 个答案:

答案 0 :(得分:2)

是的,data是您的智能合约的已编译字节码。

ABI没有运行合同的代码;它仅描述了接口(具有什么参数的功能存在)。

您从编译器获取字节码。不知道您正在使用什么工具,就很难更具体。

答案 1 :(得分:0)

const data = contract.methods.contractFunction(contractArgument).encodeABI()

这会将合同的功能编码为字节码,然后可以将其传递到data参数中。

contractFunction(contractArgument)

对于您和您要调用的功能将有所不同。