-
Notifications
You must be signed in to change notification settings - Fork 340
/
Header.ts
79 lines (65 loc) · 1.78 KB
/
Header.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright 2017-2018 @polkadot/api-codec authors & contributors
// This software may be modified and distributed under the terms
// of the ISC license. See the LICENSE file for details.
import BN from 'bn.js';
import blake2Asu8a from '@polkadot/util-crypto/blake2/asU8a';
import Bytes from './codec/Bytes';
import UInt from './codec/UInt';
import Struct from './codec/Struct';
import Vector from './codec/Vector';
import BlockNumber from './BlockNumber';
import Hash from './Hash';
type DigestStruct = {
logs?: Array<Uint8Array | string>
};
type HeaderStruct = {
digest?: DigestStruct,
extrinsicsRoot?: Hash | Uint8Array | string,
number?: UInt | BN | number | string,
parentHash?: Hash | Uint8Array | string,
stateRoot?: Hash | Uint8Array | string
};
// A block header digest.
export class Digest extends Struct {
constructor (value: DigestStruct = {}) {
super({
logs: Vector.with(Bytes)
}, value);
}
get logs (): Vector<Bytes> {
return this.raw.logs as Vector<Bytes>;
}
}
// A block header.
export default class Header extends Struct {
constructor (value: HeaderStruct = {}) {
super({
parentHash: Hash,
number: BlockNumber,
stateRoot: Hash,
extrinsicsRoot: Hash,
digest: Digest
}, value);
}
get blockNumber (): BlockNumber {
return this.raw.number as BlockNumber;
}
get digest (): Digest {
return this.raw.digest as Digest;
}
get extrinsicsRoot (): Hash {
return this.raw.extrinsicsRoot as Hash;
}
// convernience, encodes the header and returns the actual hash
get hash (): Hash {
return new Hash(
blake2Asu8a(this.toU8a(), 256)
);
}
get parentHash (): Hash {
return this.raw.parentHash as Hash;
}
get stateRoot (): Hash {
return this.raw.stateRoot as Hash;
}
}