mirror of
https://github.com/lens-protocol/core.git
synced 2026-04-22 03:02:03 -04:00
Merge pull request #84 from aave/refactor/83-redundant-snapshot-logic
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user