Skip to content

Commit 6cbe362

Browse files
committed
Repair the StakeHistory sysvar fetcher
1 parent d8a27fa commit 6cbe362

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

.changeset/public-terms-prove.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@solana/sysvars': patch
3+
---
4+
5+
The `SysvarStakeHistory` encoder/decoder no longer produces malformed data

packages/sysvars/src/stake-history.ts

+29-10
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,25 @@ import {
55
getArrayEncoder,
66
getStructDecoder,
77
getStructEncoder,
8+
getU64Decoder,
9+
getU64Encoder,
810
type VariableSizeCodec,
911
type VariableSizeDecoder,
1012
type VariableSizeEncoder,
1113
} from '@solana/codecs';
1214
import type { GetAccountInfoApi } from '@solana/rpc-api';
1315
import type { Rpc } from '@solana/rpc-spec';
14-
import { getDefaultLamportsDecoder, getDefaultLamportsEncoder, type Lamports } from '@solana/rpc-types';
16+
import { Epoch, getDefaultLamportsDecoder, getDefaultLamportsEncoder, type Lamports } from '@solana/rpc-types';
1517

1618
import { fetchEncodedSysvarAccount, SYSVAR_STAKE_HISTORY_ADDRESS } from './sysvar';
1719

1820
type Entry = Readonly<{
19-
activating: Lamports;
20-
deactivating: Lamports;
21-
effective: Lamports;
21+
epoch: Epoch;
22+
stakeHistory: Readonly<{
23+
activating: Lamports;
24+
deactivating: Lamports;
25+
effective: Lamports;
26+
}>;
2227
}>;
2328

2429
/**
@@ -31,20 +36,34 @@ export type SysvarStakeHistory = Entry[];
3136
export function getSysvarStakeHistoryEncoder(): VariableSizeEncoder<SysvarStakeHistory> {
3237
return getArrayEncoder(
3338
getStructEncoder([
34-
['effective', getDefaultLamportsEncoder()],
35-
['activating', getDefaultLamportsEncoder()],
36-
['deactivating', getDefaultLamportsEncoder()],
39+
['epoch', getU64Encoder()],
40+
[
41+
'stakeHistory',
42+
getStructEncoder([
43+
['effective', getDefaultLamportsEncoder()],
44+
['activating', getDefaultLamportsEncoder()],
45+
['deactivating', getDefaultLamportsEncoder()],
46+
]),
47+
],
3748
]),
49+
{ size: getU64Encoder() },
3850
);
3951
}
4052

4153
export function getSysvarStakeHistoryDecoder(): VariableSizeDecoder<SysvarStakeHistory> {
4254
return getArrayDecoder(
4355
getStructDecoder([
44-
['effective', getDefaultLamportsDecoder()],
45-
['activating', getDefaultLamportsDecoder()],
46-
['deactivating', getDefaultLamportsDecoder()],
56+
['epoch', getU64Decoder()],
57+
[
58+
'stakeHistory',
59+
getStructDecoder([
60+
['effective', getDefaultLamportsDecoder()],
61+
['activating', getDefaultLamportsDecoder()],
62+
['deactivating', getDefaultLamportsDecoder()],
63+
]),
64+
],
4765
]),
66+
{ size: getU64Decoder() },
4867
);
4968
}
5069

0 commit comments

Comments
 (0)