Grundlagen und Workflow zur Erstellung und Ausführung von Smart Contracts

Ich bin verwirrt darüber, wie die Smart Contracts intern funktionieren.
Ich habe dies gelesen:
https://blog.zeppelin.solutions/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05

TLTR: Es gibt ein Beispiel für einen Smart Contract „ProofOfExistence“, der den Hash für eine Zeichenfolge in einem Array speichert

contract ProofOfExistence3 {
  mapping (bytes32 => bool) private proofs;
  // store a proof of existence in the contract state
  function storeProof(bytes32 proof) {
    proofs[proof] = true;
  }
  // calculate and store the proof for a document
  function notarize(string document) {
    var proof = proofFor(document);
    storeProof(proof);
  }
  // helper function to get a document's sha256
  function proofFor(string document) constant returns (bytes32) {
    return sha256(document);
  }
  // check if a document has been notarized
  function checkDocument(string document) constant returns (bool) {
    var proof = proofFor(document);
    return hasProof(proof);
  }
  // returns true if proof is stored
  function hasProof(bytes32 proof) constant returns(bool) {
    return proofs[proof];
  }
}

Meine Fragen:
1) Was passiert, wenn ich diesen Vertrag einsetze? in Bezug auf die Ethereum-Blockchain. Der Code wird in einem neuen Block im Ethereum-Netzwerk gespeichert? Ich meine, in Bitcoin senden wir etwas BTC von einer Adresse zur anderen, und diese Informationen werden in einem neuen Block gespeichert. Gibt es dazu eine Analogie für Ethereum und Smart Contracts?

2) Entstehen Kosten für die Bereitstellung des Smart Contracts?

3) Wie kann ich diesen Vertrag nutzen? Angenommen, ich möchte überprüfen, ob dort eine Zeichenfolge vorhanden ist. Wie kann ich das tun? das gleiche, wenn ich einen neuen String speichern möchte. Was ist der Workflow, um eine Funktion aus dem Smart Contract auszuführen (und das Ergebnis zu erhalten)?

4) Brauchen wir ETH, um eine Funktion auf dem Smart Contract auszuführen? Warum? Was passiert in der Blockchain, wenn sie ausgeführt (nicht bereitgestellt) wird?

Ich weiß, dass diese Antworten etwas lang werden könnten, aber ich bin mir ziemlich sicher, dass sie für viele Neulinge wie mich eine gute Referenz sein werden :)

Antworten (1)

  1. Senden Sie tx, um ein neues Konto zu erstellen, ein Vertragskonto, das im Weltstatus gespeichert ist (was eine Zuordnung der Konten und des Kontostatus ist). Dadurch wird ein Vertragsspeicher erstellt, der Bytecode unseres Smart Contracts wird gespeichert/referenziert. Blöcke enthalten Roothashes des aktuellen Zustands, Transaktionen im Block und Transaktionsbestätigungen (unter anderem).
  2. Das Bereitstellen von Verträgen kostet in der Tat Gas, mindestens 32 000 (CREATE Opcode). Dieser Betrag erhöht sich abhängig von der Größe des Bytecodes und der Konstruktorfunktionen, die bei der Bereitstellung ausgeführt werden.
  3. Es gibt ein paar verschiedene Methoden. Sie können die Geth-Konsole verwenden und über RPC damit interagieren. Oder verwenden Sie das Truffle-Framework und die Truffle-Konsole , wodurch Sie eine web3-Instanz erhalten. Alle öffentlichen/externen Vertragsmethoden können aufgerufen werden. Es sind auch Bibliotheken wie web3js oder ethersjs verfügbar, um clientseitige Anwendungen mit Ihren bevorzugten JS-Frameworks wie React, Vue oder Angle zu erstellen.
  4. Wir müssen Gas (das ist eine winzige Menge Äther) für jede Transaktion bezahlen. Wenn wir einen Vertrag anrufen, fügen wir Anrufdaten zu unserer Transaktion hinzu. Diese enthält die verschlüsselten Funktionen und Parameter, die wir auf unseren Vertrag abrufen wollen (Transaktion mit den Anrufdaten an die Vertragsadresse senden). Jede Operation kostet eine bestimmte Menge Gas, sodass je nach Komplexität der Logik die Gaskosten steigen können. Dieses Gas wird verwendet, um die Knoten zu bezahlen, die Ihre Transaktion verarbeiten (den Anruf ausführen). Gas ist hauptsächlich da, um Spam und Turing-Halting-Probleme zu vermeiden (Blöcke haben ein Gaslimit).

Das weiße und gelbe Papier von Ethereum sind ein wirklich guter Ausgangspunkt. Auch: https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369

Ich bin immer noch verwirrt über 3. Jeder Smart Contract hat eine Adresse? (Ich bin mir nicht sicher, ob es sich um eine normale Ethereum-Adresse handelt, wie eine Brieftasche?), also schätze ich, um eine Funktion aufzurufen, brauchen wir diese Adresse und den Namen der Funktion (einige von ihnen sind normalisiert, wenn es sich um ERC20 handelt). Und wir müssen das Gas bezahlen, um die Funktion auszuführen (wir werden nicht wissen, wie viel das richtig ist? Deshalb haben wir ein Limit gesetzt?). In diesem Beispiel könnte also jeder Benutzer mit Ethereum-Konto und ETH (zum Bezahlen von Gas), der die Adresse des Smart Contracts kennt, die Funktionen ausführen? und jedes Mal, wenn wir eine Funktion aufrufen, wird der Ethereum-Kette ein neuer Block hinzugefügt?
Es ist eine normale Ethereum-Adresse, aber der Unterschied zu einer Benutzeradresse besteht darin, dass ihr ein Bytecode zugeordnet ist (siehe extcodesize() im gelben Papier). Verträge können auch Ethereum enthalten. Es gibt ein Limit für das Gas, da es ein Gaslimit für Blöcke gibt, sodass eine Operation nicht für immer wiederholt werden kann. Wenn das Gas-Limit erreicht ist oder einer Transaktion das Gas ausgeht, wird eine „Kein Gas“-Ausnahme ausgelöst, die die Transaktion rückgängig macht und das nicht verbrauchte Gas an den Benutzer zurücksendet. Der Aufruf einer Funktion bedeutet das Senden einer Transaktion mit Aufrufdaten an eine Vertragsadresse.