-
-
Notifications
You must be signed in to change notification settings - Fork 23
Description
Bug Description
When a user picks the stablecoin option (SOD, MOD, ECSD) to pay, the widget doesn't check if they actually have enough of that token before letting them proceed. WalletContext.jsx only fetches native balance using publicClient.getBalance() theres no balanceOf() call on the stablecoin contract anywhere. so TransactionReview.jsx builds the ERC-20 transfer() and shows "✅ Transaction ready!" even with 0 stablecoin balance. on send it just reverts with a confusing metamask error and no feedback from the widget.
This would affect anyone picking direct transfer without enough stablecoins, could be a new user who chose the wrong option or someone who just doesn't have enough balance.
Suggested approach: call balanceOf(account) on the stablecoin contract after wallet connection using existing publicClient, expose it in wallet context, and check it against the required amount in TransactionReview.jsx before enabling "Prepare Transaction". affected files: WalletContext.jsx, TransactionReview.jsx
Steps to Reproduce
- Open the stablepay widget or merchant demo site
- Select any network (e.g. sepolia)
- Select "SOD (Direct Transfer)" as payment token
- Connect a wallet that has 0 SOD
- Click "Prepare Transaction" — shows "✅ Transaction ready!"
- Click "Send Transaction" — tx reverts, no useful error from widget
Environment Details
OS: macOS
Browser: any (tested on chrome)
Network: sepolia (reproducible on all supported networks)
Wallet: metamask
Impact
Medium - Feature works but has issues
Code of Conduct
- I have joined the Discord server and will post updates there
- I have searched existing issues to avoid duplicates