Я хочу вызвать конструктор моего контракта, который принимает адрес в качестве параметра,
ниже код контракта:
pragma solidity ^0.4.4;
contract Relay {
address public currentVersion;
address public owner;
function Relay(address initAddr){
currentVersion = initAddr;
owner = msg.sender;
}
function update(address newAddress){
if(msg.sender != owner) throw;
currentVersion = newAddress;
}
function(){
if(!currentVersion.delegatecall(msg.data)) throw;
}
}
Я пытаюсь вызвать конструктор в этом контракте из JavaScript, используя web3.js
ниже приведен код, который я использую для этого
var myContract = new web3.eth.Relay("0x87d8cc2aa5230e5d2f1a54b84366ea433da4bafd",abi, contractAddress, {
from: web3.eth.coinbase,gasPrice: 200000000 });
но он показывает ошибку, что
Uncaught TypeError: web3.eth.Relay не является конструктором
Если я буду следовать обычному методу создания объекта контракта, т.е.
var contract = web3.eth.contract(abi).at(contractAddress);
он отлично работает, но этот не может принять какой-либо параметр. Может ли кто-нибудь предложить какой-либо метод для этого. Я уже нашел несколько ответов об этом здесь и здесь , но они мне не пригодились.
Чтобы создать контракт, передающий параметры его конструктору, вы можете сделать
helloContract = eth.contract(contractAbi);
hello = helloContract.new(param1, param2, {from:eth.accounts[0], data:contractCode, gas:3000000})
Вот contractAbi
и contractCode
результат компиляции вашего контракта компилятором Solidity.
Но я бы предложил использовать такие фреймворки, как embark, truffle или populus. Они значительно упрощают развертывание и тестирование контрактов.