TL-B 是 TON 區塊鏈中的一種編碼格式,代表 "Type-Length-Based"。

TL-B 編碼是一種二進制編碼格式,用於將不同類型的數據序列化為二進制格式,以便在 TON 區塊鏈中傳輸和儲存。TL-B 編碼格式使用類型和長度來描述數據,具有編碼簡潔、解碼效率高等優點,被廣泛應用於 TON 區塊鏈的協議中。

Unary

Unary 通常用於定義動態大小的結構,例如 hml_short

Unary 有兩個變體:

unary_zero$0 = Unary ~0;
unary_succ$1 {n:#} x:(Unary ~n) = Unary ~(n + 1);

對於 unary_zero,非常簡單:如果第一位是 0,那麼所尋找的數字就是 0。

unary_succ 則更有趣,它是遞歸加載,其值為~(n + 1)。這意味著它會不斷調用自身,直到遇到 unary_zero 為止。換句話說,所尋找的值將等於連續出現的 1 的數量。

舉個例子,讓我們解析 1110

調用鏈應該是這樣的: unary_succ$1 -> unary_succ$1 -> unary_succ$1 -> unary_zero$0

一旦我們到達 unary_zero,返回值就會像在函數的遞歸調用中一樣向上返回。 現在,為了理解結果,我們來看看返回值的路徑,也就是從最後開始:

0 -> ~(0 + 1) -> ~(1 + 1) -> ~(2 + 1) -> 3

Either

left$0 {X:Type} {Y:Type} value:X = Either X Y;
right$1 {X:Type} {Y:Type} value:Y = Either X Y;

當兩個類型都可能出現時,如果前綴的位是 0,則序列化左側的類型,如果是 1,則序列化右側的類型。

例如,在序列化消息時,當 body 可以是主要單元的一部分或是一個引用時,就可以使用此方法。

Maybe

nothing$0 {X:Type} = Maybe X;
just$1 {X:Type} value:X = Maybe X;

用於可選值,如果第一個位元為 0,則該值不會被序列化(跳過),如果為 1,則會被序列化。

Both