Yul + – Eine neue einfache Sprache für Ethereum


Fuel Labs Inc. führt Yul + ein, eine neue Low-Level-Sprache für Ethereum.

Heute führt Fuel Labs Yul + ein, das Yul, eine einfache Zwischensprache für die virtuelle Maschine von Ethereum, um verschiedene QoL-Funktionen erweitert.

Yul ist eine unglaubliche kleine Sprache, die von den Solidity Developers als Kompilierungsziel für weitere Optimierungen geschrieben wurde. Es verfügt über eine vereinfachte und funktionale Grammatik auf niedriger Ebene. Dies ermöglicht es dem Entwickler, dem rohen EVM viel näher zu kommen als der Solidity, und damit das Versprechen einer drastisch verbesserten Gasnutzung.

Fuel Labs hat seinen ersten optimistischen Open-Beta-Rollup-Vertrag weitgehend mit Yul umgesetzt. Wir haben jedoch festgestellt, dass unser Code durch das Hinzufügen einer kleinen Anzahl grundlegender Sprachzusätze lesbarer und effizienter werden könnte.

Yul + kann als experimentelles Upgrade für Yul angesehen werden, und Yul könnte versuchen, einige seiner Funktionen zu einem späteren Zeitpunkt nativ zu integrieren.

Ein grundlegender Yul-Vertrag mit einem Konstruktor und einer Laufzeit

Objekt "EmptyContract" {
Code {
// Dein Konstruktorcode Datenkopie (0, Datenoffset ("Laufzeit"), Datengröße ("Laufzeit"))
return (0, Datengröße ("Laufzeit"))
}}
Objekt "Laufzeit" {
Code {
// Dein Laufzeitcode }}
}}
}}

Anrufdaten verarbeiten

// Anrufdaten in den Speicher kopieren
// Dadurch werden 36 Bytes Transaktionsaufrufdaten in die Speicherposition 0 kopiert
calldatacopy (0, 0, 36)

Speicher verwalten

// Speicher speichern und lesen
// 0xaa an Speicherposition 100 speichern
mstore (100, 0xaa)// 32-Byte-Chunk von Speicherposition 100 laden und someVar zuweisenlet someVar: = mload (100)

Hashing

// Hash-Speicherposition 0 bis 0 + 32, Ergebnis einigenHash zuweisenlet someHash: = keccak256 (0, 32)

Staatsspeicher

// speichere den Wert 0xaa im Zustandsspeicherplatz 3sstore (3, 0xaa)// Wert aus dem Statusspeicher 3 abrufen und someVar zuweisenlet someVar: = sload (3)

Funktionen, Bedingungen, Schleifen und Schalter

// Funktionen und BedingungenFunktion someMethod (someVar, someOther) -> someResult {
if eq (someVar, someOther) {
someResult: = 0x45
}}
}}
// Schleifenfür {let i: = 0} lt (i, 100) {i: = add (i, 1)} {
// etwas Schleifencode
}}
// SchaltereinigeVar wechseln
Fall 0 {
// wenn someVar == 0
}}
Fall 1 {
// wenn someVar == 1
}}
Standard {
// Standard
}}
  • Alle vorhandenen Yul-Sprachfunktionen
  • Aufzählungen (Aufzählung)
  • Konstanten (const)
  • Generierung der Ethereum-Standard-ABI-Signatur (sig ”Funktion…”)
  • Boolesche Werte (wahr, falsch)
  • Standardmäßig sichere Mathematik (d. H. Über- / Unterflussschutz für Addition, Subtraktion, Multiplikation)
  • Injizierte Methoden (mslice und benötigen)
  • Gedächtnisstrukturen (mstruct)

Aufzählungen, Konstanten und Boolesche Werte

Aufzählungsfarben (
Rot, // 0
Blau, // 1
Grün // 2
)

// Konstante someConst ist gleich 1
const someColor: = Colors.Blue
// Konstante someBool ist gleich 0x1const someBool: = true

Ethereum-Standard-ABI-Signaturgenerierung für Methodensignale und -themen:

// someVar entspricht der 4-Byte-Methodensignatur 0x6057361dlet someVar: = sig ”Funktionsspeicher (uint256 val)”// someTopic entspricht dem 32-Byte-Themen-Hash 0x69404ebde4a368ae324ed310becfefc3edfe9e5ebca74464e37ffffd8309a3c1let someTopic: = topic ”event Store (uint256 val)”

