Smart Contract-Speicherung

Ich war gerade dabei, meinen ersten Smart Contract zu erstellen, bei dem ich auf diese Fragen stieß:

  1. Wo genau der Vertragscode gespeichert wird, habe ich gelesen, dass er in der Blockchain gespeichert wird. Bedeutet das, dass jeder Knoten, der eine Instanz einer vollständigen Blockchain hat, auch den Vertragscode hat?

  2. Sollte ein Miner, um einen neuen Block abzubauen, zuerst alle Vertragsaufrufe ausführen und die Werte festlegen und dann auch nach POW-Rätsellösungen und Nonce-Werten suchen, und wenn ja, dann können wir ASIC-Miner für Ethereum wie Bitcoin haben, weil sie es können nur einen bestimmten Job ausführen, aber die Codes für die Ausführung eines Vertrags sind jedes Mal anders?

  3. Wenn ein Bergmann eine Transaktion verifizieren möchte, die einen Vertragsaufruf hat, sollte er den Vertragscode ausführen? Wenn ja, bedeutet das, dass jeder Vertrag mehrere Male laufen muss, bis schließlich ein Miner die richtige Nonce finden und das Pow-Rätsel lösen kann? Wenn das stimmt, bedeutet das, dass der Vertragscode unnötig oft ausgeführt wird?

  4. Wo werden die Werte von Vertragsvariablen gespeichert, ich meine, wenn wir eine Solidity-Zuordnung haben, kann sie viele Schlüsselwerte enthalten, also wo werden diese Schlüsselwerte gespeichert? Wenn sie in der Blockchain gespeichert werden, sollten sie in jedem Knoten gespeichert werden, der eine Kopie der Blockchain hat, was bedeutet, dass riesige Datenmengen immer und immer wieder gespeichert werden müssen, und das wäre eine solche Speicherverschwendung

  5. Wenn ein Vertrag sich selbst zerstört, was genau passiert, wurde erwähnt, dass der Code aus der Blockchain entfernt wird. Bedeutet dies also, dass eine Transaktion ihn für nachfolgende Transaktionen nicht verfügbar macht, oder dass er die Blockchain wirklich wirklich verändert und aus älteren Blöcken codiert entfernt?

Antworten (1)

Wo genau der Vertragscode gespeichert wird, habe ich gelesen, dass er in der Blockchain gespeichert wird. Bedeutet das, dass jeder Knoten, der eine Instanz einer vollständigen Blockchain hat, auch den Vertragscode hat?

Der Zustand wird in der Blockchain gespeichert, ja. Sie haben auch Recht, wenn Sie sagen, dass jeder Full-Node eine Kopie der gesamten Blockchain hat, einschließlich aller Zustände.

Sollte ein Miner, um einen neuen Block abzubauen, zuerst alle Vertragsaufrufe ausführen und die Werte festlegen und dann auch nach POW-Rätsellösungen und Nonce-Werten suchen, und wenn ja, dann können wir ASIC-Miner für Ethereum wie Bitcoin haben, weil sie es können nur einen bestimmten Job machen, aber die Codes für die Ausführung eines Vertrags sind jedes Mal anders?

Die Aufgabe der Bergleute besteht darin, einfach das POW-Puzzle zu lösen. Wenn sie das tun, haben sie die Möglichkeit , den Block abzubauen. Sie wählen nun aus, welche Transaktionen sie in diesen bestimmten Block aufnehmen möchten. Diese Transaktionen definieren alle vorgenommenen Zustandsänderungen, sodass sich der Miner technisch nicht darum kümmern muss.

In Bezug auf die ASIC-Frage wurde Ethereum POW so konzipiert, dass es speicherhart ist, was bedeutet, dass es für ASICs schwierig ist, abzubauen.

Wenn ein Bergmann eine Transaktion verifizieren möchte, die einen Vertragsaufruf hat, sollte er den Vertragscode ausführen?? Wenn ja, bedeutet das, dass jeder Vertrag mehrere Male laufen muss, bis schließlich ein Miner die richtige Nonce finden und das Pow-Rätsel lösen kann? Wenn das stimmt, bedeutet das, dass der Vertragscode unnötig oft ausgeführt wird?

Siehe auch meine Antwort oben als Antwort auf diese Frage. Zusammenfassend wählt der Miner einfach eine Transaktion aus. Der Grund, warum es nicht mehrmals ausgeführt wird, ist, dass es nur einen Miner gibt, der den Block zuerst findet und dafür belohnt wird. Dies ist der einzige Miner, der die Transaktion sowie die Vertragsaufrufe an das Ethereum-Netzwerk sendet.

Wo werden die Werte von Vertragsvariablen gespeichert, ich meine, wenn wir eine Solidity-Zuordnung haben, kann sie viele Schlüsselwerte enthalten, also wo werden diese Schlüsselwerte gespeichert? Wenn sie in einer Blockchain gespeichert werden, sollten sie in jedem Knoten gespeichert werden, der eine Kopie der Blockchain hat, was bedeutet, dass riesige Datenmengen immer und immer wieder gespeichert werden müssen, und das wäre eine solche Speicherverschwendung

Siehe Antwort eins. Sie haben Recht – Blockchains (so wie sie sind) sind ziemlich ineffizient und langsam, und jeder Knoten enthält eine Kopie dieses Zustands.

Wenn ein Vertrag sich selbst zerstört, was genau passiert, wurde erwähnt, dass der Code aus der Blockchain entfernt wird. Bedeutet dies also, dass eine Transaktion ihn für nachfolgende Transaktionen nicht verfügbar macht, oder dass er die Blockchain wirklich wirklich verändert und aus älteren Blöcken codiert entfernt? ?

Es verändert die Blockchain nicht, da dies unmöglich ist. Was es tut (ohne zu technisch zu werden), ist, dass niemand diesen Vertrag erneut aufrufen kann. Das beste Beispiel, das man sich ansehen sollte, ist der Parity-Wallet-Exploit , da er ein kritisches Beispiel für die Verwendung von ist selfdestruct.