0
2

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 1 year has passed since last update.

Web3.0検証(5)-Blockchainの基本

Last updated at Posted at 2022-04-19
[前回] Web3.0検証(4)-分散型アプリをRemixで作ってみる

はじめに

Web3.0分散型アプリ(DApp)を、Truffleフレームワークや統合開発環境Remixを使って簡単に検証できました。
バックエンドはブラックボックスになっており、どのように処理が行われているか気になります。
特に、Web3.0アーキテクチャを理解する上で、避けては通れないブロックチェーン。

image.png

そこで、ローカルにブロックチェーン開発環境を構築し、その内部構造を覗いてみることにします。

ブロックチェーンとは

Wikipediaの情報をベースに、ブロックチェーンの定義と特性を確認します。

  • ブロックチェーンとは、暗号技術を使ってリンクされた、ブロックと呼ばれるレコードの増大するリスト
    image.png
  • 各ブロックには、前のブロックの暗号化ハッシュ、タイムスタンプ、トランザクションデータ(一般的にはマークルツリーで表される)が含まれる
    • マークルツリーとは、データの要約結果を格納するツリー状のデータ構造
  • ブロックチェーンはデータの改変に強い
    • 2つの当事者間の取引を効率的かつ検証可能で恒久的な方法で記録することができるオープンな分散型台帳
    • 分散型台帳として使用する場合、ブロックチェーンは通常、ピアツーピア(P2P)のネットワークによって管理される
    • ノード間通信と新しいブロックの検証のためのプロトコルに準拠
    • 一度記録されたブロックのデータは、後続のすべてのブロックを変更しない限り、遡及的に変更することはできない
    • ブロックチェーンの記録は変更不可能ではないが、ブロックチェーンは設計上安全であると考えられる

ブロックチェーンの開発環境構築

ゴールは、スマートコントラクトのデプロイ用Ethereum環境を構築し、Solidity言語を使用しその機能を検証することです。

Geth(Go Ethereum)を使用し、ローカルにブロックチェーンプライベートネットワークを構築します。

  • Gethは、Ethereumブロックチェーンのクライアントツールで、Go言語で実装されている
    • Gethを使って、メインEthereumブロックチェーンネットワーク、RinkebyやRopstenなど公式テストネットワークに接続可能
    • プライベートネットワークを作成することも可能
    • GitHubからダウンロードできる、コマンドラインツール

検証環境

CPU: Intel(R) Core(TM) 3.30GHz(4コア8スレッド)
メモリ: 16 GB
OS: Ubuntu 20.04 LTS

ちなみに、Ubuntuは、Windows 10で以下のように管理者権限で導入しました。

> wsl --install -d Ubuntu-20.04

Gethのインストール

端末を開きます。

GitHubからGo Ethereumプロジェクトをクローン

$ git clone https://github.com/ethereum/go-ethereum.git

Gethビルドに必要なGO言語をインストール

  • Goインストールパッケージをダウンロード
$ wget https://dl.google.com/go/go1.18.1.linux-amd64.tar.gz
  • sha256sumコマンドを使用し、ダウンロードしたtarボールのSHA256 Checksumを取得
$ sha256sum go1.18.1.linux-amd64.tar.gz
b3b815f47ababac13810fc6021eb73d65478e0b2db4b09d348eefad9581a2334  go1.18.1.linux-amd64.tar.gz
b3b815f47ababac13810fc6021eb73d65478e0b2db4b09d348eefad9581a2334

一致しました。

  • Goパッケージを解凍
$ sudo tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz
  • ~/.profileを編集し、PATH環境変数にGoのbinディレクトリを追加
$ sudo vi ~/.profile
export PATH=$PATH:/usr/local/go/bin
$ . ~/.profile
  • Goのバージョンを確認
$ go version
go version go1.18.1 linux/amd64

Go Ethereumをソースからビルド

  • 作業ディレクトリを、gitプロジェクトのクローンを作成したディレクトリに変更
$ cd go-ethereum
  • Gethをビルド
$ make geth
  • Gethのバージョンを確認
~/go-ethereum$ ./build/bin/geth version
Geth
Version: 1.10.18-unstable
Git Commit: bb5633c5ee3975ce016636066ec790054ec469e4
Git Commit Date: 20220417
Architecture: amd64
Go Version: go1.18.1
Operating System: linux
GOPATH=
GOROOT=go
  • ~/.profileを編集し、GOPATH環境変数を追加、PATH環境変数にGethのbinディレクトリを追加
$ sudo vi ~/.profile
export GOPATH=~/go-ethereum/build
export PATH=$PATH:$GOPATH/bin
$ . ~/.profile
$ which go
/usr/local/go/bin/go

Gethを起動してみる

~/go-ethereum$ geth
INFO [04-20|05:26:45.105] Starting Geth on Ethereum mainnet...
INFO [04-20|05:26:45.105] Bumping default cache on mainnet         provided=1024 updated=4096
INFO [04-20|05:26:45.107] Maximum peer count                       ETH=50 LES=0 total=50
INFO [04-20|05:26:45.107] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
WARN [04-20|05:26:45.108] Sanitizing cache to Go's GC limits       provided=4096 updated=3989
INFO [04-20|05:26:45.108] Set global gas cap                       cap=50,000,000
INFO [04-20|05:26:45.109] Allocated trie memory caches             clean=598.00MiB dirty=997.00MiB
INFO [04-20|05:26:45.109] Allocated cache and file handles         database=/home/zhao/.ethereum/geth/chaindata cache=1.95GiB handles=2048
INFO [04-20|05:26:50.845] Opened ancient database                  database=/home/zhao/.ethereum/geth/chaindata/ancient readonly=false

... ...

INFO [04-20|05:26:50.888] Starting peer-to-peer node               instance=Geth/v1.10.18-unstable-bb5633c5-20220417/linux-amd64/go1.18.1
INFO [04-20|05:26:50.935] New local node record                    seq=1,650,399,325,972 id=dc954b0fe4e7cd51 ip=127.0.0.1 udp=30303 tcp=30303
INFO [04-20|05:26:50.935] Started P2P networking                   self=enode://39f3654f87d5d47198061b1aaed1fd7c2ff3bd3306fc8fadf6485cbb8a3a3853b4c36d30dbcd360700b6da503587368e84547adb6f7b7ac362a8d7acabb53d1d@127.0.0.1:30303
INFO [04-20|05:26:50.936] IPC endpoint opened                      url=/home/zhao/.ethereum/geth.ipc
INFO [04-20|05:26:51.431] Finished upgrading chain index           type=bloombits

P2Pノードが開始できたようです。

Ctrl+Cで、Gethを停止

... ...

INFO [04-20|05:21:42.670] Writing clean trie cache to disk         path=/home/zhao/.ethereum/geth/triecache threads=8
INFO [04-20|05:21:42.675] Persisted the clean trie cache           path=/home/zhao/.ethereum/geth/triecache elapsed=5.130ms
INFO [04-20|05:21:42.675] Blockchain stopped

おわりに

Geth導入まで終わりました。
次回は、Gethを使用し、ブロックチェーンプライベートネットワーク環境を構築します。
何ができるかわくわくしてきました、お楽しみに。

[次回] Web3.0検証(6)-Blockchainのプライベートネットワーク
0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?