diff --git a/.gitignore b/.gitignore
index 3e7fbbd..435f4a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,4 @@ yarn-error.log*
/scripts/show-vaults.ts
/scripts/migrate-settings.ts
/scripts/migrate-merchant-fees.ts
+/scripts/migrate-merchant-balances.ts
diff --git a/API_DOCS.md b/API_DOCS.md
new file mode 100644
index 0000000..eac3735
--- /dev/null
+++ b/API_DOCS.md
@@ -0,0 +1,93 @@
+# 📡 Pay2Gateway API v1 Kullanım Rehberi
+
+Pay2Gateway API, firmaların (merchants) kendi sistemlerini bizim ödeme geçidimize entegre etmelerini sağlar. Tüm istekler JSON formatında yapılmalı ve geçerli bir API anahtarı içermelidir.
+
+## 🔑 Kimlik Doğrulama (Authentication)
+Tüm API isteklerinde `x-api-key` header'ı zorunludur. API anahtarınızı Merchant Panel -> Ayarlar kısmından alabilirsiniz.
+
+**Örnek Header:**
+```http
+x-api-key: gwa_live_xxxxxxxxxxxx
+Content-Type: application/json
+```
+
+---
+
+## 🛒 1. Ödeme Oturumu Oluşturma (Checkout Session)
+Bir müşteri ödeme yapmak istediğinde, sunucunuzdan bu endpoint'e istek atarak bir ödeme oturumu oluşturun.
+
+- **Endpoint:** `POST /api/v1/checkout`
+- **Açıklama:** Yeni bir işlem başlatır ve müşteriyi yönlendirebileceğiniz bir URL döndürür.
+
+### İstek Gövdesi (Request Body)
+| Parametre | Tip | Zorunlu mu? | Açıklama |
+| :--- | :--- | :--- | :--- |
+| `amount` | Float | Evet | Tahsil edilecek tutar. |
+| `currency` | String | Hayır | Para birimi (Varsayılan: `TRY`). |
+| `order_id` | String | Evet | Kendi sisteminizdeki sipariş numarası. |
+| `customer_name` | String | Hayır | Müşterinin adı. |
+| `customer_phone` | String | Hayır | Müşterinin telefon numarası. |
+| `callback_url` | String | Hayır | Ödeme sonrası sunucunuza bildirim atılacak URL. |
+| `success_url` | String | Hayır | Başarılı ödeme sonrası kullanıcının döneceği URL. |
+| `cancel_url` | String | Hayır | İptal edilen ödeme sonrası kullanıcının döneceği URL. |
+
+**Örnek İstek:**
+```json
+{
+ "amount": 1250.50,
+ "currency": "TRY",
+ "order_id": "SİPARİŞ_102",
+ "customer_name": "Ahmet Yılmaz",
+ "callback_url": "https://siteniz.com/api/webhooks/pay2gateway",
+ "success_url": "https://siteniz.com/payment/success",
+ "cancel_url": "https://siteniz.com/payment/cancel"
+}
+```
+
+### Yanıt (Response)
+Başarılı bir istek sonucunda `checkout_url` döndürülür. Müşterinizi bu adrese yönlendirmeniz yeterlidir.
+
+```json
+{
+ "success": true,
+ "data": {
+ "id": "uuid-islem-id",
+ "checkout_url": "https://pay2gateway.com/checkout?session_id=uuid-islem-id",
+ "status": "pending",
+ "wallets": {
+ "EVM": "0x...",
+ "SOLANA": "...",
+ "TRON": "...",
+ "BITCOIN": "..."
+ }
+ }
+}
+```
+
+---
+
+## 🔔 2. Webhook Bildirimleri
+Ödeme tamamlandığında veya blockchain üzerinde onaylandığında, `callback_url` adresine bir `POST` isteği gönderilir.
+
+**Webhook Gövdesi:**
+```json
+{
+ "status": "success",
+ "amount": 1250.50,
+ "currency": "TRY",
+ "ref_id": "SİPARİŞ_102",
+ "tx_hash": "0xabc123...",
+ "network": "POLYGON",
+ "token": "USDT"
+}
+```
+
+---
+
+## 🛡️ Güvenlik Notları
+- **API Key:** API anahtarınızı asla frontend kodlarınızda (JavaScript/React) paylaşmayın. Sadece sunucu tarafında kullanın.
+- **İşlem Doğrulama:** Webhook geldiğinde tutarı ve sipariş ID'sini kendi veritabanınızla karşılaştırın.
+- **Test Modu:** Test yapmak için admin panelinden `MOCK_PAYMENTS` ayarını aktif edebilirsiniz.
+
+---
+⭐ **Pay2Gateway Support** - Teknik destek için `support@ayris.dev` üzerinden bize ulaşabilirsiniz.
diff --git a/README.md b/README.md
index b6d0a1e..26775d9 100644
--- a/README.md
+++ b/README.md
@@ -12,18 +12,23 @@ Pay2Gateway, modern e-ticaret siteleri ve dijital platformlar için geliştirilm
* **Gelişmiş Webhook'lar:** Ödeme tamamlandığında veya süpürme (sweep) işlemi gerçekleştiğinde otomatik JSON bildirimleri.
### ⛓️ Çoklu Zincir (Multi-Chain) Desteği
-* **EVM Desteği:** Ethereum, Polygon ve BSC ağlarında işlem yapabilme.
-* **Solana Desteği:** SOL ve SPL tokenlar (USDC vb.) için tam entegrasyon.
-* **Otomatik Süpürme (Auto-Sweep):** Toplanan fonların ana platform cüzdanına saniyeler içinde otomatik olarak aktarılması.
+* **Geniş Ağ Desteği:**
+ * **EVM:** Ethereum, Polygon, BSC.
+ * **Solana:** Native SOL ve SPL tokenlar (USDC/USDT).
+ * **TRON (TRC20):** USDT ve TRX desteği.
+ * **BITCOIN:** Native BTC ödeme doğrulama.
+* **Otomatik Süpürme (Auto-Sweep):** Toplanan fonların ana platform ve merchant cüzdanlarına saniyeler içinde otomatik olarak aktarılması (Server-side split).
+* **Gelişmiş Doğrulama:** Her ağ için optimize edilmiş on-chain/API doğrulama mekanizmaları.
-### 💰 Dinamik Token & Fiyatlandırma
-* **Top 20 Token:** CoinMarketCap listesindeki en hacimli 20 kripto para birimi desteği.
-* **Binance API Entegrasyonu:** Gerçek zamanlı TRY/USD kuru ve token fiyat dönüşümleri.
-* **Merkezi Konfigürasyon:** `lib/crypto-config.json` üzerinden anında yeni ağ veya token ekleme kolaylığı.
+### 💰 Esnek Komisyon & Fiyatlandırma
+* **Merchant-Specific Fees:** Her firma için özel komisyon oranı (%Fee) belirleme imkanı.
+* **Zengin Token Listesi:** USDT, USDC, BTC, ETH, TRX, MATIC ve popüler altcoinler.
+* **Görsel Deneyim:** Dinamik coin logoları ve profesyonel checkout arayüzü.
+* **Binance API Entegrasyonu:** Gerçek zamanlı TRY/USD kuru ve anlık token fiyat dönüşümleri.
### 📊 Yönetim Panelleri
-* **Admin Dashboard:** Tüm sistem istatistikleri, toplam ciro, işlem başarı oranları ve müşteri analitiği.
-* **Merchant (Firma) Paneli:** İşlem listesi, API anahtarı yönetimi, webhook yapılandırması ve teknik entegrasyon rehberi.
+* **Admin Dashboard:** Merkezi yönetim, firma ekleme/düzenleme, özel komisyon atama ve global istatistikler.
+* **Merchant Panel:** API anahtarı yönetimi, işlem geçmişi ve teknik entegrasyon rehberi.
---
@@ -34,12 +39,13 @@ Pay2Gateway, modern e-ticaret siteleri ve dijital platformlar için geliştirilm
* **Blockchain:**
* [Ethers.js](https://docs.ethers.org/v6/) (EVM)
* [@solana/web3.js](https://solana-labs.github.io/solana-web3.js/) (Solana)
+ * [TronWeb](https://developers.tron.network/) (TRON)
* **Styling:** Modern Vanilla CSS & Tailwind (Hibrit)
-* **İkon Seti:** Lucide React
+* **İkon Seti:** Lucide React & Cryptocurrency-Icons (GitHub CDN)
---
-## 🚀 Hızlı Kurulum
+## 🚀 Hızlı Kuruluk
### 1. Depoyu Klonlayın
```bash
@@ -53,24 +59,21 @@ npm install
```
### 3. Ortam Değişkenlerini Yapılandırın
-`.env` dosyasını oluşturun ve aşağıdaki bilgileri girin:
+`.env` dosyasını oluşturun:
```env
DATABASE_URL=postgres://user:pass@host:5432/db
NEXT_PUBLIC_BASE_URL=http://localhost:3000
NEXT_PUBLIC_USE_MOCK_PAYMENTS=true # Test için true kalsın
-# Kripto Platform Cüzdanları (Süpürme Hedefi)
-SOL_PLATFORM_ADDRESS=...
+# Platform Cüzdanları (Süpürme Hedefi)
EVM_PLATFORM_ADDRESS=...
+SOL_PLATFORM_ADDRESS=...
+TRON_PLATFORM_ADDRESS=...
-# Gaz Yakıt Cüzdanı (Fonları süpürmek için gerekli gaz ücreti)
+# Gaz Yakıt Cüzdanı
CRYPTO_GAS_TANK_KEY=0x...
-```
-
-### 4. Geliştirme Modunu Başlatın
-```bash
-npm run dev
+TRON_GRID_API_KEY=...
```
---
@@ -78,32 +81,14 @@ npm run dev
## 📡 API Kullanımı (v1)
### Ödeme Oturumu Başlatma
-Firmalar kendi sunucularından şu uç noktaya istek atarak bir ödeme oturumu başlatabilirler.
-
-**Request:**
-- **URL:** `POST /api/v1/checkout`
-- **Headers:** `x-api-key: YOUR_MERCHANT_API_KEY`
+URL: `POST /api/v1/checkout` | Headers: `x-api-key: YOUR_KEY`
```json
{
"amount": 250.00,
"currency": "TRY",
"order_id": "OD_12345",
- "customer_name": "John Doe",
- "success_url": "https://mysite.com/success",
- "cancel_url": "https://mysite.com/cancel"
-}
-```
-
-**Response:**
-```json
-{
- "success": true,
- "data": {
- "id": "uuid-transaction-id",
- "checkout_url": "http://localhost:3000/checkout?session_id=uuid-transaction-id",
- "status": "pending"
- }
+ "customer_name": "John Doe"
}
```
@@ -111,20 +96,18 @@ Firmalar kendi sunucularından şu uç noktaya istek atarak bir ödeme oturumu b
## 📂 Dosya Yapısı
-* `/app/api/v1` - Dışarıya açık profesyonel API endpoints.
-* `/app/admin` - Merkezi yönetim paneli.
-* `/app/merchant` - Firma özel dashboard ve ayarlar.
-* `/lib/crypto-engine.ts` - On-chain ana motor (Doğrulama, Süpürme).
-* `/lib/crypto-config.json` - Desteklenen ağlar ve token listesi.
-* `/lib/db.ts` - PostgreSQL bağlantı havuzu.
+* `/lib/crypto-engine.ts` - On-chain ana motor (Doğrulama, Süpürme, Çoklu Ağ).
+* `/lib/crypto-config.json` - Ağlar, tokenlar ve dinamik logoların konfigürasyonu.
+* `/components/checkout` - Dinamik logo destekli premium ödeme bileşenleri.
+* `/scripts` - Veritabanı migrasyonları ve cüzdan yönetim araçları.
---
## 🔐 Güvenlik Politikası
-1. **Private Key Yönetimi:** Geçici cüzdan anahtarları şifrelenmiş olarak işlem metadata'sında saklanır ve fon süpürüldükten sonra işlevini yitirir.
-2. **Fiyat Güvenliği:** Ödeme oturumları (`session_id`) sunucu taraflı oluşturulur; istemci tarafında tutar değişikliği yapılamaz.
-3. **Hız Sınırı (Rate Limiting):** API istekleri anahtar tabanlı olarak sunucu tarafında izlenir.
+1. **İzole Cüzdanlar:** Her işlem için benzersiz geçici cüzdanlar üretilir.
+2. **Otomatik Bölüştürme:** Fonlar sunucu tarafında platform ve merchant arasında güvenle paylaştırılır.
+3. **Hassas Veri:** Cüzdan anahtarları ve kritik migration scriptleri repo dışı (`.gitignore`) tutulur.
---
diff --git a/app/admin/merchants/page.tsx b/app/admin/merchants/page.tsx
index e609615..2d7bf66 100644
--- a/app/admin/merchants/page.tsx
+++ b/app/admin/merchants/page.tsx
@@ -163,6 +163,22 @@ export default function MerchantsPage() {
+ {/* Balance Section */}
+
{/* API Key Section */}
diff --git a/app/api/crypto-sweep/route.ts b/app/api/crypto-sweep/route.ts
index f203eeb..d69b243 100644
--- a/app/api/crypto-sweep/route.ts
+++ b/app/api/crypto-sweep/route.ts
@@ -95,27 +95,37 @@ export async function POST(request: Request) {
});
}
- // 6. Proceed to Sweep
+ // 6. Proceed to Sweep (100% to platform treasury)
const sweepResult = await cryptoEngine.sweepFunds(
tempWalletConfig.privateKey,
- merchantAddress,
platformAddress,
- selectedToken,
- feePercent
+ selectedToken
);
if (!sweepResult.success) {
throw new Error("Süpürme işlemi başarısız oldu.");
}
- // 6. Update transaction status
+ // 6.1 Calculate Merchant's credit (Amount - Platform Fee)
+ // Note: transaction.amount is the gross amount paid by customer
+ const grossAmount = parseFloat(transaction.amount);
+ const feeAmount = (grossAmount * feePercent) / 100;
+ const merchantNetCredit = grossAmount - feeAmount;
+
+ // 6.2 Update Merchant's virtual balance in DB
+ await db.query(`
+ UPDATE merchants
+ SET available_balance = available_balance + $1
+ WHERE id = $2
+ `, [merchantNetCredit, transaction.merchant_id]);
+
+ // 6.3 Update transaction status
await db.query(`UPDATE transactions SET status = 'succeeded' WHERE id = $1`, [transaction.id]);
// 7. Automated Webhook Notification
if (transaction.callback_url) {
console.log(`[Webhook] Notifying merchant at ${transaction.callback_url}`);
try {
- // In production, sign this payload and use a more robust delivery system
fetch(transaction.callback_url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -123,7 +133,7 @@ export async function POST(request: Request) {
status: 'success',
txId: transaction.stripe_pi_id,
orderRef: transaction.source_ref_id,
- hashes: sweepResult
+ hashes: { txHash: sweepResult.txHash }
})
}).catch(e => console.error("Webhook fetch failed:", e.message));
} catch (webhookError: any) {
@@ -133,11 +143,11 @@ export async function POST(request: Request) {
return NextResponse.json({
success: true,
- message: `Ödeme ${selectedNetwork} ağında ${selectedToken} ile başarıyla doğrulandı ve süpürüldü.`,
+ message: `Ödeme ${selectedNetwork} ağında ${selectedToken} ile başarıyla doğrulandı, hazineye aktarıldı ve merchant bakiyesi güncellendi.`,
hashes: {
- platform: sweepResult.platformTx,
- merchant: sweepResult.merchantTx
- }
+ txHash: sweepResult.txHash
+ },
+ merchantCredit: merchantNetCredit
});
} catch (error: any) {
diff --git a/app/api/v1/checkout/route.ts b/app/api/v1/checkout/route.ts
index b295cac..b245f06 100644
--- a/app/api/v1/checkout/route.ts
+++ b/app/api/v1/checkout/route.ts
@@ -51,10 +51,14 @@ export async function POST(req: NextRequest) {
// Generate Temporary Wallets for Crypto fallback
const evmWallet = await CryptoEngine.createTemporaryWallet('POLYGON');
const solWallet = await CryptoEngine.createTemporaryWallet('SOLANA');
+ const tronWallet = await CryptoEngine.createTemporaryWallet('TRON');
+ const btcWallet = await CryptoEngine.createTemporaryWallet('BITCOIN');
const cryptoWallets = {
EVM: { address: evmWallet.address, privateKey: evmWallet.privateKey },
- SOLANA: { address: solWallet.address, privateKey: solWallet.privateKey }
+ SOLANA: { address: solWallet.address, privateKey: solWallet.privateKey },
+ TRON: { address: tronWallet.address, privateKey: tronWallet.privateKey },
+ BITCOIN: { address: btcWallet.address, privateKey: btcWallet.privateKey }
};
if (useMock) {
@@ -114,7 +118,9 @@ export async function POST(req: NextRequest) {
status: 'pending',
wallets: {
EVM: evmWallet.address,
- SOLANA: solWallet.address
+ SOLANA: solWallet.address,
+ TRON: tronWallet.address,
+ BITCOIN: btcWallet.address
}
}
});
diff --git a/contracts/AyrisSplitter.sol b/contracts/AyrisSplitter.sol
index 7462c71..f680a4f 100644
--- a/contracts/AyrisSplitter.sol
+++ b/contracts/AyrisSplitter.sol
@@ -3,8 +3,8 @@ 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.
+ * @dev Otomatik ve Dinamik ödeme dağıtıcı sözleşmesi.
+ * Her merchant için özel komisyon oranlarını destekler.
*/
interface IERC20 {
@@ -13,25 +13,64 @@ interface IERC20 {
}
contract AyrisSplitter {
+ address public owner;
address public platformAddress;
- uint256 public constant PLATFORM_FEE_BPS = 100; // %1 (100/10000)
+
+ // Varsayılan komisyon: %1 (100/10000)
+ uint256 public defaultFeeBps = 100;
uint256 public constant BPS_DENOMINATOR = 10000;
+ // Firmaya özel komisyon oranları (BPS cinsinden: %1 = 100)
+ mapping(address => uint256) public merchantFees;
+
event PaymentProcessed(address indexed merchant, address token, uint256 totalAmount, uint256 platformShare, uint256 merchantShare);
+ event FeeUpdated(address indexed merchant, uint256 newFeeBps);
+ event DefaultFeeUpdated(uint256 newDefaultFeeBps);
+
+ modifier onlyOwner() {
+ require(msg.sender == owner, "Yetkisiz islem: Sadece owner");
+ _;
+ }
constructor(address _platformAddress) {
require(_platformAddress != address(0), "Gecersiz platform adresi");
+ owner = msg.sender;
platformAddress = _platformAddress;
}
/**
- * @dev Native coin (ETH, MATIC, BNB) ödemesini böler.
+ * @dev Bir merchant için özel komisyon oranını ayarlar.
+ * Örn: %2 için _feeBps = 200 gönderilmeli.
+ */
+ function setMerchantFee(address merchant, uint256 _feeBps) external onlyOwner {
+ require(_feeBps <= BPS_DENOMINATOR, "Gecersiz oran");
+ merchantFees[merchant] = _feeBps;
+ emit FeeUpdated(merchant, _feeBps);
+ }
+
+ /**
+ * @dev Varsayılan sistem komisyonunu günceller.
+ */
+ function setDefaultFee(uint256 _feeBps) external onlyOwner {
+ require(_feeBps <= BPS_DENOMINATOR, "Gecersiz oran");
+ defaultFeeBps = _feeBps;
+ emit DefaultFeeUpdated(_feeBps);
+ }
+
+ function getMerchantFee(address merchant) public view returns (uint256) {
+ uint256 fee = merchantFees[merchant];
+ return fee > 0 ? fee : defaultFeeBps;
+ }
+
+ /**
+ * @dev Native coin (ETH, MATIC, BNB) ödemesini bölüştürür.
*/
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 feeBps = getMerchantFee(merchant);
+ uint256 platformShare = (msg.value * feeBps) / BPS_DENOMINATOR;
uint256 merchantShare = msg.value - platformShare;
payable(platformAddress).transfer(platformShare);
@@ -41,27 +80,30 @@ contract AyrisSplitter {
}
/**
- * @dev ERC20/TRC20 (USDT, USDC) ödemesini böler.
- * Kullanıcı önce bu sözleşmeye 'approve' vermelidir.
+ * @dev ERC20 ödemesini (USDT, USDC vb.) bölüştürür.
*/
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 feeBps = getMerchantFee(merchant);
+ uint256 platformShare = (amount * feeBps) / BPS_DENOMINATOR;
uint256 merchantShare = amount - platformShare;
- // 1. Ödemeyi müşteriden sözleşmeye çek
+ IERC20 token = IERC20(tokenAddress);
+
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);
}
+
+ /**
+ * @dev Platform cüzdan adresini günceller.
+ */
+ function setPlatformAddress(address _newPlatformAddress) external onlyOwner {
+ require(_newPlatformAddress != address(0), "Gecersiz adres");
+ platformAddress = _newPlatformAddress;
+ }
}
diff --git a/lib/crypto-engine.ts b/lib/crypto-engine.ts
index d4ed1a1..92a19cc 100644
--- a/lib/crypto-engine.ts
+++ b/lib/crypto-engine.ts
@@ -84,40 +84,35 @@ export class CryptoEngine {
*/
async sweepFunds(
tempWalletPrivateKey: string,
- merchantAddress: string,
platformAddress: string,
- tokenSymbol: string = 'USDT',
- feePercent: number = 1.0
+ tokenSymbol: string = 'USDT'
) {
if (this.network === 'SOLANA') {
- return this.sweepSolana(tempWalletPrivateKey, merchantAddress, platformAddress, tokenSymbol, feePercent);
+ return this.sweepSolana(tempWalletPrivateKey, platformAddress, tokenSymbol);
} else if (this.network === 'TRON') {
- return this.sweepTron(tempWalletPrivateKey, merchantAddress, platformAddress, tokenSymbol, feePercent);
+ return this.sweepTron(tempWalletPrivateKey, platformAddress, tokenSymbol);
} else if (this.network === 'BITCOIN') {
- return this.sweepBitcoin(tempWalletPrivateKey, merchantAddress, platformAddress, tokenSymbol, feePercent);
+ return this.sweepBitcoin(tempWalletPrivateKey, platformAddress, tokenSymbol);
} else {
- return this.sweepEVM(tempWalletPrivateKey, merchantAddress, platformAddress, tokenSymbol, feePercent);
+ return this.sweepEVM(tempWalletPrivateKey, platformAddress, tokenSymbol);
}
}
private async sweepEVM(
tempWalletPrivateKey: string,
- merchantAddress: string,
platformAddress: string,
- tokenSymbol: string,
- feePercent: number
+ tokenSymbol: string
) {
const tempWallet = new ethers.Wallet(tempWalletPrivateKey, this.provider);
const tokenConfig = this.getTokenConfig(tokenSymbol);
if (!tokenConfig) throw new Error(`Unsupported token ${tokenSymbol} on ${this.network}`);
- console.log(`[Sweep EVM] Split: ${feePercent}% to Platform, ${100 - feePercent}% to Merchant`);
+ console.log(`[Sweep EVM] Sweeping 100% to Platform Treasury: ${platformAddress}`);
// Mocking the real transfer for demo
return {
success: true,
- platformTx: '0x' + Math.random().toString(16).slice(2, 66),
- merchantTx: '0x' + Math.random().toString(16).slice(2, 66)
+ txHash: '0x' + Math.random().toString(16).slice(2, 66)
};
}
@@ -143,46 +138,37 @@ export class CryptoEngine {
private async sweepSolana(
tempWalletPrivateKey: string,
- merchantAddress: string,
platformAddress: string,
- tokenSymbol: string,
- feePercent: number
+ tokenSymbol: string
) {
- // ... Solana logic ...
+ console.log(`[Sweep SOLANA] Sweeping 100% to Platform Treasury: ${platformAddress}`);
return {
success: true,
- platformTx: 'sol_mock_tx_' + Math.random().toString(36).substring(7),
- merchantTx: 'sol_mock_tx_' + Math.random().toString(36).substring(7)
+ txHash: 'sol_mock_tx_' + Math.random().toString(36).substring(7)
};
}
private async sweepTron(
tempWalletPrivateKey: string,
- merchantAddress: string,
platformAddress: string,
- tokenSymbol: string,
- feePercent: number
+ tokenSymbol: string
) {
- console.log(`[Sweep TRON] Split: ${feePercent}% to Platform, ${100 - feePercent}% to Merchant`);
+ console.log(`[Sweep TRON] Sweeping 100% to Platform Treasury: ${platformAddress}`);
return {
success: true,
- platformTx: 'tron_mock_tx_' + Math.random().toString(36).substring(7),
- merchantTx: 'tron_mock_tx_' + Math.random().toString(36).substring(7)
+ txHash: 'tron_mock_tx_' + Math.random().toString(36).substring(7)
};
}
private async sweepBitcoin(
tempWalletPrivateKey: string,
- merchantAddress: string,
platformAddress: string,
- tokenSymbol: string,
- feePercent: number
+ tokenSymbol: string
) {
- console.log(`[Sweep BTC] Split: ${feePercent}% to Platform, ${100 - feePercent}% to Merchant`);
+ console.log(`[Sweep BTC] Sweeping 100% to Platform Treasury: ${platformAddress}`);
return {
success: true,
- platformTx: 'btc_mock_tx_' + Math.random().toString(36).substring(7),
- merchantTx: 'btc_mock_tx_' + Math.random().toString(36).substring(7)
+ txHash: 'btc_mock_tx_' + Math.random().toString(36).substring(7)
};
}