簡體   English   中英

使用Web3和Go-ethereum在私有以太坊區塊鏈上進行交易時未捕獲(承諾)錯誤

[英]Uncaught (in promise) Error while opening and doing transaction on private ethereum blockchain using web3 and go-ethereum

我正在嘗試使用web3js將React應用程序與以太坊集成。

事件Onsubmit將執行以下操作:1.創建一個帳戶。 2.打開帳戶。 3.使用創建的帳戶批准智能合約。

這是我的代碼

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 ! ');


            });
  };

正在創建帳戶,但是在進行交易時,我收到以下錯誤。

批准智能合約.....正在開采! App.js:57

0x98f76b2673d545F55c0ff1e961f15EF0a7DfBaD3

App.js:71個智能合約

批准! errors.js:29未捕獲(承諾)錯誤:返回錯誤:需要身份驗證:密碼或在XMLHttpRequest.request.onreadystatechange(index.js:103)的index.js:125在Object.ErrorResponse(errors.js:29)解鎖)XMLHttpRequest._onHttpResponseEnd(xml-http-request.js:459)的XMLHttpRequest._setReadyState(xml-http-request.js:288)的XMLHttpRequestEventTarget.dispatchEvent(xml-http-request-event-target.js:50)在push ../ node_modules / stream-http / lib / response.js.exports.IncomingMessage中。 (xml-http-request.js:413),位於push ../ node_modules / stream-http / lib / response.js.exports.IncomingMessage.emit(events.js:139),位於endReadableNT(_stream_read.js:1030), afterTickTwo(index.js:31)位於Item.push ../ node_modules / process / browser.js.Item.run(browser.js:167)在排水隊列(browser.js:131)ErrorResponse @ errors.js:29(匿名)@ index.js:125 request.onreadystatechange @ index.js:103 XMLHttpRequestEventTarget.dispatchEvent @ xml-http-request-event-target.js:50 XMLHttpRequest._setReadyState @ xml-http-request.js:288 XMLHttpRequest._onHttpResponseEnd @ xml-http-request.js:459(匿名)@ xml-http-request.js:413發出@ events.js:139 endReadableNT @ _stream_visible.js:1030 afterTickTwo @ index.js:31 push ../ node_modules /進程/瀏覽器.js.Item.run @瀏覽器.js:167排水隊列@瀏覽器.js:131 setTimeout(異步)_fireError @ index.js:72 sendTxCallback @ index.js:465(匿名)@ index.js:125請求.onreadystatechange @ index.js:103 XMLHttpRequestEventTarget.dispatchEvent @ xml -http-request-event-target.js:50 XMLHttpRequest._setReadyState @ xml-http-request.js:288 XMLHttpRequest._onHttpResponseEnd @ xml-http-request.js:459(匿名)@ xml-http-request.js: 413發出@ events.js:139 endReadableNT @ _stream_read.js:1030 afterTickTwo @ index.js:31 push ../ node_modules / process / browser.js.Item.run @ browser.js:167排水隊列@ browser.js:131 setTimeout(異步)runTimeout @ browser.js:43 push ../ node_modules / process / browser.js.process.nextTick @ browser.js:156 nextTick @ index.js:30也許ReadMore @ _stream_visible.js:521 addChunk @ _stream_可讀。 js:300可讀AddChunk @ _stream_read.js:278 push ../ node_modules / ready-stream / lib / _stream_visible.js.Readable.push @ _stream_visible.js:242(匿名)@ response.js:47寫@ response.js: 44

編輯:更改代碼以捕獲錯誤

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 ! ');});

web3.eth.personal.unlockAccount返回“ true”,但是auth.methods.approve仍然給我錯誤。

因此,在對代碼進行了一些重大更改之后,我能夠通過react應用程序上的onSubmit事件執行以下操作。

  1. 創建一個帳戶。
  2. 向其中轉移一些氣體。
  3. 解鎖帳戶。
  4. 與該帳戶簽訂合同。

這是代碼

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 ! ');

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

      });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM