Protocol
RLP 是否指定整數編碼?
RLP 規範對整數進行了以下說明:
RLP 的唯一目的是對結構進行編碼;編碼特定的原子數據類型(例如字元串、整數、浮點數)留給高階協議;在 Ethereum 中,整數必須以大端二進制形式表示,沒有前導零(因此使整數值零等效於空字節數組)。
當它說“在乙太坊中”時,這實際上是指僅在 ETH 子協議中,還是在“乙太坊”工作主體中,特別是在 RLP 協議中?如果是後者,這一段似乎自相矛盾。一方面,它說 RLP 將編碼留給更高的協議,但另一方面說 RLP 要求大端整數,所有前導零都被跳過。
那麼這個編碼應該在哪裡實現呢?在 RLP 協議中,還是應該有一個不同於“整數”的特定類型“EthereumInteger”?
也許一個更好的問題可能是,這類問題應該向誰最好地解決,在哪裡解決?
RLP僅處理由字節(二進制數據)組成的結構。它不關心這些字節是否代表字元串、整數、大整數、浮點數或其他。這是在您引用的那句話之前的句子中,
RLP(遞歸長度前綴)的目的是編碼任意嵌套的二進制數據數組……
關於你的問題:
…但另一方面說,RLP 要求大端整數,所有前導零都被跳過。
不,它沒有這麼說。它說在乙太坊中整數被表示為大端,沒有前導零字節。
RLP 並非特定於乙太坊(儘管它是為乙太坊 AFAIK 開發的)。重點是,乙太坊是這句話中提到的“高階協議”之一。所以這一切都是有道理的:
- RLP 對任意二進制數據進行編碼,並不關心它在任何更高級別的協議中代表什麼;
- $$ implied “As an example of such a higher order protocol…” $$乙太坊整數必須以不帶前導零的大端二進制形式表示。
誠然,乙太坊部分可以省略,事情可能會更清楚。我認為作者只是想舉例說明這種高階協議的具體性。