Während alle am 1. Dezember, 12.00 Uhr UTC, in Erstaunen starren, die ETH 2.0 Beaconchain Genesis vorwegnehmen, haben wir im JavaScript -Team unsere eigene Little Genesis -Veröffentlichung in den Schatten leise vorbereitet. Da wir sehr um die gute alte ETH 1.0 -Kette sind, freuen wir uns dennoch sehr sehr. 😀
Eine Hintergrundgeschichte: die Ethereumjs Ökosystem um die VM besteht aus einem sehr modularen Satz von Bibliotheken (VM, Blockchain, Merkle-Patricia-Tree, TX, …), die jeweils ihre eigene dedizierte Funktionalität einschränken. Dies ist zwar großartig für den Benutzer, aber es stellte sich heraus, dass es nicht so gut für die Entwicklung ist, da es häufig notwendig wird, Änderungen in mehreren Bibliotheken gleichzeitig vorzunehmen, was schwierig und zeitaufwändig ist, um in einer konsistenten vorwidrigen Art und Weise zu handeln, wie die Bibliotheken in verschiedenen Repositories haben. So Anfang dieses Jahres haben wir uns entschlossen, unser Setup zu aktualisieren und die VM-bezogenen Bibliotheken innerhalb einer einzelnen zu kombinieren Monorepo. Dies ist ein einzelnes Repository, in dem es möglich ist, Änderungen in mehreren Bibliotheken innerhalb einer einzelnen Pull -Anforderung abzurichten und alle verschiedenen Bibliothekstestsuiten zusammen auszuführen, um eine Konsistenz zu gewährleisten. Gleichzeitig profitiert davon, dass mehrere Pakete, die alle einzeln veröffentlicht werden, verbleiben.
Seit der Wechsel zum Monorepo explodierte unsere Entwicklungsaktivität buchstäblich. 😋 Wir haben so viele Dinge entdeckt, dass wir besser machen wollten, dass wir einfach nicht aufhören konnten, zumal eine Veränderung oft einen anderen ausgelöst hat, was jetzt nur “so offensichtlich zu tun” war. 😜
Also haben wir uns entwickelt. Und entwickelt. Und entwickelt. Grundsätzlich das ganze Jahr über das ganze Jahr. Das ist der Hauptgrund, warum Sie in den letzten Monaten relativ wenig von uns gehört haben. Wir waren einfach so beschäftigt mit all diesen Zügen.
Während wir uns am Ende des Prozesses manchmal fragten, ob wir die Dinge jemals wieder zusammenbringen würden (siehe unsere umfangreichen Versionshinweise, um ein Gefühl für das zu bekommen, was ich meine), bin ich heute wirklich stolz darauf, dass ich endlich mitteilen kann: Wir tat es. 😋 Vielen Dank an ein tolles Team für all die tollen und engagierten Arbeiten daran. 🎉
Dies ist nicht eine, sondern sechs Hauptveröffentlichungen in unseren Hauptbibliotheken mit unserer virtuellen Maschine im Vordergrund:
In diesem Beitrag werden wir nicht viel in die technischen Details eingehen und einen Überblick über hohe Niveau geben. Für ein vollständigeres Bild sehen wir die oben verlinkten Versionshinweise. Wir haben uns wirklich darum gekümmert, diese zu umfassen und lesbar zu machen und einen guten Überblick über alle relevanten (brechen) Änderungen zu geben.
Vielleicht nur ein wichtiger Hinweis: Wir haben zu a gewechselt Neues Namensschema Bei diesen Veröffentlichungen müssen Sie die neuen Namen verwenden, um die neuen Versionen zu erhalten. Erstere Ethereumjs-vm Paket, z. B. installiert jetzt wie folgt:
npm install @ethereumjs/vm
OK. Was ist eigentlich drin? Lassen Sie uns einen kurzen Blick darauf werfen.
Alle Hardgustks
Ethereumjs VM v5 Unterstützt jetzt alle Hardgus zurück zu Genesis. Dies ist ein Primer in der Geschichte von JavaScript Ethereum, und wir hoffen, dass dies für verschiedene potenziell aufregende neue Anwendungsfälle eröffnet wird. Wir haben unsere eigenen, mehr dazu.
Ein VM auf einem bestimmten HF kann mit:
import VM from '@ethereumjs/vm'; import Common from '@ethereumjs/common'; const common = new Common({ chain: 'mainnet', hardfork: 'spuriousDragon' }); const vm = new VM({ common });
Ein EIP-zentrierter VM
Während Hardfifks großartig sind, um eine Reihe vereinbarter Änderungen zusammen zu bündeln, hat sich herausgestellt, dass ein Hardfork-zentrierter VM nicht flexibel genug ist, um eine zukünftig getriebene Entwicklung zu ermöglichen, bei der es für einige Zeit nicht abgeschlossen ist, was EIPs zu einem neuen Hardfork (der Berlin Hardfork scheint das beste Beispiel dafür zu sein).
Mit der neuen VM -Freisetzung wurde die interne funktionale Modularisierungsschicht überarbeitet. Dies ermöglicht es EIPs, jetzt Ureinwohner innerhalb der VM zu werden. Ein VM mit einem speziellen EIPS -Satz kann wie folgt instanziiert werden:
import Common from '@ethereumjs/common'; import VM from '@ethereumjs/vm'; const common = new Common({ chain: 'mainnet', eips: [2537] }); const vm = new VM({ common });
Als Starter unterstützen wir die folgenden neuen EIPs (hauptsächlich für die Berlin Hardfork) mit der VM v5freigeben:
Typoskript
In diesem Ethereumjs -Veröffentlichungszyklus können wir zuversichtlich sagen, dass wir unsere Bibliotheken ganzheitlich zu einem modernen Technologiestapel gebracht haben. Ein großer Teil davon: Mit den neuen Veröffentlichungen, die wir uns in unserem langjährigen und ausgeführten Übergang von Typenkripts und all unseren Hauptbibliotheken sowie internen Abhängigkeiten abschließen, werden jetzt in Typenkript geschrieben.
Nur ein Spitzenwert, was TypeScript so großartig macht und unsere Bibliotheken robuster und sicherer macht: Typscript ist ein Supersatz von JavaScript und informiert Entwickler die Datentypen für jede Variable und jedes im Code verwendete Objekt. Wird die Variable genannt Adresse eine Saite oder ein binär Puffer Objekt? Während Sie in JavaScript, was das Risiko für Follow -up -Entwicklerfehler erheblich erhöht, keine expliziten Hinweise dazu erhalten, werden Sie in TypeScript mit Sicherheit wissen.
Es macht auch viel mehr Spaß, direkt an unseren Bibliotheken zu arbeiten oder die Bibliotheken innerhalb eines Projekts von Drittanbietern zu verwenden, da Sie als Entwickler in der gesamten Codebasis als Entwickler in der IDE wie diese in der IDE erhalten können:
Ihre Entwicklungsumgebung mit ordnungsgemäßem Typenschriften -Tippen weiß jetzt nur, dass a Blockchain Variable ist ein @Ethereumjs/Blockchain Objekt (halten Sie mit Ihren Bemerkungen fest, gehen Sie und rosten Sie Entwickler 😅) und nicht nur “etwas”. Daher wird unser eigener Code jeweils Ihr (TypeScript) Code erhalten, der bei der Verwendung der neuen Bibliotheksversionen viel lesbarer wird.
Versprechen
Wenn Sie nicht zu viel in JavaScript sind, können Sie diesen Abschnitt überspringen. Wenn Sie jedoch ein JavaScript -Entwickler sind, werden Sie wahrscheinlich in diesen Nachrichten Erleichterung seufzen, damit wir dies zumindest kurz erwähnen:
Ein weiterer Übergang, der abgeschlossen ist, arbeiten alle Bibliotheks -APIs mit JavaScript -Versprechen. Also nirgendwo in unserem gesamten Stapel mehr Rückrufe mehr.
Änderungen der Bibliotheksnutzung von:
blockchain.getBlock(blockId, block => { console.log(block); });
Neues API -Beispiel:
const block = await blockchain.getBlock(blockId); console.log(block);
Die kleine Eindrücke in diesem ersten Beispiel scheint auf den ersten Blick nicht viel zu bedeuten. Bei einigen dieser alten Stilanrufe, die miteinander verschachtelt sind, werden Sie jedoch immer tiefer und irgendwann wird Code unlesbar. Nur Google “Callback Hell”, wenn Sie daran interessiert sind, wie dies aussehen kann. 🙂 Versprechen ermöglichen das Schreiben von wesentlich lesbarerem Code.
Bibliothek Refactorings
Es ist manchmal ein bisschen schwer vorstellbar, dass die Notwendigkeit eines Motorwechsels, wenn das Auto noch läuft, dennoch eine Notwendigkeit erhält, wenn Sie die nächsten 10.000 Meilen sicher durchkommen möchten. Mit Refactoring in Software ist es oft ein bisschen ähnlich. 😀 Mit dieser Veröffentlichungsserie haben wir die Grundlagen einiger unserer zentralsten Bibliotheken und unserer überarbeitet Blockunser tx und teilweise unsere Blockchain Die Bibliothek erhielt eine erhebliche Umschreibung.
Es sollte jetzt viel einfacher sein, mit diesen Bibliotheken zusammenzuarbeiten, und sie sollten gut vorbereitet sein, um eine solide und sichere Grundlage für die kommenden Jahre im Ethereum JavaScript-Ökosystem zu bilden.
Ausblick
Wir hoffen, dass Sie unsere neuen Veröffentlichungen mögen. Dieser Beitrag kann nur einen kurzen Peak für die wichtigsten Änderungen bieten und die Dinge werden in den zu Beginn dieses Beitrags verknüpften Versionsnotizen viel mehr detaillierter behandelt. Wir freuen uns, Ihr Feedback zu unserem zu hören Zwietracht Server oder unser neuer @EfjavaScript Twitter -Konto.
Für uns selbst bieten diese Veröffentlichungen einen soliden Boden, um in einen zukünftig gesteuerten Entwicklungszyklus umzusteigen, und wir freuen uns sehr darauf, dass dies ins Spiel kommt. Da die VM alle Hardfifks implementiert haben Ethereumjs Kunde Projekt. Wir werden Mainnet nicht so bald mit diesem Client beigetreten. Dennoch werden wir in der Lage sein, unseren Anteil zu tun, um die Kundenvielfalt zu verbessern. Der neue Kunde in den ersten Stadien ermöglicht es uns, Entwicklungstestnets wie zu beitreten Yolo V2 (und folgen) und helfen Sie aktiv, Konsensfehler zwischen Kunden zu entdecken und vor Konsens zu schützen. Wir werden auch in der Lage sein, aktiver zur zukünftigen Protokollforschung beitragen und an schließlich nach Forschungsimplementierungen teilnehmen. Sie werden mehr darüber hören, sobald wir eine erste verwendbare Version unseres Kunden bereit haben (abzielen Yolo V2), Dies wird Anfang nächsten Jahres sein.
Im Moment wünschen wir allen ein kontemplatives Ende des Jahres, der durch einen aufregenden Beaconchain -Starttag (Woche) ergänzt wird! 🚀
Das EF JavaScript -Team