Alle Mathematikfunktionen sind jetzt standardmäßig sicher und können bei Bedarf im Compiler deaktiviert werden.

let someVar: = add (3, sub (4, 2))// wird dazu kompiliert, wobei safeAdd, safeSub-Methoden injiziert werdenlet someVar: = safeAdd (3, safeSub (4, 2))

Wir fügen der Einfachheit halber eine Speicher-Slice-Mslice hinzu und benötigen, wenn dies der Fall ist

mstore (300, 0xaabbccdd) ​​// beachte, mstore hat die linken Pads mit Nullen um 28 Bytes versehenlet someVal: = mslice (328, 3) // gibt 0xaabbcc zurückrequire (gt (someVal, 0)) // someVal> 0 oder revert (0, 0) schön

Zuletzt aktivieren wir Speicherstrukturen. Diese werden verwendet, um bereits vorhandene Strukturen im Speicher zu beschreiben, z. B. Anrufdaten, Hash-Daten oder Daten mit einer in den Speicher geschriebenen Struktur.

Es bietet eine breite Palette an Funktionen für Positionierung, Offset, Hashing, Indizierung und Organisation, um den Speicher mit sauberen, effizienten, vorgefertigten Funktionen, die bei Bedarf eingefügt werden, besser zu verwalten. Wir verwenden weiterhin eine funktionale Notation injizierter Funktionen, die den bestehenden Yul-Grammatikstil nicht verletzt.

// Nehmen wir an, wir weisen der Speicherposition 0 einige Anrufdaten zu// Dies beschreibt eine abstrakte Speicherkonstruktion:mstruct SomeCalldata (
Unterschrift: 4,
Wert: 32,
)
let methodSig: = SomeCalldata.signature (0) // schneidet sig aus
let someVal: = SomeCalldata.value (0) // schneidet den Wert heraus
// Wir bekommen auch einige nette Indizierungs- und Offset-FunktionenSomeCalldata.value.position (0) // entspricht 4 (d. H. 0 + 4)
// Indexreihenfolgewerte ebenfallsSomeCalldata.signature.index () // ist gleich 0SomeCalldata.value.index () // gleich 1
// Keccak HashingSomeCalldata.value.keccak256 (0) // entspricht einem 32-Byte-Hash-Wert
// Gesamtgröße der Calldata-Struktur berechnenSomeCalldata.size (0) // entspricht 36 (d. H. 4 + 32)
Objekt “SimpleStore” {
Code {
Datenkopie (0, Datenoffset ("Laufzeit"), Datengröße ("Laufzeit"))
return (0, Datengröße ("Laufzeit"))
}}
Objekt "Laufzeit" {
Code {
calldatacopy (0, 0, 36) // Anrufdaten in den Speicher kopieren
mstruct Calldata (// mstruct beschreibt calldata
Sig: 4,
val: 32
)
Schalter Calldata.sig (0) // Signatur bei positiver Null erhalten

case sig ”Funktionsspeicher (uint256 val)” {// Speichermethode
sstore (0, Calldata.val (0))
}}

case sig ”function get () gibt (uint256)” {// get method zurück
mstore (100, sload (0))

return (100, 32)
}}
}}
}}
}}

https://yulp.fuel.sh

Zusammenfassend hofft das Team von Fuel Labs, die Möglichkeiten für die virtuelle Maschine von Ethereum zu erweitern, indem mehr Alternativen auf niedriger Ebene geschaffen werden, die wir täglich verwenden, um eine optimistische Rollup-Skalierbarkeit für das Ökosystem mit hoher Leistung aufzubauen.

In der Zwischenzeit für weitere Informationen und um über unsere Arbeit auf dem Laufenden zu bleiben:

Website: https://fuel.sh

Twitter: https://twitter.com/FuelLabs_

GitHub: https://github.com/FuelLabs/yulp

Gitcoin: https://gitcoin.co/grants/199/fuel-labs



Coins Kaufen: Bitcoin.deAnycoinDirektCoinbaseCoinMama (mit Kreditkarte)Paxfull

Handelsplätze / Börsen: Bitcoin.de | KuCoinBinanceBitMexBitpandaeToro

Lending / Zinsen erhalten: Celsius NetworkCoinlend (Bot)

Cloud Mining: HashflareGenesis MiningIQ Mining

Werbung: Immobilienmakler HeidelbergMakler Heidelberg

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close