オープンソースのブロックチェーンを試す(3) - Ethereum(イーサリアム)用プログラム作成

前回記事にてEthereumを使う準備が整いました。

Ethereum環境については、本番環境ではなくプライベート・ネットワーク(テスト用)を使います。

またネットワークに接続するコンピュータの数を0に設定し、自分一人がローカルで動作するモードとします。

プログラムの準備

スマート・コントラクトは、契約の自動化を目的としたものではありますが、プログラムの実行環境でもあります。

今回はデータを保存処理を組み込んでいきます。

データを保存するプログラムは以下の通りです。

プログラムはSolidityというEthereumの独自言語です。

[ソース savedata.sol]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pragma solidity ^0.8.4;

contract SingleNumRegister {

uint storedData;

function set(uint x) public{
storedData = x;
}

function get() public view returns (uint retVal) {
return storedData;
}

}

Solidityコンパイラの準備

ソースをビルドするためには、solcコマンドが必要なのでインストールします。

[コマンド]

1
2
sudo apt-get install solc
solc --version

[結果]
solcバージョン確認結果

プログラムのビルド

solcコンパイラが準備できたので、準備したプログラム(savedata.sol)を下記コマンドでビルドします。

[コマンド]

1
solc -o savedata --abi --bin savedata.sol

正常にビルドできると次のような2ファイルが生成されます。

  • savedata/SingleNumRegister.abi

    SingleNumRegister.abi
  • savedata/SingleNumRegister.bin

    SingleNumRegister.bin

次回は、Ethereum環境の起動を行います。

オープンソースのブロックチェーンを試す(2) - Ethereum(イーサリアム)の環境構築

オフィシャル・リリースであるgo-ethereumを使って、Ethereumの環境を構築します。

ソースからビルドする方法もありますが、今回はパッケージを使用してインストールします。

パッケージを利用してインストール

WSLコンソールでgo-ethereumをインストールしていきます。

まずはリポジトリ追加のコマンドとethereumリポジトリの追加を行います。

[コマンド]

1
2
3
4
sudo apt-get install apt-file
sudo apt-file update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum

Ethereum gethコマンドのインストール

Ethereum gethコマンドをインストールします。

[コマンド]

1
2
3
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ethereum

gethコマンドのバージョン確認

go-ethereumがインストールできていることを確認するために、gethコマンドのバージョンを確認します。

[コマンド]

1
geth version

[結果]

次回は、Ethereum環境の起動を行います。

オープンソースのブロックチェーンを試す(1) - Ethereum(イーサリアム)

ブロックチェーンは、さまざまな実装が行われ暗号通貨サービス以外への応用も進められてきました。

その多くがオープンソースとして公開されています。

Ethereum(イーサリアム)

ビットコインについでシェアが大きい暗号通貨はEthereum(イーサリアム)です。

Ethereumは暗号通貨としてだけではなく、スマートコントラクトと呼ばれる、契約条件の確認や実行の自動化を実現するための基盤となっています。

分散環境で処理を実行するためのプラットフォームという側面もあります。

Ethereum(イーサリアム)

実サービスで利用可能

Ethereumは、実サービスでも利用でき、開発環境も用意されています。

これからオープンソースのブロックチェーン基盤を使ったアプリ作成を行っていきます。

オープンソース

次回はまず、ステップ1としてEthereum環境の構築をしていきます。

Kindle出版 - WSLでLaTexファイルをepubファイルに変換

通常本を出版する場合、印税が5%~10%程度ですが、Amazonの電子書籍で出版すると70%のロイヤリティが得られるということです。
(地域によってロイヤリティが変わるようですが、日本は70%みたいです)

つまり売り上げの7割を収入として得られることになり、通常本の出版に比べて7倍から14倍の収益率となります。

そこで本の内容はともかく、Kindleの電子書籍を出版する方法(手順)を調べてみました。
(全部無料で使えるものです。)

電子書籍作成フロー

