// SPDX-License-Identifier: MIT pragma solidity 0.8.38; /// @notice BSC testnet only. No owner, game settlement or third-party withdrawal. contract FlapAceTestVault { mapping(address => uint256) public balances; uint256 public totalLiability; bool private entered; event Deposited(address indexed account, uint256 amount); event Withdrawn(address indexed account, uint256 amount); error TestnetOnly(); error InvalidAmount(); error InsufficientBalance(); error Reentrancy(); error TransferFailed(); constructor() { if (block.chainid != 97) revert TestnetOnly(); } modifier nonReentrant() { if (entered) revert Reentrancy(); entered = true; _; entered = false; } function deposit() external payable nonReentrant { _deposit(); } receive() external payable nonReentrant { _deposit(); } function _deposit() private { if (msg.value == 0) revert InvalidAmount(); balances[msg.sender] += msg.value; totalLiability += msg.value; emit Deposited(msg.sender, msg.value); } function withdraw(uint256 amount) external nonReentrant { if (amount == 0) revert InvalidAmount(); if (amount > balances[msg.sender]) revert InsufficientBalance(); balances[msg.sender] -= amount; totalLiability -= amount; (bool ok,) = payable(msg.sender).call{value: amount}(""); if (!ok) revert TransferFailed(); emit Withdrawn(msg.sender, amount); } }