@ledgerhq/hw-app-algorand
Version:
Ledger Hardware Wallet Algorand Application API
30 lines (23 loc) • 858 B
text/typescript
import nacl from "tweetnacl";
import base32 from "hi-base32";
import sha512 from "js-sha512";
const PUBLIC_KEY_LENGTH = nacl.sign.publicKeyLength;
const ALGORAND_ADDRESS_LENGTH = 58;
const ALGORAND_CHECKSUM_BYTE_LENGTH = 4;
export const encodeAddress = (address: Uint8Array): string => {
const checksum = sha512.sha512_256
.array(address)
.slice(PUBLIC_KEY_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, PUBLIC_KEY_LENGTH);
const addr = base32.encode(concatArrays(address, checksum));
return addr.toString().slice(0, ALGORAND_ADDRESS_LENGTH);
};
function concatArrays(...arrs: ArrayLike<number>[]): Uint8Array {
const size = arrs.reduce((sum, arr) => sum + arr.length, 0);
const c = new Uint8Array(size);
let offset = 0;
for (let i = 0; i < arrs.length; i++) {
c.set(arrs[i], offset);
offset += arrs[i].length;
}
return c;
}