Skip to content

IPNS — IPFS için Değiştirilebilir Adlar

IPNS (InterPlanetary Name System), zaman içinde farklı içeriklere işaret edecek şekilde güncellenebilen kararlı, paylaşılabilir adresler sunar. IPFS CID'leri içerik her değiştiğinde değişirken, IPNS adı aynı kalır — sadece nereye işaret ettiğini güncellersiniz.

Bodhi (3 ad, aylık 100 yayın) ve Nirvana (10 ad, aylık 1.000 yayın) planlarında mevcuttur.

IPNS hakkında daha fazla bilgi

IPNS'in protokol düzeyinde nasıl çalıştığına dair derinlemesine bilgi için resmi IPFS IPNS dokümantasyonuna bakın.

IPNS Ad yönetim sayfası

Neden IPNS kullanmalı?

Sorun: IPFS'e bir dosyanın yeni sürümünü her yüklediğinizde farklı bir CID alırsınız. Eski CID'yi kullanıcılarla paylaştıysanız, hala eski içeriği görürler. Her seferinde yeni bir bağlantı paylaşmanız gerekirdi.

Çözüm: Bir IPNS adı oluşturun, paylaşın ve içeriğiniz değiştiğinde nereye işaret ettiğini güncelleyin. IPNS adresine sahip herkes her zaman en son sürümü alır.

Yaygın kullanım alanları

  • IPFS üzerinde web siteleri — Sitenizi dağıtın, CID alın, IPNS adınıza yayınlayın. Yeniden dağıtım → yeni CID → IPNS adını güncelle. URL asla değişmez.
  • Gelişen NFT meta verileri — NFT'nizin tokenURI'sini bir IPNS adresine yönlendirin. Akıllı sözleşmeyi değiştirmeden meta verileri güncelleyin (örn. oyun öğesi seviye atlar).
  • Yapılandırma dosyaları — Uygulamanız yapılandırmayı bir IPNS adresinden okur. Uygulamayı yeniden dağıtmadan yapılandırmayı güncelleyin.
  • Veri akışları — Günlük veri setlerini veya fiyat beslemelerini kararlı bir IPNS adresinde yayınlayın.
  • DNSLink — Alan adınızı IPNS'e bağlayın, böylece https://yourdomain.com her zaman en son IPFS içeriğini sunar.

Kontrol Panelini Kullanma

1. IPNS adı oluşturma

  1. Kenar çubuğunda Hosting altındaki IPNS'e gidin.
  2. Ad oluştur'a tıklayın.
  3. Bir etiket girin (örn. "my-website") ve Oluştur'a tıklayın.
  4. IPNS adresini kopyalayın (k51... ile başlar) — bu sizin kalıcı, paylaşılabilir adresinizdir.
Oluşturulmuş anahtarlarla IPNS sayfası

2. IPNS adınıza CID yayınlama

  1. Listede IPNS adını bulun ve Yayınla'ya tıklayın.
  2. İşaret etmesini istediğiniz CID'yi girin (örn. QmXk7VRz... veya bafybei...).
  3. Yayınla'ya tıklayın. Bu, IPFS ağına yayılır ve 60 saniyeye kadar sürebilir.
  4. Yayınlandıktan sonra içerik şu adreslerde erişilebilir:
    • IPFS gateway: https://ipfs.ninja/ipns/{your-ipns-name}
    • Herhangi bir genel gateway: https://dweb.link/ipns/{your-ipns-name}
    • IPFS yerel: ipns://{your-ipns-name}
Yayınlanmış CID ile IPNS sayfası

3. İçeriğinizi güncelleme

İçeriğiniz değiştiğinde:

  1. Yeni sürümü IPFS'e yükleyin (kontrol paneli veya API aracılığıyla) → yeni CID alın.
  2. IPNS'e dönün, aynı adda Yayınla'ya tıklayın, yeni CID'yi girin.
  3. IPNS adresi aynı kalır — kullanan herkes otomatik olarak yeni içeriği alır.

4. IPNS adını çözümleme

Herhangi bir IPNS adı için — sizinki veya başka birinin — geçerli CID'yi aramak için sayfanın alt kısmındaki Çözümle bölümünü kullanın.

5. IPNS adını silme

Herhangi bir adın yanındaki sil düğmesine tıklayın. IPNS kaydı 48 saat içinde ağdan sona erecektir.

DNSLink kullanarak kendi alan adınızı bir IPNS adresine yönlendirebilirsiniz. Bu, kullanıcıların IPFS içeriğinize https://yourdomain.com gibi normal bir URL üzerinden erişmesini sağlar.

  1. Bir IPNS adı oluşturun ve içerik CID'nizi ona yayınlayın (yukarıdaki adımlar).

  2. Alan adınızın DNS sağlayıcısında DNS TXT kaydı ekleyin:

    _dnslink.yourdomain.com  TXT  "dnslink=/ipns/{your-ipns-name}"

    Örnek: IPNS adınız k51qzi5uqu5djcpbukxs... ise:

    _dnslink.myapp.com  TXT  "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  3. Kaydı doğrulayın dig veya nslookup ile:

    bash
    dig +short TXT _dnslink.myapp.com
    # Döndürmesi gereken: "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  4. DNSLink destekleyen herhangi bir IPFS gateway'inden erişin:

    https://ipfs.ninja/ipns/myapp.com

    Veya IPFS destekli bir tarayıcı (Brave gibi) üzerinden:

    ipns://myapp.com

DNS yayılımı

DNS değişikliklerinin küresel olarak yayılması 24 saate kadar sürebilir. TXT kaydını ekledikten sonra test etmeden önce birkaç saat bekleyin.

TIP