いろいろ調べたところ、次のように電子書籍を作成することにしました。

  1. LaTexファイルで本を作成
  2. pandocでLaTexファイルをepubファイルに変換
  3. Kindle Previewer 3で表示確認
  4. Amazon Kindle Direct Publishingで出版

1. LaTexファイルで本を作成

LaTexを使って本を作成します。

LaTexは最強の文書整形システムと言われており、綺麗な文章を書きたい人、綺麗な数式を書きたい人、化学式を綺麗に書きたい人に好まれて使用されています。

Wordを使うよりも、はるかに作業しやすくとにかく綺麗な文章が書けるのでおススメなのですが、慣れない人にはその良さは伝わりにくいかと思います。

Sigilというフリーツールを使って、epubファイルを作るという方法もありました。
 こちらの方法が一般的かもしれません。)

まずWSLのコンソールを開いて、下記コマンドを実行しLaTex環境をインストールします。

[コマンド]

1
2
3
sudo apt install language-pack-ja manpages-ja manpages-ja-dev nkf
sudo apt install build-essential x11-apps emacs emacs-mozc fcitx-mozc
sudo apt install gtypist typespeed texlive-lang-japanese evince

次にsample.texというLaTexファイルを作成します。

[sample.tex]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{article}
\title{テスト}
\author{名前}
\date{\today}

\begin{document}

$ x = a $ から \( x = b \) までの関数 $f(x)$ の積分は
\begin{math}
\int^{b}_{a} f(x) dx = \lim_{n \to \infty} \sum^{n-1}_{i=0} f(x_{i}) \Delta x
\end{math}
と置き換えて考えることができる.

\end{document}

sample.texをコンパイルして、pdfファイルを出力します。

[コマンド]

1
2
platex sample.tex
dvipdf sample.dvi

次のようなpdfファイルが出力されます。

[出力されたpdf]
sample.pdf

やはりLaTexは数式がきれいに表示されて気持ちがいいです。

2. pandocでLaTexファイルをepubファイルに変換

pandocというツールを使うと、いろいろな文書形式のファイルを相互に変換することができます。

今回はLaTexファイルをepubファイルに変換します。

まずは次のコマンドを実行しpandocをインストールします。

[コマンド]

1
sudo apt install pandoc

pandocコマンドを使ってtexファイルをepubファイルに変換します。

[コマンド]

1
LANG=ja_JP.UTF-8;pandoc sample.tex -o sample.epub

※次項目でのepubファイルを開く際に、言語に関するメタデータがないというエラーがでたため、変換前に言語設定(LANG=ja_JP.UTF-8)を行っています。

3. Kindle Previewerで表示確認

下記サイトからKindle Previewerをダウンロードし、インストールを行います。

Kindle Previewer

作成したepubファイルを開いて表示を確認します。

Kindle Previewerでの表示

pdfとは少し表示が異なっていますが、Kindle Previewerでの表示が出版した時の正しい表示となると思います。

というとで、今回の手順で本を作成する方法を簡単にまとめます。

  1. texファイルを編集
  2. platexコマンドでtexファイルに問題がないことを確認
  3. pandocコマンドでtexファイルをepubファイルに変換
  4. Kindle Previewerでepubファイルの表示を確認

本を編纂するために上記作業を繰り返すことになると思います・・・・結構手間ですね。

4. Amazon Kindle Direct Publishingで出版

本が完成したら、Amazon Kindle Direct Publishingにepubファイルを登録し出版することになります。

出版手順は下記サイトが分かりやすいのでご参照ください。

Amazon Kindleで電子書籍を出版する方法【2021年版】

総評

書籍出版というものは、著名人や頭のいい人たちがするもので自分には関係ないものかと思っていましたが、電子書籍で在庫を抱えずノーリスクで出版できるとなると一気に敷居が下がったように感じます。
しかも印税が7割と通常の書籍出版より断然収益率が高いというメリットもあります。

