Seit dem letzten C ++ – Dev -Update passierten viele Dinge im Maschinenraum, die außen nicht wirklich sichtbar waren. Dieser Beitrag möchte einen Überblick darüber geben, woran wir derzeit arbeiten.
Abgesehen von den Features-Seite hat Bob an einem vorgeschlagenen Prozess zur Neulizenzierung des C ++-Laufzeit-Clientcodes an Apache 2.0 gearbeitet, wie in den letzten ein oder zwei Monaten einige Male erwähnt. Erwarten Sie sehr bald mehr Neuigkeiten dazu.
ETH-Testmodus
Nicht nur, weil es wichtig ist, unsere Solidity-End-to-End-Tests über IPC, Dimitry Khoklov und andere einige neue RPC-Endpunkte zum ETH-Kunden hinzugefügt, die viel mehr Flexibilität für das Testen intelligenter Verträge ermöglichen. Wenn Sie ETH –Test -d/tmp/testen und eine Verbindung zum IPC -Port unter /tmp/test/geth.ipc herstellen (wir empfehlen die Verwendung Ethereum-Console Da es diese Funktionen bereits hinzugefügt hat) können Sie:
- Ändern Sie die Blockchain-Parameter (z. B. den Nachweis der Arbeitsprüfung entfernen und bestimmte Konten vorfinanzieren).
- Mine eine bestimmte Anzahl von Blöcken (bei etwa 30 Blocks pro Sekunde)
- Ändern Sie den Zeitstempel des aktuellen Blocks (zu z.
- Wenden Sie die Blockchain in eine bestimmte Blocknummer zurück
Auf diese Weise können wir unsere derzeit 305 Solidity End-to-End-Tests in rund 46 Sekunden auf einem moderaten Computer durchführen. Jeder dieser Tests umfasst mindestens zwei (oft mehr) Transaktionen und die gleiche Menge an abgebildeten Blöcken.
Weitere Informationen zu diesen Funktionen finden Sie unter https://github.com/ethereum/ethereum-console.
Bitte beachten Sie, dass dies derzeit nur für die Binärdatei verfügbar ist, die über die bereitgestellt wird Ubuntu Dev PPA.
Virtual Machine Beschleunigung
Greg Colvin verbrachte in den letzten Monaten die C ++ – Implementierung des EVM -Dolmetschers. Er erntete das, was er die niedrigen Früchte nennt (er arbeitete vor…). Die bisher wichtigsten Verbesserungen waren bisher 256-Bit-Berechnungen durch 64-Bit-Berechnungen für die Gasmessung und sicherzustellen, dass für jeden VM-Betrieb keine mehr Messberechnungen durchgeführt werden. Diese und andere Veränderungen führten zu den folgenden Ergebnissen für das entstehende Paweł Bylica Benchmark Suite. Das folgende Diagramm zeigt den Geschwindigkeitsbereich relativ zum alten CPP -Ethereum -Interpreter (CPP int (alt)).
Um fair zu sein, müssen wir sagen, was diese Benchmarks messen. Der erste Benchmark (bei dem der EVMJit mit einer Beschleunigung von 472x von der Skala ausgeht) führt eine Million leerer Schleifen durch und zeigt, wie langsam die berechnete Goto des EVM mit dem direkten Sprung einer JIT verglichen wird – Reparatur, die als nächstes auf dem Stapel stattfindet. Der zweite Benchmark ist ein schlechter Zufallszahlengenerator, der eine Million Schleifen mit vier Multiplikationen und vier Ergänzungen pro Schleife durchführt. Es wird von 256-Bit-Berechnungen dominiert, sodass eine JIT weniger Unterschied macht. (Beachten Sie, dass der Go JIT nicht zu einem nativen Code kompiliert, sondern zu einer schneller interpretierten Darstellung.)
In der PraxisDiese Beschleunigung werden nur Seien Sie relevant für “Zahlenkrieger” -Kontrakte, da die Berechnungszeit ansonsten weitgehend vom Speicherzugriff dominiert wird. Andererseits ähnelt der RNG-Benchmark den kryptografischen Operationen, die solche Dinge weiter in den Bereich der tatsächlichen Onketten-Implementierungen einfließen.
Paweł bylica arbeitet an einem C-Sprachschnittstelle Zwischen der Implementierung der virtuellen Maschine und dem Client, der sie hostet, mit dem Ziel, verschiedene VMs an einen Ethereum -Client zu stecken. Auf diese Weise kann Geth möglicherweise auch von unseren Änderungen an der virtuellen C ++-und insbesondere vom LLVM-Just-in-Time-Compiler profitieren.
Beachten Sie, dass diese Änderungen noch nicht veröffentlicht werden, aber Teil der Ubuntu Dev PPA.
Remix
Yann Levreau und Liana Huikyan arbeiten an unserem neuen EVM -Debugger -Remix. Wir haben die Alpha -Version vor einigen Tagen veröffentlicht:
Anwendung – – Anweisungen
Im Moment können Sie es „nur“ verwenden, um jeden einzelnen Schritt bei der Ausführung einer Transaktion in der Blockchain zu überprüfen, den aktuellen Stapel-, Speicher- und Speicherinhalt anzusehen und die Abfolge der Anweisungen anzuzeigen. Der nächste Schritt besteht darin, auch das Debuggen auf Quellenebene zu ermöglichen, bei dem Sie die aktuelle Position im Quellcode, in der Zeile oder in der Anleitungsebene sehen können und die dekodierten Werte der Variablen (anstelle der RAW-Hex-Werte) sehen.
Der Debugger ist für Sie, die Community, und wir haben uns erfreut zu hören, dass Ethercan bereits Remix in ihre integriert hat Blockchain Explorer.
Repository -Reorganisation
Bob Summerwill widmete C ++-Ethereum in sein früheres Zuhause, https://github.com/ethereum/cpp-ethereum und entfernen so die unnötige und verwirrende Aufteilung in mehrere Unterbereitungen. Wir machen dort große Fortschritte. Einer der ersten wirklich sichtbaren Schritte bestand darin, die Testinfrastruktur der Solidität aus der Implementierung der virtuellen Maschine zu entkoppeln. Die Soliditätstests können jetzt ohne die virtuelle Maschine kompiliert werden und werden durch Kommunikation mit einem speziell konfigurierten ETH -Prozess (dem oben erwähnten) über die reguläre IPC -Schnittstelle ausgeführt.
Die nächsten Schritte hier sind, den Rest des Codes zu entwirren, die Testautomatisierung und die kontinuierliche Integration entsprechend zu ändern und den tatsächlichen Zug durchzuführen.
Zusammen mit diesem Schritt müssen wir leider müssen Verabschieden Sie sich von Mix und Alethzero (Der Geist der Mischung wird im neuen Remix -Projekt weiterleben). Die Belastung, die sie ziehen, wäre zu groß, da sie QT und eine enge Kopplung mit Solidität umfasst. Wie bereits in früheren Beiträgen erläutert, macht eine lose IPC-basierte Kopplung dieser Tools an eine kleine Client-Implementierung viel flexibler und die Community-Unterstützung, die mit einer Änderung von JavaScript und webbasierten Tools wie Remix und Browser-Solidität verbunden ist, ist im Vergleich nur überwältigend.
Formelle Überprüfung
Wir erweitern die vorhandenen formalen Verifizierungstools, die in Solidität integriert sind, auf kreuzvertragliche Anrufe. Dies würde automatisierte Beweise ermöglichen, dass z. B. ein rekursiver Anrufangriff gegen einen bestimmten Vertrag nicht möglich ist. Auch als warum3 (das Werkzeug, mit dem wir das schwere Heben ausführen) wurde kürzlich portiert BrowserWir können wahrscheinlich erwarten, dass es direkt in Browsersolidität und anderen Tools wie Blockchain Explorers verfügbar ist!
Es gibt eine erste Beweis des Konzepts Einbeziehung von Erklärungen, die zeigen, wie die automatisierte Überprüfung verwendet werden kann, um zu zeigen, dass es unmöglich ist, Geld aus einem Soliditätsvertrag zu stehlen, auch wenn rekursive Anrufe zulässig sind.
Dieser Proof of Concept wird sich hoffentlich in den nächsten Wochen zu einem nutzbaren Tool entwickeln.
Mehrere Personen aus der Gemeinde und aus der Stiftung arbeiten derzeit an Tools für Solidität oder EVM im Allgemeinen. Dazu gehören:
- Solidity AST -Analyse für Warnungen von Dave Hoover (@redsquirrel)
- Eine Read-Eval-Print-Version der Solidität von Raineorshine: Soliditätsrepl
- Kontroll-Flow-Analysediagramm Auch von Raineorshine
- EVM -Disassembler Von Nick Johnson

