Merge pull request #84 from aave/refactor/83-redundant-snapshot-logic

This commit is contained in:
Zer0dot
2022-03-30 16:51:19 -04:00
committed by GitHub

View File

@@ -108,41 +108,10 @@ contract FollowNFT is LensNFTBase, IFollowNFT {
override
returns (uint256)
{
unchecked {
if (blockNumber > block.number) revert Errors.BlockNumberInvalid();
uint256 snapshotCount = _snapshotCount[user];
if (snapshotCount == 0) {
return 0; // Returning zero since this means the user never delegated and has no power
}
uint256 lower = 0;
uint256 upper = snapshotCount - 1;
// First check most recent balance
if (_snapshots[user][upper].blockNumber <= blockNumber) {
return _snapshots[user][upper].value;
}
// Next check implicit zero balance
if (_snapshots[user][lower].blockNumber > blockNumber) {
return 0;
}
while (upper > lower) {
uint256 center = upper - (upper - lower) / 2;
Snapshot memory snapshot = _snapshots[user][center];
if (snapshot.blockNumber == blockNumber) {
return snapshot.value;
} else if (snapshot.blockNumber < blockNumber) {
lower = center;
} else {
upper = center - 1;
}
}
return _snapshots[user][lower].value;
}
if (blockNumber > block.number) revert Errors.BlockNumberInvalid();
uint256 snapshotCount = _snapshotCount[user];
if (snapshotCount == 0) return 0; // Returning zero since this means the user never delegated and has no power
return _getSnapshotValueByBlockNumber(_snapshots[user], blockNumber, snapshotCount);
}
/// @inheritdoc IFollowNFT
@@ -152,31 +121,30 @@ contract FollowNFT is LensNFTBase, IFollowNFT {
override
returns (uint256)
{
if (blockNumber > block.number) revert Errors.BlockNumberInvalid();
uint256 snapshotCount = _delSupplySnapshotCount;
if (snapshotCount == 0) return 0; // Returning zero since this means a delegation has never occurred
return _getSnapshotValueByBlockNumber(_delSupplySnapshots, blockNumber, snapshotCount);
}
function _getSnapshotValueByBlockNumber(
mapping(uint256 => Snapshot) storage _shots,
uint256 blockNumber,
uint256 snapshotCount
) internal view returns (uint256) {
unchecked {
if (blockNumber > block.number) revert Errors.BlockNumberInvalid();
uint256 snapshotCount = _delSupplySnapshotCount;
if (snapshotCount == 0) {
return 0; // Returning zero since this means a delegation has never occurred
}
uint256 lower = 0;
uint256 upper = snapshotCount - 1;
// First check most recent delegated supply
if (_delSupplySnapshots[upper].blockNumber <= blockNumber) {
return _delSupplySnapshots[upper].value;
}
// First check most recent snapshot
if (_shots[upper].blockNumber <= blockNumber) return _shots[upper].value;
// Next check implicit zero balance
if (_delSupplySnapshots[lower].blockNumber > blockNumber) {
return 0;
}
if (_shots[lower].blockNumber > blockNumber) return 0;
while (upper > lower) {
uint256 center = upper - (upper - lower) / 2;
Snapshot memory snapshot = _delSupplySnapshots[center];
Snapshot memory snapshot = _shots[center];
if (snapshot.blockNumber == blockNumber) {
return snapshot.value;
} else if (snapshot.blockNumber < blockNumber) {
@@ -185,7 +153,7 @@ contract FollowNFT is LensNFTBase, IFollowNFT {
upper = center - 1;
}
}
return _delSupplySnapshots[lower].value;
return _shots[lower].value;
}
}