Ошибка при вызове функции подтверждения с кнопки - PullRequest
3 голосов
/ 23 января 2020

У меня есть эти 2 функции

function getData() {
  var a = document.getElementById("amount").value;
  var b = a * 0.1;
  var c = a - b;
  document.getElementById("receive").innerHTML = c;
};

function approve(){
  if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
  // We are in the browser and metamask is running.
  web3 = new Web3(window.web3.currentProvider.enable());
}
  var accounts= web3.eth.getAccounts();
  var a = document.getElementById("amount").value;
  var agiContract = new web3.eth.Contract(agiabi,agiContractAddress);
  agiContract.methods.approve("0xE462CbEE0cd420f6c199B0194B1D8D93Fb5e7720", a).send({ from: accounts[0] });
};

Функция getData получает сумму ввода от пользователя, и эта сумма ввода передается в функцию accept ():

При утверждении Функция Я получаю эту сумму, утвержденную из другого контракта, поэтому я могу использовать сумму в своем Контракте.

Но когда я нажимаю Подтвердить, я получаю эту ошибку:

web3.min.js:1 Uncaught TypeError: this.provider[(intermediate value)(intermediate value)(intermediate value)] is not a function
    at t.u.send (web3.min.js:1)
    at h (web3.min.js:1)
    at M.r [as getAccounts] (web3.min.js:1)
    at approve (exchange.js:84)
    at HTMLButtonElement.onclick (VM15448 :227)

Я использовал следующее версии моей функции утверждают

function approve(){

  var accounts= web3.eth.getAccounts();
  var a = document.getElementById("amount").value;
  var agiContract = new web3.eth.Contract(agiabi,agiContractAddress);
  agiContract.methods.approve("0xE462CbEE0cd420f6c199B0194B1D8D93Fb5e7720", a).send();
};

, что приводит к следующей ошибке

Uncaught (in promise) Error: No "from" address specified in neither the given options, nor the default options.
    at Object.d._executeMethod (web3.min.js:1)
    at approve (exchange.js:84)
    at HTMLButtonElement.onclick (VM15481 :227)

В чем здесь проблема?

Я пробовал этот код, но он также не работает

function getData() {
  var a = document.getElementById("amount").value;
  var b = a * 0.1;
  var c = a - b;
  document.getElementById("receive").innerHTML = c;
};




function approve() {
      web3.eth.sendTransaction({
        from: web3.eth.coinbase,
        to: '0xE462CbEE0cd420f6c199B0194B1D8D93Fb5e7720',
        value: web3.utils.toWei(document.getElementById("amount").value, 'ether')
      }, function(error, result) {
        if (!error) {
          console.log(result) ;
        } else {
          console.log(error);
        }
      })
    }

Это дает мне

Uncaught Error: The send transactions "from" field must be defined!
    at f.inputTransactionFormatter (web3.min.js:1)
    at web3.min.js:1

Я снова обновил свой код

function getData() {
  var a = document.getElementById("amount").value;
  var b = a * 0.1;
  var c = a - b;
  document.getElementById("receive").innerHTML = c;
};


function approve() {
  var accounts= web3.eth.getAccounts();

      web3.eth.sendTransaction({
        from: accounts ,
        to: '0xE462CbEE0cd420f6c199B0194B1D8D93Fb5e7720',
        value: web3.utils.toWei(document.getElementById("amount").value, 'ether')
      }, function(error, result) {
        if (!error) {
          console.log(result) ;
        } else {
          console.log(error);
        }
      })
    }

, и это дает мне следующую ошибку

inpage.js:1 Uncaught DOMException: Failed to execute 'postMessage' on 'Window': #<Promise> could not be cloned.
...