Compact
Dan*_*nry 5
在阅读 pact-u16 描述时,我也有类似的困惑。基于在solana python 模块中解析它们的代码,我相信它们在概念上类似于 UTF-8,并根据其大小将数字存储在 1-3 个字节中。
基本上,它不是每个字节都有 8 位数字,而是有 7 位数字和一个标志(最高有效位),指示数字是否在下一个字节中继续。对于最大的数字,它们需要一个额外的字节,但对于小于 128 的数字,它们只需要一个字节。由于 Solana 似乎使用这些来存储数组的长度,如果数组的长度通常小于 128,那么它们最终将在所有事务中传输更少的总字节数。
我为自己制定的一些例子:
hex | pact-u16--------+------------0x0000 | [0x00]0x0001 | [0x01]0x007f | [0x7f]0x0080 | [0x80 0x01]0x3fff | [0xff 0x7f]0x4000 | [0x80 0x80 0x01]0xc000 | [0x80 0x80 0x03]0xffff | [0xff 0xff 0x03])Compact