Ihr erstes fungibles Asset
Dieses Tutorial zeigt Ihnen, wie Sie Ihr eigenes Fungible Asset (FA) namens FACoin erstellen. Der Fungible Asset Standard bietet eingebaute Unterstützung für das Prägen, Übertragen, Verbrennen und Verfolgen von Kontosalden und ist daher nützlich für die Darstellung fungibler Assets. Wir werden das TypeScript SDK verwenden, um den Vertrag bereitzustellen und zu testen, sobald er on-chain ist.
Auf hoher Ebene funktioniert der Fungible Asset Standard durch zwei Hauptobjekte:
- Ein
Metadata
-Objekt zur Speicherung von Informationen über das fungible Asset. FungibleStore
s für jedes Konto, das das fungible Asset hat, um ihren aktuellen Kontosaldo zu verfolgen.
Das Senden eines fungiblen Assets an jemanden führt dazu, dass er einen FungibleStore
erhält und die Salden in beiden Konten entsprechend aktualisiert werden.
Fungible Assets in Aktion sehen
Abschnitt betitelt „Fungible Assets in Aktion sehen“Hier werden wir den Beispielvertrag FACoin modifizieren, bereitstellen und testen, um zu sehen, wie der Fungible Asset Standard funktioniert. Wenn Sie Ihren eigenen fungiblen Asset-Vertrag schreiben, möchten Sie möglicherweise auch den Stablecoin-Beispielvertrag hier als Referenz verwenden.
-
Installieren Sie die Aptos CLI.
Diese wird von den Bereitstellungsskripten verwendet, um den
FACoin
-Vertrag onchain zu veröffentlichen. -
Klonen Sie das TypeScript SDK Repository.
Dieses Repository enthält den Fungible Asset-Beispielcode.
Terminal-Fenster git clone https://github.com/aptos-labs/aptos-ts-sdk.git -
Navigieren Sie zur obersten Ebene des geklonten Repositorys.
Terminal-Fenster cd aptos-ts-sdk -
Installieren Sie die Abhängigkeiten des SDKs.
Terminal-Fenster pnpm install -
Erstellen Sie das TypeScript SDK.
Das Beispiel erfordert den lokalen Build des TypeScript SDK.
Terminal-Fenster pnpm build -
Öffnen Sie fa_coin.move in einem Editor.
Sie finden
fa_coin.move
unterexamples/typescript/move/facoin/sources/fa_coin.move
.Dies ist die Move-Datei, die den Großteil der Vertragslogik enthält. Wir werden uns die Details ansehen, wie dieser Vertrag funktioniert, nachdem wir Ihnen ein Beispiel für seine Funktionsweise gezeigt haben.
-
Bearbeiten Sie den ASSET_NAME, um der Name Ihres neuen fungiblen Assets zu sein.
Z.B. “Tutorial Token”. Die Werte, die Sie hier setzen, werden im bereitgestellten Vertrag und beim Testen der Funktionsweise angezeigt.
-
Navigieren Sie zu examples/typescript.
Terminal-Fenster cd examples/typescript -
Installieren Sie die Abhängigkeiten für die Beispiele.
Terminal-Fenster pnpm install -
Führen Sie your_fungible_asset aus.
Terminal-Fenster pnpm run your_fungible_assetSie sollten eine Ausgabe sehen, die demonstriert, wie die fungiblen Assets erstellt und übertragen werden, die so aussieht:
Terminal-Fenster === Addresses ===Alice: 0x0c5dd7abbd67db06325fa1a2f37a1833f9a92ff2beb90f32495a9d80972429cdBob: 0x2a796f4255d5c23684fe6cc521069d684516031bb5ae1ad2061ddc5414450807Charlie: 0xd824909be65a224f651ff6e9b82ec99ad5707fcef739d1003be20fc69fb93d7a=== Compiling FACoin package locally ===In order to run compilation, you must have the `aptos` CLI installed.Running the compilation locally, in a real situation you may want to compile this ahead of time.aptos move build-publish-payload --json-output-file move/facoin/facoin.json --package-dir move/facoin --named-addresses FACoin=0x0c5dd7abbd67db06325fa1a2f37a1833f9a92ff2beb90f32495a9d80972429cd --assume-yesCompiling, may take a little while to download git dependencies...UPDATING GIT DEPENDENCY https://github.com/aptos-labs/aptos-core.gitINCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING facoin===Publishing FACoin package===Transaction hash: 0x0c8a24987bdf2e5e40d8a00f6c97ac55419757bc440097d76959a64dbeafc351metadata address: 0x2e0e90c701233467f27150f42d365e27e72eb0be8e2a74ee529c31b813bbb321All the balances in this example refer to balance in primary fungible stores of each account.Alice's initial balance: 0.Bob's initial balance: 0.Charlie's initial balance: 0.Alice mints Charlie 100 coins.Charlie's updated "Tutorial Token" primary fungible store balance: 0.Alice freezes Bob's account.Alice as the admin forcefully transfers the newly minted coins of Charlie to Bob ignoring that Bob's account is frozen.Bob's updated "Tutorial Token" balance: 0.Alice unfreezes Bob's account.Alice burns 50 coins from Bob.Bob's updated "Tutorial Token" balance: 0.Bob transfers 10 coins to Alice as the owner.Alice's updated "Tutorial Token" balance: 0.Bob's updated "Tutorial Token" balance: 0.done.
Den fa_coin.move
-Beispielvertrag verstehen
Abschnitt betitelt „Den fa_coin.move-Beispielvertrag verstehen“Der vollständige Vertrag für FACoin.move ist hier zu finden.
Lassen Sie uns Schritt für Schritt durchgehen, wie dieser Vertrag geschrieben ist.
-
Move.toml
Die Move.toml-Datei ermöglicht es Move, Abhängigkeiten zu importieren, zu bestimmen, welche Adressen zu verwenden sind, und enthält Metadaten über den Vertrag.
Unabhängig davon, welche Funktionen Sie zu Ihrem fungiblen Asset hinzufügen, wird Ihre Move.toml wahrscheinlich ähnliche Felder wie diese mindestens haben. In diesem Fall haben wir die primäre Vertragsadresse
FACoin
, die zur Bereitstellungszeit spezifiziert werden muss (angezeigt durch das Belassen des Werts als ”_”). Sie enthält auch die GitHub-Abhängigkeit, um den Fungible Asset Standard von “AptosFramework” zu importieren.[package]name = "facoin"version = "1.0.0"authors = [][addresses]FACoin = "_"[dependencies.AptosFramework]git = "https://github.com/aptos-labs/aptos-core.git"rev = "mainnet"subdir = "aptos-move/framework/aptos-framework" -
Imports
Das FACoin-Modul verwendet mehrere wichtige Module:
fungible_asset
enthält die Logik für die Gewährung von Berechtigungen zum Prägen, Übertragen, Verbrennen und Erstellen Ihres FungibleAsset.object
ermöglicht die Erstellung von Aptos-Objekten.primary_fungible_store
enthält die Logik zur Verfolgung von Kontosalden für das neue Fungible Asset.
module FACoin::fa_coin {use aptos_framework::fungible_asset::{Self, MintRef, TransferRef, BurnRef, Metadata, FungibleAsset};use aptos_framework::object::{Self, Object};use aptos_framework::primary_fungible_store;use std::error;use std::signer;use std::string::utf8;use std::option;//...}Diese Imports sind in der
Move.toml
-Datei als GitHub-Abhängigkeiten definiert. -
init_module
Diese Funktion wird aufgerufen, wenn das Modul initial veröffentlicht wird, um die ordnungsgemäßen Berechtigungen und Objekte einzurichten. Für FACoin wird dies verwendet, um das
MetaData
-Objekt des Assets zu initialisieren (das Dinge wie den Namen und das Symbol des Assets enthält), sowie um die relevanten Referenzen dafür zu erhalten, wie unser fungibles Asset verwendet wird.Der
ManagedFungibleAsset
-Standard hilft dabei, zu verfolgen, welche Berechtigungen dieses Modul verwenden darf.fun init_module(admin: &signer) {let constructor_ref = &object::create_named_object(admin, ASSET_SYMBOL);primary_fungible_store::create_primary_store_enabled_fungible_asset(constructor_ref,option::none(),utf8(ASSET_NAME),utf8(ASSET_SYMBOL),8,utf8(b"http://example.com/favicon.ico"),utf8(b"http://example.com"),);let mint_ref = fungible_asset::generate_mint_ref(constructor_ref);let burn_ref = fungible_asset::generate_burn_ref(constructor_ref);let transfer_ref = fungible_asset::generate_transfer_ref(constructor_ref);let metadata_object_signer = object::generate_signer(constructor_ref);move_to(&metadata_object_signer,ManagedFungibleAsset { mint_ref, transfer_ref, burn_ref })} -
View-Funktionen
Beim Erstellen Ihres eigenen fungiblen Assets kann es hilfreich sein, View-Funktionen für alle Daten hinzuzufügen, die später benötigt werden. In diesem Fall wollten wir den Namen des Assets sehen, um zu berichten, welches Asset in unserem Beispielszenario gehandelt wurde.
#[view]public fun get_metadata(): Object<Metadata> {let asset_address = object::create_object_address(&@FACoin, ASSET_SYMBOL);object::address_to_object<Metadata>(asset_address)}#[view]public fun get_name(): string::String {let metadata = get_metadata();fungible_asset::name(metadata)} -
Entry-Funktionen
Jedes fungible Asset hat eine ähnliche Schnittstelle (mint, transfer, burn, freeze, unfreeze, deposit und withdraw). Hier ist ein Beispiel einer minimalen Mint-Funktion, die prägt und die Mittel an den ordnungsgemäßen Empfänger überträgt:
public entry fun mint(admin: &signer, to: address, amount: u64) acquires ManagedFungibleAsset {let asset = get_metadata();let managed_fungible_asset = authorized_borrow_refs(admin, asset);let to_wallet = primary_fungible_store::ensure_primary_store_exists(to, asset);let fa = fungible_asset::mint(&managed_fungible_asset.mint_ref, amount);fungible_asset::deposit_with_ref(&managed_fungible_asset.transfer_ref, to_wallet, fa);}
Zusammenfassung
Abschnitt betitelt „Zusammenfassung“Wenn Sie Ihr eigenes Fungible Asset erstellen möchten, können Sie fa_coin.move
als Ausgangspunkt verwenden oder andere Code-Beispiele hier betrachten.
Unabhängig davon wird Ihnen der Fungible Asset Standard dabei helfen, automatisch zu prägen, zu übertragen, zu verbrennen und Salden für welche fungiblen Assets auch immer Sie on-chain darstellen möchten zu verfolgen.
Sie finden die Move-Referenz für Fungible Assets für weitere Details zu den Funktionssignaturen und Implementierungsdetails.