LoginSignup
4
1

More than 3 years have passed since last update.

Gitでブロックチェーンのようなことをする

Posted at

ブロックチェーンはGitと何が違うの?ということでブロックチェーンのようにGitで Proof-of-Work する。

暗号通貨の送金などのトランザクションがgit addであり、ブロックチェーンのブロックがgit commitである、として考える。
そうするとブロックチェーンはgitの履歴であり、トランザクションの確定はgit commitを Proof-of-X することで信頼性(?)が担保される。

簡易的な Proof-of-Work を hooks/post-commit に書くことにする。
コミットのハッシュが特定の条件を満たさない場合はコミットのやり直しという感じ。

$ git commit --allow-empty -m foo
c501d4fd3d6522ac34f0977c87d2942b1438fb1c -
f28f9c80a4431fe9f2bd2cc806e1b0880ac58619 -
99513727ca14d70b336a1aaccd11e8c17a65e3c9 -

...

ad6e20750dc378eac2a15f73623fb49a0cf45973 -
00a824e2b63a0260e1bec773780d44b323b87b43 -
  ---  
done 0s.
  ---  
done 7s.
[master 3eaaac4] foo

なんか最後の出力がミスってるけど、とりあえずこれで。

$ git log --oneline
0058b75 add readme
0054dde add empty readme
00842e6 update command
009b8bc add post-commit file
0008b42 initial commit

コミットハッシュの先頭を00に揃えることができた。

ランダムな文字列をコミットコメントに追加して PoW している。
コミットコメントやAuthor、Committerを自分の公開鍵のハッシュのみの固定文字にして変更不可にすれば、1秒ごとにマイニングするPoSになる、と思う。コミット時刻が変わるとハッシュが変わるので。

ブロックチェーンはトランザクションがブロードキャストされるので、これを更にブロックチェーンに近付けるならgit addをブロードキャストするようにしなければいけない。
あとはコミットを検証してコミットハッシュが00で始まらない場合や間違った計算のコミットはrecievepullも拒否しなければならない。

さて、上記ブロードキャストや検証の仕組みを作っても、今のままでは特に意味は無い。
単に面白いハッシュが作れるという以外の意味を見出すには、コミットに成功したらコインが増えるというような仕組みがないとどうしようもないよね。
普通のGitでいいじゃん、となる。

逆に言うと、自分のローカルのリポジトリが見ず知らずの他人によってブロードキャストされたデータで勝手に更新されるような環境だと、PoXが必要なのかもしれない。
ただし、そのデータの価値がコミットのPoXの価値と関連していなければ、やはり普通のGitでいいよね、となる。

ブロックチェーンをコイン以外の何かに使うことを考えるというのは、この0008b42ハッシュが何かに使えるかと探すようなことかもしれない。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1