Nicht erfasster (versprochener) Fehler beim Öffnen und Ausführen von Transaktionen auf einer privaten Ethereum-Blockchain mit web3 und go-ethereum

Ich versuche, eine React-App mit go-ethereum mit web3js zu integrieren.

Ein Event Onsubmit führt Folgendes aus: 1. Erstellen Sie ein Konto. 2. Eröffnen Sie das Konto. 3. Genehmigen Sie einen Smart Contract mit dem erstellten Konto.

Hier ist mein Code

import React, { Component } from 'react';
import './App.css';
import web3 from './web3';

....

class App extends Component {

  constructor(props){
    super(props);

    this.state = {requester : '', receiver:'', balance: '', message:''};
  }

 async  componentDidMount(){
    const requester = await auth.methods.requester().call();
    const receiver = await auth.methods.receiver().call();
    const approvers = await auth.methods.approvers(0).call();
    const balance = await web3.eth.getBalance(auth.options.address);

    this.setState({requester,receiver,balance});

  }

  onSubmit = async (event)=>{
      event.preventDefault();
      console.log('Approving the smart contract ..... Mining in process ! ');

      var pass = "xxxxxxx"

      var newaccount = web3.eth.personal.newAccount(pass);

      var promise1 = Promise.resolve(newaccount);


      promise1.then(function(value) {
        var accountnumber = value;
        console.log(accountnumber);
        web3.eth.personal.unlockAccount(accountnumber,pass, 1500);    
        auth.methods.approve().send({gas: '1000000',from: accountnumber});

        console.log('Smart Contract approved ! ');


            });
  };

Das Konto wird erstellt, aber während der Transaktion erhalte ich die folgende Fehlermeldung.

Genehmigung des Smart Contract ..... Mining in Bearbeitung ! App.js:57

0x98f76b2673d545F55c0ff1e961f15EF0a7DfBaD3

App.js:71 Intelligenter Vertrag

genehmigt ! errors.js:29 Nicht erfasster (versprochener) Fehler: Zurückgegebener Fehler: Authentifizierung erforderlich: Passwort oder Entsperren bei Object.ErrorResponse (errors.js:29) bei index.js:125 bei XMLHttpRequest.request.onreadystatechange (index.js:103 ) bei XMLHttpRequestEventTarget.dispatchEvent (xml-http-request-event-target.js:50) bei XMLHttpRequest._setReadyState (xml-http-request.js:288) bei XMLHttpRequest._onHttpResponseEnd (xml-http-request.js:459) unter push../node_modules/stream-http/lib/response.js.exports.IncomingMessage. (xml-http-request.js:413) unter push../node_modules/stream-http/lib/response.js.exports.IncomingMessage.emit (events.js:139) unter endReadableNT (_stream_readable.js:1030) unter afterTickTwo (index.js:31) bei Item.push../node_modules/process/browser.js.Item.run (browser.js:167) bei drainQueue (browser.js:131) ErrorResponse @ errors.js:29 ( anonym) @ index.js:

Bearbeiten: Code geändert, um die Fehler abzufangen

web3.eth.personal.unlockAccount(accountnumber,pass, 1500, function(err, result){
              if(err){
                alert("Error"+ err);
                return;}
              alert("Account Opening: "+ result);});

......

auth.methods.approve().send({gas: '1000000',from: accountnumber}, function(err, result){
      if(err){
        alert("Error"+ err);
        return;}
      alert("Account address: "+ result);
      console.log('Smart Contract approved ! ');});

Das web3.eth.personal.unlockAccountgibt "true" zurück, aber das auth.methods.approvegibt mir immer noch den Fehler.

Antworten (1)

Nach einigen größeren Änderungen im Code kann ich also mit einem onSubmit-Ereignis in einer Reaktions-App Folgendes tun.

  1. Ein neues Konto erstellen.
  2. Übertragen Sie etwas Gas darauf.
  3. Konto eröffnen.
  4. Genehmigen eines Smart Contracts mit dem Konto.

Hier ist der Code

onSubmit = async (event)=>{
      event.preventDefault();
      console.log('Approving the smart contract ..... Mining in process ! ');

      var pass = "passsword1"

      var newaccount = web3.eth.personal.newAccount(pass);

      var promise1 = Promise.resolve(newaccount);


      promise1.then(function(value) {
        var accountnumber = value;
        console.log(accountnumber);
        web3.eth.personal.unlockAccount('0x197022acd263e8be0f6b65b10d1e5cdbaa244c17',"*****", 1500, function(err, result){
          if(err){
            alert("Error"+ err);
            return;
          }else {
          alert("Parent Opening: "+ result);
          web3.eth.sendTransaction({
          from: "0x197022acd263e8be0f6b65b10d1e5cdbaa244c17",
          to: accountnumber, 
          value: '100000000000000000', 
          }, function(err, transactionHash) {
          if (err) { 
              console.log(err); 
          } else {
            web3.eth.personal.unlockAccount(accountnumber,pass, 1500, function(err, result){
              if(err){
                alert("Error"+ err);
                return;
              }else{
                console.log(web3.eth.getBalance(accountnumber));
                alert("Child Opening: "+ result);
                auth.methods.approve().send({gas: '20000000',from: accountnumber}, function(err, result){
                if(err){
                  alert("Error"+ err);
                  return;
                }else{
                  console.log("Account address: "+ result);
                  console.log('Smart Contract approved ! ');

                }
                });
              }
            });
          }
          });
       }

      });
};