Nobiq
Nobiq

自分のコントラクトを作る

設計から自分のコントラクトを作る最終回

最終回です。写すのではなく、自分で設計して、自分のコントラクトを作ります。とはいえ手順どおりに進めば大丈夫。プロも同じ順番で作っています。

作る手順は 3 ステップ

  1. 設計 — 何を記録し、どんなボタンを付けるかを日本語で書き出す
  2. 実装 — 設計を Solidity に翻訳する
  3. デプロイして試す — Lab で動かし、思いどおりか確かめる

いきなりコードを書かないのがコツです。日本語で言えないものはコードにも書けません

ステップ1: 設計を日本語で書く

例題として「みんなの貯金箱」を設計してみます。

  • なにをする箱? — 誰でもコインを入れられて、合計がいつでも見られる貯金箱
  • 記録するもの(変数) — なし(あとで出てくる「残高」はブロックチェーンが自動で覚えています)
  • ボタン(関数) — ①deposit: コインを入れる ②total: いままでの合計を見る
  • お知らせ(イベント) — 入金があったら「誰が・いくら」を知らせる

この 4 項目(する事・変数・関数・イベント)を書き出せば、設計は完成です。

ステップ2: Solidity に翻訳する

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract PiggyBank {
    event Deposited(address from, uint256 amount);

    function deposit() public payable {
        emit Deposited(msg.sender, msg.value);
    }

    function total() public view returns (uint256) {
        return address(this).balance;
    }
}

新しい言葉が 3 つあります(この講座最後の新出です)。

  • payable — 「この関数はお金(この chain の通貨)を受け取れます」という印。付いていない関数にお金を送ろうとすると巻き戻されます
  • msg.value — msg.sender の仲間。「この操作と一緒に送られてきた金額」が自動で入っています
  • address(this).balancethis は「このコントラクト自身」。つまり「この貯金箱自身の住所の残高」です。入金の合計を自分で足し算しなくても、ブロックチェーンが残高として覚えてくれています

ステップ3: デプロイして試す

Lab でコンパイル→デプロイしたら、実行画面で試します。

  1. deposit のカードにだけ、「wei (payable)」という入力欄(送る金額の欄)が出ています。payable の印があるからです
  2. wei (payable) 欄に 1000 を入れて実行 → [event] Deposited(from=..., amount=1000)
  3. total() を読む → 1000
  4. もう一度 500 を入れて deposit → total()1500

:::warning 金額の単位は wei(ウェイ) 欄の名前のとおり、金額の単位は wei という最小単位です。1 NOB = 1,000,000,000,000,000,000 wei(0 が 18 個)なので、1000 wei はほぼタダみたいな金額。このハンズオンでは 1000 程度の小さい数だけを使ってください。桁を増やしすぎると Lab の代行送信者の残高から引かれてしまいます。 :::

:::warning デプロイしたものは消せません これは練習用チェーンではなく、Nobiq の本物のブロックチェーン(L3)です。一度デプロイしたコントラクトと記録は消せません。個人情報や秘密にしたいことは、絶対にコードや入力欄に書かないでください(コンパイルとデプロイ の注意も再読を)。 :::

卒業課題: 自分の題材で作る

同じ 3 ステップで、自分の題材をひとつ作ってみましょう。この講座の知識だけで作れる例です。

  • 来客カウンター — ボタンを押すと累計が増え、イベントで知らせる(第5回の応用)
  • ひとこと掲示板 — string を配列に push していく。書いた人の住所も struct で一緒に記録(第6回の応用)
  • 持ち主だけがリセットできるカウンター — onlyOwner で reset ボタンを守る(第4回の応用)

設計 4 項目を日本語で書く → 翻訳する → Lab で動かす。エラーが出たら直せばいい——第0回からずっとやってきたことです。

講座を終えて

おつかれさまでした! あなたはもう、

  • Solidity の骨格・型・関数・門番・イベント・データ構造・継承・エラー処理を知っていて
  • 実物のコントラクト(PulseCheck)を読め
  • 自分の設計をコードにして、本物のブロックチェーンで動かせます

次のステップとしては、作った作品を発展させたり、Web3 の講座 で「そもそもブロックチェーンって何が起きているの?」を深めるのがおすすめです。

:::tip Lab でやってみる 卒業課題、ぜひ挑戦を。うまく動いた作品のコントラクトアドレスは、あなたの初作品の「住所」として残ります。操作方法のおさらい: Lab をはじめる :::