@dioxide-js/silas
Version:
RPC utility for Silas
26 lines (23 loc) • 903 B
JavaScript
import base32Decode from '../_virtual/index.mjs';
const addressToShard = (address, shardOrder = 2) => {
const addressStr = address.split(':')[0];
if (!addressStr) {
throw new Error('Invalid address format');
}
const unit8Array = new Uint8Array(base32Decode(addressStr, 'Crockford'));
const decoded = String.fromCharCode.apply(null, [...unit8Array]);
if (!decoded || decoded.length != 36)
throw 'invalid address format';
const dwords = new Uint32Array(9);
for (let i = 0; i < 9; i++) {
dwords[i] = 0;
for (let j = 0; j < 4; j++) {
dwords[i] += decoded.charCodeAt(i * 4 + j) << (j * 8);
}
}
const shardDword = dwords[0] ^ dwords[7] ^ dwords[4];
const shardMask = ~(0xffffffff << shardOrder);
return shardDword & shardMask;
};
export { addressToShard };
//# sourceMappingURL=getAddressShardIndex.mjs.map