· Nacho Coll · Guides  · 8 menit baca

IPFS CID dijelaskan: apa itu dan cara kerja pengalamatan konten

Penjelasan teknis yang jelas tentang IPFS Content Identifiers (CIDs). Cara kerja pengalamatan konten, versi CID, dan cara membuat CID pertama Anda.

Penjelasan teknis yang jelas tentang IPFS Content Identifiers (CIDs). Cara kerja pengalamatan konten, versi CID, dan cara membuat CID pertama Anda.

Jika Anda pernah bekerja dengan IPFS (InterPlanetary File System), Anda mungkin pernah menemui string seperti QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG atau bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi. Ini bukan omong kosong acak — ini adalah Content Identifiers (CIDs), tulang punggung sistem pengalamatan konten IPFS.

Memahami CID sangat penting bagi siapa pun yang membangun di IPFS, baik Anda mengunggah file, membangun aplikasi terdesentralisasi, atau mengimplementasikan sistem distribusi konten. Panduan ini akan menjelaskan semua yang perlu Anda ketahui tentang IPFS CID, cara kerja pengalamatan konten, dan cara mulai menggunakannya dalam proyek Anda.

IPFS Ninja

Apa itu IPFS CID?

Content Identifier (CID) adalah sidik jari unik yang merepresentasikan sepotong konten di IPFS. Tidak seperti URL web tradisional yang menunjuk ke lokasi (seperti https://example.com/file.pdf), CID menunjuk ke konten itu sendiri, terlepas dari di mana ia disimpan.

Anggap saja seperti ini:

  • Pengalamatan berbasis lokasi: “Pergi ke Jalan Utama 123 dan minta buku merah”
  • Pengalamatan berbasis konten: “Temukan buku dengan ISBN 978-0-123456-78-9” (perpustakaan mana pun yang memilikinya tidak masalah)

CID bekerja serupa — mereka mengidentifikasi konten berdasarkan hash kriptografisnya, membuat konten tidak dapat diubah dan dapat diverifikasi. Jika satu byte berubah dalam file, CID berubah sepenuhnya.

Mengapa pengalamatan konten penting

Arsitektur web tradisional mengandalkan pengalamatan berbasis lokasi. Saat Anda mengunjungi https://example.com/image.jpg, Anda mempercayai bahwa:

  1. Pemilik domain belum mengubah konten
  2. Server online dan dapat diakses
  3. Konten belum dirusak

Dengan pengalamatan konten menggunakan CID:

  1. Tidak dapat diubah: CID menjamin konten tidak berubah
  2. Desentralisasi: Konten dapat diambil dari node IPFS mana pun yang memilikinya
  3. Verifikasi: Anda dapat memverifikasi secara kriptografis bahwa Anda menerima konten yang benar
  4. Efisiensi: Konten yang identik secara otomatis dihilangkan duplikasinya

Anatomi CID

Mari kita bedah CID tipikal untuk memahami komponennya:

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
└─┬─┘└─────────────────┬─────────────────────────────────┘
  │                   │
  │                   └─ Hash Konten (dikodekan Base32)
  └─ Awalan Multibase (menunjukkan pengkodean)

CID berisi beberapa informasi:

1. Awalan Multibase

Karakter pertama menunjukkan bagaimana CID dikodekan:

  • Q = Pengkodean Base58 (CIDv0)
  • b = Pengkodean Base32 (CIDv1)
  • f = Base16/heksadesimal (CIDv1)
  • z = Base58 (CIDv1)

2. Versi CID

  • CIDv0: Selalu dimulai dengan Qm, menggunakan SHA-256, terbatas pada codec DAG-PB
  • CIDv1: Lebih fleksibel, mendukung berbagai fungsi hash dan codec

3. Multicodec

Menentukan bagaimana konten terstruktur (DAG-PB, DAG-CBOR, byte mentah, dll.)

4. Multihash

Hash kriptografis aktual dari konten, termasuk:

  • Pengenal fungsi hash (biasanya SHA-256)
  • Panjang hash
  • Hash digest

CIDv0 vs CIDv1: Memahami perbedaannya

IPFS telah berevolusi melalui dua versi CID utama, masing-masing dengan karakteristik berbeda:

CIDv0: Format asli

CID CIDv0 selalu dimulai dengan Qm dan terlihat seperti ini:

QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

Karakteristik:

  • Hanya pengkodean Base58
  • Hanya fungsi hash SHA-256
  • Hanya codec DAG-PB (Protobuf)
  • Panjang 46 karakter
  • Kompatibel ke belakang dengan semua implementasi IPFS

Kapan menggunakan CIDv0:

  • Kompatibilitas maksimum dengan node IPFS lama
  • Bekerja dengan sistem yang ada yang mengharapkan awalan Qm
  • Penyimpanan file (kasus penggunaan paling umum)

CIDv1: Standar modern

CID CIDv1 lebih fleksibel dan dapat terlihat seperti ini:

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi  # Base32
zb2rhj7crUKTQYRGCRATFaQ6YFLTde2YzdqbbhAASkL9uRDXn      # Base58
f01551220d1e2c35...                                      # Base16

Karakteristik:

  • Beberapa format pengkodean (Base32, Base58, Base16)
  • Dukungan untuk berbagai fungsi hash (SHA-256, SHA-512, BLAKE2, dll.)
  • Beberapa codec (Raw, DAG-CBOR, DAG-JSON, dll.)
  • Format yang menjelaskan dirinya sendiri
  • Tidak peka huruf besar/kecil saat menggunakan Base32

Kapan menggunakan CIDv1:

  • Membangun aplikasi baru
  • Membutuhkan pengenal yang tidak peka huruf besar/kecil
  • Bekerja dengan data terstruktur (JSON, CBOR)
  • Menggunakan fungsi hash alternatif

Mengkonversi antar versi

Anda dapat mengkonversi CID antar versi sambil mempertahankan referensi konten yang sama:

// CIDv0
const cidv0 = "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG";

// Convert to CIDv1 Base32
const cidv1 = "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi";

// Both reference the same content!

Cara kerja pengalamatan konten

Pengalamatan konten di IPFS mengikuti proses deterministik yang memastikan konten yang sama selalu menghasilkan CID yang sama:

1. Persiapan konten

Saat Anda menambahkan konten ke IPFS, itu pertama-tama dipecah:

  • File kecil: Disimpan sebagai blok tunggal
  • File besar: Dibagi menjadi potongan-potongan dan diorganisir dalam Merkle DAG (Directed Acyclic Graph)
  • Direktori: Direpresentasikan sebagai struktur DAG yang menghubungkan ke file

2. Proses hashing

Setiap potongan konten melalui:

  1. Serialisasi: Konten diformat menurut codec-nya
  2. Hashing: Fungsi hash kriptografis memproses data yang diserialisasi
  3. Pembuatan Multihash: Hash dibungkus dengan informasi algoritma dan panjang
  4. Perakitan CID: Versi, codec, dan multihash digabungkan

3. Struktur Merkle DAG

IPFS mengorganisir konten dalam Merkle DAG di mana:

  • Setiap node memiliki CID
  • Node induk merujuk ke node anak melalui CID
  • Perubahan dalam node mana pun menyebar ke seluruh pohon
  • Seluruh struktur dapat diverifikasi secara kriptografis
Root CID: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
├── file1.txt (QmHash1...)
├── file2.jpg (QmHash2...)
└── subdirectory/
    ├── file3.pdf (QmHash3...)
    └── file4.mp4 (QmHash4...)

Contoh praktis: Bekerja dengan CID

Mari kita jelajahi cara bekerja dengan CID dalam praktik menggunakan API IPFS Ninja:

Mengunggah konten dan mendapatkan CID

// Upload a file and get its CID
const uploadFile = async (content, filename) => {
  const response = await fetch('https://api.ipfs.ninja/upload/new', {
    method: 'POST',
    headers: {
      'X-Api-Key': 'bws_1234567890abcdef1234567890abcdef12345678',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      content: btoa(content), // Base64 encode binary content
      description: `Upload of ${filename}`
    })
  });
  
  const result = await response.json();
  console.log('CID:', result.cid);
  console.log('IPFS URL:', result.uris.ipfs);
  console.log('HTTP URL:', result.uris.url);
  
  return result.cid;
};

