Day 7以降では、Solidityの基本文法について解説していきます。開発ツールとしては、web3の基本ツールでも紹介したRemix(オンラインのIDE環境)を利用します。
まずは、Remixによる開発からはじめ、Solidityプログラムの基本構造について学びます。では、解説してまいります。
開発の流れ
このガイドでは、次の順番で開発を進めていきます。
- Remix上でSolidityプログラムを作成する
- Solidityプログラムをデプロイ(Remixのテスト環境に配置)する
- デプロイされたプログラムを実行する
今回、開発を行うためのツールとして、web3の基本ツールでも解説した、Ethereumが提供するRemixというサイトを利用します。Remixは、ウェブサイトの形で提供されている開発環境で、ローカルPC環境にソフトをインストールしなくても、気軽に利用することが可能です。
※ より本格的な開発にはローカルPC環境に開発用のソフトウェアを導入することが望ましいです
Remix上でSolidityのプログラムを作成する。
Remixをブラウザーで開きます。著者の場合は、Chromeで動作確認しています。
アイコンパネルの赤枠のボタンで、ファイルエクスプローラーまたはデプロイ・実行の各画面に切り替えることができます。WORKSPACESの右の+ボタンから新しいワークスペースを作成します。
はじめの選択箇所でBlankを選択し、次のテキスト入力フォームでワークスペース名を入力します。
右の赤枠をクリックし、contractsという名前のフォルダーを作成します(ここにSolidityのプログラムを置きます)。左の赤枠をクリックし、MyToken.solという名前のファイルを作成します(これが今回作成するプログラムです)。
プログラムの基本構造
次のMyToken.solは最も基本的な構造をしている、最小に近いSolidityプログラムです。
特に1、2、6行目はどのコントラクトでも記述する構文を含んでいます。
このプログラムの内容を要約すると、MITライセンスのプログラムで、Solidityのコンパイラーのバージョン0.8.9以降で動作し、ERC20の機能を継承しているコントラクトである、ということになります。
(ERC20とは、Ethereumの規格の一つで、トークン(仮想通貨)のための規格です。それを実装しているのがERC20.solという、本プログラムの外部にあるプログラム(親のコントラクト)です)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
uint256 initialSupply = 10000000000000000000;
constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
_mint(msg.sender, initialSupply);
}
}
MyToken.sol
// SPDX-License-Identifier: <ライセンスの種類>
冒頭の一文はソースコードのライセンスの種類を明記するためのものです。ライセンスの種類は、GPL、MITなどがあり、自分が主張したい権利に応じて、選択するのが適切です。
従来ソースコードにライセンス表記をする場合には、ソースコードの冒頭に長い一文を書くことが多かったのですが、それを省略した記述にしているのがこのやり方で、Solidity開発ではこの記法が一般的です。ライセンスの種類は、このリンクに記載されいます。MITライセンスは一般的に制限が緩いという特徴があり、制限の少なさから使い勝手が良いと考えられています。
pragma solidity ^0.8.9;
プログラムを実行可能なモジュールに変換することをコンパイルと呼び、変換作業を行うソフトのことをコンパイラーと言います。ここでは、Solidityのコンパイラーのバージョンを指定しています。^0.8.9は、0.8.9以上という意味です。バージョンの指定の仕方としては以下の種類のものがあります。
・0.8.7: 0.8.7のみ
・^0.8.7: 0.8.7以降の0.8系
・<=0.8.7 < 0.9.0: 0.8.7以上0.9.0未満
import “@openzeppelin/contracts/token/ERC20/ERC20.sol”;
importは公開されているライブラリーをそのまま利用するための宣言です。この宣言をすることで、ERC20というコントラクトを利用します。
ローカルで開発する場合には、ローカルにパッケージ管理ソフトウェア(yarn, npm等)を利用してダウンロードした上で、ローカルにあるパス名を指定して、importします。
contract MyToken is ERC20 {
…
MyTokenというコントラクト(プログラムのかたまりの単位)を定義していますが、このコントラクトは、ERC20というコントラクトの機能を引き継いでいる、という意味の宣言になります。
ERC20が親で、その機能を継承しているMyTokenは子供にあたり、この2つのコントラクトは親子関係にあります(”継承”と呼びます。後述する予定です)。
uint256 initialSupply = 10000000000000000000;
ここでは、変数を定義しています(MyTokenは、実はトークン(通貨)にあたるもので、これをどのくらい発行するかを定めている変数です)。uin256というのは型と呼ばれ、uin256の場合だと非常に大きな数字に用いる変数の定義になります(詳細は後述します)。
constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
constructorは、Contractが実際に生成される際にはじめに一度だけ実行される関数です。_name, _symbolという2つの変数をインプットしています(これらは引数と呼びます)。いわゆる、”初期化”と呼ばれる処理で、他の機能が使われる前にどういう値をセットしておくか、どういう処理を実施しておくか、といったことを定義する機能です。
_mint(msg.sender, initialSupply);
_mintという関数は、ERC20という継承元のコントラクトで定義しています。MyTokenコントラクトはERC20を引き継いでいるので、ERC20の持っている関数を使うことができます。処理の内容としては、初期の通貨の発行を行っています(ミント(=鋳造の意)、と呼ばれる)。
Solidityプログラムをデプロイする
アイコンパネルの上から4つ目のデプロイ・実行ボタンを押すと、サイドパネルにデプロイ・実行用の画面が表示されます。
デプロイ・実行画面では、赤枠の箇所にトークンの名前とシンボル(アルファベット2〜3文字の略字)を引数として指定して、Deployボタンを押します。すると、デプロイが実行され、プログラムがテスト環境上に配置され、実行できる状態になります。
デプロイされたプログラムを実行する
同じ画面で、デプロイされたプログラム(コントラクト)が表示されます。多数のボタンがありますが、これは、継承元のERC20で定義されている関数または変数です。
設定したトークンの名前とシンボル名の値がセットされているかをみてみましょう。下の方に、name, symbolといったボタンがあるので、こちらを押します。
すると、それぞれのボタンの下にデプロイしたコントラクトから取得した値が表示されています。
まとめ
このガイドでは、Remixを用いた簡単なSolidityのコントラクト(プログラム)を作りました。実際にトークンを発行するところまで試すことができました。
よろしければ、ご感想お聞かせください!今後のコンテンツの改善の参考にさせていただきます。
ご意見をお聞かせください!
この記事、または、web3チュートリアル全体について、是非、あなたのご意見をお聞かせください。
アンケートはこちらからご回答いただけます。
無料相談承ります
オンラインでの無料相談を承っています。ご希望の方は、お問い合わせフォームよりご連絡ください。
ITの専門家があなたのご質問にお答えいたします。
コメント