ブロックチェーンをPHPでやっていく

ブロックチェーンの仕組みを勉強するためにPHPで実装(写経)してみた。

gist.github.com

exec.php で非同期処理やるためにampを使っている。
ので、動かすにはampのインストールが必要。
どうでもよいけど、ampって"Accelerated Mobile Pages"を想像してしまうな、、amphpって言ったほうがよいのか。
そもそもコード書いててPHPで非同期処理しなくていいと思った。

blockchain.php が本体。
php exec.php で実行すれば動く。

=== START SIMULATE ===
Miner3 add block. BLOCK: f21abf980c6c56377d7cf5b4729ebc09c420a85786e4edede86d07c1478e65ae
Miner3 add block. BLOCK: 27f3b0e39578361e4bd22853fcb0e4fc193121f31a188365263884a2b6caa557
Miner3 add block. BLOCK: d04571c323ec59c5180e37d917846c4d1f2729493354afaeb7f52b8ea7df5f34
Miner3 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner3 new blockchain. SIZE: 4, LATEST_BLOCK: d04571c323ec59c5180e37d917846c4d1f2729493354afaeb7f52b8ea7df5f34
Miner1 add block. BLOCK: a75097b87109a28473776ce8b08e32cd631b9a5701d1dbf927c7406dc59e0c6c
Miner1 add block. BLOCK: ef05961295542a74136b19270ed5ae64c3b755122b626d8ca38ac43def19b976
Miner1 add block. BLOCK: e20ee1b2ba5a65b584a5290bb184cebb22150772d55db304fd8c1af8f818c150
Miner1 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner1 new blockchain. SIZE: 7, LATEST_BLOCK: e20ee1b2ba5a65b584a5290bb184cebb22150772d55db304fd8c1af8f818c150
Miner2 add block. BLOCK: fa624208be35a727a6230d8f390fd25c31d78fbd079ffbdc5a81b3cc715df00c
Miner2 add block. BLOCK: 67eefa2171825da2112518ed1cb8db86a1e67dc7dbfd6cdf7410b55410e0007d
Miner2 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner2 new blockchain. SIZE: 9, LATEST_BLOCK: 67eefa2171825da2112518ed1cb8db86a1e67dc7dbfd6cdf7410b55410e0007d
Miner3 add block. BLOCK: 5ab9d24da4ab3f1109678733f4e9912c112cc8b2585dadebb557287228c4e880
Miner3 add block. BLOCK: a0657d7db99716c713b6a3ca6095d79990a03225e4b760c31aafea2e41209ef3
Miner3 add block. BLOCK: a8a625e41d478e33cfd47ff9e4f967535d7069c0633597818efe5d18779c7605
Miner3 add block. BLOCK: 6a17e28df917e40ccfbea3ae1d8ae6abda2e958b83a95de9982e9c9e122750bf
Miner3 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner3 new blockchain. SIZE: 13, LATEST_BLOCK: 6a17e28df917e40ccfbea3ae1d8ae6abda2e958b83a95de9982e9c9e122750bf
Miner1 add block. BLOCK: eddd9bba8821a2092b2ebb7be816c5070f7e55bb4d623c72748ce13372230dd9
Miner1 add block. BLOCK: 3d329b88409085acfa9999b40c8d608eeb3819b06009d97cd4cdfd713d711cac
Miner1 add block. BLOCK: 676e868fc430d9304345a5c68e7bfb1c5faa722d93be7a6248c025b374ba5680
Miner1 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner1 new blockchain. SIZE: 16, LATEST_BLOCK: 676e868fc430d9304345a5c68e7bfb1c5faa722d93be7a6248c025b374ba5680
Miner3 add block. BLOCK: 121b078c0b324860d916f4c10d6dc96ebc4885035ea6fbd75f78de5a3d9f8c41
Miner3 add block. BLOCK: 8317660dfd4e74e22e894ef131937004a58b59d2dd9f871a4c9a655f67137180
Miner3 add block. BLOCK: 054db460f22d9026794e30c96d9a7584af65732a7205596fa9110f61f3dba54d
Miner3 broadcast.
Received blockchain is valid. Replacing current blockchain with received blockchain
Miner3 new blockchain. SIZE: 19, LATEST_BLOCK: 054db460f22d9026794e30c96d9a7584af65732a7205596fa9110f61f3dba54d

PHPのコードとしてはうわぁ、、という気しかしない。
でもブロックチェーンについてはだいぶわかってきた。
仕組み自体はとてもシンプルだった。ブロックチェーン
もちろん、この実装だけじゃ不十分なので、また余裕があるときに手を動かしてみる。

※以下の記事を参考にしました。感謝。。
200行のコードへのブロックチェーンの実装 | プログラミング | POSTD
自分でコードを書きながらブロックチェーンを勉強した - mizchi's blog