#Kaleido
Ethereumベースのブロックチェーンを構築できるAWS上のサービスです。
現在は無料で試せます。
チュートリアル
※AWSのアカウントが必要です
Kaleidoの導入
下記リンクから「Continue to Subscrbe」を行います
https://aws.amazon.com/marketplace/pp/B07CSLDS7R
以降は画面に従って、Kaleidoのアカウント作成などを行ってください。
ブロックチェーンの構築
Create Environment
名前、プロバイダ、コンセンサスを指定します。今回はSample、Quorum、Raftを指定しました。
コンセンサスアルゴリズムについては下記が詳しいです
Raftはブロック生成時間が短く、一般的ネットワークでの平均ブロック生成時間は1秒未満とのことです。
https://kaleido.io/consensus-algorithms-poa-ibft-or-raft/
ノードの作成
App Credentialの作成
ノード作成画面で「Generate additional credential」を選択します
truffleでデプロイまで
truffleのインストール
npm install -g truffle
プロジェクトフォルダの作成
mkdir truffleProject && cd truffleProject
プロジェクトの初期化
npm init
の際のentry pointはtruffle.jsを設定しました
truffle init
npm init
コントラクトの作成
以降はVisual Studio Codeを使って作業しました。
contractフォルダでSimpleStorage.solを作成し、以下のコードを記述します。
pragma solidity ^0.4.23;
contract SimpleStorage {
uint public storedData;
constructor(uint initVal) public {
storedData = initVal;
}
function set(uint x) public {
storedData = x;
}
function get() view public returns (uint retVal) {
return storedData;
}
}
マイグレーションファイルの作成
migrationsフォルダで2_deploy_simplestorage.jsを作成し、以下のコードを記述します。
const SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function (deployer) {
deployer.deploy(SimpleStorage, 123);
};
Web3のインストール
※1.0系ではtruffle.jsでエラーが発生し、動作しませんでした。
npm install web3@0.20.6 --save
ネットワーク設定
truffle.jsを書き換えます。
var Web3 = require('web3');
const endpoint = "";
const user = "";
const pass = "";
module.exports = {
networks: {
sample_node: {
provider: new Web3.providers.HttpProvider(endpoint, 0, user, pass),
network_id: "*", // Match any network id
gasPrice: 0,
gas: 4500000
},
}
};
endpointは作成したノードのDetailsの「RPC ENDPOINT」を入力します。
userとpassは先ほど作成したcredentialの値を入力します。
shの作成
RAFTコンセンサスを実行しているQuorumネットワークはtruffleでのデプロイが遅いので、shellを作って解決します。
プロジェクト直下にtruffle_migrate.shを作成します。
#!/bin/bash
truffle migrate --network sample_node --reset > /dev/null &
sleep 1
set -x
truffle migrate --network sample_node --reset
コントラクトのデプロイ
chmod +x truffle_migrate.sh
./truffle_migrate.sh
コントラクトがデプロイされたか確認
KALEIDO Block Explorerから確認できます
コントラクトを触ってみる
truffle console --network sample_node
保存されている値を確認
SimpleStorage.deployed().then(function(instance){return instance.get()});
> BigNumber { s: 1, e: 2, c: [ 123 ] }
状態変数を更新
SimpleStorage.deployed().then(function(instance){return instance.set(234)});
再度保存されている値を確認
SimpleStorage.deployed().then(function(instance){return instance.get()});
> BigNumber { s: 1, e: 2, c: [ 234 ] }
まとめ
Kaleidoを使って独自のブロックチェーンを作成できました。
Raftは本当に早かったので使ってみようと思いました。
参考
KALEIDO - Docs
http://console-ap.kaleido.io/docs/docs/home/
Connecting with Truffle
http://console-ap.kaleido.io/docs/docs/truffle/