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

时间:2018-01-19 02:05:30

标签: bitcoin base58

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

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

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

1 个答案:

答案 0 :(得分:0)

tl;博士 这是在base58 <-> base256转换期间近似输出大小的公式。
即您要分别乘以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)