SolidityとEthereumによる実践スマートコントラクト開発

―Truffle Suiteを用いた開発の基礎からデプロイまで

[cover photo]
TOPICS
Database
発行年月日
PRINT LENGTH
272
ISBN
978-4-87311-934-2
原書
Hands-On Smart Contract Development with Solidity and Ethereum
FORMAT
Print PDF EPUB
Ebook
3,740円
Ebookを購入する
Print
3,740円

本書は、ブロックチェーン開発をこれから始めるエンジニア向けに、スマートコントラクト開発をわかりやすく解説します。EVM(イーサリアム仮想マシン)上で実行可能なSolidity言語と、人気の高いフレームワークTruffle Suiteを使って、独自のスマートコントラクトの作成から、テスト、フロントエンドの作成までを順を追って丁寧に説明していきます。実際に、資金調達のアプリケーションを構築していく過程をたどりながら、スマートコントラクトをデプロイしてユーザーがアプリケーションとやり取りできるようにするまでのプロセスを習得することができ、本書をひと通り学べば、独自のブロックチェーンアプリケーションを、このフレームワークに基づいて開発できるようになるでしょう。Web3、スマートコントラクトのセキュリティについても解説。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷までの修正

2024年3月更新

■P.34「3.1.1 Parityのインストール」

Parityは注釈4に示したとおりOpenEthereumコミュニティーへ管理が移管され、ドメイン 「get.parity.io」についてはすでにサポートが行われていないため、注釈6にある手順で「OpenEthereum」を用いるようにしてください。

■P.70 15行目のコマンド
【誤】$ npm install openzeppelin-solidity
【正】$ npm install openzeppelin-solidity@3.2.0

■P.179「9.2.2 Greeterコントラクトのインポート」の5行目
【誤】$ cp <greeter ディレクトリへのパス>/contracts/greeter.sol cotracts/
【正】$ cp <greeter ディレクトリへのパス>/contracts/Greeter.sol contracts/

■P.192 2行目のコマンド
【誤】$ npm install --save react-router-dom
【正】$ npm install --save react-router-dom@5.3.0

■P.201 1行目のコマンド
【誤】
const web3 = await getWeb3();
【正】
const provider = await detectEthereumProvider();
const web3 = new Web3(provider);

■P.201 リスト10-19
【誤】
import getWeb3 from "./getWeb3";
import FundraiserFactoryContract from "./contracts/FundraiserFactory.json";
【正】
import FundraiserFactoryContract from "./contracts/FundraiserFactory.json";
import Web3 from 'web3';
import detectEthereumProvider from '@metamask/detect-provider';

第2刷までの修正

2024年3月更新

■P.34「3.1.1 Parityのインストール」

Parityは注釈4に示したとおりOpenEthereumコミュニティーへ管理が移管され、ドメイン 「get.parity.io」についてはすでにサポートが行われていないため、注釈6にある手順で「OpenEthereum」を用いるようにしてください。

目次

はじめに

第I部 イーサリアムブロックチェーンの紹介

1章 ブロックチェーンの概念
    1.1 ブロックチェーンの略史
    1.2 ブロックチェーンの特徴
        1.2.1 非中央集権ネットワーク
        1.2.2 コンセンサスプロトコル
        1.2.3 トランザクションの処理
        1.2.4 トランザクションのファイナリティ
        1.2.5 ハードフォーク
    1.3 イーサリアムの基礎
        1.3.1 イーサとガス
        1.3.2 アカウント
        1.3.3 コントラクト
        1.3.4 ブロックとトランザクション
        1.3.5 今何時?
        1.3.6 トランザクションの署名
    1.4 まとめ

2章 非中央集権アプリケーション
    2.1 トークン
        2.1.1 ERC-20
        2.1.2 ERC-721:ノンファンジブルトークン
    2.2 サプライチェーン
    2.3 永続的な記録
    2.4 アプリケーションに対するブロックチェーンの適性評価
        2.4.1 検証可能
        2.4.2 透明性
        2.4.3 回復力
    2.5 まとめ

3章 スマートコントラクトを開発するための準備
    3.1 イーサリアムクライアント
        3.1.1 Parity のインストール
    3.2 MetaMask のインストール
    3.3 Node.js のインストール
        3.3.1 Ubuntu でのインストール(Windows WSL Ubuntu を含む)
        3.3.2 macOS でのインストール
    3.4 Truffle Suite のインストール
        3.4.1 Truffle
        3.4.2 Ganache
    3.5 まとめ

