feat: add convenience methods to EpochSchedule (#17810)

* first try, failing test

* fix implementation and tests

* lint:fix

* move method tests to seperate test

* lint fix

* apply starry's comments and grab the bonus points

* minor fixes after starry's second review

Co-authored-by: Arrowana <8245419+Arrowana@users.noreply.github.com>
This commit is contained in:
Pierre
2021-06-10 15:47:54 +10:00
committed by GitHub
parent e0d679b319
commit 97ef9b2bc3
5 changed files with 159 additions and 19 deletions

View File

@ -9,6 +9,7 @@ import {
Account,
Authorized,
Connection,
EpochSchedule,
SystemProgram,
Transaction,
LAMPORTS_PER_SOL,
@ -24,7 +25,6 @@ import {
BLOCKHASH_CACHE_TIMEOUT_MS,
Commitment,
EpochInfo,
EpochSchedule,
InflationGovernor,
SlotInfo,
} from '../src/connection';

View File

@ -0,0 +1,46 @@
import {expect} from 'chai';
import {EpochSchedule} from '../src';
describe('EpochSchedule', () => {
it('slot methods work', () => {
const firstNormalEpoch = 14;
const firstNormalSlot = 524_256;
const leaderScheduleSlotOffset = 432_000;
const slotsPerEpoch = 432_000;
const warmup = true;
const epochSchedule = new EpochSchedule(
slotsPerEpoch,
leaderScheduleSlotOffset,
warmup,
firstNormalEpoch,
firstNormalSlot,
);
expect(epochSchedule.getEpoch(35)).to.be.equal(1);
expect(epochSchedule.getEpochAndSlotIndex(35)).to.be.eql([1, 3]);
expect(
epochSchedule.getEpoch(firstNormalSlot + 3 * slotsPerEpoch + 12345),
).to.be.equal(17);
expect(
epochSchedule.getEpochAndSlotIndex(
firstNormalSlot + 3 * slotsPerEpoch + 12345,
),
).to.be.eql([17, 12345]);
expect(epochSchedule.getSlotsInEpoch(4)).to.be.equal(512);
expect(epochSchedule.getSlotsInEpoch(100)).to.be.equal(slotsPerEpoch);
expect(epochSchedule.getFirstSlotInEpoch(2)).to.be.equal(96);
expect(epochSchedule.getLastSlotInEpoch(2)).to.be.equal(223);
expect(epochSchedule.getFirstSlotInEpoch(16)).to.be.equal(
firstNormalSlot + 2 * slotsPerEpoch,
);
expect(epochSchedule.getLastSlotInEpoch(16)).to.be.equal(
firstNormalSlot + 3 * slotsPerEpoch - 1,
);
});
});