You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a prototype for a PaymentSplitter contract that supports dynamic shares.
Unlike the version we had in 4.x, this version allows minting/burning/transferring shares. The downside of this approach is that it only supports one token. If configured to handle (and split) ETH, then any ERC20 token sent to it would be locked*. Similarly, if it is configured to hangle (and split) USDC, then any USDT/Dai/... would be locked*.
If the balance or allocation exceeds type(int256).max, it could result in reverts for that account. I don't think it's a real issue though, because the user can always transfer shares over the max out, and then proceed as normally. It may be worth documenting in case a dev would restrict transferring while also dealing with massive numbers.
because the user can always transfer shares over the max out, and then proceed as normally
If the computation of _allocation overflows, because _balance() + _totalReleased overflow, then:
no one can release
no one can transfer shares, because that includes a computation of _allocation to estimate the virtual shares to add/remove.
moving shares would not fix that anyway.
So this would basically kill the contract. Note that the v4 splitter had a similar issue, but with type(uint256).max instead of type(int256).max ... (the difference between the two is just a factor of 2)
adding shares to an account that already have some share
partially burn the shares
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a prototype for a PaymentSplitter contract that supports dynamic shares.
Unlike the version we had in 4.x, this version allows minting/burning/transferring shares. The downside of this approach is that it only supports one token. If configured to handle (and split) ETH, then any ERC20 token sent to it would be locked*. Similarly, if it is configured to hangle (and split) USDC, then any USDT/Dai/... would be locked*.
* unless a recovery method is implemented.