Hyperledger Explorerって便利そうなツールがあったので、Amazon Managed Blockchainで構築したブロックチェーンネットワークが参照できないか試してみました。
ハマりポイントが多数ありましたので、よければご参考ください。
可視化ツール Hyperledger Explorer で Hyperledger Fabric ブロックチェーンを見てみよう(v1.2.1対応版) – Qiita
https://qiita.com/hi5san/items/c28b71205534d93be46c
hyperledger/blockchain-explorer
https://github.com/hyperledger/blockchain-explorer
前提
下記記事を参考にAmazon Managed Blockchainでブロックチェーンネットワークを構築している前提です。
Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた – Qiita
https://cloudpack.media/46963
利用手順
PostgreSQLをEC2インスタンスにインストールする
下記を参考にFabric CLIを動かしているEC2インスタンスにPostgreSQL9.6をインストールします。
Install PostgreSQL on AWS EC2(Amazon Linux AMI 2013.03.1) | DevelopersIO
https://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/
PostgreSQLはAmazon Linux2のyum install
でインストールすると9.2
が入ってしまうので、amazon-linux-extras
で9.6
がインストールされるようにします。
EC2インスタンス
# パッケージのインストール $ sudo amazon-linux-extras install postgresql9.6 $ sudo yum install -y postgresql postgresql-server # データベース初期化 $ sudo /sbin/service postgresql initdb Hint: the preferred way to do this is now "/usr/bin/postgresql-setup --initdb --unit postgresql" * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log # サービス起動 $ sudo /bin/systemctl start postgresql.service $ sudo /bin/systemctl enable postgresql.service Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service. # 起動確認 $ sudo systemctl | grep postgresql postgresql.service loaded active running PostgreSQL database server # postgresのパスワード変更 $ sudo passwd postgres # 設定ファイルの変更 # 参考) https://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/ $ su - postgres $ vi /var/lib/pgsql/data/postgresql.conf # 下記のコメントを外してlocalhostから*に変更する listen_addresses = '*' # 下記のコメントを外す port = 5432 $ vi /var/lib/pgsql/data/pg_hba.conf # ファイル内設定をすべて無効にして下記を末尾に追加する local all all trust host all all 0.0.0.0/0 md5 $ exit # サービスの再起動 $ sudo /bin/systemctl stop postgresql.service $ sudo /bin/systemctl start postgresql.service
jqのインストール
EC2インスタンス
$ sudo yum install -y jq インストール: jq.x86_64 0:1.5-1.amzn2.0.2 依存性関連をインストールしました: oniguruma.x86_64 0:5.9.6-1.amzn2 完了しました! $ jq --version jq-1.5
Hyperledger Explorerのインストール
Hyperledger ExplorerはAmazon Managed Blockchainで構築したブロックチェーンネットワークを参照するのにTLS接続する必要があったので、最新版を利用します。(1敗
データベース作成時にpostgres
ユーザーにスイッチするのでec2-user
のホームで作業するとパスの関連で面倒だったので、/tmp
内で作業しています。
EC2インスタンス
# /tmpにインストールする $ cd /tmp # 必要な証明書をコピー $ cp -r ~/admin-msp/ /tmp/admin-msp/ $ cp ~/managedblockchain-tls-chain.pem /tmp # Hyperledger Explorerのソース取得 $ git clone https://github.com/hyperledger/blockchain-explorer.git Cloning into 'blockchain-explorer'... remote: Enumerating objects: 86, done. remote: Counting objects: 100% (86/86), done. remote: Compressing objects: 100% (73/73), done. remote: Total 8440 (delta 32), reused 67 (delta 13), pack-reused 8354 Receiving objects: 100% (8440/8440), 140.66 MiB | 24.29 MiB/s, done. Resolving deltas: 100% (4465/4465), done.
Amazon Managed Blockchainで構築したブロックチェーンネットワークのURLがやたらと長いため、Hyperledger Explorerで利用するテーブル定義だと、Hyperledger Explorer起動時にエラーとなります。なのでテーブル定義を変更してからデータベースを作成する必要がありました。(1敗
EC2インスタンス
$ cd /tmp/blockchain-explorer/app/persistence/fabric/postgreSQL/db # Amazon Managed Blockchain用に定義を変更 $ sed -i -e "s/varchar(64)/varchar(256)/g" explorerpg.sql # データベース作成 $ sudo -u postgres ./createdb.sh # 作成確認 sudo -u postgres psql -l |grep fab fabricexplorer | hppoc | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
必要なパッケージのインストールとテスト
EC2インスタンス
$ cd /tmp/blockchain-explorer/ $ npm install node-pre-gyp WARN Using request for node-pre-gyp https download [grpc] Success: "/tmp/blockchain-explorer/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64-glibc/grpc_node.node" is installed via remote > husky@0.14.3 install /tmp/blockchain-explorer/node_modules/husky > node ./bin/install.js husky setting up Git hooks done added 1078 packages from 1391 contributors and audited 4922 packages in 41.327s found 10 vulnerabilities (5 moderate, 5 high) run `npm audit fix` to fix them, or `npm audit` for details # テスト実行 $ cd app/test/ $ npm install $ npm run test 19 passing (125ms) 1..0 # tests 0 # pass 0 # ok $ cd /tmp/blockchain-explorer/client $ npm install Have some ♡ for Sinon? You can support the project via Open Collective: > https://opencollective.com/sinon/donate npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) added 1992 packages from 1349 contributors and audited 37118 packages in 49.653s found 94 vulnerabilities (63 low, 12 moderate, 19 high) run `npm audit fix` to fix them, or `npm audit` for details $ npm test -- -u --coverage Test Suites: 37 passed, 37 total Tests: 206 passed, 206 total Snapshots: 0 total Time: 29.067s Ran all test suites. Watch Usage: Press w to show more.
テストにパスしたらホスト側からブラウザでアクセスできるようにセキュリティグループのルールを追加します。
> curl ifconfig.io [自分のグローバルID] > aws ec2 authorize-security-group-ingress \ --group-id sg-xxxxxxxxxxxxxxxxx \ --protocol tcp \ --port 8080 \ --cidr [自分のグローバルID]/32
Hyperledger Explorerのビルド
Hyperledger Explorerのビルドを行うのにEC2インスタンスのインスタンスタイプを変更する必要がありました。ここではt2.xlarge
に変更してからビルドしています。
AWS:awscliでインスタンスタイプの変更をコマンドラインのみで行うメモ。 – ログってなんぼ
https://okisanjp.hatenablog.jp/entry/archives/287
> aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx > aws ec2 describe-instance-status --instance-ids i-xxxxxxxxxxxxxxxxx > aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxx \ --attribute instanceType --value t2.xlarge > aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx
インスタンスタイプが変更できたらインスタンスのグローバルIPを確認してSSHで接続し直します。
> aws ec2 describe-instances \ --instance-ids i-xxxxxxxxxxxxxxxxx \ --query "Reservations[0].Instances[0].PublicIpAddress" "xxx.xxx.xxx.xxx" > ssh -i ec2-key.pem ec2-user@xxx.xxx.xxx.xxx
Hyperledger Explorerのビルドを行います。
EC2インスタンス
$ cd /tmp/blockchain-explorer/client $ npm run build > hyperledger-explorer-client@0.3.8 build /tmp/blockchain-explorer/client > react-scripts build Browserslist: caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist` Creating an optimized production build... > hyperledger-explorer-client@0.3.8 build /tmp/blockchain-explorer/client > react-scripts build Browserslist: caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist` Creating an optimized production build... Compiled successfully. File sizes after gzip: 398.29 KB build/static/js/1.f9aa9b7f.chunk.js 37.31 KB build/static/css/1.62fc721c.chunk.css 26.75 KB build/static/js/main.8f865573.chunk.js 1007 B build/static/css/main.b58249f8.chunk.css 763 B build/static/js/runtime~main.229c360f.js The project was built assuming it is hosted at the server root. You can control this with the homepage field in your package.json. For example, add this to build it for GitHub Pages: "homepage" : "http://myname.github.io/myapp", The build folder is ready to be deployed. You may serve it with a static server: npm install -g serve serve -s build Find out more about deployment here: http://bit.ly/CRA-deploy
ビルドができたらEC2インスタンスのインスタンスタイプを戻しておくのもありです。
> aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx > aws ec2 describe-instance-status --instance-ids i-xxxxxxxxxxxxxxxxx > aws ec2 modify-instance-attribute \ --instance-id i-xxxxxxxxxxxxxxxxx \ --attribute instanceType --value t2.micro > aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx > aws ec2 describe-instance-status --instance-ids i-xxxxxxxxxxxxxxxxx \ --query "InstanceStatuses[0].InstanceStatus.Status" > aws ec2 describe-instances \ --instance-ids i-xxxxxxxxxxxxxxxxx \ --query "Reservations[0].Instances[0].PublicIpAddress" "xxx.xxx.xxx.xxx" > ssh -i ec2-key.pem ec2-user@xxx.xxx.xxx.xxx
Hyperledger Explorerの設定変更
Amazon Managed Blockchainのブロックチェーンネットワークにアクセスできるように設定を追加します。
EC2インスタンス
$ vi /tmp/blockchain-explorer/app/platform/fabric/connection-profile/managed-blockchain.json
managed-blockchain.json
{ "name": "TestNetwork", "version": "1.0.0", "license": "Apache-2.0", "client": { "tlsEnable": true, "adminUser": "AdminUser", "adminPassword": "Password123", "enableAuthentication": true, "organization": "orderer-m-XXXXXXXXXXXXXXXXXXXXXXXXXX", "connection": { "timeout": { "peer": { "endorser": "300" }, "orderer": "300" } } }, "channels": { "mychannel": { "orderers": [ "orderer" ], "peers": { "peernode": {} } } }, "organizations": { "m-XXXXXXXXXXXXXXXXXXXXXXXXXX": { "mspid": "m-XXXXXXXXXXXXXXXXXXXXXXXXXX", "peers": ["peernode"], "certificateAuthorities": [ "ca-m-XXXXXXXXXXXXXXXXXXXXXXXXXX" ], "adminPrivateKey": { "path": "/tmp/admin-msp/keystore/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_sk" }, "signedCert": { "path": "/tmp/admin-msp/signcerts/cert.pem" } } }, "peers": { "peernode": { "url": "grpcs://nd-xxxxxxxxxxxxxxxxxxxxxxxxxx.m-xxxxxxxxxxxxxxxxxxxxxxxxxx.n-xxxxxxxxxxxxxxxxxxxxxxxxxx.managedblockchain.us-east-1.amazonaws.com:30001", "grpcOptions": { "ssl-target-name-override": null }, "tlsCACerts": { "path": "/tmp/managedblockchain-tls-chain.pem" } } }, "certificateAuthorities": { "ca-m-XXXXXXXXXXXXXXXXXXXXXXXXXX": { "url": "https://ca.m-xxxxxxxxxxxxxxxxxxxxxxxxxx.n-xxxxxxxxxxxxxxxxxxxxxxxxxx.managedblockchain.us-east-1.amazonaws.com:30002", "httpOptions": { "verify": true }, "tlsCACerts": { "path": "/tmp/managedblockchain-tls-chain.pem" }, "caName": "ca-m-XXXXXXXXXXXXXXXXXXXXXXXXXX" } }, "orderers": { "orderer": { "url": "grpcs://orderer.n-xxxxxxxxxxxxxxxxxxxxxxxxxx.managedblockchain.us-east-1.amazonaws.com:30001", "grpcOptions": { "ssl-target-name-override": null }, "tlsCACerts": { "path": "/tmp/managedblockchain-tls-chain.pem" } } } }
追加した設定が読み込まれるようにします。
EC2インスタンス
$ vi /tmp/blockchain-explorer/app/platform/fabric/config.json
app/platform/fabric/config.json
{ "network-configs": { "TestNetwork": { "name": "TestNetwork", "profile": "./connection-profile/managed-blockchain.json" } }, "license": "Apache-2.0" }
Hyperledger Explorerの起動
設定ができたらHyperledger Explorerを起動します。
起動するとlogs
にログ出力されます。
EC2インスタンス
$ cd /tmp/blockchain-explorer/ $ ./start.sh $ car logs/app/app.log $ cat logs/console/console-2019-06-08.log
起動してホストのブラウザから http://EC2インスタンスのグローバルIP:8080/ にアクセスしてログイン画面が表示されたら、managed-blockchain.json
で指定しているadminUser
とadminPassword
でログインします。
ログインできたらダッシュボードが表示されます。
やったぜ。
ブロックチェーンネットワーク内のブロックやトランザクションなどが可視化されてブロックチェーンが可動していることが確認できるようになります。どんな情報が可視化されるのかは下記が参考になります。
Hyperledger Explorer(v0.3.7版)で確認できる情報 – Qiita
https://qiita.com/fhoshi/items/6da01b7aa6f9b0c6b059
参考
可視化ツール Hyperledger Explorer で Hyperledger Fabric ブロックチェーンを見てみよう(v1.2.1対応版) – Qiita
https://qiita.com/hi5san/items/c28b71205534d93be46c
hyperledger/blockchain-explorer
https://github.com/hyperledger/blockchain-explorer
Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた – Qiita
https://cloudpack.media/46963
Install PostgreSQL on AWS EC2(Amazon Linux AMI 2013.03.1) | DevelopersIO
https://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/
AWS:awscliでインスタンスタイプの変更をコマンドラインのみで行うメモ。 – ログってなんぼ
https://okisanjp.hatenablog.jp/entry/archives/287
Hyperledger Explorer(v0.3.7版)で確認できる情報 – Qiita
https://qiita.com/fhoshi/items/6da01b7aa6f9b0c6b059
元記事はこちら
「Hyperledger ExplorerでAmazon Managed Blockchainのブロックチェーンネットワークを可視化してみた」