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.
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 contractAbi
und contractCode
sind 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.