Kosten für die Interaktion mit Smart Contact [Duplikat]

Ich habe gelesen, dass es Kosten gibt, die bezahlt werden sollten, wenn ein intelligenter Kontakt zum Etherum bereitgestellt wird. Entstehen für einen Endbenutzer Kosten für die Interaktion mit einem bestimmten intelligenten Kontakt? Zum Beispiel: Wenn ich einen Vertrag für ein Vermietungsunternehmen aufbaue, müssen Endbenutzer, die nach bestimmten Mietangeboten suchen und mit diesem Kontakt interagieren müssen, Ether bezahlen?

Und wenn ja, macht das keinen Sinn, Benutzer, die Smart Contact verwenden müssen, Gebühren zahlen zu lassen. Wie kann es vermieden werden ??

Antworten (2)

Alle Interaktionen zwischen Benutzern und Smart Contracts erfolgen über Transaktionen.

Jede Transaktion hat Kosten, die in zwei Teilen gemessen werden:

  • Gas: eine Gebühr, die von der Komplexität der Transaktion und den durch die Transaktion verursachten Vorgängen abhängt
  • Gaspreis: Eine Umrechnung zwischen Gas und Ether, gemessen in Ether/Gas

So können Sie sehen, dass alle Transaktionen eine gewisse Menge an Ether benötigen, um abgeschlossen zu werden. Dieses System dient dazu, Denial-of-Service-Angriffe, Endlosschleifen und andere ressourcenintensive Berechnungen zu verhindern.

Im Allgemeinen führt kein Weg daran vorbei, diese Gebühren pro Transaktion zu zahlen. Es gibt Systeme, die Sie einrichten können, wenn Sie möchten, dass Ihre Kunden keine Gebühren zahlen, können Sie die Gebühren im Namen des Benutzers bezahlen. Aber diese Systeme umgehen die zugrunde liegenden Authentifizierungsprozesse für Ethereum und erfordern, dass Sie einen Dienst besitzen, der ein hohes Vertrauen mit einem intelligenten Vertrag hat.

Hier erfahren Sie mehr: Transaktionen

Ethereum verwendet die „Ethereum Virtual Machine (EVM)“, um den Code von Smart Contracts auszuführen. Diese EVM ist quasi-turing abgeschlossen. Eine Maschine ist vollständig, wenn sie bei genügend Raum und Zeit jedes kalkulierbare Problem lösen kann. Aber warum ist es nur "quasi" vollständig? Denn neben ausreichend Platz und Zeit benötigt das EVM genügend GAS (Ether). Jede Anweisung, außer den Anweisungen STOP, RETURN und REVERT, erfordert die Ausführung von GAS in der EVM. Beispiel: Wenn Sie zwei Werte aus dem Gedächtnis addieren möchten, müssen Sie 3 GAS für die Addition bezahlen. Über die Kosten pro Instruktion können Sie sich im Yellowpaper, Anhang G und H ( https://ethereum.github.io/yellowpaper/paper.pdf ) informieren). Wenn ein Benutzer einen Smart Contract ausführen möchte und eine Transaktion an das Ethereum-Netzwerk sendet, die den Auftrag dazu enthält, muss der Benutzer Gas bezahlen. Um Ihre erste Frage zu beantworten, muss jeder Benutzer Benzin bezahlen, wenn er einen Auftrag zur Ausführung eines Smart Contracts über eine Transaktion sendet. Dennoch gibt es einen Sonderfall. Wenn Sie nur Daten mit einem Smart Contract lesen möchten, damit Sie den Zustand des Speichers nicht ändern, können Sie dies tun, ohne Benzin zu bezahlen. Dies wird erreicht, indem die EVM ausgeführt und der Smart Contract nur lokal auf Ihrem Computer (oder einem anderen Computer, der diesen Dienst anbietet) ausgeführt wird.

Wie können Sie dies vermeiden? Wenn Sie die Nutzer Ihres Smart Contracts davor schützen wollen, diese Kosten zu bezahlen, müssen Sie das Gas aus einer anderen Quelle beziehen. Dies bedeutet, dass Sie oder jemand anderes das Gas für den Benutzer bezahlen müssen, bevor er den Smart Contract nutzt. Sie könnten zum Beispiel 1 Ether in Ihren Smart Contract stecken, um diese Kosten zu decken. Dies ist jedoch riskant, da Sie Ihren Smart Contract vor einem „Ddos“-Angriff schützen müssen, der den gesamten Ether verbraucht, den Sie für Gas reserviert haben. Außerdem müssen Sie darauf achten, dass Ihrem Smart Contract für Ihre Benutzer nicht das Benzin ausgeht, da Ihre Dienste sonst für die Benutzer nicht verfügbar sind und sie ihr Geld verlieren, das sie bezahlen müssen, um Ihren Smart Contract anzurufen (jede Transaktion kostet 21000 GAS mindestens).

Laut Ihrer Antwort "Wenn Sie nur Daten mit einem Smart Contract lesen möchten, ohne Benzin zu bezahlen, können Sie dies tun, indem Sie die EVM ausführen und den Smart Contract nur lokal auf Ihrem Computer (oder einem Computer, der diesen Dienst anbietet) ausführen. Tut dies den Endbenutzern Wer den Smart Contract nach bestimmten Informationen abfragt, sollte Teil des Etherum-Netzwerks sein?Betrachten Sie dieses Szenario, wenn Sie einen Smart Contract erstellen müssen, der einige Daten enthält, und es gibt IoT-Geräte (die Millionen von Knoten erreichen können), die das abfragen möchten Vertrag, um diese Werte zu überprüfen. Wie können wir verhindern, dass diese Knoten es vermeiden, für Gas zu bezahlen?
@Mohamed: Das Problem kann gelöst werden, indem Sie Ihren eigenen vollständigen Knoten einführen und ihn von Ihren iot-Geräten abfragen. Beispiel: Richten Sie einen Geth-Knoten mit dem Flag "--rpc" ein. Dieser Knoten muss die gesamte Blockchain synchronisieren, stellen Sie also sicher, dass genügend persistenter Speicher verfügbar ist. Verwenden Sie die JSON-RPC-API, um Remoteprozeduraufrufe (rpc) an Ihren Geth-Knoten senden zu können ( github.com/ethereum/wiki/wiki/JSON-RPC#json-rpc-api ). Der gesuchte Aufruf sollte eth_call sein . Auf diese Weise können Ihre iot-Geräte einen JSON-RPC an Ihren Knoten senden, der dann den Smart Contract ausführt, der die Daten abfragt.
Die von Ihnen genannte Lösung bringt mich zurück zum Client-Server-Modell . Wenn also der von Ihnen genannte Serverknoten ausgeschaltet ist, können alle IoT-Geräte den Vertrag nicht abfragen. Wie kann ich vermeiden, einen Server als Knoten in der Blockchain zu verwenden? Ich möchte, dass das System vollständig verteilt wird