今回はLaTexで本の内容を書いて、epubに変換して出版するという王道とは外れた方法かと思いますが、LaTex大好きな人達にとっては有益な記事になったのではないかと思います。
(少数派とは思いますが・・・)

ブロックチェーン - マイニング(2)

ビットコインでは、マイニングはPoW(Proof of Work)によって行われます。

これは新規ブロックを生成し、そのブロックに正しい取引データが記録されているかどうかを承認するものです。

ビットコインのPoWは強いものが勝つ

PoWはより多くの仕事がなされたブロックチェーンが有効になります。

総当たり的にハッシュ値を求めるので、計算範囲が広く、コンピュータの処理能力と大きなメモリ、そして大きな電力が必要となります。

ビットコインは簡単にマイニングできないように設計されているので、ラズベリー・パイなどの小型コンピュータではマイニングすることが不可能です。

非力なコンピュータでも可能なのでPoS

PoWの改善策として、非力なコンピュータでもマイニングできるように考え出されたのがPoS(Proof of Stake)です。

PoSでは新規ブロックの生成はマイニングまたはフォージングと呼ばれ、暗号通貨の保有量と保有期間の掛け算でしめされるcoin ageが大きいほど、ハッシュ計算の範囲が狭くなり、有利になります。

ブロックチェーン - マイニング(1)

マイニングの流れ

未承認ブロック新規ブロックとなる流れは次のようになります。

  1. 未承認の取引データから未承認のブロックをマイニングによって作成する。
  2. 作成した未承認ブロックを他のブロックチェーン・ネットワークの参加者へ送信する。
  3. 参加者から承認を得る。
  4. マイナーはマイニング報酬を受け取る。
  5. 承認された取引データの取引が実行される。

ノンス値を見つける競争

マイニングはブロック・ヘッダのノンス値(ランダムな値)を変えながらハッシュ関数によって次ブロック・ヘッダのハッシュ値を求めます。

ノンス値は一意に決まるランダムな値と限らないため、複数のノンス値が正解になる可能性もあります。

マイニングは正解のノンス値を見つける競争なので早くマイニングできることに越したことはありません。

正解のノンス値を確率的に見つけるので遅いノードでもマイニングに成功するチャンスはあります。

また正解のノンス値は1つとは限らないので、運よく早く見つけられる場合もあります。

ブロックチェーンへの参加者 - コア開発者

ブロックチェーンの利用者はさまざまです。

  • 一般企業
  • 金融企業
  • 中央銀行
  • 政府機関
  • 国際機関
  • 個人
  • ユーザ・グループ
  • NPO団体

国境を越えて様々な利用があり得ます。

独自ブロックチェーンの作成

ビットコインを参考にしていろいろな暗号通貨やブロックチェーン・プラットフォームが開発されてきました。

ブロックチェーンの基本的なアイデアがあるため、改良版や拡張版を作成するのはとても簡単です。

GitHubには暗号通貨やブロックチェーンのソースコードが公開されており、それを参考に独自のブロックチェーンを設計することが比較的容易になっています。

暗号通貨の場合

ブロックチェーンの設計者がコア開発者になります。

ブロックチェーンのアイデアは昔からありましたが、さまざまな問題があったのでうまく行きませんでした。

しかしビットコインの登場によってやっと暗号通貨として利用するのに現実的なものとなりました。

ビットコインの仕組みや機能を設計して開発するグループがあります。

https://bitcoin.org/ja/community

特定の運営組織があるわけではなく、世界中にあるコミュニティによるコンセンサスに基づきビットコインの新しい仕組みや機能が開発されています。

維持と発展

ブロックチェーンの問題やセキュリティの脆弱性を発見して解決するためにはデータ構造設計やセキュリティ対策設計などができるアーキテクト、それを実現するプログラマが必要です。

ブロックチェーンは一度作っただけでは終わりではなく、将来発見される問題を解決しなければなりません。

ブロックチェーンへの参加者 - データの取引所

