/
namehash.ts
33 lines (31 loc) · 918 Bytes
/
namehash.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var sha3 = require('js-sha3').keccak_256;
import { nodeHash } from '../types';
export default function(
domain: string,
{ parent, prefix }: { parent?: string; prefix?: boolean } = { prefix: true },
): nodeHash {
parent =
parent ||
'0000000000000000000000000000000000000000000000000000000000000000';
// domain = normalize(domain);
const assembledHash = [parent]
.concat(
domain
.split('.')
.reverse()
.filter(label => label),
)
.reduce((parent, label) => childhash(parent, label, { prefix: false }));
return prefix ? '0x' + assembledHash : assembledHash;
}
export function childhash(
parent: nodeHash,
label: string,
options: { prefix: boolean } = { prefix: true },
): nodeHash {
parent = parent.replace(/^0x/, '');
const childHash = sha3(label);
return (
(options.prefix ? '0x' : '') + sha3(Buffer.from(parent + childHash, 'hex'))
);
}