// Example usage
uploadFile('Hello, IPFS!', 'greeting.txt');
// Returns: bafkreifjxz6zwqh27k5xnr5qfbx4w6n5vuwwwdcngguwjewzj2e3xxfgvi

Pin konten yang ada berdasarkan CID

Jika Anda sudah memiliki CID, Anda dapat mem-pin-nya untuk memastikan ketersediaan:

const pinByCID = async (cid) => {
  const response = await fetch('https://api.ipfs.ninja/pin', {
    method: 'POST',
    headers: {
      'X-Api-Key': 'bws_1234567890abcdef1234567890abcdef12345678',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      cid: cid,
      description: 'Pinned via API'
    })
  });
  
  const result = await response.json();
  console.log('Pinned CID:', result.cid);
  
  return result;
};

// Pin the "Hello World" of IPFS
pinByCID('QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u');

Mengakses konten melalui CID

Setelah Anda memiliki CID, Anda dapat mengakses konten melalui berbagai metode:

// Direct IPFS gateway access
const ipfsUrl = `https://ipfs.ninja/ipfs/${cid}`;

// Custom gateway (if configured)
const customGatewayUrl = `https://my-app.gw.ipfs.ninja/ipfs/${cid}`;

// Fetch content programmatically
const fetchContent = async (cid) => {
  const response = await fetch(`https://ipfs.ninja/ipfs/${cid}`);
  const content = await response.text();
  return content;
};

