Heylogram TV Ekosistemi
Polygon üzerinde 6 token, 17 akıllı kontrat ve bir B2B platformuyla inşa edilen Web3 ekonomisi. Domain NFT'leri kimliği, Garura mevsimsel havuzu ödülü, URA tıklama oyunu kütleyi, partner sistemi de keşfi taşır.
01Vizyon¶
Heylogram TV iki büyük soruya yanıt arar: "Dijital kimlik nasıl bireyselleşir?" ve "Bir Web3 ekonomisi tek bir token yerine rol bazlı çoklu tokenle nasıl çalışır?"
Birinci soruya cevap .heylogramtv domain NFT — adı cüzdana bağlayan, ENS gibi ama Polygon tabanlı, marketplace'i olan, profil sayfası açılabilen bir kimlik katmanı.
İkinci soruya cevap altı tokenli ekonomi:
- VOI — görev/ödül tokeni, mintable cap'li
- HEY — yayın platformu tokeni, mintable cap'li
- JVOI — utility token, sabit arz, sahipsiz (immutable)
- HLTV — Heylogram TV streaming tokeni, sabit arz, sahipsiz
- URA — Garura'nın yaprağı, tıklayarak kazanılır, 98.7Q arz cap
- GARURA — dünyada 1 adet, son tıklayana gider
1.1 Neden Polygon?¶
Bir kullanıcı haftada onlarca görev tamamlayabilir, partner tıklayabilir, URA için günde 8640 kez tıklayabilir. Ethereum mainnet bu ölçek için pahalı. Polygon, gas maliyetini günlük mikro-davranışı taşıyabilecek seviyeye indirir; aynı zamanda QuickSwap, Uniswap V3, OpenSea gibi yerleşik altyapıyla tam uyumludur.
1.2 Aşamalı Strateji¶
Tek seferde 17 kontrat deploy etmek ekosistemi yormaktan başka bir şey yapmaz. Heylogram TV, fonksiyonel bileşenleri bağımsız aileler halinde canlıya almıştır:
- Faz 1 (canlı): Domain NFT + Marketplace + VOI/HEY mint + Görevler + Partner
- Faz 2 (canlı): JVOI + HLTV fixed-supply tokenler
- Faz 3 (canlı): URA tıklama oyunu + GARURA grand prize
- Faz 4 (rafa kaldırıldı): Garura Pool V2 — 2026-05-16'da sezon sistemi durduruldu, kontrat hala canlı ama frontend kullanmıyor
- Faz 5 (canlı): LuckPool V2 (LP NFT şans havuzu) + kendi yazılmış DEX aggregator (Uniswap V3 + Sushi V3 + QuickSwap V3)
- Faz 6 (deploy bekliyor): Liquidity Mining + Badge ERC-1155
02Tasarım İlkeleri¶
2.1 V1 → V2 Tekrar Yazımı¶
Heylogram TV mainnet'e deploy edilmiş bir protokol — bu yüzden her hataya yeni bir kontrat sürümüyle yanıt verir. Tablo:
| Kontrat | V1 Sorunu | V2 Çözümü |
|---|---|---|
GaruraPool | Puan/VOI oranı yok, partner istediği zaman çekebilir, sezon kavramı bilmiyor | Sabit 1 VOI = 1000 puan; %15 platform / %85 havuz otomatik split; partner sadece kullanılmayanı çekebilir |
LuckPool | ILocker.getLock 6-return olarak yanlış tanımlı → her register revert | Struct return ile doğru ABI + LP NFT içerik doğrulama (ekosistem tokeni şartı) + emergencyWithdraw |
HeylogramDomain | Sabit fiyat (her domain 6 POL) | Tier fiyatlama: 1 harf $10, 2=$5, 3=$2.5, 4=$1.3, 5+=$0.5 |
HeylogramMarketplace | Tek kontrat desteği | Eski + yeni domain kontratı paralel desteği (_nftKontrat auto-detect) |
2.2 Çoklu Token Felsefesi¶
Tek tokenli ekonomilerde rol karışıklığı oluşur: "Bu token ödeme mi, ödül mü, governance mı?" Heylogram TV her rolü ayrı tokene verir:
- VOI — görev/aktivite ödülü, mevsimsel havuz yakıtı
- HEY — yayın ekonomisi, NFT hediye ödemesi
- JVOI — utility (domain alımı, garura'ya katılım)
- HLTV — Heylogram.tv streaming platformu
- URA — gamification (her tıklama 1 URA)
- GARURA — efsanevi (dünyada 1 adet)
2.3 İki Tür Token: Mintable vs Fixed¶
Heylogram TV iki farklı token mimarisi kullanır:
- Mintable + Pausable + Ownable — VOI, HEY, URA. Owner mint edebilir, pause edebilir. Esneklik var ama merkezilik var. Çözüm: Owner'ı MintTimelock kontratına devret → 48h queue mecburi.
- Fixed + Sahipsiz + Immutable — JVOI, HLTV. Deploy anında tüm arz cüzdana basılır, sonra hiçbir admin müdahalesi mümkün değil. CMC'nin "mintable" uyarısı tarihte bu tokenler için anlamsız.
- Tek Birim — GARURA. Sadece 1 adet, deploy anında vault'a (URA tıklama oyunu kontratı) gönderilir.
2.4 Domain'e Bağlı Partnerlik¶
Web3'te kimlik problemi: bir cüzdan kim olduğunu nasıl kanıtlar? Heylogram TV cevabı: .heylogramtv domain NFT.
Partner olmak için kullanıcının en az bir .heylogramtv domain NFT'sine sahip olması gerekir. Domain satıldığı anda partner statüsü otomatik iptal — kontratlar her çağrıda ownerOf(tokenId) == partnerkontrolü yapar. Bu, kimlik ve partner havuzunun NFT üzerinden bağlı kalmasını sağlar.
2.5 Off-Chain Hesaplama, On-Chain Para¶
Kullanıcı puanları, profil verisi, partner görev kayıtları ve blog içeriği Firestore'da yaşar. Kontratlar yalnızca token tutar, swap eder, mint eder. Bu hibrid mimari, gas maliyetini ekonomik tutar; ama veri tutarlılığı Firestore'a düşer (bkz. §18 Audit).
2.6 İki Adımlı Admin Transferi¶
Modern kontratlar (GaruraPool V2, LiquidityMining, MintTimelock)proposeAdmin + acceptAdmin ikili akışını kullanır. Tek adımlı transfer (eski admin yanlış adres set ederse geri dönüşü yok) önlenmiştir.
03Mimari Bakış¶
3.1 Kontrat Aileleri (V2 odaklı)¶
| Aile | Kontratlar | Ne yapar? |
|---|---|---|
| Token | VOIToken, HEYToken, JJVOIToken, HLTVToken, URAToken, GaruraToken | 6 ayrı ERC-20, rol bazlı |
| Kimlik | HeylogramDomain (v2), HeylogramMarketplace (v2) | .heylogramtv domain NFT + alım-satım |
| Ödül Havuzu | GaruraPool v2 rafa, LuckPool v2 canlı | LuckPool şans bazlı dağıtım (Garura sezon sistemi 2026-05-16'da durduruldu) |
| Likidite | LiquidityMining bekliyor | Uniswap V3 LP kilitleme + JVOI ödülü |
| Yönetim | MintTimelock bekliyor | 48h mint queue (CMC uyarısı için) |
| B2B | HeylagramGaruraBadge bekliyor | ERC-1155 milestone badge'ler (partner-VOI akışı GaruraPool V2'de) |
3.2 Veri Akışı: Bir Kullanıcının Günü¶
3.3 Para Akışı¶
3.4 CMC Token Listing Endpoint'leri¶
CoinMarketCap bir token'ı listelemek için üç zorunlu endpoint ister:total-supply, circulating-supply,max-supply. Her biri sıradan bir sayı döner (JSON değil — düz metin). Heylogram TV bunları VOI ve HEY için ayrı ayrı sağlar:
| Endpoint | Token | Yanıt Tipi | Veri Kaynağı |
|---|---|---|---|
/api/voi/total-supply | VOI | plain text uint | on-chain totalSupply() |
/api/voi/circulating-supply | VOI | plain text uint | totalSupply() − admin cüzdan − burn |
/api/voi/max-supply | VOI | plain text uint | sabit: 100,000,000 |
/api/hey/total-supply | HEY | plain text uint | on-chain |
/api/hey/circulating-supply | HEY | plain text uint | on-chain − admin |
/api/hey/max-supply | HEY | plain text uint | sabit: 2,000,000,000 |
JVOI, HLTV, GARURA, URA için bu endpoint'ler yokçünkü ya CMC'de henüz listeli değiller ya da arz hesabı sabit. Gerektiğinde aynı kalıpla eklenir.
3.5 Firestore Veri Modeli¶
On-chain'de tutmak gas pahalı olan veriler (puanlar, sezonlar, profil, partner kayıtları) Firestore'da yaşar. Server SDK admin yetkisi FIREBASE_SERVICE_ACCOUNT_JSON env değişkeniyle Vercel'e tanımlı.
kullanicilar/{wallet} // wallet adres lowercase
puan: number // toplam kazanılan puan
epochPuan: number // sezona henüz commit edilmemiş puan
tamamlananGorevler: string[] // tamamlanan görev id'leri
referans: string? // ref veren wallet (opsiyonel)
nickname: string? // URA için takma ad
createdAt, lastSeen: Timestamp
seasons/{seasonId}
token: 'VOI' | 'HEY'
amount: number // havuzdaki token miktarı
startTime, endTime: number // ms timestamp
status: 'active' | 'scheduled' | 'ended' | 'distributed'
totalCommitted: number // commit edilen puan toplamı
totalEarned: number // sezon süresince kazanılan puan
participantCount: number
garuraRegistrations/{docId}
wallet: string
seasonId: string
committedPoints: number
earnedDuringSeason: number
claimed: boolean
claimedAmount: number
domainProfiles/{name} // .heylogramtv adı (uzantısız)
displayName, bio, avatarUrl, coverColor: string
links: { twitter, github, telegram, discord, website }
customText: string
partners/{domainName} // doc ID = domain adı (wallet DEĞİL)
wallet: string
tokenId: number
activated: boolean // domain hala sahibinde mi?
logoUrl: string
website: string
webhookSecret: string // HMAC için (W12: plaintext)
activatedAt: Timestamp
partnerGorevler/{taskId}
partnerDomain: string
name, description, url: string
rewardPoints: number // max 500
totalBudget: number
spent: number
status: 'pending' | 'active' | 'ended'
createdAt: Timestamp
missions/{missionId} // platform görevleri (admin yönetir)
title, description: string
type: 'on-chain' | 'profile' | 'social' | 'partner'
points: number
repeat: 'once' | 'daily' | 'weekly'
active: boolean
uraClicks/global // tek doküman, global sayaç
total: number // toplam tıklama
lastTick: Timestamp
milestone8B: { wallet, txHash, timestamp } | null
uraNicknames/{wallet}
nickname: string
setAt: Timestamp
uraLeaderboard/{wallet} // önbellek, periyodik yenilenir
wallet, nickname, totalUra, rank, lastUpdate
votes/{threadId_walletAddr} // forum/oylama spam koruması
threadId, voter, createdAt
blogPosts/{slug} // doc ID = URL slug
title_tr, title_en: string
slogan_tr, slogan_en: string // alt başlık (opsiyonel)
excerpt_tr, excerpt_en: string // özet kart için
body_tr, body_en: string // markdown
tag: string // 'duyuru' | 'gelistirme' | 'partner' | ...
coverImage: string // opsiyonel
status: 'draft' | 'published'
publishedAt: number // ms timestamp (0 = draft)
createdAt, updatedAt: number3.6 Frontend Route Haritası¶
app/ klasöründeki kullanıcıya açık route'lar (gizli yönetim sayfaları hariç):
| Route | Ne yapar? | Cüzdan? |
|---|---|---|
/ | Landing — token grid, son satışlar, CTA | Hayır |
/about | Proje hakkında, ekip, lisans | Hayır |
/advertise | Rafa kaldırıldı (2026-05-16) — eski partner B2B tanıtım sayfası | — |
/blog | Ekosistem duyuru listesi (server-rendered, 30s cache) | Hayır |
/blog/[slug] | Tek duyuru sayfası, TR/EN içerik, paylaşım butonları, dinamik OG | Hayır |
/dapp/dex | Kendi yazılmış DEX aggregator — 3 venue (Uniswap V3 + Sushi V3 + QuickSwap V3), swap + pool + locker + luck tab'ları | Evet |
/dapp/domain | Domain mint UI — isim ara, tier fiyat, POL/VOI/HEY öde | Evet |
/dapp/ura | URA tıklama oyunu — başlatma + cüzdan bağlama | Evet |
/garura | Rafa kaldırıldı (2026-05-16) — eski Garura sezon kayıt + claim | — |
/gorevler | Rafa kaldırıldı (2026-05-16) — eski görevler listesi | — |
/hesap | Kullanıcı hesap sayfası — domain listesi, listele/iptal, bakiye | Evet |
/kesfet | Discovery — yeni alınan domain'ler, popüler profiller | Hayır |
/locker | LP NFT kilitleme arayüzü (Locker V1) | Evet |
/luck | LuckPool kayıt + claim arayüzü | Evet |
/partner | Rafa kaldırıldı (2026-05-16) — eski partner paneli | — |
/pazar | Marketplace — listeleme, filtre, satın alma (POL/VOI/HEY) | Evet (almak için) |
/resolve/[name] | Domain profil sayfası (Linktree benzeri) | Hayır (sahip ise düzenleme için) |
/s/[slug] | Promo kısa link — paylaşım sayfaları | Hayır |
/tip/[name] | Yayıncıya bahşiş gönderme sayfası | Evet (göndermek için) |
/token | VOI/HEY/JVOI/HLTV/URA bilgi sayfası (arz, fiyat, links) | Hayır |
/tr | Türkçe ana iniş sayfası (i18n) | Hayır |
/ura | URA PWA — ağaç animasyonu + tıklama + sayaç (mobile-first) | Evet |
/ura/leaderboard | URA tıklama sıralaması | Hayır |
/whitepaper | Şiirsel ana whitepaper (Gaia ağacı, TR/EN) | Hayır |
/whitepaper/technical | Eski teknik whitepaper (koyu tema) | Hayır |
/whitepaper/ura | URA detaylı kullanım kılavuzu | Hayır |
/whitepaper/docs | Bu sayfa — teknik dokümantasyon | Hayır |
3.7 Frontend Davranış Kuralları¶
Cüzdan etkileşimleri için protokol genelinde uygulanan kurallar:
forcePolygon() Paterni
Her writeContract çağrısından önce kullanıcının Polygon ağında olduğu garantilenmelidir. wagmi'nin switchChain'i bazı cüzdanlarda Ethereum'a kayabilir; bunun yerine raw provider çağrısı kullanılır:
const forcePolygon = async () => {
await window.ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: '0x89' }], // 137 = Polygon
});
};
// Her writeContract'tan önce:
await forcePolygon();
await writeContract({ ... });İmza + Timestamp Standardı
Tüm sunucu-tarafı yazma işlemlerinde EIP-191 imza + 5 dakika TTL timestamp zorunlu. Replay attack'ı önler (K06 audit).
Frontend:
const ts = Math.floor(Date.now() / 1000);
const msg = "action:<param>:<ts>";
const sig = await viem.signMessage({ account, message: msg });
fetch('/api/...', { body: { ...params, timestamp: ts, signature: sig } });
Server:
if (now - ts > 5*60) return 401; // 5dk TTL
const recovered = ecrecover(msg, sig);
if (recovered !== wallet) return 401;Wallet Adres Normalizasyonu
Firestore'da tüm wallet'lar lowercase saklanır. API'lerwallet.toLowerCase() uygular. FrontenduseAccount'tan gelen adres checksum'lu olabilir — karşılaştırmadan önce normalize edilir.
RPC Seçimi
- ✅
https://polygon.drpc.org - ✅
https://1rpc.io/matic - ❌
polygon-rpc.com— bozuk, kullanma - ❌
rpc.ankr.com/polygon— bozuk, kullanma
RainbowKit Wallet Sırası
injectedWallet birinci sıraya alınmalı — MetaMask'ın doğrudan açılması için. Yoksa RainbowKit ekran açıp seçim bekler, UX kötüleşir.
3.8 DEX Aggregator (/dapp/dex)¶
Heylogram TV kendi yazılmış multi-venue DEX aggregator'ına sahip (lib/dexTokens.ts + lib/dexAdapters.ts). Tek bir frontend, üç farklı Polygon DEX'inden paralel olarak quote alır, en iyi fiyatı bulur, ona göre swap yapar veya LP pozisyonu oluşturur. Mevcut /dapp/dex sayfasında dört tab var: Swap, Pool,Locker, Luck.
Desteklenen Venue'lar
| Venue | Protokol | Quoter | Router | Position Manager |
|---|---|---|---|---|
| Uniswap V3 | univ3 (4 fee tier) | 0x61fF…B21e | 0x68b3…Fc45 | 0xC364…FE88 |
| Sushi V3 | univ3 (fork, aynı ABI) | 0x64e8…08A7 | 0x0aF8…44c3 | 0xB740…a40 |
| QuickSwap V3 | algebra (dinamik fee) | 0xa15F…FC89 | 0xf5b5…8E12 | 0x8eF8…1de6 |
Uniswap V3 ve Sushi V3 aynı ABI'yi paylaşır (4 sabit fee tier:100 / 500 / 3000 / 10000). QuickSwap V3 Algebra Integral kullanır — fee parametresi yoktur, pool'un kendisi dinamik fee hesaplar.
Token Kataloğu
- Stable + Native: POL (native MATIC, wrap: WMATIC), USDC (6 dec), USDT (6 dec)
- Ekosistem: URA, HEY, VOI, JVOI, HLTV, GARURA (hepsi 18 dec)
- Toplam 9 token;
POLYGON_TOKENSsabit objesi
URA / Stable Likidite Haritası
URA/USDC → Sushi V3 %0.3 (ana havuz)
URA/POL → Uniswap V3 %1
HEY/POL → Uniswap V3 %0.3
VOI/POL → Uniswap V3 %0.3
JVOI/POL → Uniswap V3 %0.3
HLTV/POL → Uniswap V3 %0.3
USDC/USDT → Stable %0.01Aggregator Akışı
Kullanıcı: 1 URA → ? USDC
│
▼
quoteBestVenue(tokenIn=URA, tokenOut=USDC, amountIn=1e18)
│
├─→ quoteFromVenue(uniswap) → tüm fee tier'ları dene + pool-based fallback
├─→ quoteFromVenue(sushi) → pool-based (Sushi'nin Quoter'ı bozuk)
└─→ quoteFromVenue(quickswap) → Algebra quoter (dinamik fee)
│
▼ Promise.all paralel
│
▼
Sonuçları karşılaştır → amountOut max olan venue.kazanır
│
▼
buildSwapTx(venue, ...) → router-spesifik tx (univ3 vs algebra ABI)
│
▼
walletClient.writeContract(...)Pool-Based Fallback Quote
Quoter kontratı çalışmadığı (Sushi V3 gibi) veya sertifikalı olmadığı zaman quoteFromPoolBased devreye girer: factory'den pool adresini al, slot0.sqrtPriceX96'yı oku, basit price formülü ile hesapla:
price (token1/token0) = (sqrtPriceX96)² / 2²⁰⁰
amountOut (token0 → token1) = amountIn × price
amountOut (token1 → token0) = amountIn / price
amountOut -= amountOut × fee / 1_000_000 // %0.3 = 3000Bu fallback küçük swap'larda doğru, büyük swap'larda slippage hesaplamaz — yalnız tahmin. Gerçek swap için router yine deamountOutMinimum ile çağrılır (kullanıcı slippage tolerance belirler).
LP Mint (Pool Tab)
buildMintTx ile yeni LP pozisyonu oluşturulur. Uniswap V3 / Sushi V3 için fee parametresi gerekir, Algebra'da yoktur. Full-range pozisyonlar için tick'lerfullRangeTicks(spacing) ile hesaplanır:
spacing fee
1 100 (stable)
10 500
60 3000 (yaygın)
200 10000 (volatile)
60 algebra (Quickswap, varsayılan)
tickLower = ceil(-887272 / spacing) × spacing
tickUpper = floor(887272 / spacing) × spacingCross-DEX Referans Fiyat
Yeni bir havuz açarken (token bir DEX'te listeli ama diğerinde değil), findReferencePrice tüm venue'lardan paralel arama yapar; ilk bulduğu pool'un sqrtPriceX96'sını ve gerçek display fiyatını (token0 decimals + token1 decimals farkı hesaplanmış) döner. Bu, yeni pool oluştururken doğru başlangıç fiyatını set etmek için kullanılır.
Locker + Luck Tab'ları
- Locker:
LockerPanelkomponenti (29KB) — kullanıcı LP NFT'sini Locker V1 kontratına (0x3df6…CA98) kilitler. Süre seçimi, lock onayı, mevcut lock'lar listesi. - Luck:
LuckPanelkomponenti (11.5KB) — kullanıcının Locker'daki LP NFT'sini LuckPool V2'ye kaydeder (register(lockId)), süresi dolunca ödülü claim eder.
Bu iki tab, DEX → LP → Lock → Luck akışını tek ekranda birleştiriyor. Kullanıcı swap yaptıktan sonra aynı sayfadan LP oluşturup, sonra Locker'a kilitleyip, Luck'a kaydedebilir.
POL Native Swap
Native POL ile swap için WMATIC wrap'lanır (POL address = 0x0 olduğu için adapterwrapped alanını kullanır). Native değernativeValue parametresiyle router'a iletilir.
04Token Ailesi¶
| Token | Tip | Max Arz | Mint | Pause | Sahip |
|---|---|---|---|---|---|
VOI | Mint tamamlandı | 100,000,000 | Cap doldu | Evet (kullanılmıyor) | Owner |
HEY | Mint tamamlandı | 2,000,000,000 | Cap doldu | Evet (kullanılmıyor) | Owner |
JVOI | Fixed | 777,777,777 | Yok | Yok | Sahipsiz |
HLTV | Fixed | 629,629,629 | Yok | Yok | Sahipsiz |
URA | Mintable (lockable) | 98,774,312,000,000,000 | Minter (kilitlenebilir) | Yok | Owner (renounce edilebilir) |
GARURA | Tek birim | 1 | Yok | Yok | Sahipsiz |
4.1 VOI — Görev/Aktivite Tokeni¶
ERC20 + ERC20Permit + ERC20Burnable + Pausable + Ownable. 100M cap. Kontrat seviyesinde mintable kalsa da100M cap'in tamamı dolduruldu — operasyonel olarak mint yapılmıyor, admin panelinden mint UI'ı kaldırıldı. EIP-2612 permit imzayla approve verilmesini sağlar; transfer vergisi yok.
Kullanım: DEX likidite havuzlarında (Uniswap V3 / Sushi V3 / QuickSwap V3), marketplace'te domain alımı için ödeme.
4.2 HEY — Yayın Tokeni¶
VOI ile aynı yapı, farklı supply (2B). 2B cap'in tamamıdolduruldu — operasyonel mint kapandı, admin UI kaldırıldı. Heylogram TV streaming platformunun ana ödül tokeni — şu an domain ödemesi ve marketplace ödemesi için kullanılıyor, gelecekteki canlı yayın platformuna hazır.
mint fonksiyonu OZ Ownable miras aldığı için teknik olarak çağrılabilir ama hiçbir adres yeni mint istemiyor; admin paneli üzerinden mint butonu kaldırıldı (2026-05-16). CMC "Mintable" uyarısı için kalıcı çözüm:renounceOwnership() çağrılması — şu an karar aşamasında (sahipsiz vs gelecek esneklik).4.3 JVOI — Sahipsiz Utility Token¶
Tamamen farklı mimari. OpenZeppelin kullanmıyor, ham ERC-20 yazımı. Ownable yok. mint yok.Pausable yok. Constructor'da tüm arz (777,777,777 JVOI) deployer'a mint edilir; sonra kontrat sonsuza kadar değişmez.
On-chain metadata: Kontrata website,whitepaper, platform, descriptiongibi sabit string'ler yazılı — explorer'da görünür.
4.4 HLTV — Streaming Platformu Tokeni¶
JVOI ile aynı mimari (ham ERC-20, sahipsiz, immutable). Supply629,629,629 — kullanıcının iki "vanity" deployer adresinin hex digit toplamına denk gelen sembolik miktar.
Hedef kullanım: Heylogram.tv (gelecek canlı yayın platformu) streamer tip + NFT hediye ekonomisi.
4.5 URA — Garura'nın Yaprağı¶
Tıklama oyunu tokeni. Tasarım kararı: DEX güvenliğitüm "şüpheli" özellikleri kaldırarak elde edilmiş:
- Pause yok
- Blacklist yok
- Transfer vergisi yok
- Upgrade yok
- Mint tek bir adrestan (tıklama oyunu kontratı)
- Minter
lockMinter()ile sonsuza kilitlenir - Kilit sonrası
renounceOwner()→ tam sahipsiz
Toplam arz: 98,774,312,000,000,000 URA. Dünya nüfusu başına ~12,350 tıklama kadar sürer.
4.6 GARURA — Dünyada 1 Adet¶
Toplam arz 1 (= 1 × 10¹⁸ wei). Mint fonksiyonu yok. Pause yok. Owner yok. Deploy anında URA tıklama oyunu kontratına (vault) gönderilir.
Kazanım: 8,000,000,000. tıklamayı yapan cüzdan vault'tan GARURA'yı alır. _update override eder ve her el değişimini GaruraElDegistirdi event'iyle blockchain'e yazar — tarihi kayıt.
05Domain Sistemi¶
HeylogramDomain bir ERC-721 — .heylogramtvuzantılı isimleri NFT olarak temsil eder. Eski + yeni iki kontrat paralel çalışır; yeni kontrat tier fiyatlama kullanır.
5.1 Tier Fiyatlama¶
| Uzunluk | POL | VOI | USD (~POL ~$0.084) |
|---|---|---|---|
| 1 harf | 120 | 1,500 | ~$10 |
| 2 harf | 60 | 750 | ~$5 |
| 3 harf | 30 | 400 | ~$2.5 |
| 4 harf | 15 | 200 | ~$1.3 |
| 5+ harf | 6 | 80 | ~$0.5 |
5.2 İsim Kuralları¶
- 1–63 karakter
- Yalnız küçük harf (a–z), rakam (0–9), tire (-)
- Otomatik
.heylogramtvuzantısı temizlenir
5.3 Üç Para Birimi¶
mintPOL(isim, ipfsLink)— native POL ilemintVOI(isim, ipfsLink)— VOI ile (transferFrom)mintHEY(isim, ipfsLink)— HEY ile (sabit fiyat)mintUcretsiz(alici, isim, ipfsLink)— sadece owner; airdrop / ekip için
5.4 Profil Sayfası¶
Her domain bir Linktree benzeri profile sahip: /resolve/[name]. Profil verisi Firestore'da (domainProfiles/{name}):
displayName, bio, avatarUrl, coverColor
links: { twitter, github, telegram, discord, website }
customTextSahibi cüzdanını bağlayıp profilini düzenleyebilir. Sahibi değişirse profil otomatik olarak yeni sahibe geçer (Firestore wallet alanıownerOf(tokenId) ile sync).
5.5 Eski + Yeni Paralel¶
Eski kontrat (0xc654…0816) ilk versiyon, sabit fiyatlı. Yeni kontrat (0xc993…A826) tier fiyatlı v2. Her ikisi de aktif; marketplace ve partner kontratları _nftKontrat()ile hangi kontratta olduğunu otomatik tespit eder.
#1, #2 vb. tokenlar var — aynı ID iki farklı domain'e atanabilir. UI bunu ?old=1query parametresi ile ayırır. Kabul edilmiş bilinen davranış.06Marketplace¶
HeylogramMarketplace v2 domain NFT alım-satım katmanı. Eski + yeni domain kontratını otomatik destekler.
6.1 Üç Para Birimi¶
Satıcı listelerken ParaBirimi enum'undan birini seçer:POL, VOI, HEY. Alıcı aynı para birimiyle polIleSatinAl, voiIleSatinAlveya heyIleSatinAl çağırır.
6.2 Komisyon¶
komisyonBaz = 500(= %5)- Maksimum
komisyonGuncelleile owner %10'a kadar değiştirebilir - Komisyon
komisyonAliciadresine; geri kalan satıcıya
6.3 Akış¶
1. Satıcı domain NFT'sini approve eder
2. listele(tokenId, fiyat, paraBirimi)
3. aktifListeIds[] içine eklenir
4. Alıcı satın alma fonksiyonunu çağırır
5. Komisyon → komisyonAlici
6. Net fiyat → satıcı
7. NFT → alıcı
8. listeyiIptalEt veya otomatik (sat sonrası)6.4 Eski Kontrat Tespiti¶
function _nftKontrat(tokenId) returns (IERC721, bool legacy) {
try domainNFT.ownerOf(tokenId) returns (address o) {
if (o != 0) return (domainNFT, false);
} catch {}
return (domainNFTLegacy, true);
}Yeni kontratta token yoksa eski kontrata düşer. Bu, listeyi hangi NFT kontratının tutması gerektiğini belirler.
07Garura Sistemi RAFA KALDIRILDI · 2026-05-16¶
/garura, /gorevler ve /advertisesayfaları ShelvedNotice ile devre dışı bırakıldı (orijinal kod archived-page.txt'lerde saklı). GaruraPool V2 kontratı hala mainnet'te canlı (0x8755…DFBb0) ama frontend üzerinden çağrılmıyor; havuzdaki bakiyeler partner'a görepartnerCek() ile çekilebilir. Sezon sistemi ekonomik karmaşıklık nedeniyle durduruldu — basit bir VOI/HEY likidite + URA tıklama oyunu modeline geri dönüldü.Bu bölüm tarihçe + sistem davranışı için belge olarak korunuyor. Yeniden açılırsa V3 kontrat ile + Chainlink VRF entegrasyonuyla planlanır.
Aşağıdakiler eski sistemi (canlı dönemini) açıklar:
Garura mevsimsel ödül havuzu. Partner VOI yatırır, kullanıcılar görev yapar, sezon sonu havuz orantılı dağıtılır. İki versiyon var; V2 aktif kullanılırdı.
7.1 V2 — 1 VOI = 1000 Puan (sabit oran)¶
V1'in en büyük sorunu: partner istediği zaman tüm parayı çekebiliyordu, puan/VOI oranı yoktu. V2 bunu sabit bir ekonomik modelle çözer:
PUAN_VOI_ORANI = 1000 // 1 VOI = 1000 puan (asla değişmez)
PLATFORM_PAYI = 15 // %15 admin, %85 havuz
partnerYatir(voiMiktari, tokenId, isOld):
- Domain sahipliği kontrol
- VOI çekilir, partner kredisi = voiMiktari × 1000 / 1e18 puan
gorevTamamlandi(partnerWallet, puanMiktari): // backend çağırır
- Yeterli puan kredisi var mı?
- VOI karşılığı = puanMiktari × 1e18 / 1000
- %15 → adminBakiyesi
- %85 → havuzBakiyesi
- partner.kullanilanPuan += puanMiktari
- partner.kilitliVOI += havuzaGiden
- partner.platformVOI += admineGiden
partnerCek(voiMiktari):
- Sadece "serbest bakiye" = toplamYatirilan - kilitliVOI - platformVOI
- Yani kilitlenen kısım çekilemez
adminPush(kullanicilar[], miktarlar[]): // sezon sonu
- Sadece havuzBakiyesi'nden harcanır
- Max 500 kullanıcı/tx7.2 Operatör Sistemi¶
gorevTamamlandi()'yi backend server çağırır. Admin tek başına yetkili olmasın diye operators mapping'i var — admin yeni operatör (örn. ikinci server) ekleyebilir, ama operatörler para çekemez.
7.3 Sezon Hesabı (off-chain)¶
Kontrat sezon kavramı bilmez. Firestore tarafında:
seasons/{seasonId} {
token: 'VOI' | 'HEY',
amount: number, // havuzdaki token
startTime, endTime,
status: 'active' | 'scheduled' | 'ended',
totalCommitted: number, // commit edilen puan toplamı
totalEarned: number,
participantCount: number
}
garuraRegistrations/{docId} {
wallet,
seasonId,
committedPoints,
earnedDuringSeason, // sezon boyunca kazanılan ek puan
claimed: boolean
}Sezon sonunda /api/cron/season-distribute Firestore'dan oranları hesaplar, adminPush() ile kontrata yazar.
7.4 Pay Hesabı¶
kullanıcı_payı = (committedPoints + earnedDuringSeason)
/ toplam_havuz_puanı × sezon_miktarıPlatform havuzdan %10 keser (app/api/garura/claim/route.ts'te hesaplanır), kalan kullanıcıya gider. Bu, V2'de zaten kontrat seviyesinde %15 alındığı için çift kesim riskiolabilir (bkz. §18).
7.5 Acil / Yönetim¶
setPaused(true)— geçici durdurmadeprecate()— kalıcı kapatma (göç için)emergencyWithdraw(to, miktar)— sadece paused/deprecated durumdaproposeAdmin / acceptAdmin— 2 adımlı admin transferi
08Görev Sistemi RAFA · 2026-05-16¶
/gorevler sayfası 2026-05-16'daShelvedNotice ile devre dışı bırakıldı. Sistemin temel bağı Garura sezonuydu — Garura rafa kalkınca görev tamamlamanın ekonomik anlamı kayboldu./api/mission/* endpoint'leri silinmedi (bazıları URA milestone ve domain mint puanı için hala kullanılabilir), ama uçtan-uca akış (görev → puan → sezon → ödül) artık kapalı.Aşağıdaki anlatım eski sistemi belge olarak korur.
Heylogram TV'de görev tamamlamak puan kazandırırdı. Puanlar Firestore'da tutulur, sezon sonunda Garura havuzundan VOI/HEY'e çevrilirdi.
8.1 Görev Tipleri¶
| Tip | Doğrulama | Durum |
|---|---|---|
| On-chain (domain al, listele, sat) | Event log + tx hash verify | canlı |
| Profil doldur | Firestore profil alanı | canlı |
| Site ziyareti (partner) | Script + wallet param | canlı |
| X (Twitter) paylaşım | Manuel onay / honor system | geçici |
| Referans | ?ref=WALLET cookie + tx | planlanan |
8.2 İmzalı Tamamlama Akışı¶
1. Kullanıcı görevi yapar (örn. partner sitesini ziyaret)
2. Frontend: viem ile bir mesaj imzalar
message = "mission:<taskId>:<timestamp>"
3. POST /api/mission/complete { wallet, taskId, signature, timestamp }
4. Server:
- Timestamp 5dk içinde mi?
- Wallet regex doğru mu?
- Signature ECDSA recover ile doğru mu?
- Bu görev daha önce tamamlanmış mı?
5. Firestore: kullanicilar/<wallet> -> puan += task.points
aktif sezona kayıtlıysa earnedDuringSeason += task.points8.3 Tracker Script¶
Partner kendi sitesine <script src="https://web3.jjvoi.com/api/track/script/<siteKey>?hw=<wallet>"></script> ekler. Script ziyareti /api/track/visit'e bildirir, kullanıcının cüzdanı varsa Firestore puanı artar.
Bot koruması: aynı IP+cüzdan 24 saatte bir kez sayılır. Rate limit halen geliştirilmekte (bkz. §18 W04).
09Partner / B2B RAFA · 2026-05-16¶
/partner sayfası 2026-05-16'daShelvedNotice ile kapatıldı. Partner sistemi Garura havuzuna bağlıydı — Garura rafa kalkınca partner'ın VOI yatırdığı ekonomik döngü çöktü. /api/partner/*endpoint'leri ve GaruraPool V2 kontratı hala mainnet'te ama yeni partner aktivasyonu alınmıyor.Aşağıdaki anlatım eski tasarımı belge olarak korur.İleride farklı bir B2B modeliyle (örn. DEX likidite havuzlarına doğrudan yatırım + Badge mint) yeniden açılabilir.
Heylogram TV'nin en farklı yönüydü: kendi görevlerini oluşturan partner sitesi. Site sahibi gelir, görev tanımlar, kullanıcılarımızı kendi sitesine yönlendirir, ödül havuzuna VOI yatırırdı.
9.1 Partner Olma Koşulları¶
- En az 1
.heylogramtvdomain NFT'sine sahip olmak /resolve/[name]profil sayfasından "Partner Ol" butonu- Domain satılırsa partner statüsü otomatik iptal (lazy deactivation)
9.2 Aktivasyon Akışı¶
POST /api/partner/activate
{ wallet, domainName, timestamp, signature }
Server:
1. Timestamp 5dk içinde mi?
2. Signature ECDSA ile doğrula
3. domainName için ownerOf(tokenId) === wallet (on-chain)
4. Firestore: partners/{domain} = { wallet, tokenId, activated: true, ... }9.3 Görev Oluşturma¶
- Partner panelinde "Görev Oluştur" butonu
- Site adı, URL, ödül miktarı (puan), koşullar
- GaruraPool V2'ye VOI yatırır (puan kredisi alır)
- Özel JS veya Kotlin entegrasyon kodu indirir
9.4 Domain Satılırsa Ne Olur?¶
- UI:
/api/partnerGET her istekteownerOf(tokenId)canlı kontrol eder; eski sahip iseactivated: false - Kontrat: GaruraPool V2
partnerCek()ile sadece kullanılmayan VOI iade edilir; havuza giden kısım kalır - Firestore:
partners/{domain}.activatedalanı false set edilir, partner paneli açılmaz
9.5 Webhook Sistemi¶
Partner sitesinden ziyaret bildirimi yapılırken HMAC imza kullanılır:
POST /api/partner/webhook
{ taskId, userWallet, timestamp, signature }
verifyHmac(webhookSecret, taskId, userWallet, timestamp, signature)webhookSecret Firestore'da; audit'te W12olarak işaretlendi — production'da Security Rules ile sadece admin okumalı (bkz. §18).
10HeylagramGaruraBadge (ERC-1155)¶
Partner milestone NFT sistemi. Tek bir ERC-1155 kontratı, partnerler kendi seviye koleksiyonlarını açar. OpenSea'de tek koleksiyon olarak görünür: Heylagram-Garura.
10.1 İki Katmanlı Yapı¶
- Partner Collection — partner cüzdan başına 1 koleksiyon. Adı, logosu, açıklaması partner tarafından belirlenir.
- Level — her koleksiyon istediği kadar seviyeye sahip olabilir. Her seviye için rastgele bir
tokenIdüretilir.
10.2 Random TokenId Üretimi¶
Domain NFT'sinin sıralı 1, 2, 3 sorunu yok. Her level için:
tokenId = keccak256(
"heylagram-garura-badge",
partnerId,
levelIndex,
block.timestamp,
block.prevrandao,
msg.sender,
partnerCount
)Çakışma durumunda tokenIdExists[candidate] kontrolü yapılır, çakışırsa keccak256(candidate, block.timestamp)ile yeniden hesaplanır. Pratikte hiçbir zaman çakışmaz.
10.3 Ücretler¶
| İşlem | USDT | USDC | VOI | HEY |
|---|---|---|---|---|
| Koleksiyon oluşturma | 10 | 10 | 1,000 | 10,000 |
| Seviye ekleme | 2 | 2 | 200 | 2,000 |
| Mint komisyonu | %5 (max %20, admin günceller) | |||
10.4 Mint Yolları¶
adminMint(partnerId, levelIndex, user)— backend milestone'a ulaşınca çağırıradminMintBatch— sezon sonu toplu mint (max 200 kullanıcı)userMint(partnerId, levelIndex)— kullanıcı kendi ücretini öderse
10.5 contractURI ve OpenSea¶
contractURI() pure returns inline JSON:
name: "Heylagram-Garura"
description: "Heylogram TV partner badge koleksiyonu..."
external_link: "https://web3.jjvoi.com"Her tokenId'nin metadata URI'si partner tarafından belirlenir (IPFS / HTTPS — PNG, GIF, animasyonlu SVG, WebP).
11URA & GARURA¶
Tıklama oyunu mekanizması: cüzdan bağla, tıkla, 1 URA kazan. Toplam arz 98.7 katrilyon — pratikte tükenmesi uzun. Tükenirken 8 milyar tıklama eşiğine ulaşan cüzdan GARURA'yı kazanır.
11.1 Akış¶
POST /api/ura/click
{ wallet, timestamp, signature }
Server:
1. Wallet regex kontrol
2. Rate limit: 10 saniyede 1 tıklama
3. Signature ECDSA verify
4. URAToken.mint(wallet, 1e18)
5. Firestore globalClicks++
6. Milestone kontrol:
if (globalClicks === 8_000_000_000):
grandPrize: URA milestone tx hash, tarih, cüzdan kaydedilir
(GARURA transferi vault → wallet, hatta otomatik)11.2 Sızıntı Korumaları¶
- Token kontratında pause yok → DEX'ler dondurmaz
- Token kontratında blacklist yok → herhangi adres iptal edilemez
- Transfer vergisi yok → DEX'ler tam uyumlu
- Minter tek sefer ayarlanır, sonra
lockMinter()ile kilitlenir renounceOwner()ile kontrat tam sahipsiz
11.3 PWA Frontend¶
/ura sayfası mobile-first, ana ekrana eklenebilir. Ağaç animasyonu + tıklama + global sayaç. QR ile gizli erişim (web'de doğrudan link verilmez).
11.4 GARURA Tarihsel Kayıt¶
Her el değişimi blockchain'e GaruraElDegistirdi(from, to, timestamp, blockNumber) event'i olarak yazılır — sonsuza kadar tarihte kalır.
11.5 Nickname & Leaderboard¶
Cüzdan adresi yerine takma ad gösterimi için Firestore tabanlı nickname sistemi:
POST /api/ura/nickname— imzalı, 3-20 karakter, benzersizGET /api/ura/leaderboard?limit=100— periyodik snapshot, on-chain bakiyeye göre sıralı- Leaderboard önbelleği
uraLeaderboard/koleksiyonunda; cron her 15dk'da bir yenilenir - Üst 100 her zaman önbellekte; daha aşağısı sorgu üstüne hesaplanır
11.6 Referans Sistemi¶
URA tıklayan yeni kullanıcılar referans linkiyle gelirse hem davet eden hem davet edilen ek URA kazanır:
Link: https://web3.jjvoi.com/ura?ref=<wallet>
İlk tıklama akışı:
/api/ura/click { wallet, ref?, timestamp, signature }
→ /api/ura/referral { wallet, referrer }
→ Firestore: kullanicilar/{wallet}.referans = referrer (tek sefer)
→ Bonus URA: davet edene +10, davet edilene +5
→ Cooldown: aynı referrer 24 saatte max 20 davet sayar (bot koruması)11.7 In-App Wallet & Session¶
URA oyunu mobil PWA olarak çalışırken bazı kullanıcıların metamask'ı olmayabilir. Bu yüzden in-app wallet opsiyonu:
- Cüzdansız kullanıcı için anonim session key (browser localStorage)
POST /api/ura/session— imzalı, oturum başlatır- Kullanıcı puanları/URA Firestore'da biriker; istenince gerçek cüzdana bağlayıp on-chain mint edilebilir
/api/ura/batch-mint— birikmiş puanı tek tx'te kontrata mint eder (gas tasarrufu)
11.8 Detaylı Kullanım Kılavuzu¶
URA oyununun kullanıcı tarafı için ayrı bir uzun rehber var:/whitepaper/ura. Bu sayfa adım adım tıklama, PWA yükleme, leaderboard'a girme, milestone yarışı, grand prize kuralları gibi son-kullanıcı içerikleri içerir.
12Liquidity Mining¶
LiquidityMining.sol — kullanıcı POL + JVOI yatırır, Uniswap V3 LP NFT oluşturulur, 30 gün kilitlenir, süre dolunca LP NFT + %1 JVOI ödülü.
12.1 İki Pozisyon Tipi¶
| Tip | Kilit Süresi | Min Yatırım | JVOI Ödül |
|---|---|---|---|
| STANDARD | 30 gün | 0 POL | %1 |
| ANGEL (yatırımcı) | 180 gün | 100 POL | %5 |
12.2 Akış¶
deposit(jvoiAmount)payable — kullanıcı POL + JVOI yollar- Kontrat
lockedUserJvoisayacını günceller - Backend 48 saat içinde Uniswap V3 LP oluşturur
- Backend
lockPosition(positionId, nftTokenId)çağırır - Süre dolunca kullanıcı
claim(positionId)ile LP NFT + JVOI ödülünü alır
12.3 Refund Mekanizması¶
Backend 48 saat içinde NFT bağlamazsa kullanıcırefundPosition(positionId) ile POL + JVOI'sını geri alır.REFUND_TIMEOUT = 48 hours sabiti.
12.4 emergencyWithdrawToken Sertleştirmesi¶
function emergencyWithdrawToken(token, amount):
if (token == JVOI):
protected = rewardPool + lockedUserJvoi
require(balance >= protected)
withdrawable = balance - protected
require(amount <= withdrawable)
transfer(admin, amount)Admin yalnızca kullanıcı parası ve ödül havuzunun dışındakiJVOI'yi çekebilir. Yanlışlıkla gönderilen başka ERC-20'leri tamamen çekebilir.
13LuckPool V2¶
Mevcut Locker kontratına (0x3df6…CA98) kilitlenmiş LP NFT'lere yönelik şans havuzu. Lock kaydedilir, süre dolunca random bir ekosistem tokeni kazanır.
13.1 V1 → V2 Bug Düzeltmesi¶
ILocker.getLock 6 ayrı return parametre olarak tanımlanmıştı. Gerçekte kontrat bir Lock struct döner. ABI uyumsuzluğu nedeniyle her register çağrısı revert ediyordu. V1 fiilen çalışmaz.struct Lock tanımı ve ILocker.getLock(...) returns (Lock memory) doğru ABI ile tanımlandı. Ek olarak:- LP NFT içerik kontrolü (sadece Uniswap V3 NPM)
- Ekosistem token zorunluluğu (en az bir tarafta VOI/JVOI/HEY/HLTV/URA/GARURA)
- Likidite > 0 kontrolü
emergencyWithdrawPrize— admin acil token çekebilir
13.2 Kayıt Akışı¶
register(lockId):
Lock l = ILocker.getLock(lockId)
require(l.owner == msg.sender)
require(!l.withdrawn)
require(l.unlockTime > now) // henüz kilitli
require(l.nftContract == NPM) // sadece Uniswap V3
positions(l.tokenId) → t0, t1, liquidity
require(liquidity > 0)
require(ecosystemTokens[t0] || ecosystemTokens[t1])
entries[++entryCount] = Entry(...)13.3 Random Seçim¶
rand1 = keccak256(
block.prevrandao, block.timestamp, entryId,
unlockTime, msg.sender, block.coinbase
)
token = available[rand1 % count]
maxAmt = poolRemaining / 20 // havuzun max %5'i
amount = (rand2 % maxAmt) + 1e18prevrandao'yu önceden bilebilir. Düşük değerli ödüller için kabul edilebilir; yüksek değerli tombala için Chainlink VRF kullanmak gerekir.14MintTimelock İPTAL · 2026-05-16¶
polygon.heylogramtv/contracts/MintTimelock.sol'da yazılı ama mainnet'e gönderilmeyecek.Aşağıdaki anlatım tasarım belgesi olarak korunuyor.
CoinMarketCap'ın "Mintable" güvenlik uyarısını yumuşatmak için yazılmıştı. Token'ların owner'ı bu kontrata devredilir; her mint 48 saat queue beklerdi.
14.1 Akış¶
1. token.transferOwnership(MintTimelock.address)
2. Admin: queueMint(token, to, amount) → id
3. 48 saat geri sayım başlar (DELAY = 48h)
4. Süre dolunca herkes çağırabilir: executeMint(id)
→ token.mint(to, amount)
5. Admin tehlikeli mint görürse: cancelMint(id)
6. 14 günden eski queue expire (GRACE = 14d)14.2 Admin İki Adımlı¶
proposeAdmin(newAdmin) → acceptAdmin(). Yetkisiz adrese yanlışlıkla geçişi engeller.
14.3 Token Ownership Transferi¶
transferTokenOwnership(token, newOwner) — onlyAdmin
// Token ownership'ini başkasına devret (acil durum için)
// Bu işlem TIMELOCK'A TABİ DEĞİLtransferTokenOwnership 48h timelock'lu değil. Admin key çalınırsa, saldırgan tek tx'te token ownership'ini başka bir adrese geçirip orada mint edebilir. Çözüm:bu fonksiyonu da queue/execute akışına bağlamak veya multi-sig ile korumak. Bkz. §19.15Kontrat Referansı¶
16 .sol dosyası — 15 üretim + 1 mock. Her kontrat için tek satır rolü, kalıtım, kritik fonksiyonlar ve davranışlar.
Fonksiyonlar
mint(to, amount)— onlyOwner; cap kontrolbatchMint(aliciler[], miktarlar[])— onlyOwner; airdroppause / unpause— onlyOwnerburn / burnFrom— standart ERC20Burnablepermit— EIP-2612 imzayla approve
VOI ile birebir aynı kalıtım, fonksiyonlar, davranışlar; tek fark MAX_SUPPLY = 2,000,000,000 × 10¹⁸.
Özellikler
- No owner. Ownable miras alınmaz.
- No mint. Mint fonksiyonu yok.
- No pause. Pausable miras alınmaz.
- No blacklist. Hiçbir adres engellenemez.
- On-chain metadata:
website,whitepaper,platform,descriptionsabit string'ler uncheckedbloklarda transfer — gas optimize
JVOI ile birebir aynı mimari, farklı supply (629,629,629). Heylogram.tv canlı yayın platformunun (gelecek) ana tokeni.
Fonksiyonlar
setMinter(address)— onlyOwner, kilitlenmeden bir kez setlockMinter()— sonsuza kilitlerenounceOwner()— sahibi tamamen bırakmint(to, amount)— onlyMinter
Özellikler
- Mint fonksiyonu yok — sadece constructor'da basılır
- Pause yok, blacklist yok, owner yok
- Her transfer
GaruraElDegistirdievent'i yazar
Fonksiyonlar
fiyatHesapla(isim)— pure; isim uzunluğuna göre POL+VOImintPOL / mintVOI / mintHEY— kullanıcı ödeyerek alırmintUcretsiz(alici, isim, ipfsLink)— onlyOwner; airdropipfsGuncelle(tokenId, link)— sadece sahipdomainSorgula(isim)— view; (alindi, sahip, ipfs, tarih)rezerveEt(isim)— onlyOwnerparaCek— onlyOwner; POL + VOI + HEY bakiyesi
Fonksiyonlar
listele(tokenId, fiyat, paraBirimi)listeyiIptalEt(tokenId)polIleSatinAl / voiIleSatinAl / heyIleSatinAlaktifListeler / listeDetaykomisyonGuncelle / komisyonAlicisiGuncelle— onlyOwner
V1 (kullanılmıyor): Token whitelist, ECDSA imzalı claim, partner havuzu ayrı, admin push, deprecate mekanizması. Eksiği: sabit oran yok, partner istediğini çekebilir.
V2 (aktif):
partnerYatir(voiMiktari, tokenId, isOld)gorevTamamlandi(partnerWallet, puanMiktari)— onlyOperatorpartnerCek(voiMiktari)— sadece serbest bakiyeadminPush(kullanicilar[], miktarlar[])— onlyAdmin, max 500adminCek / adminCekTumu— platform payısetPaused / deprecate / emergencyWithdrawsetOperator / proposeAdmin / acceptAdmin
V1: ILocker arayüzü 6 ayrı return olarak yanlış tanımlı — her register revert. Kullanılamaz.
V2 (aktif):
- Doğru
struct LockABI - Sadece Uniswap V3 NPM LP NFT kabul
- 6 ekosistem token whitelist (VOI/JVOI/HEY/HLTV/URA/GARURA)
addPrize / emergencyWithdrawPrize— onlyAdminregister(lockId)— 7 kontrolclaim(entryId)— random token + max %5/havuz
fundRewardPool(amount)— onlyAdmin, JVOI yatırırdeposit(jvoiAmount)payable — POL + JVOIlockPosition(positionId, nftTokenId)— onlyAdmin, backend bağlarangelDeposit— 100 POL min, 180 gün, %5 ödülrefundPosition— backend 48h içinde NFT bağlamazsaclaim— LP NFT + JVOI ödülemergencyWithdrawToken— JVOI için protected kısımdan dokunamaz
queueMint(token, to, amount)— onlyAdminexecuteMint(id)— herkes (48h sonra)cancelMint(id)— onlyAdmintransferTokenOwnership(token, newOwner)— onlyAdmin, timelock'suzproposeAdmin / acceptAdmin
createCollection— partner; ücret 4 tokenden biriaddLevel— partner; random tokenId üretilirupdateLevel / updateCollectionadminMint / adminMintBatch— onlyOwner, milestoneuserMint— partner ücret koymuşsasetCreationFee / setLevelFee / setMintCommission— onlyOwnercontractURI— OpenSea inline JSON
16Canlı Kontrat Adresleri¶
Polygon Mainnet. PolygonScan'de doğrulanmış kaynaklar.
| Kontrat | Adres | Durum |
|---|---|---|
| VOI Token | 0xc8Ad9EB7D26337E598AFE89bF69d21455BD10501 | canlı · CMC listeli |
| HEY Token | 0xC9e3488E3CDAA944fDBFce0DEf602d4b09db4032 | canlı |
| JVOI Token | 0xa50eBF45c9C8D7F45C861D6064165E910e3fbEc5 | canlı · sahipsiz |
| HLTV Token | 0x8C55F7815b619e07B16fed6C3D0418684e441038 | canlı · sahipsiz |
| URA Token | 0xaafbd87e2D69Dc317276a16E2c195d269214b7C5 | canlı |
| GARURA Token | 0x427E0a0F5B8b70e2f98CcA860FdFF58055C253C5 | canlı · 1 adet |
| Domain NFT (yeni) | 0xc993f5A85724a609A4747e9c237A12C57F13A826 | canlı · v2 |
| Domain NFT (eski) | 0xc654129EF0FE6677d7A01B852D1113a0110b0816 | eski · paralel |
| Marketplace (yeni) | 0x88Be8507cB3750e16331Fe10601fB0297d4C35ea | canlı · v2 |
| Marketplace (eski) | 0x3C7a64bCc80DF0726B4Ddfae2621ccB0Ea3fD3Ce | eski |
| GaruraPool V1 | 0xf1Ba8A40b89B6D7EdE52159A06F867508B7C731a | deprecated |
| GaruraPool V2 | 0x87555b791A30ec5B10150ac1BD399741030DFBb0 | canlı |
| MintTimelock | — | deploy bekliyor |
| LiquidityMining | — | deploy bekliyor |
| LuckPool V2 | 0xd20e8ABDd5b767D6E112F0f51B058BDa0715B9Cf | canlı |
| HeylagramGaruraBadge | — | deploy bekliyor |
16.1 Yönetim Adresleri¶
- Admin cüzdan:
0x425490412f1F6e4c6DB58DE0134548dF4Ec22c70 - Uniswap V3 NPM (Polygon):
0xC36442b4a4522E871399CD717aBDD847Ab11FE88 - WMATIC:
0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 - Locker V1:
0x3df61b76622eC494cEE2f586914DB14913c5CA98 - USDT (Polygon):
0xc2132D05D31c914a87C6611C10748AEb04B58e8F - USDC (Polygon):
0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359
16.2 RPC Kullanımı¶
- ✅
https://polygon.drpc.org - ✅
https://1rpc.io/matic - ❌
polygon-rpc.com— bozuk - ❌
rpc.ankr.com/polygon— bozuk
16.3 API Endpoint Kataloğu¶
app/api/ altında 60+ endpoint var. Gruplandırılmış tablo — gizli yönetim endpoint'leri listelenmemiştir.
Token & Supply (CMC + Genel)
| Endpoint | Yöntem | Yanıt | Açıklama |
|---|---|---|---|
/api/voi/total-supply | GET | plain uint | CMC için |
/api/voi/circulating-supply | GET | plain uint | CMC için |
/api/voi/max-supply | GET | plain uint | CMC için (sabit 100M) |
/api/voi-price | GET | JSON | VOI fiyat oracle (DEX'ten) |
/api/hey/total-supply | GET | plain uint | CMC için |
/api/hey/circulating-supply | GET | plain uint | CMC için |
/api/hey/max-supply | GET | plain uint | CMC için (sabit 2B) |
/api/token-info | GET | JSON | Tüm tokenlerin metadata özeti |
/api/wallet/tokens?wallet= | GET | JSON | Cüzdandaki tüm ekosistem tokenleri |
Domain & Resolve
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/resolve?name= | GET | Domain adından bilgi (sahip, tokenId, profil) |
/api/resolve-name?wallet= | GET | Wallet'tan primary domain |
/api/resolve-address?name= | GET | Domain'den sahibin adresine |
/api/domain/has-domain?wallet= | GET | Cüzdan en az 1 .heylogramtv'ya sahip mi? |
/api/domain/image/[tokenId] | GET | SVG NFT görüntüsü (dinamik) |
/api/domain/metadata/[tokenId] | GET | OpenSea uyumlu metadata JSON |
/api/domain/profile | GET/POST | Profil oku/yaz (Linktree benzeri) |
/api/domain/website | GET/POST | Domain için redirect URL |
Görev Sistemi
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/missions | GET | Aktif görevler listesi |
/api/mission/complete | POST | İmzalı görev tamamlama |
/api/mission/content-complete | POST | İçerik üretme görevi (manuel onay) |
/api/mission/domain-mint | POST | Domain mint tx hash doğrulama → puan |
/api/user?wallet= | GET | Kullanıcı profili + puanı |
/api/user/activity?wallet= | GET | Son aktivite akışı |
Garura Sezon Sistemi
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/garura/season | GET | Aktif sezon bilgisi (token, miktar, süre) |
/api/garura/register | POST | Sezona puan commit ile katıl |
/api/garura/claim | POST | Sezon sonu token claim (admin imzalı) |
/api/cron/season-distribute | POST | Vercel Cron — bitmiş sezonları dağıtır |
URA Tıklama Oyunu
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/ura/click | POST | 1 tıklama → 1 URA mint, rate-limited |
/api/ura/batch-mint | POST | Birikmiş offline puanları toplu mint |
/api/ura/leaderboard?limit= | GET | Üst-N tıklayan cüzdanlar |
/api/ura/nickname | GET/POST | Cüzdana takma ad bağla / oku |
/api/ura/session | POST | Cüzdansız oturum başlat (in-app wallet) |
/api/ura/user?wallet= | GET | Kullanıcının URA istatistikleri |
/api/ura/referral | POST | Davet kaydı (bir kez, anti-bot) |
/api/ura/score | GET | (luck altında) tıklama skor sorgu |
Partner / B2B
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/partner?wallet= | GET | Partner durumu (canlı ownerOf kontrol) |
/api/partner/activate | POST | Domain ile partner aktivasyonu |
/api/partner/analytics?wallet= | GET | Görev tıklama istatistikleri |
/api/partner/content | POST | Görev içeriği güncelleme |
/api/partner/deposit-bonus | POST | VOI yatırınca bonus puan |
/api/partner/logo | POST | Logo yükleme (URL veya dosya) |
/api/partner/public-tasks | GET | Gorevler sayfası için tüm aktif partner görevleri |
/api/partner/tasks | GET/POST | Partner kendi görevlerini yönet |
/api/partner/track-visit | POST | Script bildirim — ziyaret kaydet |
/api/partner/webhook | POST | HMAC imzalı webhook (form/oyun bildirimi) |
Tracker Script (B2B Bot Koruması)
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/track/script/[siteKey] | GET | JS tracker dosyası (partner sitesi gömer) |
/api/track/visit | POST | Ziyaret bildirimi (CORS *) |
/api/tracker/ping | POST | Heartbeat — kullanıcı hala sayfada |
/api/tracker/token | GET | Tracker session token üretir |
Sosyal Doğrulama
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/verify/tweet | POST | Tweet URL doğrulaması (X paylaşımı) |
Blog & Duyurular
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/blog?status=&limit= | GET | Yayınlanmış postlar, publishedAt DESC, 30s CDN cache |
/api/blog/[slug] | GET | Tek post detayı (TR + EN içerik, tag, cover, body) |
OG & Paylaşım
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/og | GET | Genel OG image (sosyal paylaşım) |
/api/og-en | GET | İngilizce OG image |
/api/og/promo/[slug] | GET | Promo sayfaları için dinamik OG |
/api/og/ura | GET | URA paylaşım kartı |
/api/og/blog/[slug] | GET | Blog yazısı paylaşım kartı (dinamik) |
Diğer
| Endpoint | Yöntem | Açıklama |
|---|---|---|
/api/weather | GET | Açılış sayfası dekoratif veri (animasyon için) |
/api/admin/*, /api/cron/*) listelenmemiştir — bunlar yetki bazlı çalışır ve dokümana eklenmez (saldırı yüzeyi azaltma).17Aşamalı Deploy¶
Heylogram TV mainnet'te halihazırda büyük ölçüde canlı. Bekleyen 2 kontrat aşağıdaki sırada deploy edilecek. MintTimelock planıiptal edildi — VOI/HEY cap'leri tamamen dolduğu için mint operasyonu zaten kapandı (bkz. §4.1–4.2); "Mintable" uyarısı için gerekli çözüm artıkrenounceOwnership() kararıdır.
17.1 Faz 6 — LiquidityMining Sıradaki¶
scripts/deployLiquidityMining.js --network polygon- JVOI ödül havuzunu doldur:
fundRewardPool(amount) - Backend keeper yaz:
deposittx'lerini dinler, 48h içinde Uniswap V3 LP oluşturur velockPositionçağırır - Vercel env:
NEXT_PUBLIC_LIQUIDITY_MINING=0x... - Frontend
/lucksayfası deposit + claim UX (mevcut/dapp/dexiçindeki Luck tab ile entegre)
17.2 Faz 7 — Badge ERC-1155¶
LuckPool V2 zaten canlı (0xd20e…B9Cf) — yalnız Badge kalıyor.
scripts/deployBadge.js- Vercel env:
NEXT_PUBLIC_BADGE_CONTRACT - Partner panelinde badge collection oluşturma UI'ı
18Audit & Bulgular¶
node audit.js ile yapılmış statik analiz raporu (AUDIT_REPORT.md, 28.04.2026). 62 dosya, 47 ms, 288 bulgu.
| Önem | Sayı | Açıklama |
|---|---|---|
| 🔴 KRİTİK | 6 | Güvenlik / para kaybı |
| 🟠 HATA | 33 | Runtime / mantık |
| 🟡 UYARI | 126 | UX kırılganlığı |
| 🔵 BİLGİ | 123 | İyileştirme |
| Toplam | 288 |
18.1 Kritik Bulgular¶
| Kod | Sorun | Durum |
|---|---|---|
| K06 | Replay attack — partner API'lerde timestamp/nonce yok | Düzeltildi (5dk TTL imza) |
| K05 | Topic hash hardcoded — false positive (etiket karışıklığı) | Bilinçli |
| K04 | CORS * — /api/track/visit | Bilinçli (partner siteler çağırır) |
| K02 | partners koleksiyonu wallet ile sorgulanıyor | Bilinçli (doc ID = domain, where ile gerekirse) |
18.2 Yüksek Öncelikli Hatalar¶
| Kod | Sorun | Etki |
|---|---|---|
| E09 | NaN kontrol edilmeden matematik (6 dosya) | API 500'leri |
| E08 | Firestore limit yok — partner-tasks endpoint | Timeout + yüksek fatura |
| E05 | Wallet regex yok (9 endpoint) | Düzeltildi |
| E02 | .data()! non-null assertion (11 dosya) | Crash riski |
| E07 | Promise.all → allSettled gerekiyor (6 dosya) | Unhandled rejection |
18.3 Yazım Sırasında Yeni Bulgular (Kontrat)¶
N1 — MintTimelock transferTokenOwnership timelock'suz GEÇERSİZ
MintTimelock planı 2026-05-16'da iptal edildi (VOI/HEY mint operasyonu kapandı, bkz. §17). Kontrat deploy edilmeyecek, dolayısıyla bu bulgu artık geçerli değil.
N2 — GaruraPool V2'de dead-code RAFA · MOOT
require(voiMiktari % (1e18 / PUAN_VOI_ORANI) == 0 || true, "");
^^^^^^^^
her zaman true|| true her zaman true olduğu için require hiçbir şey yapmıyor. Ya unutulmuş ya da kasti dummy. Kod kalitesi.Çözüm: Satırı sil veya gerçek kontrolü yaz.
N3 — VOI/HEY Pause Sorunu Token Ownership Devri Sonrası GEÇERSİZ
MintTimelock devri olmadığı için pause yetkisi hala admin cüzdanında. Bu bulgu artık geçerli değil (bkz. N1).
N4 — LuckPool V2 Random Validator Manipülasyonu AKTİF (mainnet'te canlı)
LuckPool V2 mainnet'te canlı (0xd20e…B9Cf) veregister/claim akışı çalışıyor. _selectPrizeiçinde rastgelelik block.prevrandao,block.coinbase, block.timestamp'a dayalı — Polygon validator'ları bu değerleri önceden bilebilir veya küçük manipülasyon yapabilir. Düşük prize'lar için ekonomik değil ama havuzdaki maxAmt (havuzun %5'i, max 1000 token) büyüdükçe risk artar.
Çözüm: Chainlink VRF V2 entegrasyonu (VRFConsumerBaseV2 miras + requestRandomWords akışı). Mevcut V2 kontratı immutable, yeni bir LuckPoolV3deploy edilip addPrize ile token havuzları aktarılır.
N6 — Garura Pay Çift Kesim Riski RAFA · MOOT
Garura sezon sistemi 2026-05-16'da rafa kaldırıldı (bkz. §7) → claim endpoint'i artık aktif kullanılmıyor. Bulgu doğru ama operasyonel olarak relevant değil. Garura yeniden açılırsa düzeltilmesi gereken not.
N10 — DEX Pool-based Quote Hassasiyet Kaybı DÜŞÜK
lib/dexAdapters.ts quoteFromPoolBasediçinde, token1→token0 yönünde:
amountOut = (amountIn * Q192) / num; // Q192 = 2¹⁹², num = sqrtPriceX96²BigInt overflow yok ama integer division küçük amount'larda rounding hatası verir (yaklaşık %0.001 mertebesinde — ihmal edilebilir). Büyük swap'larda slippage hesaplanmaz — pool derinliğine bağlı gerçek fiyat etkisi yok. Asıl swap gönderilirken zaten amountOutMinimum ile slippage korunur (UI'da %0.5 default), o yüzden ekonomik risk düşük.
N11 — findReferencePrice Likiditeye Göre Sıralanmıyor DÜŞÜK
findReferencePrice tüm venue'lardan paralel sorgu yapar ama results.find(r => r !== null) ilevenue tanım sırasındaki ilk olanı seçer. Uniswap'ta düşük likiditeli pool varsa Sushi'deki büyük havuz atlanır, yanlış referans fiyat döner.
Çözüm: her venue'dan dönen sonuçlar için pool liquidity de çek, en yüksek likidite olanı tercih et. Sadece yeni pool açarken kullanıldığı için kritik değil.
N12 — Sushi V3 Quoter Tamamen Atlanıyor DÜŞÜK
quoteFromVenue içinde Quoter sadecevenue.key === 'univ3' için çağrılıyor (line 279). Sushi V3 (0x64e8…08A7) için doğrudan pool-based fallback'e düşülüyor. Yorum diyor "Quoter'ı yok/bozuk" — Sushi V3 Polygon'da gerçekten Quoter çalışmıyorsa bu doğru kasıt; çalışıyorsa daha doğru quote alma şansı kaçırılıyor.Aksiyon: Sushi V3 Polygon Quoter'ı manuel test et, çalışıyorsa venue.key === 'univ3' || venue.key === 'sushiv3'koşulunu genişlet.
18.4 Sorun Yoğunluğu (Top 5)¶
node audit.jstekrar koşulmalı.| Dosya | Bulgu (2026-04-28) |
|---|---|
components/PartnerPanel.tsx | 21 |
app/hesap/page.tsx | 18 |
app/pazar/page.tsx | 18 |
app/resolve/[name]/page.tsx | 15 |
app/locker/page.tsx | 15 |
18.5 Firestore Security Rules¶
Heylogram TV off-chain veriyi Firestore'da tutar. Yanlış yapılandırılmış güvenlik kuralları puan ekleme, partner görev manipülasyonu veya webhook secret sızıntısı yaratabilir.firestore.rules dosyasındaki temel ilkeler:
Genel İlke
Yalnızca server-side admin SDK yazar. Tarayıcıdan hiçbir koleksiyona doğrudan yazma izni yoktur. Frontend yalnızca okuma yapar (ve sadece izin verilen koleksiyonlardan).
Koleksiyon İzinleri
| Koleksiyon | Frontend Oku | Frontend Yaz | Server SDK |
|---|---|---|---|
kullanicilar/ | Kendi belgesi | Hayır | Tam |
seasons/ | Aktif olan public | Hayır | Tam |
garuraRegistrations/ | Kendi belgesi | Hayır | Tam |
domainProfiles/ | Tümü public | Hayır (server doğrular) | Tam |
partners/ | Tümü public (logo, görev için) | Hayır | Tam |
partners/{x}/.webhookSecret | Hayır (gizli alan) | Hayır | Tam |
partnerGorevler/ | Status === 'active' | Hayır | Tam |
missions/ | Active === true | Hayır | Tam |
uraClicks/global | Public | Hayır | Tam |
uraNicknames/ | Kendi belgesi | Hayır | Tam |
uraLeaderboard/ | Tümü public | Hayır | Tam |
votes/ | Hayır | Hayır | Tam |
Webhook Secret Gizliliği
webhookSecret Firestore'da plaintext saklanıyor diye uyardı. Çözüm: Security Rules'dapartners/ koleksiyonu okunabilir, amawebhookSecret alanı yalnız admin SDK'ya açık. Pratikte tarayıcı bu koleksiyonu hiç çağırmaz —/api/partner server endpoint'i secret'sız bir projection döndürür.Yazma Doğrulaması
Hiçbir doğrudan yazma kabul edilmediği için frontend Firestore'a yazmaz. Tüm yazma işlemleri imza + timestamp + server doğrulaması üzerinden geçer. Sorun: tarayıcının fonksiyonel olarak hiç yazma izni olmadığını development'ta unutmak — local'de deploy edilince fail eder.
19Bilinen Riskler & Yol Haritası¶
19.1 Açık Kalan Yapısal Sorunlar¶
- N4: LuckPool V2 random — Chainlink VRF'e geçiş (yüksek prize için)
- N10: DEX pool-based quote büyük swap'larda slippage hesaplamıyor (slippage UI ile koruma var; ekonomik risk düşük)
- N11: findReferencePrice likidite sıralaması yerine venue sırasını kullanıyor
- N12: Sushi V3 Quoter atlanıyor (gerçekten bozuksa kasti; yoksa daha doğru quote kaçırılıyor)
- E02, E07, E08, E09: 33 backend hata düzeltmesi (deferred audit notları)
- W04: Partner track-visit / webhook rate limit (bot koruması)
Geçersiz olanlar: N1/N3 (MintTimelock iptal edildi), N2/N6 (Garura rafa kaldırıldı), N5 (PartnerPool kullanılmıyordu ve kaldırıldı). Bunlar §18.3'te tarihçe için belge olarak duruyor.
19.2 CMC Uyumluluk Yol Haritası¶
Güncel CMC durumu (2026-05): VOI ve HEY için üç uyarı var (Contract Not Renounced, Pause, Low Liquidity). Diğer tokenler (JVOI, HLTV, URA, GARURA) için sadece Low Liquidity uyarısı — bu dördü zaten sahipsiz/immutable."Mintable" uyarısı kaldırıldı — VOI/HEY cap'leri tamamen dolduruldu, CMC artık bu uyarıyı vermiyor.
| Uyarı | Etkilenen | Çözüm | Durum |
|---|---|---|---|
| Contract Not Renounced | VOI, HEY | renounceOwnership() çağır | Karar (esneklik vs güvenlik) |
| Pause var | VOI, HEY | OZ Pausable miras alındı — kaldırmak için yeni token sürümü (V2 deploy + 1:1 swap) | Sonraki sürüm |
| Low Liquidity | Tüm tokenler | Liquidity Mining + DEX akışı + organik kullanım | Faz 6 |
| Mintable | — | Cap dolduruldu, uyarı kalktı | Çözüldü |
19.3 Heylogram.tv Vizyonu¶
Asıl büyük proje: heylogram.tv canlı yayın platformu. Tasarım hazır (HAYALLER.md'de detaylı): TikTok Live + Twitch hibrid, tamamen Web3, HEY token ekonomisi, SVG NFT hediye sistemi.
Tahmin: 6+ ay engineering, ekip gerekir. HLTV tokeni bu platform için hazır bekliyor — sahipsiz, immutable, 629M arz.
19.4 CURBAN — AI Görsel + NFT¶
Vizyon parçası: prompt yaz, AI görsel üret, otomatik NFT mint. Ayrı token (CURBAN) ekonomisi. Kullanıcı isteyince paylaşmadan kendine de saklayabilir. Şu an plan aşamasında.
Tasarım: web3.jjvoi.com/curban alt sayfası. AI API müsaitlik tarayıcı → kuyruğa al → görsel gelince göster → "NFT olarak kaydet?" → Polygon mint. NFT adı = prompt, içerik = oluşan görsel. Fiyatlandırma maliyet + %20-30, CURBAN token ile öde. Garura benzeri sezonluk havuz mümkün.
19.5 Akıllı NFT Vizyonu¶
Mevcut HeylogramDomain NFT'leri görsel olarak basit SVG. Hayaller:
- Ülke NFT'leri: Bir kullanıcı
turkey.heylogramtvalırsa NFT olarak dalgalanan bayrak animasyonu (SVG + CSS). - İsim NFT'leri:
eyup.heylogramtvalındığında ismin anlamına özgü karakteristik görsel — "Eyup" → sabır metaforu, kendine has SVG. - İleride AI bağlantısı: prompt'u kelimenin anlamı, çıktısı NFT görseli.
19.6 Admin Cüzdan Güvenliği¶
Protokolün tüm admin yetkileri şu an tek bir cüzdanda toplanmış durumda. Önerilen güvenlik katmanı:
- Gnosis Safe multi-sig (2/3 veya 3/5) — kontrat seviyesinde garanti, single point of failure yok
- Hot wallet günlük işlemler için ayrı tutulur, büyük cüzdan operasyonları Safe imzasıyla geçer
- Hardware wallet kullanımı zorunlu
Trade-off: her admin tx çoklu imza gerektirir (gecikme), kurulum maliyeti var — ancak operasyonel disiplini güçlendirir ve admin key kompromizasyon riskini ciddi şekilde azaltır.
20Sözlük¶
Heylogram TV — Polygon mainnet · 6 token · 17 kontrat · open source
Site: web3.jjvoi.com · X: @heylogramtv · Email: web3@jjvoi.com