Однако следующие факторы, значительно больше, чем 58, кажется. Я не был в состоянии понять это полностью, хотя. Этот вопрос сложнее, чем кажется ...
Я думаю, что я знаю, почему.
Это часть EncodeBase58 Satoshi в () функции:
// ведущие нули, закодированные в base58 нулей
для сопзЬ (неподписанные символ * р = pbegin; р < ПЭНД && * Р == 0; р ++)
СИЛ + = pszBase58 [0];
Таким образом, для каждого нулевого байта в начале, функция кодирования добавляет «1» в начале строки - фактически заставляя строку, чтобы выйти больше.
Используя эту функцию, я сделал моделирования на 20 миллионов случайных адресов и на самом деле даже не раз мы получаем строку короче, чем 32 символов. Статистические результаты, как это:
34 символов: ~ 96,026255%
33 символов: ~ 3,973735%
32 символов: ~ 0,00001%
Но когда мы модифицируем функцию EncodeBase58 разорвать петлю (после ввода первого «1» спереди), то после того, как 20 миллионов раундов мы получаем статистику, как это:
34: символы 95,714475%
33 символов: 4,210685%
32 символов: 0,073435%
31: символы 0,00139%
30 символов: 0,000015%
Итак, другими словами: если вы хотите, чтобы заменить задний '11 ..»с одним„1 ..“- тогда вы получите ожидаемый коэффициент 58, для еще более коротких адресов.
А в нижней строке в том, что функция EncodeBase58 в Satoshi клиента тупо реализована, потому что нет никаких оснований для адреса, чтобы начать с более чем одной «1», и даже если это вы можете просто удалить лишние и адрес все равно будет работать нормально.