Metamask: So greifen Sie mit Metamask auf die Funktionen des bereitgestellten Vertrags zu bzw. rufen diese auf

Ich lerne Solidität. Ich habe Metamask, truffle und testrpc eingerichtet. Ich kann Ether per Metamaske von einem Konto zum anderen senden. Aber ich möchte mit Metamask auf meinen bereitgestellten Vertrag zugreifen und meine Vertragsfunktionen aufrufen.

Frage : Kann ich meinen bereitgestellten Vertrag mithilfe von Metamask testen und damit interagieren?

Antworten (5)

Verwenden Sie Metamask nicht allein, aber Sie können es in Kombination mit anderen Tools verwenden. Ein solches Tool ist MyEtherWallet ; Gehen Sie zur Registerkarte „Verträge“, geben Sie die Vertragsadresse und ABI ein, klicken Sie auf Zugriff und wählen Sie dann „Metamask/Mist“ als Mittel, mit dem Sie auf Ihre Brieftasche zugreifen möchten. Dann gibt Ihnen MyEtherWallet die Benutzeroberfläche, um die Transaktion zu erstellen, und wenn es Zeit ist, sie zu senden, gibt es Ihnen ein Metamask-Popup, um sie zu signieren und zu übertragen.

Danke für die Antwort. Kann ich „MyEtherWallet“ zum Testen von Verträgen verwenden?
Oben rechts in MyEtherWallet befindet sich ein Dropdown-Menü zur Auswahl des Ethereum-Knotens, mit dem eine Verbindung hergestellt werden soll. Wenn Sie einen privaten Testnet-Server mit Ihrem Testvertrag ausführen, können Sie „Benutzerdefiniert“ aus dieser Liste auswählen und die Adresse Ihres lokalen Knotens eingeben, um sich zum Testen direkt mit ihm zu verbinden.
@MidnightLightning Ich bin mir nicht sicher, ob ich verstehe, was passiert. Bedeutet dies, dass Sie MEW verwenden, um den Vertrag zu unterzeichnen und zu autorisieren, damit Metamask in Ihrem Namen ausgeführt werden kann?
@Strawberry, MEW ist ein Tool, das die Transaktion zusammenstellt; Erstellen einer Nachricht, die besagt: "Ich bin Konto A und möchte Funktion B für Vertrag C ausführen". Das korrekte Formatieren der Transaktion ist das, was MEW gut kann. Aber damit diese Transaktion von der Blockchain genehmigt wird, muss der Nachweis erbracht werden, dass „Konto A“ sie wirklich genehmigt hat (Unterschrift). Also fragt MEW Metamask: „Würden Sie bitte diese von mir erstellte Transaktion unterschreiben?“, und Metamask öffnet einen Dialog, der besagt: „Diese Seite möchte, dass ich in Ihrem Namen unterschreibe; Das macht Sinn?

Metamask eignet sich hervorragend für clientseitige Interaktionen mit Smart Contracts und deren Funktionen. Wenn installiert, können Sie auf das web3 zugreifen, das in Ihren Browser eingefügt wird:

// Get the contract instance using your contract's abi and address:
const contractInstance = web3.eth.contract(abi).at(contractAddress);

// Call a function of the contract:
contractInstance.someFunction({ from: sender, value: someValue, gas: limit },
  (err, res) => { /** do something with results **/ });

Sie können sogar auf das aktuell ausgewählte Konto in der Metamaske mit zugreifen web3.eth.accounts[0].

Dies erfordert etwas Front-End-Entwicklung, aber es ist ziemlich einfach.

Die andere Alternative ist die Verwendung von Ethereum Wallet > Contracts > Watch Contract. Geben Sie erneut die Vertragsadresse und abi ein, und Sie können über die Benutzeroberfläche von Ethereum Wallet auf alle Funktionen des Vertrags zugreifen.

Vielen Dank für die Antwort. Ihre Antwort ist gut, könnten Sie sie etwas näher erläutern und mir sagen, wie diese Komponenten zusammenpassen. Da ich ein Anfänger bin und weiß, wie man einige Smart Contracts schreibt und testet. Aber es ist mir nicht klar, wie verschiedene Komponenten in der realen Welt zusammenpassen (nicht nur zum Testen). Zum Beispiel, wie MetaMask, web3, truffle, testrpc usw. zusammenarbeiten. Ich weiß, dass testrpc nur zum Testen dient, und ich verwende alle oben genannten Komponenten (außer web3) zum Testen, aber ich möchte etwas tiefer gehen, dh Front-End-Entwicklung. Danke.
web3 wird seit Januar 2021 nicht mehr von Metamask unterstützt, daher funktioniert Ihre Antwort nicht, siehe: docs.metamask.io/guide/…

Beispiel:

web3 = new Web3(web3.currentProvider);
  let myContract = new web3.eth.Contract(abi, address);
  let amount = 1;
  amount = web3.utils.toWei(amount.toString(), 'ether');
  let response = await myContract.methods
    .createPayment(1, address)  //function in contract
    .send({
      from: window.web3.currentProvider.selectedAddress,
      to: address,
      value: amount,
      gasPrice: '20000000000' 
    });
  console.log("response: ", response);

MyEtherWallet und Mist Wallet sind beide jetzt veraltet .
Eine der besten Alternativen dazu ist MyCrypto Wallet. Es wird auch von den MEW- und Nebelentwicklern empfohlen . Es verfügt über eine vereinfachte Web-Benutzeroberfläche , und es sind auch Desktop-Versionen verfügbar.

Dies funktioniert im Jahr 2022, ändern Sie das abiund addressund fügen Sie es in Ihre HTML-Datei ein:

    async function loadWeb3() {
      if (window.ethereum) {
        window.web3 = new Web3(window.ethereum);
        window.ethereum.enable();
      }
    }

    async function loadContract() {
      let abi = [] // your abi here
      let address = "0xa1b2c3d4..."  // your contract address here
      return await new window.web3.eth.Contract(abi, address);
    }
    async function getCurrentAccount() {
      const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
      return accounts[0];
    }

    async function run() {
      await loadWeb3();
      window.contract = await loadContract();
      const account = await getCurrentAccount();
      let result = await window.contract.methods.mint().send({ from: account });
    }

    if (typeof window.ethereum !== 'undefined') {
      run()
    }

siehe: https://ethereum.stackexchange.com/a/131437/30431