Вызов конструктора контракта с аргументами

Я хочу вызвать конструктор моего контракта, который принимает адрес в качестве параметра,

ниже код контракта:

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);

он отлично работает, но этот не может принять какой-либо параметр. Может ли кто-нибудь предложить какой-либо метод для этого. Я уже нашел несколько ответов об этом здесь и здесь , но они мне не пригодились.

Ответы (1)

Чтобы создать контракт, передающий параметры его конструктору, вы можете сделать

helloContract = eth.contract(contractAbi);
hello = helloContract.new(param1, param2, {from:eth.accounts[0], data:contractCode, gas:3000000})

Вот contractAbiи contractCodeрезультат компиляции вашего контракта компилятором Solidity.

Но я бы предложил использовать такие фреймворки, как embark, truffle или populus. Они значительно упрощают развертывание и тестирование контрактов.