へい、また来たのか?あの平凡でいたくない一般人。

アルキメデスは、「私に支点さえ与えてくれれば、地球を動かすことができる」と言った。だが、数千年も経って、アルキメデスは地球を動かしたのか?当然、それはできない、太陽系のに彼が曰く支点がないのである。

現実の中に、大半の人はアルキメデスのような知恵とパワーがなく、地球を動かす必要もなく、運命と戦って、人性の奇跡を変えようとしているに過ぎないと思う。ブロックチェーンこそは、あなたが人生を動かす支点になるのか?今からその疑問を解けよう。

- 前言-

 RLP(Recursive Length Prefix)コードアルゴリズムは、エテリアムのデータ序列化/反序列化の主要方法である。エテリアムブロックチェーンの中のブロック、取引などのデータ構造は持久化の時に、RLPコードを経てデータベースに保存されるようになっている。

RLPコードは二種類のデータしか処理しない:

●文字列  e.g.  this is string

●リスト  e.g.  ["cat","horse",[[]],"pig",[""],"sheep"]

 その他のデータタイプのデータは上記二種類に転換する必要がある、転換のルールはRLPコードが決めたわけではなく、自分のルールに基づいて転換できる。例えば、structはリストに転換することが可能で、intは二進法(文字列の一種に属する)に転換することができる、エテリアム中の整数は何れもビッグエンドの形式で保存されている。

- RLPコードのルール 1 -

 単独のバイトに対して、もしそれの値範囲が[0x00,0x7f](ASCIIコード)である場合、それのRLPコードはそれ自身である。

例えば:a à [0x61] (文字)

  100 à [0x64](数字)

- RLPコードのルール2 -

 文字列の長さは0-55バイトの場合、それのRLPコードに単独バイトの接頭辞が含まれ、後ろに文字列の長さが付着して、さらにその後に文字列自身が綱いている。この接頭辞の値はOx80プラス文字列の長さである。コードにされる文字列の最大長さは55=0x37であるため、単独バイトの接頭辞の最大値は0x80+0x37=0xb7であり、つまりコードの最初のバイトの値採取範囲は[0x80,0xb7]である。

文字列の長さが55バイト以下のRLPコードの例:

dog” à [0x83, 'd', 'o', 'g']

そのうち0x83 = 0x80 + 3(「dog」は文字列の長さである)

- RLPコードのルール 3 -

文字列の長さは55バイト以上の場合、それのRLPコードに一つの単独バイトの接頭辞が含まれ、後ろに文字列の長さが付着され、さらにその後に文字列自身が繋いでいる。その接頭辞の値はOxb7プラス文字列長さの二進法形式のバイト長さである。コードにされる文字列の長さはバイナリの長さで、最低1バイト、最大8バイトなので、接頭辞の値採取範囲は[0xb8,0xbf]である。

文字列の長さが55バイト以上のRLPコードの例:

文字列:

"Lorem ipsum dolor sit amet, consectetur adipisicing elit"

文字列の長さ:

56バイト、その二進法の形式は:00111000であり、その二進法形式の長さは8桁、つまり1バイトの長さである。

接頭辞:0xb7 + 1 = 0xb8

文字列長さの16進法の表示:56 à 0x38

該当見時列のRLPコード形式は

[0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't']

https://www.jinse.com/ts.jpg