2

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

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

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

4

1 回答 1

3

base58 <-> base256tl; dr 这是在转换过程中近似输出大小的公式。
即你乘以256和58的编码/解码部分

编码输出为~138%输入大小(+1/向上取整):

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

解码输出为~73%输入大小(+1/向上取整):

n * log(58) / log(256) + 1  
( n * 733 /1000 + 1)
于 2020-01-04T11:29:07.070 回答