@@ -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