Published Date : 2021年8月1日5:11

011 Pythonでビットコインを学ぶ (ブロックチェーン 2)
011 Use python to learn bitcoin (Blockchain 2)


This blog has an English translation


ニコニコ動画にアップした動画のまとめ記事です。

This is a summary blog post about a video I uploaded to NicoNico.

細かい部分は動画を参考にしてください。

Please refer to the video for details.


目次

Table of Contents




① 動画の説明
① Video Description



前回の続きです。

Continued from last time.

それと、前回までの動画のPythonスクリプトでマークルルートという値がでてきました。

Also, in the Python script in the previous video, the value of the merkle root appeared.

これは取引を一組ずつハッシュ化して最終的に一つのハッシュ値にまとめたroot hashと呼ばれるものです。

This is called root hash, which hashes a set of transactions into a single hash value.

取引は一つ一つハッシュ化され、それらの複数の取引記録のハッシュ値を統合させて一つのroot hashを作ります。

Each transaction is hashed one by one, and the hash values of the transaction records are combined to create one root hash.

全ての取引記録を保存していたら、記録媒体が大容量になってしまうので、こうして記録媒体の保存領域を節約します。

If all the transaction records are stored, the storage capacity of the storage medium becomes large, so this method is used to save the storage space of the storage medium.

しかし、全ての取引記録を保存しているノードも必要なので、Full Nodeと呼ばれるノードは全ての取引記録を保存するようにします。

However, you also need a node that stores all transaction records, so the nodes called Full Nodes store all transaction records.

そして、先ほどの取引記録のroot hashやその他の情報を含めたブロックヘッダーだけを保存しているLightweight Nodeと呼ばれるノードに分けることにしました。

We then split it into nodes called lightweight nodes that store only the block headers, including the root hash and other information from the previous transaction records.

では簡易的なマークルルートをPythonで作成してみましょう。

Let's create a simple merkle root in Python.

厳密な作成方法ではありませんが、シンプルな方が理解はしやすいと思います。

It's not a strict creation method, but it's easier to understand if it's simple.

前回までの動画でhashlibのsha256の使い方は分かっていると思うので、適当な取引を文字列にしてそれらを一つずつハッシュ値に直していきましょう。

I think you learned how to use sha256 in hashlib, in my previous videos, so let's turn the rough transactions into strings and hash them one by one.

後は最後にそれらを統合して一つのハッシュ値(つまりルートハッシュ値)を導くだけです。

All that remains is to combine them into one hash value (that is, the root hash value).

from hashlib import sha256

tx1 = "transaction1"

tx2 = "transaction2"

tx3 = "transaction3"

tx4 = "transaction4"

tx1_hash = sha256(tx1.encode('utf-8')).hexdigest()

tx1_hash
'bde4693e55a336ff81ab238ce20cae1dd9c8ba03b9b8f43963f5569bf3cf5229'

tx2_hash = sha256(tx2.encode('utf-8')).hexdigest()

tx2_hash
'4beace8bdcf9b5b74630eaee2e7f501180e46025ca89b05e7e041fbe953d817a'

tx12_hash = sha256((tx1 + tx2).encode('utf-8')).hexdigest()

tx12_hash
'7e57387417d24d2c0d263a8cce9040f967f9eefe4903cd8abeec7e477bf5ec1d'

tx3_hash = sha256(tx3.encode('utf-8')).hexdigest()

tx4_hash = sha256(tx4.encode('utf-8')).hexdigest()

tx3_hash
'293755ab6384e02d9202d483f2f0250100d786e75fdab1b6f3925b2800ece3cb'

tx4_hash
'2435dc0372e12b3f7684fb7093fbe6f6dee79dbff96cc28b1687839ef526e02f'

tx34_hash = sha256((tx3 + tx4).encode('utf-8')).hexdigest()

tx34_hash
'd168c43742cdd808381ffb0124ac18a8d9c34ef696f1fdb62b1a2816c7ea7930'

root_hash = sha256((tx12_hash + tx34_hash).encode('utf-8')).hexdigest()

root_hash
'032b1d31cf77604a999fd0641466c90388a236983dbe57a16d03befeb40e74dc'

[explorer bitcoin]と検索すると、今までに繋がれた全てのブロック(ブロック0番(ジェネシスブロックと呼ばれる)から最新のものまで)と取引記録が閲覧できます。

Search for [explorer bitcoin], then you'll see all transaction records and blocks from the first creating block (Block 0, also called Genesis Block) to the latest.

より詳しい内容や正確な情報は[satoshi nakamonoto]の論文[A Peer-to-Peer Electronic Cash System]を参照してください。

Please refer to the paper [A Peer-to-Peer Electronic Cash System] by [satoshi nakamoto] for more details and accurate information.

1990年代前半に設立されたサイファーパンクと呼ばれる集団のメーリングリストに[satoshi nakamonoto]の論文は投稿されました。

[satoshi nakamoto]'s paper was submitted to a group mailing list called Cipherpunk, which was established in the early 1990s.

ありがたいことに、今でも初期の頃のビットコインのソフトウェアが残されていてソースコードも確認できます。

Thankfully, the original bitcoin software is still stored on the net, and you can also see its source code.

このソフトウェアを使ってビットコインの取引やマイニングを行っていました。

This software was used to trade and mine bitcoins.

Githubには初期の頃の[satoshi nakamonoto]によるソフトウェアのソースコードが残されています。

Github stores the source code of the software written by [satoshi nakamoto] which was made in the early days.

こういったものを参考にすればより詳細で正確な内容が理解できるはずです。

You should be able to understand more detailed and accurate contents by referring to these things.



以上です。お疲れ様です。

That's all. Thank you for your hard work.