The SolidarityBasket contract is intentionally small. It does not implement DEX swaps, price oracles, or complex fee logic on-chain. Fewer moving parts mean fewer ways to fail. This page outlines the security principles behind that choice.
No oracle inside the contract
USD-to-crypto conversion is performed off-chain in the user interface. The contract receives only the final integer amount. That avoids dependency on external price feeds that can be manipulated or go offline.
Checks-Effects-Interactions and reentrancy protection
State updates (balance accounting) happen before external calls where applicable. The contract uses OpenZeppelin’s ReentrancyGuard on deposit and withdraw paths. USDT transfers use SafeERC20.
Per-beneficiary isolation
Balances are stored in mapping(address => uint256) for BNB and USDT. A beneficiary can only reduce their own mapping entries. There is no shared pool that another family could drain.
Owner role is narrow
Ownership (OpenZeppelin Ownable) is used for deployment parameters and an emergency stuck-BNB recovery path. Routine withdrawals are not owner-gated; they are beneficiary-gated. That reduces the impact of a compromised admin key on family funds.
Immutable USDT address
The USDT token address is set once in the constructor and cannot be changed. That prevents a malicious upgrade path that would redirect approvals to a fake token.
What you should still verify
Always confirm the contract address in your wallet prompt matches 0x555400DE5f287bB7E2a7F1C1E26fEa9cDCdB2877. Confirm you are on BNB Smart Chain (not a lookalike network). For USDT, approve only the amount you intend to donate when possible.