Wer berechnet eine Funktion, die nur den Zustand liest?

Ich fange an, Smart Contracts in Ethereum zu lernen und habe einige Fragen zum Konzept des Zustands "Lesen / Schreiben".

Ich weiß, dass der Lesezustand kein Benzin kostet.

Aber wenn wir einen Lesezustand ausführen und damit im Smart Contract rechnen (ohne eine Transaktion zu veröffentlichen)

  1. Wer macht die Berechnung? Ist es der Knoten, der die Vertragsfunktion initiiert hat?

  2. Wenn die Berechnung lokal erfolgt, ist es sicher, den Verschlüsselungsalgorithmus in der Funktion zu verwenden?

  3. Gibt es Netzwerkkosten? (Oder berechnet der Knoten nur aus seinen Kettendaten?)

Danke!

Ihr lokaler Computer liest nur den Status, den er aus der Blockchain generiert hat. Keine Netzwerkkosten.

Antworten (1)

  1. Der lokale Knoten führt die Berechnung mit seinen eigenen Ressourcen und seiner Kopie der Blockchain durch.

  2. Sie können unverschlüsselte Daten sicher an eine Verschlüsselungshilfsfunktion im Vertrag übergeben, solange diese Funktion mit dem Modifikator oder gekennzeichnet pureist . Die Informationen werden nicht an das Netzwerk übermittelt.viewconstant

  3. Es fallen keine Netzkosten an, aber Gas wird trotzdem berechnet. Dies kann relevant sein, wenn Nur-Lese-Funktionen als Teil von On-Chain-Transaktionen aufgerufen werden (dh von Funktionen aufgerufen werden, die Dinge im Netzwerk tun). Sie stellt eine Obergrenze für die Komplexität der Operation bereit.

Ich hoffe es hilft.

Danke für die Aufklärung! Als Follow-up zu 2 & 3, wenn ich Daten habe, die ich verschlüsseln möchte, bevor ich sie in die Blockchain poste, dann würde das Gas berechnet und genommen, auch wenn es auf dem lokalen Knoten berechnet wird? Oder wenn die Berechnung Teil einer Funktion ist, die eine Transaktion postet, dann wird sie vom Netzwerk berechnet? (und nicht mehr sicher)
Sie hätten function hashHelper(bytes32 secret) public pure returns(bytes32 hash) { return keccak256(secret); }und das wäre sicher, lokal, nicht zu viel "kostenloses" Benzin verbrauchen, und dann function recordSecret(bytes32 hash) public returns(bool success)würde das überall ausgestrahlt werden. Sie werden es schwierig finden, On-Chain zu enthüllen oder zu beweisen, ohne die Bohnen zu verschütten.