RLP(Recursive Length Prefix):
遞回長度前綴編碼,是一種用長度作為前綴標明編碼物件中元素個數的編碼方法,
它是以太坊序列化所采用的編碼方式,RLP主要用于以太坊中資料的網路傳輸和持久化存盤,
JSON編碼
type Student struct{
Name string `json:"name"`
Sex string `json:"sex"`
}
s := Student{Name:"icattlecoder",Sex:"male"}
bs,_ := json.Marsal(&s)
print(string(bs))
// {"name":"icattlecoder","sex":"male"}
變數s序列化的結果是{"name":"icattlecoder","sex":"male"},字串長度35,實際有效資料是icattlecoder 和male,共計16個位元組,我們可以看到JSON的序列化時引入了太多的冗余資訊
RLP編碼
type Student struct{
Name string
Sex string
}
s := Student{Name:"icattlecoder",Sex:"male"}
buff := bytes.Buffer{}
rpl.Encode(&buff, &s)
print(buff.Bytes())
// [210 140 105 99 97 116 116 108 101 99 111 100 101 114 132 109 97 108 101]
如下圖所示,RLP編碼的開頭即是此編碼中的物件個數(Object num),
在個數后,是相應個數的物件(Object),
遞回地,每個物件,也是RLP編碼,其格式也與下圖相同,
需要特別注意的是,在RLP編碼中,每個Object的位元組大小是不固定的,Object num只表示Object的個數,不表示Object的位元組長度,

RLP通過一種長度前綴與遞回結合的方式,理論上可編碼任意個數的物件,
下圖是一個區塊的RLP編碼,在對區塊進行編碼時,先遞回至最底層,對多個sealer進行編碼,多個sealer被編碼并加上長度前綴后,編碼成為一串RLP編碼(sealerList),此編碼又作為一個物件,被編入上層的一串RLP編碼(blockHeader)中,此后層層遞回,最后編碼成為區塊的RLP編碼,
由于RLP編碼是遞回的,在編碼前,無法獲知編碼后的長度,

RLP編碼定義與規則
https://segmentfault.com/a/1190000011763339
CSDN認證博客專家
學堂在線講師
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/252733.html
標籤:區塊鏈
上一篇:基金定投--1.基金的基礎知識
