Go-Ethereum

使用參數呼叫合約建構子

  • September 15, 2017

我想呼叫我的合約的建構子,它接受地址作為參數,

以下是合約程式碼:

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

我正在嘗試使用 web3.js 從 JavaScript 呼叫此契約中的建構子

下面是我使用的程式碼

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

但它顯示錯誤

未擷取的類型錯誤: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})

這是使用solidity編譯器編譯合約的結果contractAbicontractCode

但我建議使用像登船、松露或楊樹這樣的框架。它們使部署和測試合約變得更加容易。

引用自:https://ethereum.stackexchange.com/questions/18123