Skip to content

Commit 882f654

Browse files
committed
limit valid input size for _settle()
1 parent 5dad0c3 commit 882f654

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

packages/ethereum-contracts/contracts/agreements/gdav1/SuperfluidPool.sol

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
289289
Value.unwrap(
290290
// PDPoolMemberMU(poolIndex, memberData)
291291
PDPoolMemberMU(poolIndexDataToPDPoolIndex(_index), _memberDataToPDPoolMember(memberData)).settle(
292-
Time.wrap(uint32(block.timestamp))
292+
Time.wrap(SafeCast.toUint32(block.timestamp))
293293
).m._settled_value
294294
)
295295
);
@@ -370,7 +370,7 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
370370
returns (int256 claimableBalance, uint256 timestamp)
371371
{
372372
timestamp = ISuperfluid(superToken.getHost()).getNow();
373-
return (getClaimable(memberAddr, uint32(timestamp)), timestamp);
373+
return (getClaimable(memberAddr, SafeCast.toUint32(timestamp)), timestamp);
374374
}
375375

376376
/// @inheritdoc ISuperfluidPool
@@ -427,7 +427,7 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
427427
if (superToken.isPool(GDA, memberAddr)) revert SUPERFLUID_POOL_NO_POOL_MEMBERS();
428428
if (memberAddr == address(0)) revert SUPERFLUID_POOL_NO_ZERO_ADDRESS();
429429

430-
uint32 time = uint32(ISuperfluid(superToken.getHost()).getNow());
430+
uint32 time = SafeCast.toUint32(ISuperfluid(superToken.getHost()).getNow());
431431
Time t = Time.wrap(time);
432432
Unit wrappedUnits = toSemanticMoneyUnit(newUnits);
433433

@@ -456,8 +456,9 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
456456
emit MemberUnitsUpdated(superToken, memberAddr, oldUnits, newUnits);
457457
}
458458

459-
function _settle(address memberAddr, int256 amount) internal {
460-
assert(GDA.poolSettleClaim(superToken, memberAddr, (amount)));
459+
function _settle(address memberAddr, uint32 time) internal returns (int256 amount) {
460+
amount = getUnsettledValue(memberAddr, time);
461+
assert(GDA.poolSettleClaim(superToken, memberAddr, amount));
461462
_membersData[memberAddr].claimedValue += amount;
462463
}
463464

@@ -471,9 +472,10 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
471472
}
472473

473474
function _claimAll(address memberAddr, uint32 time) internal returns (int256 amount) {
474-
amount = getClaimable(memberAddr, time);
475-
_settle(memberAddr, amount);
476-
475+
// For connected pool, claimable amount is zero; hence, we skip.
476+
if (!superToken.isPoolMemberConnected(GDA, ISuperfluidPool(address(this)), memberAddr)) {
477+
amount = _settle(memberAddr, time);
478+
}
477479
emit DistributionClaimed(superToken, memberAddr, amount, _membersData[memberAddr].claimedValue);
478480
}
479481

@@ -485,7 +487,7 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
485487
/// @inheritdoc ISuperfluidPool
486488
function claimAll(address memberAddr) public returns (bool) {
487489
bool isConnected = superToken.isPoolMemberConnected(GDA, this, memberAddr);
488-
uint32 time = uint32(ISuperfluid(superToken.getHost()).getNow());
490+
uint32 time = SafeCast.toUint32(ISuperfluid(superToken.getHost()).getNow());
489491
int256 claimedAmount = _claimAll(memberAddr, time);
490492
if (!isConnected) {
491493
_shiftDisconnectedUnits(Unit.wrap(0), Value.wrap(claimedAmount), Time.wrap(time));
@@ -502,8 +504,7 @@ contract SuperfluidPool is ISuperfluidPool, BeaconProxiable {
502504

503505
// WARNING for operators: it is undefined behavior if member is already connected or disconnected
504506
function operatorConnectMember(address memberAddr, bool doConnect, uint32 time) external onlyGDA returns (bool) {
505-
int256 settleAmount = getUnsettledValue(memberAddr, time);
506-
_settle(memberAddr, settleAmount);
507+
int256 settleAmount = _settle(memberAddr, time);
507508
int128 units = uint256(_getUnits(memberAddr)).toInt256().toInt128();
508509
if (doConnect) {
509510
_shiftDisconnectedUnits(Unit.wrap(-units), Value.wrap(settleAmount), Time.wrap(time));

0 commit comments

Comments
 (0)