ブロックチェーンの利用者はさまざまです。

  • 一般企業
  • 金融企業
  • 中央銀行
  • 政府機関
  • 国際機関
  • 個人
  • ユーザ・グループ
  • NPO団体

国境を越えて様々な利用があり得ます。

センサーの場合

センサ・データを取引しようとする場合、取引相手を見つけることは簡単ではありません。

データ取引市場はデータ・マーケット・プレイスの1つの形でしたが、不特定多数の人による取引ではなくビジネスとしてデータを売買して利益を得るための市場で、特定の分野に特化していることが普通でした。

一方、データ市場はマーケット・プレイスの1つですが新しいビジネスの創出を目的とした利用が多くなるはずです。

異なる分野のデータ提供者と利用者の間でデータ利用方法を自由に提案したり、異なるデータを組み合わせて新しい価値を創出したりするのに適しています。

開かれたデータ市場では暗号通貨取引のように取引所を通じて異なる分野や業種間の交流が活発になり、ラズベリーパイやPCなどの小型で汎用的なコンピュータの出番が飛躍的に増すことになるでしょう。

暗号通貨の場合

企業間取引のように相手が決まっている場合、送金先が特定できます。

暗号通貨取引では送金相手やデータ提供者間では、あらかじめ相手を知らないと取引できません。

個人でも送金相手が決まっていれば取引可能ですが、一般的に取引に応じてくれる相手を見つけることが難しくなります。

異なる暗号通貨間の取引、通貨と暗号通貨の取引は、自分が行いたい取引条件に合う相手を見つけなければなりません。

暗号通貨の取引所が多くない時代は、暗号通貨のミートアップなどを通じて取引相手を探すことが一般的でした。

現在では、暗号通貨取引所を利用するれば暗号通貨取引がスマホやPCでいつでも可能で、今後取引所はどんどん増えていく可能性があります。(例.DMM bitcoin、GMOコインなど)

ブロックチェーンへの参加者 - マイナー編

ブロックチェーンの利用者はさまざまです。

  • 一般企業
  • 金融企業
  • 中央銀行
  • 政府機関
  • 国際機関
  • 個人
  • ユーザ・グループ
  • NPO団体

国境を越えて様々な利用があり得ます。

センサーの場合

自作のブロックチェーンやブロックチェーン・プラットフォームでは、ラズベリーパイがマイナー・ノードとして利用できます。

GPUなどを搭載していなくても、IoT端末でマイニングが可能になります。

暗号通貨の場合

取引は何かしらの方法で管理しなければ不正が横行して信頼できる取引が不可能になります。

マイナーは取引を検証してブロックに記録する重要な役割を果たしています。

マイニングによって生成された不正なトランザクションや暗号通貨の2重使用などを防ぐ役割を果たしています。

ブロックチェーン - 中央集権型と分散型の違い

従来の中央集権型

従来の中央集権型データベースは、ポイントシステム(Tポイント、楽天ポイントなど)や電子マネー(Suica、Pasmoなど)に利用されています。

中央集権型データベースは、サーバ障害や通信障害によってサービスが停止してしまうと、クライアントから操作できなくなってしまいます。

そのため、障害が発生しても復旧まで短期間で対応できるように事前に障害対策が施されていることが一般的です。

分散型(ブロックチェーン)

ブロックチェーンのデータはP2Pネットワーク、分散型タイム・スタンプ・サーバによって自律的に管理されます。

中央集権型データベースのように管理者がいないことも大きな特徴です。

ブロックチェーンにはサーバが存在しないため、サーバ障害がなく、通信障害が発生したとしても一部のノード(マイナーのコンピュータ)にしか影響することがなく、全体としては動作することが可能です。

常に全体として機能するよう設計されています。

ハードウェア障害、トラフィック量の急増、サイバー攻撃などで通信できなくなることがあっても、ブロックチェーンでは中央管理のデータベースよりも障害に対する高い耐性があるのです。