Ethereum-Fehler: Anbieter unterstützt keine Abonnements: HDWalletProvider

Ich mache eine Flash-Darlehensanfrage mit web3 , truffle und erhalte immer wieder den Fehler in einem Ereignis-Listener:

Der aktuelle Anbieter unterstützt keine Abonnements: HDWalletProvider.

Ich verbinde mich mit dem ropsten Testnetz.

Ich verwende den folgenden Code, um eine Verbindung herzustellen, um ausgegebene Ereignisse in einem Smart Contract zu erhalten:

const web3 = new Web3();
const eventProvider = new Web3.providers.WebsocketProvider(wss);
 
eventProvider.on('error', e => {
    console.error('WS Infura Error', e);
});

eventProvider.on('connect', function () {
        console.log('WSS Connected');
            setupListeners();
    });

eventProvider.on('end', e => {
    console.log('WS closed');
    console.log('Attempting to reconnect...');

       eventProvider = new Web3.providers.WebsocketProvider(wss);

eventProvider.on('connect', function () {
        console.log('WSS Reconnected');
            setupListeners();
    });
    web3.setProvider(eventProvider);
});
 web3.setProvider(eventProvider);  

Die Anfrage lautet:

 contract1.methods.flashloan( args_of_my_use_case ).send({
              from: addr, //designated Metamask wallet address
              gas: gasCost,
              value: 0,
              nonce: accountNonce,
            },
            function (error, data) {
               if(error){
                 invariant.currentlyTrading = false;
                 obj.nowTrading = false;
               }
               console.log('arb data => ', data, '   arb error => ' ,error, appendText);
            });

Die Verbindung funktioniert und Ereignisse werden ausgelöst, aber eine der Antworten auf eine Flash-Darlehensanfrage lautet:

Fehler: Der aktuelle Anbieter unterstützt keine Abonnements: HDWalletProvider

Meine Trüffelkonfiguration ist:

const dotenv = require('dotenv');
const fs = require('fs');
 
const envConfig = dotenv.config({silent: true});



 const HDWalletProvider = require('@truffle/hdwallet-provider');
 const infuraKey = process.env.INFURA_API_KEY;

const ethPubAddr = process.env.ETH_PUBLIC_ADDRESS;
 const mnemonic = process.env.METAMASK_PVT_KEY; 
 

 console.log("mnemonic -->" , mnemonic);

module.exports = {
   
  networks: {
    // Useful for testing. The `development` name is special - truffle uses it by default
    // if it's defined here and no other network is specified at the command line.
    // You should run a client (like ganache-cli, geth or parity) in a separate terminal
    // tab if you use this network and you must also set the `host`, `port` and `network_id`
    // options below to some value.
    //
    mainnet: {
      provider: function() {
        return new HDWalletProvider(mnemonic, "https://mainnet.infura.io/v3/"+infuraKey);
      },
      network_id: 1,
      from: ethPubAddr

    },
    ropsten: {
      provider: function() {
         return new HDWalletProvider(mnemonic, "wss://ropsten.infura.io/ws/v3/"+infuraKey);
      },
      network_id: 3,
      from: ethPubAddr,   
      gas: 6800000, // Current Ropsten gas limit. See https://ropsten.etherscan.io/block/3141628
      gasPrice: 20000000000 // 1.1 GWei - based on the lower end of current txs getting into blocks currently on Ropsten.
   //   gasLimit: 8000000

    },
  
    development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
    },

  },

  // Set default mocha options here, use special reporters etc.
  mocha: {
    // timeout: 100000
  },

  // Configure your compilers
  compilers: {
    solc: {
       version: '0.6.10',    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
     settings: {          // See the solidity docs for advice about optimization and evmVersion
       /* optimizer: {
          enabled: true,
          runs: 2
        }*/
      //  evmVersion: "byzantium"
       }
    }

  }
}

Antworten (1)

Abonnements werden nur vom WebSockets-Anbieter unterstützt. Die URL, die Sie angeben, ist für den HTTP-Anbieter

        return new HDWalletProvider(mnemonic, "https://mainnet.infura.io/v3/"+infuraKey);`

Wechseln Sie https://zu wss://.

Hallo @Mikko, danke für die Antwort. Ich entschuldige mich dafür, dass ich nicht erwähnt habe, dass ich auf einem Testnetz ropsten bin. In meinem Code ist es tatsächlich auf wss eingestellt. Ich habe aber immer noch das Problem; auch mit dem wss. Ich werde die Frage bearbeiten, um das jetzt zu zeigen.
Ok, erwischt. Funktioniert Ihr Code, wenn Sie HDWalletProvider weglassen und einfach den WSS-Anbieter direkt verwenden? Es klingt fast so, als hätte Web3.js einen Fehler, um dies zu erkennen.
Ich habe gerade schnell das web3.js-Repo durchsucht, wie dies erkannt wird: github.com/ethereum/web3.js/blob/… - möglicherweise ist ein Patch für HDWalletProvider erforderlich, wenn die onFunktion fehlt
Ich werde das versuchen und sobald wie möglich berichten. Vielen Dank
Hallo @Mikko, meinst du, ich sollte return new HDWalletProvider(mnemonic, "wss://mainnet.infura.io/v3/"+infuraKey) ersetzen? in meiner Truffle-Konfiguration mit einem Websocket-Anbieter? Wenn ja, bitte wie würde das aussehen?
Ja. Ich erinnere mich nicht, wie es aussehen sollte, aber web3.js-Dokumente sollten ein Beispiel haben. Ich habe ein Bauchgefühl HDWalletProviderist der Täter.
Ich habe versucht, einen Websocket-Anbieter direkt hinzuzufügen, aber es heißt, dass das Absenderkonto nicht erkannt wurde. Gibt es eine Möglichkeit, den privaten Schlüssel so weiterzugeben, wie ich ihn an den HDWalletProvider weitergebe?
Nein ist es nicht. Aber funktionieren die Eventabonnements ohne das HDWalletProvider>Dh es gibt keinen Fehler.
Wenn dies der Fall ist, schlage ich vor, dass Sie ein Problem direkt im Truffle-Github-Repository einreichen.