Files
Pay2Gateway/contracts/AyrisSplitter.sol

68 lines
2.5 KiB
Solidity
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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);
}
}