Aptosで最初のMoveスマートコントラクトを作成するためのステップバイステップガイド

Muhdsodiq Bolarinwa - Jun 20 - - Dev Community

Aptosで最初のMoveスマートコントラクトを作成するためのステップバイステップガイド

Aptosは、他のブロックチェーンの中でもスケーラビリティ、セキュリティ、信頼性に焦点を当てた独立したレイヤー1の1つです。 スマートコントラクトがmoveプログラミングで書かれているスマートコントラクトをサポートしています。 ブロックチェーンネットワークは、コンセンサスメカニズムとしてプルーフ・オブ・ステークを利用していますコミュニティの人々のための廃棄物管理システムであるシンプルなスマートコントラクトを作成します。 Aptos blockchainは、高レベルのセキュリティ機能を維持し、取引コストを削減しました。 私たちは、移動建物廃棄物管理システムでスマートを構築する方法を掘り下げる必要があります。

Move smart contractを詳しく調べるには、remixまたはvsなどのローカルコードエディタを使用します。

あなたのを開けて下さい Remix IDE

移動aptosは、スマート契約を書きます

あなたは、プラグインのアイコンをクリックして参照してください、画面の左隅を見てください

APtos move smart contractにsmartを展開する方法について説明します

サイドバーがポップアップ表示されます。CODE BY WELLDONE STUDIO 「コードスタジオ」でアクティブ化します。

Image description

Aptosを選択

スマートコントラクトと対話するには、ウォレットをインストールする必要があります。

このリンクをご覧ください ウォレットコネクトアプトスの学習の動き
Chrome拡張機能からウォレットをダウンロードする

Aptos Move

ウォレットと対話するためのウォレットアカウントの設定

APtos Move

あなたが訪問することができます作成した後、財布を作成するAptosをクリックします claim fuacet Aptos testnetまたはdevnetを要求するには、あなたのアドレスをコピーします。

アカウントの設定が完了したら、シードフレーズをどこかにコピーして保存します。

成功裏に請求した後

例としてwaste managerを使用してスマートコントラクトに移動しましょう

左側のサイドバーにあるremix IDEで、新しいプロジェクトの作成プロジェクトの名前を入力します

waste_manager aptos

あなたのを見つけて下さい Move.toml

このコードを貼り付けます

[package]
name = "Examples"
version = "0.0.0"

[addresses]
wastes_Insured_addr = "paste your account address"

[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "aptos-node-v1.13.1"}
Enter fullscreen mode Exit fullscreen mode

スマートコントラクトの使用を開始するには、アカウントアドレスの下に配置されるモジュールを定義する必要があります。

module <account-address>::<module-name> {

}
Enter fullscreen mode Exit fullscreen mode

このスマートコントラクトで使用するライブラリをインポートします。

イベント:関数がトリガーされたときにスマートコントラクトで発生したイベントを発行するためのものです。
Table:tableを使用して、スマートコントラクト入力データのテーブルを定義します
署名者:特定の時間にスマートコントラクトを呼び出している人です。
アカウントはスマートコントラクトに関連付けられています。

 use aptos_framework::event;

    use std::string::String;
    use aptos_std::table::{Self, Table};
    use aptos_framework::account;
    use std::signer;
Enter fullscreen mode Exit fullscreen mode

型指定されたフィールドを保持する構造体を定義し、格納、削除、およびコピーする機能を備えています。

struct Waste has store, drop, copy, {
        wast_id: u64,
        wasteType: String,
        collectionLocation: String,
        weigth: u64,
        isRecorded: bool,
        isValidated: bool
    }
Enter fullscreen mode Exit fullscreen mode

私たちは、廃棄物の配列を取る私たちの廃棄物リストを定義し、廃棄物が記録されたときに新しいイベントが放出され、廃棄物ストアの長さとなる

struct WasteList has key {
        waste: Table<u64, Waste>,
        waste_count: u64
    }

