我正在尝试在testRPC上部署我的第一个投票合同,下面是我的代码......出于某种原因,当我来部署时它会抱怨。
错误似乎来自arguments参数。我尝试传递一个空数组,然后说“预期为0!”。我尝试只传递一个名称,并说“value.forEach”不是一个函数。
Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
sourceCode = fs.readFileSync('Voting.sol').toString()
solc = require('solc')
compiledCode = solc.compile(sourceCode)
abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
VotingContract = new web3.eth.Contract(abiDefinition)
byteCode = compiledCode.contracts[':Voting'].bytecode
VotingContract.deploy({
data: byteCode,
arguments:['Joseph','Sean','Matthew']
}).send({
from: '0x00D1AE0A6fC13B9ecdefA118B94cF95ac16D4ab0',
gas: 4700000
})
.on('error', function(error) {
console.log(error);
}
.then(function(newContractInstance) {
console.log(newContractInstance.options.address)
}
非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
对需要构造函数参数的合同尝试类似的东西
var bytecodeWithParam = MyContract.new.getData(
param1,
param2,
{ data: compiledByteCode });
将这个bytecodeWithParam粘贴到" Byte Code"领域。如果你仔细看一下,你会看到最后打包的param1和param2为32字节。
另一个例子
var MyContract = web3.eth.contract(abiArray);
// instantiate by address
var contractInstance = MyContract.at(address);
// deploy new contract
var contractInstance = MyContract.new([constructorParam1] [, constructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});
// Get the data to deploy the contract manually
var contractData = MyContract.new.getData([constructorParam1] [, constructorParam2], {data: '0x12345...'});
// contractData = '0x12345643213456000000000023434234'
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract
答案 1 :(得分:0)
在迁移中,将args添加到部署器中。
// Deploy a single contract with constructor arguments
deployer.deploy(A, arg1, arg2, ...);
其中A是您的智能合约,arg1,arg2等是争论