Wie genau sind Etherscans interne txs auf Rinkeby für Oraclize-Aufrufe?

Ich versuche, meinen Smart Contract zu optimieren und breche auf, wo das Gas ausgegeben wird.

Jede Ausführung für eine Funktion kostet mich etwa 5 $ an Benzin. Ich habe mir Etherscan angesehen und in den internen txs wird ein Wert von 5 $ angezeigt, der für meinen Oraclize-Aufruf an die Oraclize-Adresse gesendet wurde (nur ein URL-Aufruf).

Schicke ich wirklich so viel Gas an Oraclize oder ist der Wertrechner von Etherscan für interne TX's inklusive Speicherkosten in der Funktion, die den Oraclize-Aufruf platziert? Bei meinem Oraclize-Aufruf habe ich 800000 für Gas in den benutzerdefinierten Parameter eingegeben.

Danke für jede Klarstellung.

Antworten (2)

Offenlegung: Ich bin ein Mitarbeiter von Oraclize.

 

Die Oraclize-API enthält eine Hilfsfunktion namens oraclize_getPrice. Es erwartet zwei Parameter, der erste ist die Datenquelle, die Sie abfragen, zum Beispiel "URL" oder "computation" , und der zweite ist das Gaslimit, das Sie Oraclize zur Verfügung stellen, um Ihre __callback. Es gibt den Wei-Betrag als Typ 'uint' zurück, den Ihre Abfrage kosten wird, und nimmt es so aus Ihrem Vertrag heraus, wenn Sie anrufen oraclize_query.

 

Es wird berechnet, indem Sie Ihr geliefertes Gaslimit (in Ihrem Fall 800000) nehmen und es mit dem Gaspreis multiplizieren, den Sie möglicherweise angegeben haben oder nicht. Wenn Sie über kein benutzerdefiniertes Limit festgelegt haben, oraclize_setCustomGasPriceist es standardmäßig 20gwei. Anschließend wird der Grundpreis des von Ihnen durchgeführten Abfragetyps, in diesem Fall "URL", zuzüglich etwaiger zusätzlicher Gebühren für einen Nachweistyp hinzugefügt ( Sie können die Aufschlüsselung hier sehen ). Die Gebühren werden in Wei anhand des aktuellen USD/ETH-Wechselkurses berechnet.

 

Berechnen Sie nur die Gaskosten Ihrer Gebühr (wie Sie es in Ihrer Antwort getan haben):

 

800000 gasLimit * 20e8 gasPrice = 0.016 ETH

 

Was Sie bei den aktuellen ETH-Preisen sehen können, ist der weitaus größere Teil der Gebühr von 5 $ (~ 90 %), die Sie sehen, um Ihren Vertrag zu verlassen. Und als solches ist es unerlässlich , dass Sie Ihre __callback(und tatsächlich jede Funktion in Solidity) so gaseffizient wie möglich gestalten!

 

W/r/t sich von Oraclize abzuwenden, das ist natürlich Ihr Vorrecht. Sie sollten die Gaspreise Ihrer Vertragsfunktionen immer noch feinabstimmen, da diese unabhängig von Ihnen oder den Benutzern Ihres Smart-Vertrags bezahlt werden müssen.

 

Aber was Oraclize als Service anbietet, ist ein vertrauensloses Modell, bei dem Sie Oraclize über die bereitgestellten Beweistypen überhaupt nicht vertrauen müssen. Besser noch, Sie können dieser Vertrauenslosigkeit einen Wert beimessen. Wenn Sie sich beispielsweise für den TLS_Notary-Beweis entscheiden, verlassen Sie sich auf eine AWS-Instanz, die Kosten für das Hacken/Brechen/Ändern sind dann quantifizierbar . Das bedeutet, dass Sie wissen, wie viel Ihr von Oraclize abhängiger Vertrag „sicher“ ist, was die Anreize betrifft.

 

Sie können natürlich absolut Ihre eigenen rollen, aber sollten Sie anfangen, dieses Maß an quantifizierbarer Vertrauenslosigkeit zu fordern und damit beginnen, die dafür erforderlichen Strukturen zu implementieren, werden Sie diese Gebühr von 0,05 c$ vielleicht bald zu schätzen wissen!

Ich stimme mit dem meisten von dem, was Sie sagen, überein. Ich habe meinen Vertrag optimiert und er kostet derzeit insgesamt 8 US-Dollar weniger. Davon abgesehen liegt es daran, dass ich etwas Speicher in der Kette geopfert und Oraclize nicht mehr verwendet habe. Das Problem mit Oraclize ist, dass es zusätzlichen Speicherplatz benötigt, um Abfragen zu verfolgen und wem sie gehören (ich habe nicht konstant verzögerte Abfragen verwendet). Auch dies ist ein spezifischerer Anwendungsfall und in keiner Weise die Schuld von Oraclize, aber ich benötige die Daten zu einem bestimmten nicht konstanten Zeitpunkt. Mit Oraclize erhalte ich die Daten ein paar Blöcke später (oder min. später).
Insgesamt fügt es Berechnungen und Speicher hinzu, die am Ende viel mehr als 0,05 Cent kosten. Die UX ist auch schlechter. Dies ist der Zustand, in dem sich die Kette gerade befindet, ich habe erkannt, dass ich einige Qualitäten vorerst opfern und sie wieder implementieren muss, wenn es wirtschaftlich machbar ist, wenn es bessere Entwicklungen gibt. Fähigkeiten.

Die Antwort ist, dass es genau ist, wie viel Wert Sie an Oraclize senden, und nicht nur, wie viel Wert in der Funktion verwendet wurde.

Ich habe mir die Oraclize-Dokumentation angesehen. und sie verwenden gasPrice von 20 Gwei und ich lege ein benutzerdefiniertes gasLimit von 800000 fest. Oraclize kann nicht verwendetes Gas nicht zurückerstatten, also nehmen sie alles.

Also 20 Gwei * 800000 Wei = 0,016 ETH. Die Lösung wäre, den gasPrice von 20 Gwei oder gasLimit auf einen niedrigeren Wert zu ändern oder Oraclize nicht zu verwenden.

Ich verstehe diese Art von "Mehrwert"-Diensten wie Oraclize nicht. Wenn du es selbst kannst, warum dann dafür bezahlen...
Ich stimme der Verwendung in der Produktion zu. Für mich habe ich es anfangs verwendet, als ich gerade angefangen habe, weil es einfacher und bequemer war, einen Prototypen zum Laufen zu bringen (wo die Kosten keine Rolle spielen). Sie bieten das „Provably Fair“ an, was nett ist, aber Sie können auch Ihre eigene Methode entwickeln, um es nachweislich fair zu machen. Ich drehe mich jetzt von ihnen ab.