MCPcopy Create free account
hub / github.com/denoland/std / encodeBase58

Function encodeBase58

encoding/base58.ts:56–104  ·  view source on GitHub ↗
(data: ArrayBuffer | Uint8Array | string)

Source from the content-addressed store, hash-verified

54 * ```
55 */
56export function encodeBase58(data: ArrayBuffer | Uint8Array | string): string {
57 const uint8tData = validateBinaryLike(data);
58
59 let length = 0;
60 let zeroes = 0;
61
62 // Counting leading zeroes
63 let index = 0;
64 while (uint8tData[index] === 0) {
65 zeroes++;
66 index++;
67 }
68
69 const notZeroUint8Data = uint8tData.slice(index);
70
71 const size = Math.round((uint8tData.length * 138) / 100 + 1);
72 const b58Encoding: number[] = [];
73
74 notZeroUint8Data.forEach((byte) => {
75 let i = 0;
76 let carry = byte;
77
78 for (
79 let reverseIterator = size - 1;
80 (carry > 0 || i < length) && reverseIterator !== -1;
81 reverseIterator--, i++
82 ) {
83 carry += (b58Encoding[reverseIterator] ?? 0) * 256;
84 b58Encoding[reverseIterator] = Math.round(carry % 58);
85 carry = Math.floor(carry / 58);
86 }
87
88 length = i;
89 });
90
91 const strResult: string[] = Array.from({
92 length: b58Encoding.length + zeroes,
93 });
94
95 if (zeroes > 0) {
96 strResult.fill("1", 0, zeroes);
97 }
98
99 b58Encoding.forEach((byteValue) =>
100 strResult.push(base58alphabet[byteValue]!)
101 );
102
103 return strResult.join("");
104}
105
106/**
107 * Decodes a base58-encoded string.

Callers 1

base58_test.tsFile · 0.90

Calls 6

validateBinaryLikeFunction · 0.90
forEachMethod · 0.80
floorMethod · 0.80
sliceMethod · 0.45
fromMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected