MetaMask + Truffle Ungültiger Adressfehler

Ich richte eine dApp (Truffle Framework) mit einem Treuhandvertrag ein, der das Geld vom Käufer eines Produkts hält, bevor es an den Verkäufer freigegeben wird. Wenn der Benutzer auf "Bestellung" klickt, kann ich eine eth.sendTransaction vom Käufer zum Vertrag durchführen. Ich möchte, dass die Zahlung freigegeben wird, wenn der Benutzer auf "erhaltener Artikel" klickt, und ich kann anscheinend die Funktion, die die Zahlung an den Verkäufer von web3js freigibt, nicht aufrufen. Ich erhalte diesen Fehler:

Error: invalid address
    at inputAddressFormatter

Liegt das daran, dass MetaMask dem Vertrag nicht erlaubt (da er nicht als Konto importiert wird), die Übertragung durchzuführen? Wenn ja, was muss ich an meinem Vertrag ändern?

Hier ist mein Vertragscode:

  function EscrowPayment(address _seller){
    // constructor
    buyer = msg.sender;
    seller = _seller;
  }

  function getSeller() constant returns(address) {
    return seller;
  }

  function () payable{

  }

  function payoutToSeller() payable {
      seller.transfer(this.balance);
  }

Als Anmerkung, ich kann payoutToSeller() über die Truffle-Konsole aufrufen und es funktioniert.

Antworten (1)

Dieser Fehler bedeutet normalerweise, dass Sie den Absender auf eine ungültige Adresse eingestellt haben. Dies kann passieren, weil:

  • Der Benutzer hat keine Konten entsperrt, von denen Sie senden können (Array mit leeren Konten)
  • Sie verwenden den injizierten web3-Anbieter nicht, um Girokonten anzufordern, und sehen sich daher keine MetaMask-Konten an.

Einige Beispiele für die korrekte Erkennung von Konten finden Sie in dieser Anleitung: https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#partly_sunny-web3---ethereum-browser-environment-check

Danke für die Information! Was ich also versuche, ist, einen Vertrag zu bekommen, um seinen Restbetrag an den Verkäufer (der im Vertrag steht) zu senden. Ich bin mir nicht sicher, wie ich den Vertrag als Konto in Metamask importieren soll oder ob das überhaupt akzeptabel ist. Wenn ich also nicht importiere, bedeutet das, dass ich diese Aktion nicht über web3 ausführen kann?
Das ist eine ganz andere Frage und geht auf einige Grundlagen der Interaktion mit Verträgen ein. Ich empfehle, ein vollständiges Tutorial wie dieses durchzugehen: karl.tech/learning-solidity-part-1-deploy-a-contract