Aptosで最初のMoveスマートコントラクトを作成するためのステップバイステップガイド
Published: 2024-06-20 10:51:13

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

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

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

あなたのを開けて下さい [Remix IDE] (https://remix.ethereum.org/)

![移動aptosは、スマート契約を書きます](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sc1hv17elwdm3firntd1.png)

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

![APtos move smart contractにsmartを展開する方法について説明します](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jvyhyk26c2bpfee93976.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ums8vbfu1rgp0t5rsnm3.png)

Aptosを選択

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

このリンクをご覧ください [ウォレットコネクトアプトスの学習の動き](http://abit.ly/install-welldone-wallet) 
Chrome拡張機能からウォレットをダウンロードする

![Aptos Move](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/247paxrtdxkhy6u67ryu.png)

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

![APtos Move](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2yr1pzq2al6xj962356.png)

あなたが訪問することができます作成した後、財布を作成するAptosをクリックします [claim fuacet Aptos](https://www.aptosfaucet.com/) testnetまたはdevnetを要求するには、あなたのアドレスをコピーします。


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

成功裏に請求した後
--------------------------------------------------------------

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

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


![waste_manager aptos ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqja4e9n0zhoprvssfbe.png)


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

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

```rust
[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"}
```

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

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

}
```

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

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

```rust
 use aptos_framework::event;
    
    use std::string::String;
    use aptos_std::table::{Self, Table};
    use aptos_framework::account;
    use std::signer;
```

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

```rust
struct Waste has store, drop, copy, {
        wast_id: u64,
        wasteType: String,
        collectionLocation: String,
        weigth: u64,
        isRecorded: bool,
        isValidated: bool
    }
```

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


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

```

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

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

```rust
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);
    }
```

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


```rust
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);

    }
```

収集するときに廃棄物を検証する必要があります収集されたそれぞれを検証する必要がある会社にそれをもたらします。
 
```rust
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;
    }
```

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

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

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



```rust

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


```

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