Ihr erstes Move-Modul
Die Aptos-Blockchain ermöglicht es Entwicklern, Turing-complete Smart Contracts (genannt “Module”) mit der sicher konzipierten Move-Sprache zu schreiben. Smart Contracts ermöglichen es Benutzern, Geld mit der Blockchain zu senden, aber auch beliebigen Code zu schreiben, sogar Spiele! Alles beginnt damit, dass die Aptos CLI ein Konto erstellt, das das bereitgestellte (“veröffentlichte”) Move-Modul speichert.
Dieses Tutorial hilft Ihnen, Move-Module zu verstehen, indem es Sie durch die Einrichtung einer minimalen Aptos-Umgebung führt und dann zeigt, wie Sie Move-Module auf der Aptos-Blockchain kompilieren, testen, veröffentlichen und mit ihnen interagieren. Sie lernen:
- Ihre Umgebung einrichten und die CLI installieren
- Ein Devnet-Konto erstellen und finanzieren
- Ein Move-Modul kompilieren und testen
- Ein Move-Modul auf der Aptos-Blockchain veröffentlichen (oder “bereitstellen”)
- Mit dem Modul interagieren
- Mit Aptos weiter entwickeln (nächste Schritte)
1. Einrichtung
Abschnitt betitelt „1. Einrichtung“Änderungen an der Blockchain werden “Transaktionen” genannt und erfordern ein Konto, um die Netzwerkgebühr (“Gasgebühr”) zu bezahlen. Wir müssen ein Konto mit etwas APT erstellen, um diese Gebühr zu bezahlen und den veröffentlichten Vertrag zu besitzen. Dazu müssen wir die Aptos CLI verwenden.
-
Die Aptos CLI installieren
Installieren Sie die Aptos CLI (falls Sie es noch nicht getan haben).
-
Ein neues Terminal öffnen
Öffnen Sie ein neues Terminalfenster oder einen neuen Tab.
-
Die Installation verifizieren
Führen Sie
aptos --version
aus, um zu überprüfen, ob Sie es installiert haben.Terminal-Fenster aptos --versionSie sollten eine Antwort wie
aptos 4.6.1
sehen. -
Einen Projektordner erstellen
Erstellen Sie einen neuen Ordner für dieses Tutorial:
Terminal-Fenster mkdir my-first-module -
Zum Projektordner navigieren
Führen Sie
cd my-first-module
aus, um in Ihren neuen Ordner zu gehen. -
Ihr Konto initialisieren
Führen Sie
aptos init
aus und drücken Sie bei jedem Einrichtungsschritt ‘Enter’, um ein Testkonto aufdevnet
zu erstellen.Sie sollten eine Erfolgsmeldung wie diese sehen:
Terminal-Fenster ---Aptos CLI is now set up for account 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba as profile default!{"Result": "Success"}
2. (Optional) Erkunden Sie, was Sie gerade On-Chain getan haben
Abschnitt betitelt „2. (Optional) Erkunden Sie, was Sie gerade On-Chain getan haben“-
Ihre Kontoadresse kopieren
Kopieren Sie die Adresse aus der Befehlszeile für Ihr neues Konto.
Die Adresse sieht so aus
0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba
und Sie finden sie in der Zeile:Terminal-Fenster Aptos CLI is now set up for account 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba as profile default! -
Den Aptos Explorer öffnen
Gehen Sie zum Aptos Explorer.
Dies ist der primäre Weg, um schnell zu überprüfen, was auf devnet, testnet oder mainnet passiert. Wir werden ihn später verwenden, um unsere bereitgestellten Verträge anzuzeigen.
-
Stellen Sie sicher, dass Sie im Devnet-Netzwerk sind.
Suchen Sie nach “Devnet” in der oberen rechten Ecke oder wechseln Sie das Netzwerk, indem Sie auf das “Mainnet”-Dropdown klicken und Devnet auswählen
-
Nach Ihrem Konto suchen
Fügen Sie Ihre neu erstellte Adresse in die Suchleiste ein.
-
Die Suchergebnisse anzeigen
Warten Sie, bis die Ergebnisse erscheinen, und klicken Sie dann auf das oberste Ergebnis.
-
Die Transaktion überprüfen
Sie sollten Ihr neu erstelltes Konto und eine Transaktion mit der Faucet-Funktion sehen, die es mit Devnet-Token finanziert.
-
Ihr Guthaben überprüfen
Klicken Sie auf den “Coins”-Tab, um zu sehen, dass Sie 1 APT der Aptos Coin haben. Dies ermöglicht es Ihnen, Smart Contracts auf dem Aptos Devnet zu veröffentlichen und mit ihnen zu interagieren.
3. Schreiben und Kompilieren Ihres ersten Moduls
Abschnitt betitelt „3. Schreiben und Kompilieren Ihres ersten Moduls“Nachdem wir unsere Umgebung eingerichtet und ein Konto erstellt haben, schreiben und kompilieren wir unser erstes Move-Modul. Im Gegensatz zu Ethereum, wo Verträge unabhängig existieren, verbindet Move alles mit Konten - sowohl Module als auch ihre Ressourcen. Beginnen wir mit einem einfachen Beispiel, um die Kernkonzepte zu verstehen.
Dieses Diagramm veranschaulicht die Beziehung zwischen Modulbesitz, Token-Besitz und dem Move-Blockchain-Status. Es hilft, zu visualisieren, wie Module und Ressourcen an Konten gebunden sind, und betont die einzigartigen Aspekte von Move’s Design im Vergleich zu anderen Blockchain-Plattformen.
Was ist ein Move-Modul?
Abschnitt betitelt „Was ist ein Move-Modul?“Move-Module sind ähnlich wie Smart Contracts in anderen Blockchains, mit einigen wichtigen Unterschieden:
- Ressourcen: Im Gegensatz zu Solidity, wo der Status in Vertragsvariablen gespeichert wird, verwendet Move “Ressourcen” - spezielle Datentypen, die nur an einem Ort zur Zeit existieren können und immer an ein Konto gebunden sind
- Modulbasiert: Anstatt ganze Verträge als unabhängige Einheiten wie in Solidity bereitzustellen, ist Move-Code in wiederverwendbare Module organisiert, die Ressourcen über Grenzen hinweg teilen und handhaben können. Module sind eher wie Standard-Bibliothekspakete, die zusammen oder separat veröffentlicht werden können und eine feinere Kontrolle über die Code-Organisation bieten.
- Sicherheit durch Design: Move’s Typsystem und Ressourcensemantik helfen, häufige Smart-Contract-Schwachstellen zu verhindern
Ihr erstes Move-Modul
Abschnitt betitelt „Ihr erstes Move-Modul“Unser erstes Modul wird ein einfaches Nachrichtenspeichersystem sein, das es Konten ermöglicht, Nachrichten zu speichern und abzurufen. Erstellen wir ein neues Move-Projekt in unserem my-first-module
-Ordner:
-
Das Projekt initialisieren
Initialisieren Sie ein neues Move-Projekt mit
aptos move init --name my_first_module
Dies erstellt eine Projektstruktur mit einem
sources
-Verzeichnis und einerMove.toml
-Datei. -
Die Moduldatei erstellen
Erstellen Sie eine neue Datei
sources/message.move
mit unserem Modulcode:module my_first_module::message {use std::string;use std::signer;struct MessageHolder has key, store, drop {message: string::String,}public entry fun set_message(account: &signer, message: string::String) acquires MessageHolder {let account_addr = signer::address_of(account);if (exists<MessageHolder>(account_addr)) {move_from<MessageHolder>(account_addr);};move_to(account, MessageHolder { message });}public fun get_message(account_addr: address): string::String acquires MessageHolder {assert!(exists<MessageHolder>(account_addr), 0);let message_holder = borrow_global<MessageHolder>(account_addr);message_holder.message}}Lassen Sie uns dieses Modul aufschlüsseln:
- Wir definieren einen
MessageHolder
-Ressourcentyp, der eine String-Nachricht speichern kann set_message
ermöglicht es einem Konto, eine Nachricht zu speichernget_message
ermöglicht es jedem, eine gespeicherte Nachricht abzurufen- Das
acquires
-Schlüsselwort zeigt an, auf welche Ressourcen die Funktionen Zugriff benötigen (MessageHolder, in diesem Fall) move_to
undmove_from
handhaben die Speicherung von Ressourcen unter Konten
- Wir definieren einen
-
Das Modul kompilieren
Kompilieren Sie das Move-Modul, das wir gerade erstellt haben, mit
aptos move compile --named-addresses my_first_module=default
Sie sollten eine Nachricht wie diese sehen, wenn es erfolgreich war:
Terminal-Fenster ❯ aptos move compile --named-addresses my_first_module=defaultCompiling, may take a little while to download git dependencies...UPDATING GIT DEPENDENCY https://github.com/aptos-labs/aptos-framework.gitINCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING my_first_module{"Result": ["9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba::message"]}
Großartige Arbeit! Wir sind jetzt bereit zum Testen und Debuggen.
4. Testen und Debuggen
Abschnitt betitelt „4. Testen und Debuggen“Testen und Debuggen sind entscheidende Teile der Move-Modulentwicklung. Move hat eingebaute Unterstützung für Unit-Tests und Debug-Ausgaben.
-
Debug-Ausgaben hinzufügen
Zuerst modifizieren wir unser Nachrichtenmodul, um einige Debug-Ausgaben hinzuzufügen. Aktualisieren Sie Ihre
sources/message.move
:module my_first_module::message {use std::string;use std::signer;use std::debug; // Hinzufügen für Debug-Ausgabenstruct MessageHolder has key, store, drop {message: string::String,}public entry fun set_message(account: &signer, message: string::String) acquires MessageHolder {let account_addr = signer::address_of(account);debug::print(&message); // Die zu setzende Nachricht ausgebenif (exists<MessageHolder>(account_addr)) {debug::print(&string::utf8(b"Updating existing message")); // Debug-Info ausgebenmove_from<MessageHolder>(account_addr);} else {debug::print(&string::utf8(b"Creating new message")); // Ausgeben beim Erstellen neuer};move_to(account, MessageHolder { message });}public fun get_message(account_addr: address): string::String acquires MessageHolder {assert!(exists<MessageHolder>(account_addr), 0);let message_holder = borrow_global<MessageHolder>(account_addr);debug::print(&message_holder.message); // Die abgerufene Nachricht ausgebenmessage_holder.message}} -
Testdatei erstellen
Erstellen Sie unsere Tests: eine neue Datei
sources/message_tests.move
mit:#[test_only]module my_first_module::message_tests {use std::string;use std::signer;use aptos_framework::account;use my_first_module::message;#[test]fun test_set_and_get_message() {// Testkonto einrichtenlet test_account = account::create_account_for_test(@0x1);// Setzen einer Nachricht testenmessage::set_message(&test_account, string::utf8(b"Hello World"));// Überprüfen, dass die Nachricht korrekt gesetzt wurdelet stored_message = message::get_message(signer::address_of(&test_account));assert!(stored_message == string::utf8(b"Hello World"), 0);}} -
Die Tests ausführen
Führen Sie nun die Tests aus mit
aptos move test --named-addresses my_first_module=default
Sie sollten eine Ausgabe sehen, wenn die Tests bestehen: (Siehe unten für den Umgang mit Fehlern)
Terminal-Fenster INCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING my_first_moduleRunning Move unit tests[debug] "Hello World"[debug] "Creating new message"[debug] "Hello World"[ PASS ] 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba::message_tests::test_set_and_get_messageTest result: OK. Total tests: 1; passed: 1; failed: 0{"Result": "Success"}
Wenn Sie beim Testen auf Fehler stoßen, hier sind einige häufige Probleme und Lösungen:
- Stellen Sie sicher, dass alle Modulabhängigkeiten ordnungsgemäß importiert sind
- Überprüfen Sie, dass Ihre Kontoadresse im
-named-addresses
-Parameter übereinstimmt - Stellen Sie sicher, dass Testfunktionen das
#[test]
-Attribut haben - Stellen Sie sicher, dass String-Literale ordnungsgemäß kodiert sind
5. Ihr Modul veröffentlichen
Abschnitt betitelt „5. Ihr Modul veröffentlichen“Nach erfolgreichem Kompilieren und Testen Ihres Moduls können Sie es auf der Aptos-Blockchain veröffentlichen. Dieser Prozess stellt Ihren Code bereit, sodass er on-chain zugänglich ist.
-
Das Modul veröffentlichen
Veröffentlichen Sie Ihr Modul mit
aptos move publish --named-addresses my_first_module=default
Sie sehen eine Ausgabe, die den Kompilierungsprozess zeigt und dann eine Eingabeaufforderung zu Gasgebühren:
Terminal-Fenster Compiling, may take a little while to download git dependencies...UPDATING GIT DEPENDENCY https://github.com/aptos-labs/aptos-framework.gitINCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING my_first_modulepackage size 1271 bytesDo you want to submit a transaction for a range of [141300 - 211900] Octas at a gas unit price of 100 Octas? [yes/no] > -
Die Transaktion bestätigen
Tippen Sie
y
und drücken Sie Enter, um die Transaktion zu bestätigen.Nach der Bestätigung erhalten Sie eine Antwort mit den Transaktionsdetails:
Terminal-Fenster {"Result": {"transaction_hash": "0x95fce7344b066abda10c07dbf1ffa83e0d9c7bd400e2b143682a6c8a5f179dc2","gas_used": 1413,"gas_unit_price": 100,"sender": "9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba","sequence_number": 0,"success": true,"timestamp_us": 1735351260227638,"version": 273029731,"vm_status": "Executed successfully"}}
(Optional) Ihren Vertrag On-Chain sehen
Abschnitt betitelt „(Optional) Ihren Vertrag On-Chain sehen“Nach erfolgreicher Veröffentlichung können Sie überprüfen, ob Ihr Modul on-chain ist, indem Sie diese Schritte befolgen:
-
Den Explorer öffnen
Gehen Sie zum Aptos Explorer
-
Die Transaktion überprüfen
Suchen Sie nach Ihrer Kontoadresse. Sie sollten bemerken, dass es eine neue Transaktion in Ihrem Konto gibt, die
code::publish_package_txn
-Funktion. -
Ihr Guthaben anzeigen
Klicken Sie auf den “Coins”-Tab, um zu sehen, dass Sie jetzt weniger als 1 APT der Aptos Coin haben.
Sie haben einen kleinen Betrag für Gas ausgegeben, um den Vertrag bereitzustellen, sodass Sie etwa
0.99855 APT
übrig haben sollten. -
Ihr Modul finden
Schauen Sie unter dem “Modules”-Tab
-
Das Modul verifizieren
Sie sollten Ihr “message”-Modul aufgelistet sehen
6. Mit Ihrem Modul interagieren
Abschnitt betitelt „6. Mit Ihrem Modul interagieren“Jetzt, da Ihr Modul veröffentlicht ist, können Sie über die Aptos CLI mit ihm interagieren:
-
Eine Nachricht setzen
Setzen Sie eine Nachricht mit der CLI:
Terminal-Fenster aptos move run --function-id 'default::message::set_message' --args 'string:Hello, Aptos!'Sie sehen eine Gasgebühren-Eingabeaufforderung ähnlich der, die Sie während der Veröffentlichung gesehen haben.
-
Die Transaktion bestätigen
Nach der Bestätigung mit
y
sollten Sie eine Erfolgsantwort wie diese erhalten:Terminal-Fenster Transaction submitted: https://explorer.aptoslabs.com/txn/0x0c0b1e56a31d037280278327eb8fdfcc469a20213e5e65accf6e7c56af574449?network=devnet{"Result": {"transaction_hash": "0x0c0b1e56a31d037280278327eb8fdfcc469a20213e5e65accf6e7c56af574449","gas_used": 445,"gas_unit_price": 100,"sender": "9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba","sequence_number": 1,"success": true,"timestamp_us": 1735351754495208,"version": 273137362,"vm_status": "Executed successfully"}} -
Ihre Nachricht anzeigen
Zeigen Sie Ihre gespeicherte Nachricht an, indem Sie unter Resources im Explorer nachschauen.
-
Feiern!
Wir haben es geschafft!
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“Herzlichen Glückwunsch! Sie haben erfolgreich:
- Ihr erstes Move-Modul kompiliert
- Tests hinzugefügt, um beim Debuggen zu helfen
- Ihr Modul on-chain veröffentlicht
- Ihren Vertrag über die CLI verwendet
Jetzt kann Ihr veröffentlichtes Move-Modul wie eine API über eines unserer vielen offiziellen SDKs verbunden werden!
Hier sind einige empfohlene nächste Schritte, um ein tieferes Verständnis von Move-Modulen zu erlangen:
- Versuchen Sie, das Modul zu modifizieren, um eine neue Funktion hinzuzufügen. Sie können das Move-Buch verwenden, um Ihr Verständnis für das Schreiben von Move-Modulen aufzubauen.
- Um zu verstehen, wie Move on-chain funktioniert, können Sie über Move’s Ressourcensystem lernen.
- Wenn Sie eine Anwendung erstellen, um mit Verträgen zu interagieren oder Daten von on-chain zu suchen, lernen Sie, wie Sie die SDKs hier verwenden.
- Treten Sie dem Aptos Discord bei, um sich mit anderen Entwicklern zu verbinden.