ブロックチェーンをPHPでやっていく
ブロックチェーンの仕組みを勉強するためにPHPで実装(写経)してみた。
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