用于保存 base58 编码数据的缓冲区大小

Size of buffer to hold base58 encoded data

当试图了解 base58check 的工作原理时,在比特币 referenced implementation 中,在计算保存 base58 编码字符串所需的大小时,它使用了以下公式:

// https://github.com/bitcoin/libbase58/blob/master/base58.c#L155
size = (binsz - zcount) * 138 / 100 + 1;

其中 binsz 是要编码的输入缓冲区的大小,zcount 是缓冲区中前导零的数量。 138 和 100 是什么来的,为什么?

tl;博士 这是在 base58 <-> base256 转换期间估算输出大小的公式。
即 encoding/decoding 乘以 256 和 58

的部分 mod

编码输出是输入大小的 ~138%(+1/四舍五入):

n * log(256) / log(58) + 1  
(n * 138 / 100 + 1)

解码输出是输入大小的 ~73%(+1/四舍五入):

n * log(58) / log(256) + 1  
( n * 733 /1000 + 1)