Substrate Tutorial (#1 Basic – Creating a Module)

仮想通貨全般

前回からの続きで引き続き、Substrate Tutorialを進めていきます。

Sponsored Link


Basic – Introduction

#1 Basic – Introduction を見ていきます。

今回のチュートリアルをこなしていくと以下が学べるようです。

– ランタイムのストレージの使い方
– ランタイムの関数公開方法
– Polkadot-JS Apps UI を自分のランタイムとの接続する方法

上記で記載しているランタイムとは、状態遷移関数STFと呼ばれることもあり、ブロックチェーンのブロック実行ロジックです。
Substrateでは、これはWebAssemblyバイナリとして実装に依存しない、機械実行可能なフォーマットでチェーン上に格納されます。
他のシステムはそれを人間が読める形式(例えばEthereum)で表現するか、まったく表現しない(例えばBitcoin)傾向があります。

また、ランタイムは以下のような特徴をもったモジュールで構成されています。

– Account Management
– Token Balances
– Governance
– Runtime Upgrades
など

この Introduction のページ、後半Rustの説明が多いのであとは割愛。

Creating a Module

いよいよ新しいモジュールを作ります、このチュートリアルで。

substratekitties.rsというファイルを以下ディレクトリに作成。

substratekitties
|
+-- runtime
    |
    +-- src
        |
        +-- lib.rs
        |
        +-- * substratekitties.rs

内容は以下。

use support::{decl_storage, decl_module};

pub trait Trait: system::Trait {}

decl_storage! {
    trait Store for Module as KittyStorage {
        // Declare storage and getter functions here
    }
}

decl_module! {
    pub struct Module for enum Call where origin: T::Origin {
        // Declare public functions here
    }
}

ここから参照先のページがわかりにくかったんですが、lib.rs に以下を加えます。

pub type Nonce = u64;

という記述のあとに以下。モジュールの宣言のよう。

mod substratekitties;

その後、

impl sudo::Trait for Runtime {
    type Event = Event;
    type Proposal = Call;
}

の記載のあとに、以下。Traitの記載。

impl substratekitties::Trait for Runtime {}

最後に construct_runtime の中に以下行を加える。微妙に記述がチュートリアルと自動生成でできたファイル違うんだよね。

construct_runtime!(
	pub enum Runtime with Log(InternalLog: DigestItem) where
		Block = Block,
		NodeBlock = opaque::Block,
		UncheckedExtrinsic = UncheckedExtrinsic
	{
		System: system::{default, Log(ChangesTrieRoot)},
		Timestamp: timestamp::{Module, Call, Storage, Config, Inherent},
		Consensus: consensus::{Module, Call, Storage, Config, Log(AuthoritiesChange), Inherent},
		Aura: aura::{Module},
		Indices: indices,
		Balances: balances,
		Sudo: sudo,
		// Used for the module template in `./template.rs`
		TemplateModule: template::{Module, Call, Storage, Event},
		// ここ!!!!!!!!!!!
		Substratekitties: substratekitties::{Module, Call, Storage},
	}
);

その後、コンパイル。

$ ./build.sh
:
   Compiling node-template-runtime-wasm v1.0.0 (/Users/shohu33/substrate/substrate-package/substratekitties/runtime/wasm)
    Finished release [optimized] target(s) in 8.98s

して、

$ cargo build --release
: 
    Building [=====================================================> ] 551/553: node-template-runtime
    Building [=====================================================> ] 552/553: substratekitties(bin)
    Finished release [optimized] target(s) in 2m 06s

これで実装のベースが整ったと。

Trait, Storage, Module のベースが記載できた。
もうちょいチュートリアル進めないと、動作確認まで辿りつかなさそう。

コツコツチュートリアルやってくぞぉ

Sponsored Link
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Hyperledger Fabric
Hyperledger fabric コマンドまとめ

よく使うHyperledger fabricコマンドのメモ[随時追記] Contents1 chai …

仮想通貨全般
Hyperledger fabric の Commercial Paper チュートリアル を試す

以下チュートリアルを試す。 Commercial paper tutorial Sponsored …

Rust
Rustを学ぶ

Substrateのチュートリアルを見ていてRustの理解が必要不可欠な気がしたのでRustを少し学 …