# Presale ve Lansman Dağıtım Modeli

## Değişmez ana kayıt

Presale için ana finansal gerçeklik kullanıcının doğrulanmış USDT deposit miktarıdır. Arayüzde gösterilen tahmini OC miktarı finalizasyona kadar değişebilir.

## Politikalar

### `fixed_at_deposit`

Kullanıcının hakedişi, deposit onaylandığı andaki fiyat ve bonus snapshot'ıyla hesaplanır.

### `launch_price`

Bütün katılımcılar finalizasyon/lansman fiyatına göre yeniden hesaplanır. Kullanıcının deposit miktarı değişmez.

### `pro_rata_pool`

Presale havuzu katılımcıların ağırlıklı USDT deposit payına göre dağıtılır.

## Arz sınırı

Tahmini talep presale havuzunu aşarsa, dağıtım toplamı havuzu aşmayacak şekilde deterministik olarak küçültülür. Yuvarlama artıkları stable sıra ve largest-remainder yaklaşımıyla dağıtılır.

## Snapshot ve finalizasyon

1. Admin canlı ön izlemeyi inceler.
2. Snapshot oluşturur.
3. Snapshot içindeki deposit/fiyat/bonus/politika verileri değiştirilemez.
4. Gerekliyse ikinci yönetici onayı alınır.
5. Snapshot final hale getirilir.
6. Kullanıcı final OC hakkı ledger'a yazılır.
7. Arz ve fiyat ayarları kilitlenir.
8. Aynı snapshot yeniden finalize edilirse yeni bakiye oluşmaz.

## Kullanıcı cüzdan görünümü

```text
Onaylanmış deposit
Tahmini OC
Final OC
Oyun içinde biriktirilmiş OC_TOKEN
Lansmanda dağıtılacak toplam
Cüzdan adresi
Dağıtım durumu
Transaction hash
```

## Contract bulunan dağıtım

- Final presale tutarı alınır.
- Kullanıcının dağıtılmamış oyun OC_TOKEN bakiyesi eklenir.
- Kullanıcı mainnet adresi doğrulanır.
- Sistem bakiyeyi dağıtım clearing hesabında kilitler.
- Harici signer batch transfer oluşturur.
- Tx hash ve receipt saklanır.
- Confirmation sonrası item tamamlanır.

## Contract bulunmayan dağıtım

- Kampanya `manual_withdrawal` olarak açılır.
- Cüzdanı olmayan kullanıcı `waiting_wallet` durumunda bekler.
- Kullanıcı adres eklediğinde admin “Cüzdanları Yenile” çalıştırır.
- Admin dış transferin tx hash'ini girer.
- Confirmation ile item kapanır.

## İdempotency

- Snapshot tekilleştirilir.
- Purchase/deposit provider transaction ID tekildir.
- Finalizasyon ikinci kez token üretemez.
- Kullanıcı oyun token bakiyesi aynı anda yalnızca bir kampanyaya taşınabilir.
- Distribution item tx hash'i tekrar kullanılamaz.
- Confirmation ikinci kez ledger etkisi oluşturmaz.

## Refund/chargeback

Gerçek ödeme sağlayıcısında refund/chargeback geldiğinde:

- Presale finalizasyon öncesiyse deposit uygun durumla düşürülmeli.
- Finalizasyon sonrasındaysa otomatik sessiz düzeltme yapılmamalı.
- Reversal ledger işlemi ve risk vakası açılmalı.
- Dağıtım yapılmışsa hukuk/uyum süreci işletilmeli.
