## ARENA BATTLE — SİTE CÜZDANI AYARLARI (R24)

## 1. Sitenin callback alıcısını kur
SEAMLESS-WALLET.txt sözleşmesine ve `slot-battles-seamless-wallet.mjs`
örneğine göre sunucunda tek bir POST endpoint aç. Bu endpoint bakiye
okuma, katılım, sonuç ve iade işlemlerini kendi cüzdan defterinde işler.
Transfer cüzdanı ile tek site cüzdanını aynı hesapta birlikte kullanma.

## 2. Sağlayıcı panelinden bağlantıyı aç
Bağlı siteler > site > Ayarlar > Site cüzdanı > Cüzdan bağlantısı.
Model: Tek site cüzdanı. Callback: tam HTTPS adresi. İstek süresi:
1.000–15.000 ms; varsayılan 8.000 ms. Kaydet.
İlk kayıtta üretilen imza anahtarı yalnız bir kez gösterilir. Anahtarı
operatör sunucusunun gizli ortam değişkenine koy. Oyuncuya veya iframe'e
gönderme. Operatör paneli yalnız model, adres ve son istek durumunu görür.

## 3. Güvenli model değişikliği
Genel site düzenleme endpoint'i cüzdan modelini değiştiremez. Açık oda,
ayrılmış tutar, bekleyen cüzdan komutu/sonuç işi ya da mevcut aktarım
bakiyesi varsa değişiklik reddedilir. Eski bakiyeleri sıfırlama; önce
mevcut modelde mutabakatı tamamla. Tek site cüzdanında misafir hesap
ve başlangıç bakiyesi kapatılır. Kalıcı oyuncu kimlikleri değişmez.
Callback adresi, süre ve imza anahtarı değişiklikleri de bekleyen
işlemlerin güvenle tamamlanmasını gerektirir.

## 4. İmza ve ağ
İstek ve yanıt; zaman damgası ve kesin ham JSON gövdesi üzerinden HMAC-SHA256 ile imzalanır. Aşağıdaki ifade imza formülüdür; tek başına çalıştırılacak program değildir:

```text İmza formülü
signature = HMAC_SHA256(secret, timestamp + "." + rawBody)
```

Bu başlıkları kullanın. Yer tutucuları cüzdan SDK’sının ürettiği zaman damgası ve imzayla değiştirin:

```http İmza başlıkları
X-Slot-Wallet-Timestamp: <unix-milliseconds>
X-Slot-Wallet-Signature: <lowercase-hex-hmac-sha256>
```

Kabul edilen zaman farkı 60 saniyedir. Her tekrar aynı işlem kimliğini taşır; aynı kimlik ikinci kez para hareketi üretmemelidir. Aynı kimliğin içeriği farklıysa işlem reddedilir. Ağ hatası yeni ödeme değildir.

HTTPS, public hedef ve yönlendirmesiz istek kullanılır. Kullanıcı bilgisi, sorgu veya # parçası URL’ye eklenmez. Yerel geliştirme sunucusu açıkça izin verirse HTTP 127.0.0.1 / localhost / ::1 kullanılabilir. LAN veya özel ağ IP’si bu istisnaya dahil değildir.

## 5. Yönetim API’si
Yapılandırmayı okuyun:

```http
GET /control/api/tenants/:id/wallet
```

Cüzdan bağlantısını güncelleyin:

```http
PATCH /control/api/tenants/:id/wallet
```

```json Cüzdan yapılandırma gövdesi
{
  "mode": "seamless",
  "url": "https://operator.example/api/slot-wallet",
  "timeoutMs": 8000
}
```

İmza anahtarını yenileyin:

```http
POST /control/api/tenants/:id/wallet/rotate
```

```json Yenileme gövdesi
{}
```

:id yerine tanımlanan site kimliğini yazın. Okuma `sites.read`, değiştirme `sites.manage` ister. Yönetici oturumu ve CSRF başlığı gerekir; operatör API anahtarıyla çağrılmaz. GET yanıtı secret içermez. İlk PATCH ve yenileme yanıtı sırrı yalnız bir kez verir. Kontrol veritabanını ve `tenant-wallet-master.key` dosyasını birlikte yedekleyin.

## 6. Operatör paneli
API ve entegrasyon sayfası gerçek cüzdan modelini, callback adresini,
yapılandırma durumunu ve son istek zamanını gösterir. Ayrı API anahtarı
ile launch, oyuncu ve geçmiş uçlarını kullan. Bakiye hareketleri
tarayıcıda üretilmez. Sonuç geçmişi, cüzdan callback'i ve tekrar teslim
mutabakatı için SEAMLESS-WALLET.txt dosyasını uygula.
