contract DanielPaymentRouter { mapping(bytes32=>bool) private used; function pay(bytes32 intentId,IERC20 token,address payee,uint256 amount) external nonReentrant { bytes32 key=keccak256(abi.encode(msg.sender,intentId)); if(used[key]) revert IntentAlreadyUsed(); used[key]=true; uint256 beforeBalance=token.balanceOf(payee); token.safeTransferFrom(msg.sender,payee,amount); if(token.balanceOf(payee)-beforeBalance!=amount) revert InexactSettlement(); } }