banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.
follow
substack
tg_channel

Solidityの基本的な文法について説明します

1. 変数宣言と一般的なデータ型#

address(アドレス)といった特別な型を除いて、Solidity の変数とデータ型は一般的なプログラミング言語に似ています。具体的な説明は以下の通りです:

image

image

2. 列挙型

Solidity では、一連の定数を定義する必要がある場合、列挙型を定義することで実現できます。列挙型を定義するには enum キーワードを使用します。以下のサンプルコードは、赤、黄、緑の 3 色を持つ色の列挙型を定義しており、これらの色の値はそれぞれ 0、1、2 です。

image

3. 構造体

構造体は struct キーワードを使用して定義されます。以下の例は、Player という名前の構造体を定義しており、この構造体にはアドレス(addr)と数量(amount)の 2 つの属性が含まれています。アドレスは address 型で、数量は整数型です。具体的なコードは以下の通りです。

image

4. 関数

Solidity における関数の定義構文は以下の通りです:

image

ここで、<parameter types>は関数の引数とその型を指します。{internal|external} という 2 つのキーワードは関数の呼び出し方法を規定し、internal は内部呼び出しを指し、上下文環境内のデータを直接使用できます;external はコントラクトの外部メッセージ呼び出しを実現し、デフォルトは internal です。[pure|constant|view|payable] の 4 つのキーワードは関数の属性を示します。pure キーワードは関数型プログラミングに由来し、この関数体が他の関数を呼び出さない純粋な関数計算であることを示します;constant キーワードは定数を定義しますが、Solidity の 0.4.17 バージョン以降は使用されなくなりました;view キーワードはこの関数が読み取り専用で状態を変更できないことを示します;通貨操作を行う必要がある場合は、必ず payable キーワードを付ける必要があります。[returns(<return types>)] は関数の返り値の型を示します。

5. コメント#

Solidity のコメント構文は JavaScript と同様で、単一行コメントには “//” を使用し、複数行コメントには “/*” と “*/” を使用します。

//これは単一行コメントです

/*

これは

複数行コメントです

*/

6. ファイル構造#

Solidity 言語については、上記の基本構文を理解するだけでなく、Solidity のファイル構造も理解する必要があります。Solidity ファイルは一般的に.sol をファイル拡張子として使用します。sol ファイルの最初の行はバージョン宣言であり、異なるバージョンは異なる機能をサポートするため、ファイルにはバージョン番号を指定する必要があります。構文は以下の通りです:

pragma solidity ^0.4.0;

上記の行は、この sol ファイルが 0.4.0 以降のバージョンで実行される必要があることを示しており、”^” 記号は 0.5.0 以降のバージョンをサポートしないことを示します。

以上が Solidity 構文の簡単な紹介であり、詳細な内容は Solidity の公式チュートリアルを参照してください。ここでは詳述しません。

: Solidity 言語の公式チュートリアルのアドレスは http://solidity.readthedocs.io/en/develop/types.html です。

スマートコントラクトの開発#

Solidity の基本構文を理解したら、スマートコントラクトの開発を開始できます。Solidity でスマートコントラクトを開発するには、コンパイラをインストールする必要があります。Solidity 言語を学び始めたばかりの読者には、オンライン IDE エディタである Remix を使用することをお勧めします。ブラウザに http://remix.ethereum.org と入力すれば使用でき、ローカルインストールは不要です。

1. コンパイラ Remix の使用#

Remix の操作インターフェースは主に 4 つの部分に分かれています。左側はファイルブラウジングエリアで、新しいファイルの作成、ローカルファイルのオープン、GitHub へのコードの更新、すべてのオープンファイルのブラウジングなどの操作ができます;中央の上半分はコードを編集する場所で、コードの構文がハイライトされ、自動的に構文チェックが行われます。黄色は警告と提案、赤色は構文エラーです;下半分は取引の詳細を照会し、スマートコントラクトをデバッグするためのインタラクティブなターミナルインターフェースです;右側は機能パネルで、スマートコントラクトのコンパイル、実行、テストを行います。全体のインターフェースは図 5-21 のようになります。

Remix の機能は非常に強力で、本書では詳述しませんが、興味のある読者は Remix の公式サイト https://remix.readthedocs.io/en/latest を訪れて参照してください。次に、Remix コンパイラを使用してスマートコントラクトを開発してみましょう。