Praktik terbaik CID untuk pengembang

1. Selalu validasi CID

Sebelum menggunakan CID dalam aplikasi Anda, validasi formatnya:

const isValidCID = (cid) => {
  // Basic validation patterns
  const cidv0Pattern = /^Qm[1-9A-HJ-NP-Za-km-z]{44}$/;
  const cidv1Pattern = /^[bf][a-z2-7]{58}$/;
  
  return cidv0Pattern.test(cid) || cidv1Pattern.test(cid);
};

2. Tangani kedua versi CID

Aplikasi Anda harus bekerja dengan CIDv0 dan CIDv1:

const normalizeCID = (cid) => {
  if (cid.startsWith('Qm')) {
    // CIDv0 - can convert to CIDv1 if needed
    return cid;
  } else if (cid.startsWith('b') || cid.startsWith('f') || cid.startsWith('z')) {
    // CIDv1
    return cid;
  } else {
    throw new Error('Invalid CID format');
  }
};

3. Cache pemetaan CID

Jika Anda sering menghasilkan CID, pertimbangkan untuk melakukan caching:

const cidCache = new Map();

const getCachedCID = (content) => {
  const contentHash = btoa(content);
  
  if (cidCache.has(contentHash)) {
    return cidCache.get(contentHash);
  }
  
  // Upload and cache result
  return uploadFile(content).then(cid => {
    cidCache.set(contentHash, cid);
    return cid;
  });
};

4. Gunakan deskripsi yang bermakna

Saat mengunggah konten, sertakan metadata deskriptif:

const uploadWithMetadata = async (content, metadata) => {
  return fetch('https://api.ipfs.ninja/upload/new', {
    method: 'POST',
    headers: {
      'X-Api-Key': 'bws_1234567890abcdef1234567890abcdef12345678',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      content: btoa(content),
      description: metadata.name || 'Uploaded file',
      metadata: {
        filename: metadata.filename,
        contentType: metadata.contentType,
        uploadedAt: new Date().toISOString(),
        version: metadata.version || '1.0'
      }
    })
  });
};

Kasus penggunaan CID umum

1. Penerapan situs web statis

Terapkan seluruh situs web ke IPFS dan referensikan berdasarkan CID:

// Upload website directory structure
const deployWebsite = async (files) => {
  const uploads = await Promise.all(
    files.map(file => uploadFile(file.content, file.path))
  );
  
  // Root CID references entire site
  const rootCID = uploads.find(u => u.path === 'index.html').cid;
  console.log(`Website deployed: https://ipfs.ninja/ipfs/${rootCID}`);
  
  return rootCID;
};

Untuk mempelajari lebih lanjut tentang penerapan situs web, lihat panduan kami tentang cara mengunggah file ke IPFS.