DNSLink'i yalnızca bir kez kurmanız gerekir. IPNS adınıza yeni bir CID yayınladığınızda, alan adı otomatik olarak yeni içeriğe çözümlenir — DNS değişikliği gerekmez.

Cloudflare kullanıyorsanız:

  1. DNSRecords'a gidin.
  2. Yeni kayıt ekleyin: Tür: TXT, Ad: _dnslink, İçerik: dnslink=/ipns/k51...
  3. Proxy durumunu Yalnızca DNS (gri bulut) olarak ayarlayın.
  1. Route 53'te barındırılan bölgenize gidin.
  2. Kayıt oluşturun: Ad: _dnslink.yourdomain.com, Tür: TXT, Değer: "dnslink=/ipns/k51..."

Kullanım Örnekleri

Örnek 1: Statik web sitesi dağıtımı

bash
# 1. Build your site
npm run build

# 2. Upload the build output to IPFS
CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": $(cat dist/index.html | base64 -w0 | jq -Rs .), \"description\": \"Website v2.1\"}" \
  | jq -r '.cid')

echo "Uploaded: $CID"

# 3. Update your IPNS name to point to the new build
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"ipnsName\": \"k51qzi5uqu5dlvj2bv6...\", \"cid\": \"$CID\"}"

# Your site at ipns://k51... now serves the new version

Örnek 2: Değiştirilebilir NFT meta verileri

javascript
// Smart contract points tokenURI to IPNS address:
// tokenURI = "ipns://k51qzi5uqu5dlvj2bv6..."

// When the NFT evolves (e.g., game item levels up):
const newMetadata = {
  name: "Dragon Sword",
  description: "A legendary weapon — Level 5",
  image: "ipfs://QmNewImageCID...",
  attributes: [
    { trait_type: "Level", value: 5 },
    { trait_type: "Damage", value: 150 }
  ]
};

// Upload new metadata
const uploadRes = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ content: newMetadata, description: "Dragon Sword v5" })
});
const { cid } = await uploadRes.json();

// Update the IPNS pointer — tokenURI stays the same!
await fetch("https://api.ipfs.ninja/ipns/publish", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ ipnsName: "k51qzi5uqu5dlvj2bv6...", cid })
});

Örnek 3: CI/CD entegrasyonu

yaml
# GitHub Actions: auto-publish to IPNS on every push
- name: Upload to IPFS and publish IPNS
  run: |
    CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"content": '"$(cat build/output.json)"', "description": "Deploy ${{ github.sha }}"}' \
      | jq -r '.cid')

    curl -X POST https://api.ipfs.ninja/ipns/publish \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"ipnsName": "${{ vars.IPNS_NAME }}", "cid": "'"$CID"'"}'

API Referansı

Tüm API örnekleri X-Api-Key başlığını kullanır. API anahtarınızı API Anahtarları sayfasından alın.

IPNS Anahtarlarını Listele

bash
curl https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here"

Yanıt:

json
[
  {
    "ipnsName": "k51qzi5uqu5dlvj2bv6...",
    "keyName": "my-website",
    "currentCid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
    "lastPublishedAt": 1711123200000,
    "publishCountMonth": 12,
    "status": "active",
    "createdAt": 1711036800000
  }
]

IPNS Anahtarı Oluştur

bash
curl -X POST https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-website"}'

Yanıt 201:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "keyName": "my-website",
  "createdAt": 1711036800000
}

IPNS'e Yayınla

Yayınlama, IPNS adını yeni bir CID'ye işaret edecek şekilde günceller. IPFS DHT'ye yayılır ve 60 saniyeye kadar sürebilir.

bash
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"ipnsName": "k51qzi5uqu5dlvj2bv6...", "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}'

Yanıt:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
  "published": true
}

IPNS Adını Çözümle

Herhangi bir IPNS adının mevcut CID'sini arayın.

bash
curl https://api.ipfs.ninja/ipns/resolve/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

Yanıt:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
}

IPNS Anahtarını Sil

bash
curl -X DELETE https://api.ipfs.ninja/ipns/keys/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

Yanıt:

json
{ "success": true }

IPNS Nasıl Çalışır

  1. Anahtar oluşturma: Bir IPNS adı oluşturduğunuzda, kriptografik bir anahtar çifti (Ed25519) oluşturulur. Genel anahtar hash'i IPNS adresiniz (k51...) olur.
  2. Yayınlama: Yayınladığınızda, "bu ad CID X'e işaret ediyor" diyen bir kaydı imzalar ve IPFS DHT'ye (Distributed Hash Table) yayınlarsınız.
  3. Çözümleme: Biri IPNS adınızı aradığında, IPFS düğümleri DHT'yi en son imzalı kayıt için sorgular ve CID'ye yönlenir.
  4. Yeniden yayınlama: IPNS kayıtları 48 saat sonra sona erer. IPFS Ninja, kayıtlarınızı aktif tutmak için her 12 saatte bir otomatik olarak yeniden yayınlar.
  5. Güvenlik: Yalnızca özel anahtarın sahibi (siz) bir IPNS adının neye işaret ettiğini güncelleyebilir. Başka kimse adınızı ele geçiremez.

Plan Limitleri

PlanIPNS AdlarıAylık Yayın
Dharma (Ücretsiz)Mevcut değil
Bodhi ($5/ay)3100
Nirvana ($29/ay)101.000
  • Kayıtlar, IPFS ağında aktif kalmak için her 12 saatte bir otomatik olarak yeniden yayınlanır.
  • 90 gündür yayın yapılmayan adlar etkin dışı olarak işaretlenir ve yeniden yayınlanması durdurulur.
  • Etkin dışı adlar, yeni bir CID yayınlanarak yeniden etkinleştirilebilir.

İleri Okuma