Enter fullscreen mode Exit fullscreen mode

私たちは、エラー constを初期化し、エラーが移動言語で数で表されています

const E_NOT_INITIALIZED: u64 = 1;
    const EWASTE_DOESNT_EXIST: u64 = 2;
    const EWASTE_IS_VALIDATED: u64 = 3; 
Enter fullscreen mode Exit fullscreen mode

次に、私たちはアカウントが持っている必要があります最初のリスト機能を作成し、それは私たちが署名者に関連付ける取引を提出するために不可欠

public entry fun create_list(account: &signer) {
        let waste_holder = WasteList {
            waste: table::new(),
            set_waste_event: account::new_event_handle<Waste>(account),
            waste_count: 0
        };
        move_to(account, waste_holder);
    }
Enter fullscreen mode Exit fullscreen mode

新しい廃棄物トランザクションをブロックチェーンに送信する廃棄物追加機能を作成します。 トランザクションをチェーンに送信するユーザーを知る必要があります。 これは、次のような構造体に入力されたすべてのフィールドを受け入れます

public entry fun register_waste(account: &signer, wasteType: String, collectionLocation: String,
    weight: u64, wasteAmount: u64, hospitalAddress: address) acquires WasteList {
// 私たちは署名者のアドレスを取得しています
        let signer_address = signer::address_of(account);
// 署名者が初期化されているかどうかを確認します
        assert!(exists<WasteList>(signer_address), E_NOT_INITIALIZED);
//私たちは、廃棄物リストのリソースを取得しています
        let waste_list = borrow_global_mut<WasteList>(signer_address);
// 私たちは、記録された廃棄物の数を増加させます
        let counter = waste_list.waste_count + 1;
// 新しい廃棄物を記録する
        let new_record_waste = Waste {
            wast_id: counter,
            wasteType:String,
        collectionLocation: String,
        weigth: u64,
        isRecorded: bool,
        isValidated: 
        };
// 廃棄物テーブルに記録された新しい廃棄物を挿入します
        table::upsert(&mut waste_list.waste, counter, new_record_waste);
// 廃棄物の数を設定します。
        waste_list.waste_count = counter;
// 廃棄物を排出するイベント
       event::emit(new_record_waste);

    }
Enter fullscreen mode Exit fullscreen mode

収集するときに廃棄物を検証する必要があります収集されたそれぞれを検証する必要がある会社にそれをもたらします。

public entry fun validate_waste(account: &signer, waste_id: u64) acquires WasteList {
// 署名者のアドレスを取得するためにsigner_addressを初期化しました
        let signer_address = signer::address_of(account);
        assert!(exists<WasteList>(signer_address), E_NOT_INITIALIZED);
// 私たちは廃棄物資源を取得します 
        let waste_list = borrow_global_mut<WasteList>(signer_address);
// アサートを使用して廃棄物が存在するかどうか
        assert!(table::contains(&waste_list.waste, waste_id), EWASTE_DOESNT_EXIST);
        // 廃棄物idと一致する廃棄物を取得します
        let waste_track = table::borrow_mut(&mut waste_list.waste, waste_id);
        // 廃棄物がまだ検証されていないかどうかを確認します
        assert!(waste_track.isValidated == false, EWASTE_IS_VALIDATED);

        // 廃棄物の検証
        waste_track.isValidated = true;
    }
Enter fullscreen mode Exit fullscreen mode

ここでは、Moveプログラミング言語を開始する方法です。

次に、サイドバー内に表示される[コンパイル]ボタンをクリックします

あなたはこれに似た結果を持っているはずです


INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
{
  "Result": [
    "92c945f0ec6423e8ec1414a597f1d6fbc954c309f5846cbc73a43b62bfc37eba::waste_insure"
  ]
} 


Enter fullscreen mode Exit fullscreen mode

デプロイするには、デプロイ ボタンを押します。

. . . . . . .