目的:中央集権的な第三者を介在しないP2Pを用いた電子通貨による決済
技術的な課題:二重支払い等の多重支払いを防止 、改竄防止
解決策:ブロックチェーン、Proof of Work(PoW)
二重支払い等を防止するため、
取引単位で順序化すると取引量増えた場合に収拾がつかなくなるため、一定期間内に発生した取引をまとめる
=> それがブロック
そして取引とはトランザクションのこと
ブロックは一定期間(ブロック生成期間)に発生したトランザクションを束ねたもの(なお図のブロック #111の111はブロック高ともいう)
生成された順にブロックをつないで順序化することで多重支払いを検知できる
ブロックを誰もが自由に作成できると改竄などのリスクがある
参加ノードの投票で決める?
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による電子決済の実現のため、ビットコインでは以下の技術的課題を解決した。
二重支払い等の多重支払いの防止
耐改竄性
https://github.com/bitcoin/bitcoin
https://bitcoin.org/ja/download
bitcoin-qt ...... bitcoind の機能に GUI が付加されたもの
bitcoin-cli ...... bitcoind または bitcoin-qt に対して JSON-RPC コマンドを発行 し、結果を出力するためのラッパープログラム
ネットワークはメインネット、テストネット、localプライベート用があります
[参考]
https://ethereum.org/ja/whitepaper/
[参考]
https://ethereum.org/ja/developers/docs/evm/
https://ethereum.github.io/yellowpaper/paper.pdf
https://github.com/chronaeon/beigepaper/blob/master/beigepaper.pdf
・ブロックチェーン上にプログラムを配置(デプロイ)してブロックチェーン上で動作させることが可能
・複雑なプログラムも記述して可能(チューリング完全)
・結果として条件分岐や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
2019年頃の動き
RoadMap
https://ethereum.org/ja/roadmap/
コンセンサスSpec
https://github.com/ethereum/consensus-specs/tree/dev
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/