The Inheritable Smart Contract Wallet protocol appears to be designed with the intention that each NFT would have its own associated payment token, but the implementation uses a single global assetToPay
variable affecting all NFTs simultaneously.
This misalignment between intended design and actual implementation is evident when examining these functions:
While this function accepts a token address parameter for each new NFT created, suggesting a per-NFT payment token, it actually overwrites the global assetToPay variable. Similarly, individual NFT values are stored correctly in a mapping, but token addresses are not:
The trustee can also change this global token, affecting all NFTs at once:
The contract functions suggest an intent to assign individual tokens to NFTs, but the implementation forces all NFTs to share one token.
The createEstateNFT function misleadingly appears to set a token for a specific NFT but actually changes it globally.
The protocol fails to properly represent real-world assets that would naturally be valued in different currencies.
Each new NFT creation overwrites the payment token for all previously created NFTs, creating a "last one wins" scenario.
Align the implementation with the apparent design intent by creating a mapping for individual NFT payment tokens
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.