Aufruf des Vertragskonstruktors mit Argumenten

Ich möchte den Konstruktor meines Vertrags anrufen, der die Adresse als Parameter akzeptiert,

Unten ist der Vertragscode:

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

Ich versuche, den Konstruktor in diesem Vertrag mit web3.js von JavaScript aus aufzurufen

Unten ist der Code, den ich dafür verwende

var myContract = new web3.eth.Relay("0x87d8cc2aa5230e5d2f1a54b84366ea433da4bafd",abi, contractAddress, {
    from: web3.eth.coinbase,gasPrice: 200000000 });

aber es zeigt Fehler, dass

Nicht erfasster TypeError: web3.eth.Relay ist kein Konstruktor

Wenn ich der normalen Vertragsobjekt-Erstellungsmethode folge, dh.

var contract = web3.eth.contract(abi).at(contractAddress);

Es funktioniert gut, aber dieser kann keinen Parameter akzeptieren. Kann jemand eine Methode vorschlagen, um dies zu tun? Ich habe hier und hier auch schon einige Antworten dazu gefunden, aber für mich nicht nützlich.

Antworten (1)

Um einen Vertrag zu erstellen, der Parameter an seinen Konstruktor übergibt, können Sie dies tun

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

Hier contractAbiund contractCodesind das Ergebnis der Erstellung Ihres Vertrags mit Solidity Compiler.

Aber ich würde vorschlagen, ein Framework wie einschiffen, truffle oder populus zu verwenden. Sie erleichtern das Bereitstellen und Testen von Verträgen erheblich.