[Astar]Swanky-cliの「flipper」コントラクトを読んでみよう!
本日は、こちらの記事の第二章に出てくる、「flipper」コントラクトの中身を見ていこうと思います。
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