Early Sepia Seal
Medium
When a stream is canceled, the associated NFT is sent back to the DAO, and the remaining funds of the stream are refunded to the user. These funds are sent using an arbitrary call, therefore smart contract wallets not implementing a fallback or receive methods will not be able to receive the ETH causing the transaction to fail.
The refund mechanism in StreamEscrow::cancelStream
relies on a low-level call to transfer ETH to msg.sender
:
(bool sent, ) = msg.sender.call{ value: amountToRefund }('');
No response
The auction winner or stream creator holds the Noun in a smart contract wallet that does not implement a fallback or receive function.
No response
Loss of accessibility to the remaining stream funds for affected users. The transaction to cancel the stream will revert, and users holding the corresponding Noun in smart contract wallets will be unable to retrieve their funds.
No response
Implement a system consistent with the rest of the codebase such as the use of _safeTransferETHWithFallback
in NounsAuctionHouseV3
, where the native ETH is wrapped into wETH if the transfer fails.