2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ローカル環境(Truffle+Ganache)でブロックチェーンアプリ開発入門②【チェーン構築・コントラクトデプロイ】

Last updated at Posted at 2021-03-25

はじめに

今回はローカル環境にプライベートチェーンを構築して、スマートコントラクトをデプロイしていくところまでをやっていきます。

前提条件

  • node10 以上がインストールされている

また、私が環境構築したOSはMacですがWindowsでも大きくは変わらないと思うので、随時読みかえるようお願いします。

Ganache インストール

Ganacheとは、Ethereumの開発環境を簡単に構築してくれるものです。
また以下のような特徴があります。

  • 開発用のチェーンを構築するだけでなく、GUI でブロックやトランザクションを参照して、アプリケーションの動作を確認することができる。
  • トランザクションは即時にマイニングされたり、Gasやマイニングスピードを自由に設定可能なので開発環境に適する。

実際にNodeを立ててマイニングを行っていると時間がかかってしまうため、開発にとても適しています。
それではインストールをしていきます。

まずは以下のサイトにアクセスしてください。
https://www.trufflesuite.com/ganache

アクセスすると以下のような画面が表示されると思います。
image.png

画面に表示されているDOWNLOADボタンを押下して、あとは指示に従っていくだけでインストールできます。
インストール後にアプリを起動して、QUICKSTARTボタンを押下するとチェーンが構築できます。
チェーンが構築できると以下のような画面に遷移します。
image.png

初期設定で自動的に100ETHを所持したアカウントが10個作成されています。
今回はまだ設定をいじらずにアプリを起動したまま、放置しておくだけでOKです。
これだけの作業でブロックチェーンの環境が簡単に構築できてしまいました。

Truffle インストール

 Ethereumのスマートコントラクトを開発するのに様々な言語が提供されていますが、今回は一番オーソドックスなSolidityを使用していきたいと思います。
 なおSolidityについての説明は省略いたしますので、もし分からないことなどあればクリプトゾンビズというSolidityでスマートコントラクトの構築を学習できるサイトがあるので参考にしてみてください。

またTruffleとはSolidityで書かれたスマートコントラクトのコンパイル及びブロックチェーンへのデプロイを行うことができます。

まずは任意のディレクトリに移動して以下のコマンドを実行してください。

$ npm install -g truffle

前回の記事でも紹介した「Metacoin」というスマートコントラクトのテンプレートを作成していきます。
Truffleインストール後、以下のコマンドを実行します。

$ mkdir MetaCoin
$ cd MetaCoin
$ truffle unbox metacoin

完了すると以下のようなファイル構成になっていることが確認できるはずです。

$ tree
.
├── LICENSE
├── contracts
│   ├── ConvertLib.sol
│   ├── MetaCoin.sol
│   └── Migrations.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
│   ├── TestMetaCoin.sol
│   └── metacoin.js
└── truffle-config.js

Contractsディレクトリの中のファイルが今回使用するスマートコントラクトのコードになります。
コードの説明は以下の記事で細かく説明してくださっています。
DApps開発チュートリアル Truffleを利用した「MetaCoin」の実装方法【Truffle v5.0.3】

次にコンパイルをしていきます。

$ truffle compile

コンパイルされると、buildディレクトリが作成されていてその中に各スマートコントラクトファイルがjsonファイルに変換されていると思います。
このファイルがブロックチェーンへのデプロイに使用されます。

次はいよいよブロックチェーンにデプロイをしていきます。
truffle-config.jsを変更して、デプロイする先を変更していきます。
以下の部分のコメントアウトを外すことで、Ganacheの設定と同じになります。

truffle-config.js
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    },
    test: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }

これでブロックチェーンにデプロイする準備が整いました。
以下のコマンドを実行してみてください。

$ truffle migrate

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.



Starting migrations...
======================
> Network name:    'ganache'
> Network id:      5777
> Block gas limit: 6721975 (0x6691b7)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x3534d0395b98c8b80e33c671a103ccbc570f1a0d62f2c477ccbdd9bf9f184cf2
   > Blocks: 0            Seconds: 0
   > contract address:    0x777552514797c715E4023c7e7d9f08a0e6a88032
   > block number:        12
   > block timestamp:     1616770902
   > account:             0x7fBC6E6548B0c57E2873cd845EC98AC30D0A2EFc
   > balance:             99.9710509
   > gas used:            164175 (0x2814f)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0032835 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:           0.0032835 ETH


2_deploy_contracts.js
=====================

   Deploying 'ConvertLib'
   ----------------------
   > transaction hash:    0x5de37aaf95558cec634adc54b79fb30439ee824597834b9ae7e483e4da3bffab
   > Blocks: 0            Seconds: 0
   > contract address:    0xb54ea03DFc905f90F497B02Fa3A14894ECb5219b
   > block number:        14
   > block timestamp:     1616770902
   > account:             0x7fBC6E6548B0c57E2873cd845EC98AC30D0A2EFc
   > balance:             99.96829468
   > gas used:            95470 (0x174ee)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0019094 ETH


   Linking
   -------
   * Contract: MetaCoin <--> Library: ConvertLib (at address: 0xb54ea03DFc905f90F497B02Fa3A14894ECb5219b)

   Deploying 'MetaCoin'
   --------------------
   > transaction hash:    0x8179583b03911077e38e5c1b7627bf99d448c3287e9f7837072b610dabf86b41
   > Blocks: 0            Seconds: 0
   > contract address:    0xea54691d2F13E1527598FAfd8E32F8e1Fcb3487D
   > block number:        15
   > block timestamp:     1616770903
   > account:             0x7fBC6E6548B0c57E2873cd845EC98AC30D0A2EFc
   > balance:             99.96256338
   > gas used:            286565 (0x45f65)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0057313 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:           0.0076407 ETH


Summary
=======
> Total deployments:   3
> Final cost:          0.0109242 ETH

上記のように表示されていれば成功です。
この時Ganache側を見てみると、一番上のアカウントのETHが少し減っていると思いますが、これはデプロイするための手数料としてこのアカウントのETHが支払われたということです。

今回はローカル環境にブロックチェーンを構築し、スマートコントラクトをデプロイするところまで行っていきました。
次回はアプリケーションと連携してコントラクトコードを実行し、トークンを交換できるアプリを作成していきます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?