If one stream recipient stakes his stream NFT into staking contract, the related stream sender can withdraw this stream's withdraw-able Fjord token into staking contract. These Fjord tokens will be taken as the reward. The stakers will share this rewards. And the stream recipient will lose his withdraw-able Fjord token in sablier stream.
Sablier stream receipt can stake his stream NFT into staking contract. After that, the initial stream receipt cannot withdraw Fjord tokens from Sablier stream. Because only NFT's owner or the stream sender can trigger the sablier withdraw() function in Sablier, and the initial stream receipt has transferred the NFT to Staking contract.
The problem is that the sablier stream sender can still trigger withdraw() function in sablier. The only limitation in Sablier is that the sablier stream sender can only withdraw the withdrawable Fjord tokens to the NFT's owner. If one Sablier receipt stakes NFT in staking contract, the new NFT owner is the staking contract. This means that the sablier stream sender can withdraw sablier stream Fjord tokens into staking contract.
The result is that the sablier receipt will lose their withdrawable Fjord tokens. And these tokens will be taken as the rewards in staking contract. Stakers will get profit from this.
The result is that the sablier receipt will lose their withdrawable Fjord tokens. And these tokens will be taken as the rewards in staking contract. Stakers will get profit from this.
Manual
We need to do some record in onStreamWithdrawn()
. Once we received some withdrawable Fjord tokens, we need to record them and allow the NFT staker to withdraw this and exclude this from the totalRewards.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.