第II部 スマートコントラクトの開発

4章 初めてのスマートコントラクト
    4.1 セットアップ
    4.2 最初のテスト
    4.3 Hello World!
    4.4 コントラクトを動的にする
    4.5 Greeter を Ownable にする
    4.6 まとめ

5章 コントラクトのデプロイと操作
    5.1 コントラクトのコンパイルとデプロイ
        5.1.1 デプロイプロセス
    5.2 UI のセットアップ
    5.3 Ganache へのデプロイ
    5.4 Parity を使った Goerli へのデプロイ
    5.5 Infura を使った Rinkeby へのデプロイ
    5.6 まとめ

6章 資金調達アプリケーション
    6.1 アプリケーションの概要
    6.2 プロジェクトの作成
    6.3 資金調達の初期化
        6.3.1 受取人と管理人の設定
    6.4 受取人の編集
    6.5 寄付
        6.5.1 構造体
        6.5.2 マッピング
        6.5.3 寄付のテスト
        6.5.4 myDonations
        6.5.5 資金調達の集計
        6.5.6 イベント
    6.6 資金の引き出し
    6.7 フォールバック関数
    6.8 まとめ

7章 FundraiserFactory
    7.1 FundraiserFactory のマイグレーション
    7.2 Fundraiser インスタンスを作成する
    7.3 利用可能な Fundraiser インスタンスを表示する
        7.3.1 空のコレクションでページングをテストする
        7.3.2 上限をテストする
        7.3.3 オフセットをテストする
    7.4 UI のセットアップ
    7.5 まとめ

第III部 Web3 を使ったスマートコントラクトの操作

8章 Web3 とは何か
    8.1 フロントエンド、Web3、ブロックチェーン
    8.2 Web3 のメソッド
        8.2.1 getAccounts()
        8.2.2 getBlockNumber()
        8.2.3 getBalance()
        8.2.4 sendTransaction()
        8.2.5 プロバイダ
        8.2.6 Web3 と Promise
        8.2.7 Web3 インジェクションのための MetaMask
        8.2.8 send(状態の更新/書き込み)
        8.2.9 call(読み取り)
    8.3 まとめ

9章 UI をコントラクトに接続する
    9.1 React を選んだのはなぜか
        9.1.1 開発環境のセットアップ
    9.2 Truffle
        9.2.1 React Truffle Box のセットアップ
        9.2.2 Greeter コントラクトのインポート
        9.2.3 Greeter コントラクトの機能を追加する
        9.2.4 React を使ってあいさつ文を設定する
    9.3 まとめ

10章 さらに大規模な DApp
    10.1 React Truffle Box から始める
        10.1.1 Fundraiser のセットアップ
        10.1.2 React のルーティング
    10.2 React と Material-UI
        10.2.1 New Fundraiser ページビューを作成する
        10.2.2 現在の Fundraiser を一覧表示する
    10.3 まとめ

11章 Fundraiser UI を完成させる
    11.1 各 Fundraiser の詳細情報を追加する
        11.1.1 Material-UI のダイアログを実装する
    11.2 React を使って寄付をする
        11.2.1 寄付をテストする
    11.3 ETH の現在のレートを表示する
    11.4 寄付の領収書を発行する
    11.5 コントラクトからの資金の引き出し
        11.5.1 コントラクトの受取人を編集する
    11.6 まとめ

第IV部 スマートコントラクトの保護

12章 スマートコントラクトのセキュリティ
    12.1 セキュリティに配慮する必要があるのはなぜか
    12.2 スマートコントラクトの脆弱性の種類
        12.2.1 保護されていない関数
        12.2.2 Transaction Ordering Dependence
        12.2.3 整数のオーバーフローとアンダーフロー
        12.2.4 リエントランシー
        12.2.5 ブロックのガスリミット
        12.2.6 Timestamp Dependence
        12.2.7 その他さまざまな攻撃
    12.3 コントラクトの外部監査の準備
        12.3.1 外部監査
        12.3.2 監査会社
        12.3.3 Solidified
    12.4 監査に利用できる無償のリソース
    12.5 監査のスキルを養う
    12.6 まとめ

監修者あとがき
索引