Das Feld "Transaktionen senden von" muss mit Infura web3 definiert werden

Wenn ich versuche, meine Transaktion mit Infura zu senden, erhalte ich diesen Fehler

      "The send transactions "from" field must be defined" 

Mein Problem ist mein web3-Objekt. Als ich Metamask und meine App von einer Google Chrome-Seite aus verwendete, hatte ich keine Probleme

  App.web3Provider = web3.currentProvider
  web3 = new Web3(web3.currentProvider)

Jetzt muss ich mit Truffle mit meinem Smart Contract ohne Metamask interagieren.

Ich bekomme mein web3 von infura.

    App.web3Provider = new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/2a8xxxxxxxxxxxxxxx")
    web3 = new Web3(App.web3Provider)

(UPDATE) Interaktion mit meinem Smart Contract

    const partecipazioneContest = await $.getJSON('File.json')
    App.contracts.PartecipazioneContest = TruffleContract(partecipazioneContest)
    App.contracts.PartecipazioneContest.setProvider(App.web3Provider)
    App.partecipazioneContest = await App.contracts.PartecipazioneContest.deployed()

Fehler bei der Transaktion:

  await App.partecipazioneContest.addUser(parameters);

Ich denke, mein Problem ist, dass mein Konto nicht geladen wird, also erstelle ich mein Konto aus meinem privaten Schlüssel und erhalte die richtige Adresse, aber wenn ich versuche, mein Konto mit der Funktion getAccount() abzurufen, sind die Konten leer.

    await web3.eth.accounts.privateKeyToAccount('0x33434XXXXXXXXXXX13');
    web3.eth.getAccounts().then(function(acc){ 
      accounts = acc 
      console.log(accounts)
      alert(" getAccounts " + accounts)

    })

Wie lade ich mein von infura zurückgegebenes Web3 mit meinen Konten und allen Informationen, die ich für die Interaktion mit den Smart Contracts benötige?
Ich möchte mit meinem Smart-Vertrag mit meiner Brieftasche auf Metamask interagieren, die an Infura vorbeigeht

Sie müssen Ihr Konto auf Infura entsperren, damit Truffle es von dort abrufen kann.
@goodvibration ist es möglich? Ich lese: "Infura unterstützt das "Entsperren" von Konten nicht. Stattdessen sollten Benutzer bereits signierte Rohtransaktionen mit eth_sendRawTransaction senden." infura.io/docs/ethereum/json-rpc/ratelimits
Nein, das ist natürlich nicht möglich, da jeder andere, der mit diesem Infura-Knoten verbunden ist, Ihr entsperrtes Konto nach Belieben verwenden kann.
@goodvibration also hast du einen vorschlag? Ich hatte ein Update für die Interaktion mit meinem Smart Contract.
Natürlich genau so, wie es Ihnen in der oben verlinkten Infura-Dokumentation vorgeschlagen wurde - signieren Sie die Transaktion mit dem privaten Schlüssel Ihres Kontos und senden Sie stattdessen die bereits signierte Transaktion.

Antworten (1)

Sie können den Wrap-Web3.js-Anbieter mit einem Truffle HDWalletProvider verwenden .

HDWalletProvider umschließt den zugrunde liegenden Anbieter und ermöglicht Ihnen die einfache Verwendung send()mit ETH- und Smart-Contract-Transaktionen mit den vorhandenen web3.js- und Vertrags-APIs.

  • Umschließen Sie den web3-Anbieter mit HDWalletProvider
  • Importieren Sie Ihre privaten Schlüssel in HDWalletProvider
  • Interagieren Sie mit intelligenten Verträgen und dergleichen, legen Sie sie send({from: ...})auf ein Konto fest, das die importierten privaten Schlüssel verarbeitet