2. Penyimpanan metadata NFT

Simpan metadata NFT secara tidak berubah menggunakan CID:

const nftMetadata = {
  name: "My Awesome NFT",
  description: "A unique digital collectible",
  image: "ipfs://bafkreibc5sgo2plmjkq2tzmhrn54bk3crhnqekiy7u66fqvqm37pu2e5gw",
  attributes: [
    { trait_type: "Color", value: "Blue" },
    { trait_type: "Rarity", value: "Epic" }
  ]
};

const metadataCID = await uploadFile(
  JSON.stringify(nftMetadata, null, 2), 
  'metadata.json'
);

// Use in smart contract
console.log(`Token URI: ipfs://${metadataCID}`);

3. Distribusi konten

Gunakan CID untuk pengiriman konten terdistribusi:

// Upload once, access everywhere
const distributeContent = async (content) => {
  const cid = await uploadFile(content, 'content.txt');
  
  // Content available via multiple gateways
  const gateways = [
    `https://ipfs.ninja/ipfs/${cid}`,
    `https://ipfs.io/ipfs/${cid}`,
    `https://cloudflare-ipfs.com/ipfs/${cid}`
  ];
  
  return { cid, gateways };
};

Memahami pinning IPFS dengan CID

CID bersifat sementara secara default — mereka harus “di-pin” untuk tetap tersedia. Pelajari lebih lanjut tentang konsep krusial ini di panduan komprehensif kami tentang apa itu pinning IPFS.

Saat memilih layanan pinning IPFS, pertimbangkan untuk membaca perbandingan IPFS Ninja vs Pinata kami atau jelajahi ringkasan layanan pinning IPFS terbaik yang tersedia hari ini.

Buat CID pertama Anda dalam 30 detik

Siap menghasilkan CID pertama Anda? Berikut contoh cepat menggunakan API IPFS Ninja:

# Using curl (replace with your actual API key)
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "SGVsbG8sIElQRlMgV29ybGQh",
    "description": "My first IPFS upload"
  }'
// Using JavaScript
const createFirstCID = async () => {
  const response = await fetch('https://api.ipfs.ninja/upload/new', {
    method: 'POST',
    headers: {
      'X-Api-Key': 'bws_YOUR_API_KEY_HERE',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      content: btoa('Hello, IPFS World!'), // Base64: "SGVsbG8sIElQRlMgV29ybGQh"
      description: 'My first IPFS upload'
    })
  });
  
  const result = await response.json();
  console.log('🎉 Your first CID:', result.cid);
  console.log('🌐 Access it at:', result.uris.url);
  
  return result;
};

createFirstCID();

Ini akan mengembalikan sesuatu seperti:

{
  "cid": "bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
  "sizeMB": 0.000017,
  "uris": {
    "ipfs": "ipfs://bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
    "url": "https://ipfs.ninja/ipfs/bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw"
  }
}

Untuk contoh API yang lebih detail, lihat tutorial API unggah IPFS kami.

Kesimpulan

CID adalah fondasi dari sistem pengalamatan konten IPFS, menyediakan identifikasi konten yang tidak dapat diubah, dapat diverifikasi, dan terdesentralisasi. Memahami cara kerjanya — dari detail teknis CIDv0 vs CIDv1 hingga pola implementasi praktis — sangat penting untuk membangun aplikasi terdesentralisasi yang kuat.

Poin-poin utama:

  • CID mengidentifikasi konten secara unik, bukan lokasi
  • CIDv0 menyediakan kompatibilitas maksimum, CIDv1 menawarkan fleksibilitas
  • Pengalamatan konten memungkinkan verifikasi dan deduplikasi
  • Penanganan CID yang tepat sangat penting untuk aplikasi produksi

Baik Anda menyimpan metadata NFT, menerapkan situs web terdesentralisasi, atau membangun sistem distribusi konten, CID memberikan fondasi andal yang Anda butuhkan untuk aplikasi yang benar-benar terdesentralisasi.

Siap mulai mem-pin? Buat akun gratis — 50 file, 1 GB penyimpanan, 2 GB bandwidth/bulan. Tanpa kartu kredit.

Kembali ke Blog

Artikel Terkait

Lihat Semua Artikel »