3

私は DApp の作成に関するオンライン コースを受講しており、現在、チュートリアルで使用されるアプリケーションをセットアップしようとしています。

Dapp は、Chrome で Truffle と Metamask を使用してセットアップされます。すべての Dapp ファイルはコースによって提供されました (実際には仮想マシンで使用するために Ubuntu Linux インスタンスが提供されました) が、Metamask の最近のバージョン (コースの日付は 2017 年だと思います) の変更により、すぐに明らかになりました。アカウント アドレスに関連するフロントエンド コントロール (それらを表示するドロップダウン リストと、アカウント アドレスをコントラクトに送信する関数を呼び出すボタン) が壊れていました。エコシステム全体に慣れていないので、これからinitWeb3機能を変更した仲間の学生からの提案に従いました

  initWeb3: function() {
        // Is there is an injected web3 instance?
    if (typeof web3 !== 'undefined') {
      App.web3Provider = web3.currentProvider;
    } else {
      // If no injected web3 instance is detected, fallback to the TestRPC
      App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545');
    }
    web3 = new Web3(App.web3Provider);
    App.populateAddress();
    return App.initContract();
  }

これに

  initWeb3: function() {

            // Is there is an injected web3 instance?

            if (typeof web3 !== 'undefined') {
            ethereum.enable().then(() => {
            App.web3Provider = web3.givenProvider;
            });

            } else {

            // If no injected web3 instance is detected, fallback to the TestRPC
            App.web3Provider = new Web3.providers.HttpProvider(App.url);
            }

            web3 = new Web3(App.web3Provider);
            App.populateAddress();
            return App.initContract();

            }

ethereum.enable()主な違いは通話であることを理解しています。これにより、関連するコントロールが (Chrome) Web ページに表示され、Metamask は、ユーザーによるアカウントとの通信の承認を求めるポップアップも表示します。問題は、Web ページの読み込み時に、Chrome が次のエラーを記録することです。

Uncaught Error: Invalid provider passed to setProvider(); provider is null
    at Function.setProvider (truffle-contract.js:308)
    at Object.success (app.js:61)
    at i (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at y (jquery.min.js:4)
    at XMLHttpRequest.c (jquery.min.js:4)

これはファイルの変更に関連しているとapp.js思いますが、解決策が見つかりませんでした。App.web3Provider = new Web3.providers.HttpProvider(App.url)「新しい」バージョンから元のバージョンに存在するものに置き換えてみまし App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545');たが、違いはありませんでした。givenProviderとと同じcurrentProviderです。

私と他の仲間の学生は、コースの背後にあるスタッフと契約して支援を求めましたが、何も提供されませんでした(私も彼らと問題を取り上げました). エラーをグーグル検索し、結果を読み返すのにかなりの時間を費やしましたが、これまでのところ解決策は提供されていません.いくつかの結果は、これが実際にはWeb3のバグであることを示唆していますが、私は確信が持てませんでした. 誰かが問題を手伝ってくれるなら、それはありがたいです。

ありがとう

4

2 に答える 2