💬

[Astar]Swanky-cliの「flipper」コントラクトを読んでみよう!

2023/02/06に公開

本日は、こちらの記事の第二章に出てくる、「flipper」コントラクトの中身を見ていこうと思います。

https://zenn.dev/yuki2020/articles/605b2d31d085dd

0 はじめに

今回扱うコードは、こちらの「src」ディレクトリの「lib.rs」になります。

1 コードを見ていこう

では、一つずつ見ていきましょう。

1 cfg_attrについて

cfg_attrは「configuration attribute」の略で、コンパイル時の振る舞いを制御するために使用されます。

以下、chatGPTの解説です。

特定の条件が満たされた場合にのみ、特定のアトリビュートを有効にすることができるようです。

今回の場合は、「not(feature = "std")」の条件が満たされた場合に、「no_std」アトリビュートが有効になります。

2 use ink_lang as ink;について

次に、「use ink_lang as ink;」では、「ink_lang」を「ink」としてインポートしています。

依存関係などはこちらの「Cargo.toml」に記載されています。

3 #[ink::contract]について

では、次に、#[ink::contract]を見てみましょう。

公式がこちらです。

#[ink::contract]のモジュール内では、下に書いてある色々なアトリビュートを使うことができます。


https://paritytech.github.io/ink/#hello-world--the-flipper

4 #[ink(storage)]について

次は、こちらの#[ink(storage)]です。

こちらは、ストレージ(値を保存する)のストラクト(構造体)について定義をしています。

また、コントラクト内に一つしか存在させないようです。


https://paritytech.github.io/ink/#hello-world--the-flipper

5 #[ink(constructor)]について

次は、こちらの#[ink(constructor)]です。

ストレージ(保存を行う)ストラクト(構造体)に対するメソッドです。

コントラクトの初期化処理を行います。


https://paritytech.github.io/ink/

なお、Default値を、このように、「Default::default()」で設定しています。


https://doc.rust-lang.org/std/default/trait.Default.html

デフォルト値は型によって異なり、bool型の場合は、下のように、falseがデフォルトとして設定されています。


https://doc.rust-lang.org/src/core/default.rs.html#205

6 #[ink(message)]について

次は、こちら#[ink(message)]です。

なお、中の「&」は借用を表し、「mut」は可変であることを示しています。

こちらは、Rust自体の話になります。

#[ink(message)]はストレージ(保存を行う)ストラクト(構造体)に対するメソッドになります。


https://paritytech.github.io/ink/

7 #[ink(test)]について

次は、#[cfg(test)]についてです。

Rustでは、ユニットテストを行う際に、#[cfg(test)]の中で行います。

また、「use super::*;」を使い、外部のスコープの定義をインポートしています。

「#[ink::test]」はオフチェーンによるテストを行います。


https://paritytech.github.io/ink/

中身は、下のように、上で定義されたものが使用されています。

また、「assert_eq!」はアサーション用のマクロで、二つの引数が正しいことを表明します。

以上です。

最後までありがとうございました!

Discussion