前回、自分のPC上でTruffleの開発用ブロックチェーンを動かし、そこに用意されたアカウントの確認まで行いました。そこで、今回は簡単なコントラクトを試しに作成し、Truffleの開発用ブロックチェーンにデプロイするところまでやってみたいと思います。Solidityを使ってイーサリアムのコントラクトを作るには、何通りかの方法があります。手軽な方法の一つに、ブラウザで動くSolidityのIDE(統合開発環境)があります。→今回は使用しません。IDEremix.ethereum.orgRemixでは、コーディング、コントラクトのコンパイル、コントラクトのデプロイ(migrate)を全てブラウザ上のGUIで実行することができます。別の方法として、自分の好きなテキストエディタでコーディングし、Truffleを使ってコンパイルし、開発用ブロックチェーンにデプロイ(migrate)することもできます。今回はIDEを使用しない方法を紹介します。目次1バージョン指定2コントラクトの定義3状態変数4数式演算5構造体6配列7関数8状態変数と関数の可視性9イベント10コントラクトのデプロイでは実際にコントラクトを作って行きましょう。この記事ではポ○モンのような対戦ゲームの仕組みを作ります。ゲームの最初には相棒が欲しくなりますよね。相棒を作成するコントラクトを書いて行きましょう。initした時にこのようなディレクトリ構成ができたと思います。この中のcontractsのディレクトリに先ほどのコントラクトコードのファイルを保存します。}}上のコードが最初の相棒を作成するコントラクトです。^0.4.19;これはsolidityのコンパイラのバージョンを指定する記述です。solidityはまだ開発途上なので、将来どんな変更があるかわかりません。solidityのバージョンアップでコントラクトが動かなくなることを防ぐため記述します。{}これが相棒を作るコントラクトの外枠になります。この記述でコントラクトを定義します。ブロックチェーンにはコントラクト単位でアプリをデプロイすることになります。18;相棒のモンスターの特徴は18桁の16進数をdnaとして表すことにしました。最初の3桁が属性、次が頭の形、、みたいな感じです。上のように変数を定義することができます。Machineの中の?)コントラクトストレージの中に永久に保存されます。documentationsolidity.readthedocs.io状態変数の中にデータを入れ、データベースのように使うこともできます。(今回のコードでもそうしています)また、SolidityはJavaScriptに似ていますが、静的型付け言語なので変数の宣言の際に型も宣言しなければいけません。今回は256bitの符号なし整数であるuintを使用しています。dnaModulus;ここでは文字列から作ったハッシュ(rand)をdnaと同じ18桁に整形しています。Solidityでも他のプログラミング言語と同じように数式演算ができます。この場合、dnaDigitsが18なのでdnaModulusは10^18です。randは18桁以上のuintなので、10^18で割った余りの18桁のuintを返しています。dna;}相棒のモンスターの情報を構造体として定義しています。複雑なデータ型を定義するために、Solidityには構造体が用意されています。ここでは名前とDNAを持つMonsterという構造体を定義しています。monsters;ここではmonstersという配列を定義しています。複数のユーザーが作ったモンスターたちをこの配列に格納します。Solidityで配列を宣言する場合はこのように宣言することができます。dynamicArray;また、構造体の配列を作ることもできます。上のコードではMonsterの構造体の配列を作っています。dnaModulus;}ここでは相棒のdnaを名前から生成しています。このように関数を定義することができます。関数の引数を定義するときも型の宣言を忘れないようにしてください。返り値にも型の宣言が必要です。先ほど状態変数の説明をしましたが、関数内で使用する変数は初期状態では状態変数に含まれないため、コントラクトストレージには保存されません。)で始まっているのは、関数の引数やprivate関数などはアンダースコアから始めるという慣例によるものです。8状態変数と関数の可視性これまでのコードにprivateだとかviewだとか書いてあるのに気づいた人もいるかもしれません。これらは変数と関数につけることができます。イベントの呼び出しこの記述でイベントを定義します。イベントとは、コントラクトが実行されたことやその結果などをアプリなどに通知するためのものです。...ここまででSolidityの基礎を説明してきました。一つの記事でたくさん説明しても読みづらくなるだけなので、一番上のコードの全ては説明していませんが、試しにTruffleの開発用チェーンにこのコントラクトをデプロイしてみましょう。deployer.deploy(NoteDapp);}次に、migrate(デプロイ)のためのマイグレーションファイルを記述します。マイグレーションファイルはSolidityではなく、JavaScriptで記述します。ところはデプロイしたいコントラクトの名称を入れてください。マイグレーションファイルの命名規則は、番号から開始し、アンダースコア区切りで作業内容、コントラクト名称の順に入れるのが一般的です。このファイルをmigrationsディレクトリに保存してください。developを実行し、コンソールに入ります。compile最初にcompileコマンドを実行すると、コードが評価され、エラーがなければ無事コントラクトはコンパイルされます。migrate次にmigrateコマンドを実行すると、マイグレーションファイルに問題ない限りマイグレーションが実行され、開発用チェーンにコントラクトがデプロイされます。デプロイされるとこのようにコントラクトアドレスなどが表示されます。CryptomonGenerator.at("0xecfcab0a285d3380e488a39b4bb21e777f8a4eac")こうするとgeneratorという変数を使ってコントラクトにアクセスすることができるようになります。試しに相棒を作ってみましょう。]名前を入れて相棒を作り、相棒が入っている状態変数にアクセスすることができました。BigNumberは大きな数字を安全に扱うためのJavaScriptのライブラリです。値の違いもブロックチェーンにおいては大きな問題となるので、コンソールで使われているweb3.jsはBigNumberを使用しています。この場合、dnaは440574662455189600です。次回はもう少し高度なコントラクトの文法を紹介していこうと思います。書いているのは初心者のため、間違い、浅い理解などあるかもしれません。その場合はぜひ指摘してもらえればと思います。youcryptozombies.io↑ゲーム感覚でスマートコントラクトの書き方が学べます。ブロックチェーンアプリケーション開発の教科書www.amazon.co.jp↑ブロックチェーンで開発する際必要なことはだいたい網羅されていると思います。学部4年生で大学では機械学習と数理最適化、CalanoではアプリやGCPなどを担当。最近ブロックチェーン始めました。学生エンジニア(webtwitter.comダウンロード#初心者#ブロックチェーン#イーサリアム#blockchain#Dapps#Ethereum#環境構築#スマートコントラクト#実装#Solidity#CryptoZombies#DApp#truffle#初めから#ethermonこの記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。サポートをする「スキ」を押してクリエイターを応援しよう!株式会社Calanoスマホアプリ(共働き夫婦向け家事分担)のピボットを経て、ブロックチェーン業界で事業を検討中。