Chapter 11無料公開

Hello NEAR 6 - rust smart contract -

masa
masa
2022.08.20に更新

rust smart contract概要

rustを使ったsmart contractの実装を理解します。

コードリーディング

スマートコントラクトをコードリーディングします。

module

スマートコントラクトを記述する際はNEAR SDKを使います。

rust
use near_sdk::borsh::{self, BorshDeserialize, BorshSerialize};
use near_sdk::{log, near_bindgen};

#[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize)]
pub struct Contract {
    message: String,
}

[near_bindgen]マクロは、構造体と関数の実装で使用され、有効なNEARコントラクトであるために必要なコードを生成し、外部から呼び出せるように意図された関数を公開するために使用されます。

structのシリアライゼーションにはBorschシリアライゼーションが必要です。

コントラクトの初期化

スマートコントラクトがブロックチェーンにデプロイされるとき、変数は開始値で初期化される必要があります。
これはデフォルトで自動的に行われます。

rust
impl Default for Contract{
    fn default() -> Self{
        Self{message: DEFAULT_MESSAGE.to_string()}
    }
}

上記では、デフォルトを定義し、自動的にコントラクトを初期化しています。

メソッドの作成

公開されたすべてのパブリックメソッドは、ブロックチェーン内のすべてのユーザーが呼び出すことができるようになります

rust
#[near_bindgen]
impl Contract {
   // Public method - returns the greeting saved, defaulting to DEFAULT_MESSAGE
   pub fn get_greeting(&self) -> String {
       return self.message.clone();
   }

   // Public method - accepts a greeting, such as "howdy", and records it
   pub fn set_greeting(&mut self, message: String) {
       // Use env::log to record logs permanently to the blockchain!
       log!("Saving greeting {}", message);
       self.message = message;
   }
}

簡単ですね。

まとめ

rustを使ったsmart contractの実装は、pureなrustの実装とほとんど変わりません。

[near_bindgen]マクロとstructのシリアライゼーションにnear_sdkのborshを使うことに注意してください。

もし、この章の内容が理解できない場合は、rustの基本が全くわかっていないことを意味するので、まずはrustの基本を学習してから、smart contractの実装に取り掛かることをオススメします。