Solidity

呼叫合約的寫入函式將部署新合約

  • January 26, 2019

我正在呼叫一個將資訊寫入契約的函式,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()

這將確保使用權限datato地址。

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