Published Date : 2021年10月31日22:03

026 Pythonでビットコインを学ぶ (BASE58の仕組みをPythonと図を使って理解してみよう パート1)
026 Use python to learn bitcoin (Understand how BASE 58 works in using Python and diagrams Part 1)

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

0:13 まずBASE58とその他のBASEシステムについて図を見ながら理解していきましょう。

0:13 First, let's look at the diagram to understand BASE58 and other BASE systems.

0:38 まず数字とアルファベットの大文字と小文字を組み合わせた全62文字をまとめます。

0:38 First, combine all 62 upper and lower case letters of numbers and alphabets.

0:48 それから、その62文字の中から人間が読み間違えやすい4文字を抜きます。

0:48 Then, out of those 62 letters, remove 4 that are easy for humans to misread.

0:48 具体的には数字のゼロ(0)とアルファベット大文字のオー(O)、アルファベット大文字のアイ(I)とアルファベット小文字のエル(l)を除外します。

0:48 Specifically, the digits 0 and the uppercase letter O, the uppercase letter I and the lowercase letter l are excluded.

1:14 4文字を抜いた後のアルファベットと数字の文字列がBASE58で使われる文字列です。その数は丁度58文字になっています。これがBASE58と呼ばれる所以です。

1:14 The string of alphabets and numbers after removing 4 characters is the string used in BASE 58. The number is exactly 58 characters. This is why it is called BASE 58.

1:37 次に10進数の数(base10)をそれぞれbase2、base16、base58に変換すると、どのような違いがあるかを見てみましょう。

1:37 Now let's look at the differences between converting decimal numbers (base10) to base2, base16, and base58 respectively.

1:48 このように、base58で10進数の数を表すと、少ない文字数で数を表現できることが分かると思います。これがbase58を使う利点です。

1:48 If you use base58 to represent numbers in decimal, you will see that you can express numbers with fewer characters. This is the advantage of using base58.

2:00 ではbase58のエンコードの手順を図を見ながら理解しましょう。

2:00 Let's take a look at the diagram to see how to encode base58.

2:11 やり方は簡単で、変換したい数値を58で割って余りを求めます。計算された余りを記録して、残りの商に対して、商がゼロになるまで同じ計算を繰り返します。

2:11 It's easy to do. Divide the number you want to convert by 58 to find the remainder. Then, records the calculated remainder and repeats this calculation for the remaining quotients until the quotient is zero.

2:36 次に、先に記録した剰余の番号を後ろに、一番後ろの番号を先頭に変えます。つまり順番を逆に入れ替えます。

2:36 Next, change the number of the remainder you stored earlier to the back, and the last number to the beginning. In other words, the order is reversed.

2:49 そしたら後は、記録しておいた剰余の番号を使って、Base58の文字をそれぞれ取り出していくだけです。

2:49 Then all you have to do is fetch each of the Base58 characters, using the remainder numbers you stored.

2:50 例えば、16なら、16番目(インデックス番号は0から始まることに注意してください)のHの文字を当てはめます。

2:50 For example, 16 would match the 16th (remember that index numbers start at 0) letter H.

3:05 次にBase58でエンコードした文字列のデコードの手順を図を見ながら理解していきましょう。

3:05 Now let's take a look at the diagram to understand how to decode Base58 encoded strings.

3:08 エンコードした文字列は順番を逆に入れ替えているので、最後の文字から順番にその対応する数値に対して基数となる58の累乗を掛けていきます。

3:08 The encoded strings are reversed, so they are multiplied by a power of 58 which is base number, starting with the corresponding number of the last character.

3:39 そして先ほどデコード作業を行った全ての数値を足し合わせると、エンコードされる前の数値に戻すことができます。

3:39 You can then add up all the numbers you just decoded and return them to the numbers they were before they were encoded.

3:54 ではPythonのスクリプトを書いて、Base58のことをより理解できるようにしましょう。

3:54 Now let's write a Python script to better understand Base58.

3:55 まずは、0から9までの数字10文字とアルファベットの大文字26文字と小文字26文字を組み合わせます。

3:55 First, combine the 10 numeric characters 0 through 9 with 26 uppercase and 26 lowercase letters.

number = "0123456789"
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
alphanumeric = number + alphabet



4:02 Part2へ続く。

4:02 Continued to Part 2.


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