12
11

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 5 years have passed since last update.

Ethereumベースのブロックチェーンを構築できるKaleidoを触ってみた

Last updated at Posted at 2018-05-19

#Kaleido
Ethereumベースのブロックチェーンを構築できるAWS上のサービスです。
現在は無料で試せます。

チュートリアル

※AWSのアカウントが必要です

Kaleidoの導入

下記リンクから「Continue to Subscrbe」を行います
https://aws.amazon.com/marketplace/pp/B07CSLDS7R

以降は画面に従って、Kaleidoのアカウント作成などを行ってください。

ブロックチェーンの構築

Create Environment
名前、プロバイダ、コンセンサスを指定します。今回はSample、Quorum、Raftを指定しました。
create_environment.png

コンセンサスアルゴリズムについては下記が詳しいです
Raftはブロック生成時間が短く、一般的ネットワークでの平均ブロック生成時間は1秒未満とのことです。
https://kaleido.io/consensus-algorithms-poa-ibft-or-raft/

MAINNET ANCHOR
このままFINISHします
mainnet_anchor.png

ノードの作成

ノードの名前を設定します
add_a_node.png

App Credentialの作成

ノード作成画面で「Generate additional credential」を選択します
generate.png

NAMEを設定
generateappcredential.png

ユーザ名とパスワードが発行されるのでメモ
password.png

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を作成し、以下のコードを記述します。

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を作成し、以下のコードを記述します。

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を書き換えます。

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を作成します。

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から確認できます

smart_contradct.png

コントラクトを触ってみる

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/

12
11
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
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?