Remix を開くと、デフォルトで Solidity 言語で書かれた投票のスマートコントラクトの例が表示されます。コードは多く、ここでは詳細を説明しません。ここで Hello.sol というファイルを新規作成します。左上の “+” ボタンをクリックし、ファイル名を “Hello.sol” と入力し、“OK” ボタンをクリックして保存します。以下のようになります。

image

image

新しく生成されたファイルの最初の行でコンパイラのバージョンを 0.4.0 以降のバージョンとして宣言し、次に “helloBlockchain” という名前のスマートコントラクトを定義します。このコントラクトには、文字列 “Hello Blockchain” を返すだけの renderHello という関数が含まれています。以下のようになります。

image

コードの記述が完了したら、右側の機能パネルでバージョン 0.4.25 + のコンパイラを選択してコンパイルします。以下のように、コンパイルが成功すると “Hello Blockchain” というスマートコントラクトの名前が表示されます。

image

次に “Run” タブをクリックし、実行環境をローカルテスト環境に設定し、“helloBlockchain” スマートコントラクトを選択してから “Deploy” ボタンをクリックしてこのスマートコントラクトをデプロイします。以下の図 5-25 のようになります。

Remix には 3 つの実行モードがあります。以下に説明します。

●JavaScript VM:このモードはブラウザ内でブロックチェーンをシミュレートし、コントラクトはこのシミュレートされたサンドボックス内で実行されます。ページをリフレッシュするとすべてのデータが消去され、持続性はありません。Web3 オブジェクトは注入されません。

●Injected Provider:Web3 オブジェクトが注入されたソースに接続します。Mist ブラウザまたは MetaMask がインストールされたブラウザでは、自動的にこのモードに切り替わります。

●Web3 Provider:リモートノードに接続し、ソースの URL アドレスとポートを入力する必要があります。例えば geth、ganache などのクライアントで Web3 オブジェクトを含みます。

ここでは Injected Provider モードを選択します(図中の Provider は Web3 オブジェクト、すなわち Injected Web3 です)。

helloBlockchain スマートコントラクトのデプロイ

スマートコントラクトのデプロイは、スマートコントラクトを Ethereum に書き込むことです。Ethereum 上での書き込み操作はすべて Ether を消費するため、この操作では Ether が消費されます。ポップアップウィンドウで “Confirm” ボタンをクリックして支払いを確認します。以下のようになります。

image

これでスマートコントラクトがローカルのテスト環境にデプロイされました。スマートコントラクトが成功裏にデプロイされた後、Remix のメインインターフェースの右下隅にデプロイ成功のスマートコントラクトと使用可能な関数 renderHello が表示されます。renderHello をクリックすると、その関数が呼び出され実行され、出力結果は文字列 “Hello Blockchain” となります。以下のようになります。

image

最後に、スマートコントラクトの開発プロセスをまとめます。全体の流れは以下の図のようになります。

スマートコントラクト開発プロセス

1)新しい sol ファイルを作成し、スマートコントラクトの機能を記述します。ここでは “Hello Blockchain” を出力する機能を実現します。

2)コンパイラを使用してコードをコンパイルします。

3)エラーがなければ、コンパイラはコンパイル結果を生成し、バイナリファイルを作成します。

4)コンパイルに成功したスマートコントラクトをブロックチェーンシステムにデプロイします。

5)デプロイが成功すると、スマートコントラクトのアドレスとアプリケーションバイナリインターフェース(Application Binary Interface、ABI)が返され、スマートコントラクトとのインタラクションに使用されます。

6)アドレスと ABI を使用してスマートコントラクトを呼び出します。

Truffle フレームワーク#

Solidity の基本構文とスマートコントラクトの開発プロセスを習得したら、DApp の開発フレームワークである Truffle をさらに学ぶことができます。

Truffle は Ethereum ベースの Solidity 言語向けの開発フレームワークです。Truffle 自体は JavaScript に基づいており、DApp の開発をより簡単にすることを目指しています。以下の機能があります。

●内蔵のスマートコントラクトのコンパイル、リンク、デプロイ、およびバイナリファイルの管理。

●スマートコントラクトの自動化テストをサポート。

●スクリプト化された、拡張可能なデプロイとリリースフレームワーク。

●デプロイされたネットワーク環境の管理機能。

●EthPM または npm が提供するパッケージ管理を使用し、ERC190 標準を使用。

●コントラクトと直接通信するインタラクティブコンソール(コントラクトを書いた後、コマンドラインで検証できます)。

●スマートコントラクトのビルドプロセスはニーズに応じてカスタマイズ可能。

●Truffle 環境内で外部スクリプトを実行することをサポート。

