// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title AyrisSplitter * @dev Otomatik ödeme dağıtıcı sözleşmesi. * %1 Platform payını keser, %99 Merchant (Firma) adresine gönderir. */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } contract AyrisSplitter { address public platformAddress; uint256 public constant PLATFORM_FEE_BPS = 100; // %1 (100/10000) uint256 public constant BPS_DENOMINATOR = 10000; event PaymentProcessed(address indexed merchant, address token, uint256 totalAmount, uint256 platformShare, uint256 merchantShare); constructor(address _platformAddress) { require(_platformAddress != address(0), "Gecersiz platform adresi"); platformAddress = _platformAddress; } /** * @dev Native coin (ETH, MATIC, BNB) ödemesini böler. */ function payNative(address merchant) external payable { require(msg.value > 0, "Tutar 0 olamaz"); require(merchant != address(0), "Gecersiz merchant adresi"); uint256 platformShare = (msg.value * PLATFORM_FEE_BPS) / BPS_DENOMINATOR; uint256 merchantShare = msg.value - platformShare; payable(platformAddress).transfer(platformShare); payable(merchant).transfer(merchantShare); emit PaymentProcessed(merchant, address(0), msg.value, platformShare, merchantShare); } /** * @dev ERC20/TRC20 (USDT, USDC) ödemesini böler. * Kullanıcı önce bu sözleşmeye 'approve' vermelidir. */ function payToken(address tokenAddress, uint256 amount, address merchant) external { require(amount > 0, "Tutar 0 olamaz"); require(merchant != address(0), "Gecersiz merchant adresi"); IERC20 token = IERC20(tokenAddress); uint256 platformShare = (amount * PLATFORM_FEE_BPS) / BPS_DENOMINATOR; uint256 merchantShare = amount - platformShare; // 1. Ödemeyi müşteriden sözleşmeye çek require(token.transferFrom(msg.sender, address(this), amount), "Transfer basarisiz"); // 2. Platform payını gönder require(token.transfer(platformAddress, platformShare), "Platform payi iletilemedi"); // 3. Merchant payını gönder require(token.transfer(merchant, merchantShare), "Merchant payi iletilemedi"); emit PaymentProcessed(merchant, tokenAddress, amount, platformShare, merchantShare); } }