Optimize votes lookups for recent checkpoints (#3673)
This commit is contained in:
@ -22,8 +22,10 @@ contract('Checkpoints', function (accounts) {
|
||||
|
||||
it('returns zero as past value', async function () {
|
||||
await time.advanceBlock();
|
||||
expect(await this.checkpoint.getAtBlock(await web3.eth.getBlockNumber() - 1)).to.be.bignumber.equal('0');
|
||||
expect(await this.checkpoint.getAtRecentBlock(await web3.eth.getBlockNumber() - 1)).to.be.bignumber.equal('0');
|
||||
expect(await this.checkpoint.getAtBlock(await web3.eth.getBlockNumber() - 1))
|
||||
.to.be.bignumber.equal('0');
|
||||
expect(await this.checkpoint.getAtProbablyRecentBlock(await web3.eth.getBlockNumber() - 1))
|
||||
.to.be.bignumber.equal('0');
|
||||
});
|
||||
});
|
||||
|
||||
@ -41,7 +43,7 @@ contract('Checkpoints', function (accounts) {
|
||||
expect(await this.checkpoint.latest()).to.be.bignumber.equal('3');
|
||||
});
|
||||
|
||||
for (const fn of [ 'getAtBlock(uint256)', 'getAtRecentBlock(uint256)' ]) {
|
||||
for (const fn of [ 'getAtBlock(uint256)', 'getAtProbablyRecentBlock(uint256)' ]) {
|
||||
describe(`lookup: ${fn}`, function () {
|
||||
it('returns past values', async function () {
|
||||
expect(await this.checkpoint.methods[fn](this.tx1.receipt.blockNumber - 1)).to.be.bignumber.equal('0');
|
||||
@ -78,6 +80,18 @@ contract('Checkpoints', function (accounts) {
|
||||
expect(await this.checkpoint.length()).to.be.bignumber.equal(lengthBefore.addn(1));
|
||||
expect(await this.checkpoint.latest()).to.be.bignumber.equal('10');
|
||||
});
|
||||
|
||||
it('more than 5 checkpoints', async function () {
|
||||
for (let i = 4; i <= 6; i++) {
|
||||
await this.checkpoint.push(i);
|
||||
}
|
||||
expect(await this.checkpoint.length()).to.be.bignumber.equal('6');
|
||||
const block = await web3.eth.getBlockNumber();
|
||||
// recent
|
||||
expect(await this.checkpoint.getAtProbablyRecentBlock(block - 1)).to.be.bignumber.equal('5');
|
||||
// non-recent
|
||||
expect(await this.checkpoint.getAtProbablyRecentBlock(block - 9)).to.be.bignumber.equal('0');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -95,7 +109,6 @@ contract('Checkpoints', function (accounts) {
|
||||
it('lookup returns 0', async function () {
|
||||
expect(await this.contract.lowerLookup(0)).to.be.bignumber.equal('0');
|
||||
expect(await this.contract.upperLookup(0)).to.be.bignumber.equal('0');
|
||||
expect(await this.contract.upperLookupRecent(0)).to.be.bignumber.equal('0');
|
||||
});
|
||||
});
|
||||
|
||||
@ -149,7 +162,6 @@ contract('Checkpoints', function (accounts) {
|
||||
const value = last(this.checkpoints.filter(x => i >= x.key))?.value || '0';
|
||||
|
||||
expect(await this.contract.upperLookup(i)).to.be.bignumber.equal(value);
|
||||
expect(await this.contract.upperLookupRecent(i)).to.be.bignumber.equal(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user