-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathstake.ts
93 lines (84 loc) · 2.08 KB
/
stake.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import {
fixCodecSize,
getArrayCodec,
getBytesCodec,
getStructCodec,
getU32Codec,
getU64Codec,
} from '@solana/codecs';
import type { ReadonlyUint8Array } from '@solana/codecs';
const authorizedCodec = getStructCodec([
['staker', fixCodecSize(getBytesCodec(), 32)],
['withdrawer', fixCodecSize(getBytesCodec(), 32)],
]);
const lockupCodec = getStructCodec([
['unixTimestamp', getU64Codec()],
['epoch', getU64Codec()],
['custodian', fixCodecSize(getBytesCodec(), 32)],
]);
const metaCodec = getStructCodec([
['rentExemptReserve', getU64Codec()],
['authorized', authorizedCodec],
['lockup', lockupCodec],
]);
const delegationCodec = getStructCodec([
['voterPubkey', fixCodecSize(getBytesCodec(), 32)],
['stake', getU64Codec()],
['activationEpoch', getU64Codec()],
['deactivationEpoch', getU64Codec()],
['unused', getU64Codec()],
]);
const stakeCodec = getStructCodec([
['delegation', delegationCodec],
['creditsObserved', getU64Codec()],
]);
export const stakeAccountCodec = getStructCodec([
['discriminant', getU32Codec()],
['meta', metaCodec],
['stake', stakeCodec],
]);
const stakeHistoryEntryCodec = getStructCodec([
['epoch', getU64Codec()],
['effective', getU64Codec()],
['activating', getU64Codec()],
['deactivating', getU64Codec()],
]);
export const stakeHistoryCodec = getArrayCodec(stakeHistoryEntryCodec, {
size: getU64Codec(),
});
export interface StakeAccount {
discriminant: number;
meta: Meta;
stake: Stake;
}
export interface Meta {
rentExemptReserve: bigint;
authorized: Authorized;
lockup: Lockup;
}
export interface Authorized {
staker: Uint8Array;
withdrawer: Uint8Array;
}
export interface Lockup {
unixTimestamp: bigint;
epoch: bigint;
custodian: Uint8Array;
}
export interface Stake {
delegation: Delegation;
creditsObserved: bigint;
}
export interface Delegation {
voterPubkey: ReadonlyUint8Array;
stake: bigint;
activationEpoch: bigint;
deactivationEpoch: bigint;
unused: bigint;
}
export interface StakeHistoryEntry {
epoch: bigint;
effective: bigint;
activating: bigint;
deactivating: bigint;
}