@Dusk #dusk
$DUSK Kernkomponente:
3. DuskVM
Rolle: Ausführung von Rust/WASM-Smart Contracts direkt auf der Dusk L1
Wohin als Nächstes:
DuskVM ist die WASM-Virtual Machine für Smart Contracts, die direkt auf der Dusk L1 ausgeführt werden. Sie basiert auf der Wasmtime-Engine und bietet eine benutzerdefinierte Unterstützung für das Ausführungsmodell von Dusk.
Verwenden Sie DuskVM für Rust/WASM-Contracts, Protokoll-Assets, benutzerdefinierte Ausführung, Marklogik, datenschutzbewusste Workflows oder Zero-Knowledge-Funktionen, die direkt auf der L1 laufen sollen.
Verwenden Sie stattdessen DuskEVM, wenn Ihre Anwendung um Solidity, EVM-Wallets und Ethereum-kompatible Tools herum entwickelt wurde. Siehe DuskEVM.
Wo DuskVM hineinpasst
DuskVM ist die Komponente zur Ausführung von Smart Contracts der Dusk L1. DuskVM führt den Contract-Code aus, während DuskDS die Grundlage für Konsens, Settlement und Datenverfügbarkeit bereitstellt, die den resultierenden Zustand finalisiert.
Auf einer hohen Ebene bietet DuskVM:
Spezifisches Mechanismus zur Speicherverwaltung
Unterstützung für Dusks ABI
Unterstützung für Aufrufe zwischen Contracts
DuskVM fungiert als Schnittstelle auf Host-Seite und übernimmt die Handhabung der Ausführungsumgebung sowie systembezogener Operationen.
Kompilieren von Contracts zu WASM
DuskVM erwartet WASM als Bytecode. Das bedeutet, dass Smart Contracts in WASM-Bytecode kompiliert werden müssen, damit DuskVM sie ausführen kann. Smart Contracts sind vollständig dafür verantwortlich, ihre Eingaben zu validieren, sie entsprechend der Contract-Logik zu verarbeiten und die passenden Ausgaben zurückzugeben. Dadurch wird sichergestellt, dass Smart Contracts innerhalb der standardisierten Ausführungsumgebung von DuskVM vorhersehbar und sicher arbeiten.
Zu WASM kompilierte Contracts können von DuskVM ausgeführt werden, mit folgenden Einschränkungen:
Der Contract muss den „Argument-Puffer“ (argbuf) bereitstellen, also einen speziellen Bereich mit 64 KB im Speicher des Contracts
Jede freigelegte Funktion entspricht der folgenden Konvention: fn foo(u32) -> u32
Der empfangene u32-Wert gibt die Länge der Eingabedaten an, die vom Aufrufer in den argbuf gelegt wurde. Diese Eingabelänge bestimmt, wie viele Bytes an Daten der Contract aus dem argbuf lesen soll.
$DUSK Kernkomponente:
3. DuskVM
Rolle: Ausführung von Rust/WASM-Smart Contracts direkt auf der Dusk L1
Wohin als Nächstes:
DuskVM ist die WASM-Virtual Machine für Smart Contracts, die direkt auf der Dusk L1 ausgeführt werden. Sie basiert auf der Wasmtime-Engine und bietet eine benutzerdefinierte Unterstützung für das Ausführungsmodell von Dusk.
Verwenden Sie DuskVM für Rust/WASM-Contracts, Protokoll-Assets, benutzerdefinierte Ausführung, Marklogik, datenschutzbewusste Workflows oder Zero-Knowledge-Funktionen, die direkt auf der L1 laufen sollen.
Verwenden Sie stattdessen DuskEVM, wenn Ihre Anwendung um Solidity, EVM-Wallets und Ethereum-kompatible Tools herum entwickelt wurde. Siehe DuskEVM.
Wo DuskVM hineinpasst
DuskVM ist die Komponente zur Ausführung von Smart Contracts der Dusk L1. DuskVM führt den Contract-Code aus, während DuskDS die Grundlage für Konsens, Settlement und Datenverfügbarkeit bereitstellt, die den resultierenden Zustand finalisiert.
Auf einer hohen Ebene bietet DuskVM:
Spezifisches Mechanismus zur Speicherverwaltung
Unterstützung für Dusks ABI
Unterstützung für Aufrufe zwischen Contracts
DuskVM fungiert als Schnittstelle auf Host-Seite und übernimmt die Handhabung der Ausführungsumgebung sowie systembezogener Operationen.
Kompilieren von Contracts zu WASM
DuskVM erwartet WASM als Bytecode. Das bedeutet, dass Smart Contracts in WASM-Bytecode kompiliert werden müssen, damit DuskVM sie ausführen kann. Smart Contracts sind vollständig dafür verantwortlich, ihre Eingaben zu validieren, sie entsprechend der Contract-Logik zu verarbeiten und die passenden Ausgaben zurückzugeben. Dadurch wird sichergestellt, dass Smart Contracts innerhalb der standardisierten Ausführungsumgebung von DuskVM vorhersehbar und sicher arbeiten.
Zu WASM kompilierte Contracts können von DuskVM ausgeführt werden, mit folgenden Einschränkungen:
Der Contract muss den „Argument-Puffer“ (argbuf) bereitstellen, also einen speziellen Bereich mit 64 KB im Speicher des Contracts
Jede freigelegte Funktion entspricht der folgenden Konvention: fn foo(u32) -> u32
Der empfangene u32-Wert gibt die Länge der Eingabedaten an, die vom Aufrufer in den argbuf gelegt wurde. Diese Eingabelänge bestimmt, wie viele Bytes an Daten der Contract aus dem argbuf lesen soll.
