Implement automated custodial crypto sweep logic (%1 platform, %99 merchant)
This commit is contained in:
67
contracts/AyrisSplitter.sol
Normal file
67
contracts/AyrisSplitter.sol
Normal file
@@ -0,0 +1,67 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user