Solidity
呼叫合約的寫入函式將部署新合約
我正在呼叫一個將資訊寫入契約的函式,MetaMask 會將其列為“契約部署”。它在 Rinkeby 測試網上。但是,如果我使用 Truffle/Ganache 在本地執行它,它會將其列為“契約呼叫”,而不是“契約創建”。
這是我的程式碼:
this.contract = new web3.eth.Contract(ABI, contractAddress) let accounts = web3.eth.getAccounts() ... let contractFunctionData = this.contract.methods.contractFunction(params).encodeABI() web3.eth.sendTransaction({ from: accounts[0], data: contractFunctionData }, function(err, result) { if(!err) console.log(result) })
當它記錄
result
它返回創建的新合約的地址。這只發生在寫函式上。讀取函式按預期工作並返回正確的輸出。
您的程式碼似乎缺少
to
地址。如果您將交易發送到地址0
(預設),它會創建一個新合約。添加to: contractAddress
應該工作。順便說一句,您也可以考慮讓合約實例完成工作,而不是
web3.eth.sendTransaction
直接使用:this.contract.methods.contractFunction(params).send()
這將確保使用權限
data
和to
地址。