Metamask

使用 IPFS Ganache 和 MetaMask 的 DApp

  • December 12, 2021

我正在關注 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
  • 松露編譯
  • 松露遷移——重置

我的 Ganache 截圖 這是智能合約

pragma solidity 0.4.24;

contract SimpleStorage {
 string ipfsHash;

 function set(string x) public {
   ipfsHash = x;
 }

 function get() public view returns (string) {
   return ipfsHash;
 }
}

github App.js 上的主要程式碼

首先,您確實應該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 行的呼叫,因此有兩種可能的解釋:

  1. 由於一些系統性錯誤,合約根本沒有部署
  2. 有延遲,您onSubmit在部署合約之前以某種方式呼叫

在任何情況下,請仔細檢查上面的承諾。記錄執行時間可能會有所幫助。

getAccounts當你很重要時,Paul 的觀點是捕捉潛在的錯誤。

是否SimpleStorageContract位於'../build/contracts/SimpleStorage.json'第 1 行的路徑上?

我有點 React 菜鳥,但你不應該simpleStorageInstance在頂部實例化嗎?

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