自分のコントラクトを作る
設計から自分のコントラクトを作る最終回
最終回です。写すのではなく、自分で設計して、自分のコントラクトを作ります。とはいえ手順どおりに進めば大丈夫。プロも同じ順番で作っています。
作る手順は 3 ステップ
- 設計 — 何を記録し、どんなボタンを付けるかを日本語で書き出す
- 実装 — 設計を Solidity に翻訳する
- デプロイして試す — 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).balance —
thisは「このコントラクト自身」。つまり「この貯金箱自身の住所の残高」です。入金の合計を自分で足し算しなくても、ブロックチェーンが残高として覚えてくれています
ステップ3: デプロイして試す
Lab でコンパイル→デプロイしたら、実行画面で試します。
depositのカードにだけ、「wei (payable)」という入力欄(送る金額の欄)が出ています。payable の印があるからです- wei (payable) 欄に
1000を入れて実行 →[event] Deposited(from=..., amount=1000) total()を読む →1000- もう一度
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 をはじめる :::