Metamask
使用 IPFS Ganache 和 MetaMask 的 DApp
我正在關注 youtube 上關於使用 IPFS 的 DApp 的教程(由 dappuniversity 託管)。我已經完成了教程中提到的所有事情,但我得到了這個錯誤:
GET https://ipfs.io/ipfs/ 400 () ipfs.io/:1 App.js:87 Uncaught TypeError: Cannot read property 'set' of undefined at App.js:87 at f (once.js:25) at ConcatStream (add.js:42) at ConcatStream.<anonymous> (index.js:37) at ConcatStream.EventEmitter.emit (events.js:96) at finishMaybe (_stream_writable.js:630) at endWritable (_stream_writable.js:638) at ConcatStream.Writable.end (_stream_writable.js:594) at Duplex.onend (_stream_readable.js:577) at Duplex.g (events.js:165)
我使用 MetaMask,它與 Ganache 相關聯。
我安裝了 IPFS 並編譯和遷移了契約使用。
- npm install ipfs –save
- npm install –save ipfs-api
- 松露編譯
- 松露遷移——重置
pragma solidity 0.4.24; contract SimpleStorage { string ipfsHash; function set(string x) public { ipfsHash = x; } function get() public view returns (string) { return ipfsHash; } }
首先,您確實應該
catch
在此承諾上添加一個子句:// Get accounts. this.state.web3.eth.getAccounts((error, accounts) => { simpleStorage.deployed().then((instance) => { this.simpleStorageInstance = instance this.setState({ account: accounts[0] }) // Get the value from the contract to prove it worked. return this.simpleStorageInstance.get.call(accounts[0]) }).then((ipfsHash) => { // Update state with the result. return this.setState({ ipfsHash }) }) })
那是:
.catch(() => { console.log('Error deploying contract.') })
Cannot read property 'set' of undefined
然後,由於此特定對象,您在第 87 行收到錯誤:this.simpleStorageInstance
由於您只在一個函式中操作對象,而不是第 87 行的呼叫,因此有兩種可能的解釋:
- 由於一些系統性錯誤,合約根本沒有部署
- 有延遲,您
onSubmit
在部署合約之前以某種方式呼叫在任何情況下,請仔細檢查上面的承諾。記錄執行時間可能會有所幫助。
getAccounts
當你很重要時,Paul 的觀點是捕捉潛在的錯誤。是否
SimpleStorageContract
位於'../build/contracts/SimpleStorage.json'
第 1 行的路徑上?我有點 React 菜鳥,但你不應該
simpleStorageInstance
在頂部實例化嗎?