Truffle のインストールと一般的なコマンド#

Truffle はパッケージ管理ツール npm を使用してインストールできます。インストールコマンドは以下の通りです:

$ npm install -g truffle

インストールが完了したら、truffle コマンドを入力すると、その使用方法が表示されます。以下は主要な Truffle コマンドの使い方の紹介です。

1. Truffle プロジェクトの初期化 ——truffle init

Truffle プロジェクトを初期化するには、truffle init と入力するだけで空のプロジェクトを初期化できます。first-DApp という名前の新しいフォルダを作成し、そのフォルダに入ってから truffle init を実行します。以下のようになります。

Truffle は自動的に空のプロジェクトを生成します。新しく生成された Truffle プロジェクトには、いくつかのフォルダと設定ファイルが含まれています。その中で contracts フォルダはスマートコントラクトを保存するために使用され、migrations フォルダはスマートコントラクトのデプロイ機能を実現するために使用され、test フォルダはコントラクトのテストファイルを保存するために使用されます。truffle.js はデフォルトの設定ファイルで、truffle-config.js は Windows 用のデフォルト設定ファイルであり、ファイル名が truffle コマンドと衝突しないようにしています。Truffle プロジェクトの構造は以下のようになります。

Truffle の一般的なコマンド

Truffle プロジェクトの初期化

Truffle プロジェクトの構造

2. コンパイルコマンド ——truffle compile

truffle compile コマンドを実行すると、スマートコントラクトファイルがコンパイルされ、成功すると現在のディレクトリの build フォルダに新しいスマートコントラクトのバイナリファイルが生成されます。以下のようになります。

3. デプロイコマンド ——truffle deploy

スマートコントラクトをデプロイする前に、設定ファイルを変更する必要があります。本章で使用するスマートコントラクト開発テスト環境は Ganache で、そのクライアントがリッスンしているポートはローカルの 7545 ポートです。したがって、truffle.js ファイルを変更してローカルの 7545 ポートに接続する必要があります。以下のようになります。

スマートコントラクトファイルのコンパイル

設定ファイルの更新

変更が完了したら、スマートコントラクトのデプロイを行います。ターミナルに “truffle deploy” と入力すれば完了です。

4. テストコマンド ——truffle test

truffle test コマンドを実行すると、test フォルダ内のすべてのテストケースが実行されます。このコマンドは.js、.es、.es6、.jsx、.sol という拡張子を持つファイルを自動的に認識し、他の拡張子のファイルは無視されます。

5. ターミナルコマンド ——truffle console

truffle console コマンドを実行すると、インタラクティブなターミナルインターフェースが開き、スマートコントラクトの呼び出しやデバッグが簡単に行えます。

6. テンプレートのダウンロードコマンド ——truffle unbox [box-name]

インストールが完了したら、truffle コマンドを入力するとその使用方法が表示されます。以下は主要な Truffle コマンドの使い方の紹介です。

1. Truffle プロジェクトの初期化 ——truffle init

Truffle プロジェクトを初期化するには、truffle init と入力するだけで空のプロジェクトを初期化できます。first-DApp という名前の新しいフォルダを作成し、そのフォルダに入ってから truffle init を実行します。以下のようになります。

Truffle は自動的に空のプロジェクトを生成します。新しく生成された Truffle プロジェクトには、いくつかのフォルダと設定ファイルが含まれています。その中で contracts フォルダはスマートコントラクトを保存するために使用され、migrations フォルダはスマートコントラクトのデプロイ機能を実現するために使用され、test フォルダはコントラクトのテストファイルを保存するために使用されます。truffle.js はデフォルトの設定ファイルで、truffle-config.js は Windows 用のデフォルト設定ファイルであり、ファイル名が truffle コマンドと衝突しないようにしています。Truffle プロジェクトの構造は以下のようになります。

Truffle には非常に便利なコマンドである truffle unbox [box-name] があります。このコマンドはテンプレートをダウンロードするために使用され、box-name は実際にダウンロードするテンプレートの名前です。次のセクションではテンプレートの使用について詳しく説明します。

Truffle テンプレート一覧

この drizzle テンプレートを使用するには、まず Truffle と Ganache 環境をインストールする必要があります。前述の通り、すでにインストールが完了していますので、次に直接 truffle unbox drizzle コマンドを実行してこのテンプレートをダウンロードすればよいです。

これで DApp 開発に必要な基礎知識の紹介が完了し、準備も整いました。次に DApp の実際の開発を開始します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。