ブロックチェーン集中講座
第1回
ブロックチェーンの目的と背景は様々
- 暗号通貨
- 暗号資産
-
DApps
- DeFi
- Dex
- NFTマーケットプレース
- Dappsゲーム
- etc...
- RWA(Real World Assets)
- STO(証券/債券)
- SC(法定通貨)
暗号通貨(ビットコイン)


目的:中央集権的な第三者を介在しないP2Pを用いた電子通貨による決済
技術的な課題:二重支払い等の多重支払いを防止 、改竄防止
解決策:ブロックチェーン、Proof of Work(PoW)
順序化と検証
二重支払い等を防止するため、
- 取引に順序をつける
- 過去の取引と整合性が取れない場合は拒否する
- 取引の検証が可能である
取引単位で順序化すると取引量増えた場合に収拾がつかなくなるため、一定期間内に発生した取引をまとめる
=> それがブロック
そして取引とはトランザクションのこと
ブロックは一定期間(ブロック生成期間)に発生したトランザクションを束ねたもの(なお図のブロック #111の111はブロック高ともいう)
生成された順にブロックをつないで順序化することで多重支払いを検知できる

ブロックチェーン
Proof of Work(Pow)
ブロックを誰もが自由に作成できると改竄などのリスクがある
参加ノードの投票で決める?
IPアドレス毎に1票だと大量保有者が出た時点で瓦解する- CPU1個につき1票
2.を考える場合(代替的に)
a. 大量の計算コストを要する問題を用意する。難易度調整付き
b. 最初に問題を解決した参加者がブロック生成権を獲得
なおa.については、問題を作るのは簡単、解くのは難しく、結果の検証は簡単であることが求められる
ハッシュキャッシュ問題
> Proof-of-Work の役割としては、数値が SHA-256 等によりハッシュ化さ れた際、最初の n ビットが全て 0 で始まる値を発見する事が挙げられる。= ハッシュキャッシュ問題
「ブロックヘッダーをハッシュ化すると最初のNビットが全て0で始まる値」を導出するため、ハッシュ値調整用のデータ(nonce)を調整して条件を満たすnonceを発見できたらブロックが生成される。

ブロックヘッダーのハッシュ値
> ブロックヘッダーのハッシュ値をブロックを識別する番号として用います。この番号は、単なる一連番号ではなく、ブロックヘッダーのハッシュであるので、ブロックヘッダーが改変されていないことも保証する機能を持っています。
詳細:https://github.com/bitcoinbook/bitcoinbook/blob/develop/BOOK.md (マスタリング ビットコイン 3rd)

https://chainflyer.bitflyer.com
ブロックチェーンの分岐
いつどの参加ノードがブロックを生成するのかわからないため、異なるノード同時にブロックを生成するとブロックチェーンは分岐する。どのブランチを正とするかは、最も長いブロックチェーンのブランチを採用

暗号通貨(ビットコイン)
非中央集権的なP2Pによる電子決済の実現のため、ビットコインでは以下の技術的課題を解決した。
二重支払い等の多重支払いの防止
- ブロックチェーンによりトランザクションの順序化を行い、過去のトランザクションと矛盾するリクエストを拒否することで防止
耐改竄性
- PoWによりブロック生成に大量の計算量が必要なため、参加ノードの過半数を超える場合でもない限り改竄ができない
Bitcoin Core
https://github.com/bitcoin/bitcoin
https://bitcoin.org/ja/download
- bitcoind ...... ビットコインのフルノード機能が備わったもの。JSON-RPC 経由で 様々なコマンドを受け付ることで入出金やアドレス生成などが行える
-
bitcoin-qt ...... bitcoind の機能に GUI が付加されたもの
-
bitcoin-cli ...... bitcoind または bitcoin-qt に対して JSON-RPC コマンドを発行 し、結果を出力するためのラッパープログラム
ネットワークはメインネット、テストネット、localプライベート用があります
イーサリアム
[参考]
https://ethereum.org/ja/whitepaper/



EVM



[参考]
https://ethereum.org/ja/developers/docs/evm/
https://ethereum.github.io/yellowpaper/paper.pdf
https://github.com/chronaeon/beigepaper/blob/master/beigepaper.pdf
Programable
・ブロックチェーン上にプログラムを配置(デプロイ)してブロックチェーン上で動作させることが可能
・複雑なプログラムも記述して可能(チューリング完全)


チューリング完全性により、
・結果として条件分岐やloopなども含めてアルゴリズムとして表現して処理が可能
同時にプログラムを実行せずにそのプログラムが終了するのか、またどのくらいの時間実行されるかは予測できない(停止性問題)
よって意図的かどうかによらずプログラムが終了しない場合、結果として無制限にリソースを消費し続ける(ある種のDoS攻撃)
スマートコントラクトで使用されるリソースを抑制するのはどうすればよいか?
利用ケース
汎用的(通貨としての機能は一つのユースケース)
(例)
dex,dapps
oracle(chainlink, provable...)
未来予測市場(augur...)
分散デジタルID(uPort...)
その他色々







手始めに公式サイトは情報の宝庫
[参考]
https://ethereum.org/ja/
https://ethereum.org/ja/learn/

public(L1)
private
consortium
Fabric/Besu/・・・








L2





[参考]
https://www.alchemy.com/top/blockchains
...etc

2019年頃の動き

RoadMap
https://ethereum.org/ja/roadmap/
コンセンサスSpec
https://github.com/ethereum/consensus-specs/tree/dev


イーサの単位名

MetaMask

faucet
https://docs.metamask.io/developer-tools/faucet/

faucet
https://www.alchemy.com/faucets/ethereum-sepolia
https://faucets.chain.link/
・・・他にも色々あり


テストネット(Sepolia Testnet Explorer)
https://sepolia.etherscan.io/
faucetから受領したテストネットのEthを確認する

remix
https://remix.ethereum.org/

Solidity
https://soliditylang.org
https://docs.soliditylang.org/ja/latest/
Vyper
https://docs.vyperlang.org/en/latest


alchemy[university]
https://university.alchemy.com/

Copy of smart contract
By Akira Tamai
Copy of smart contract
- 37