· 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.

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.

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:
- Pemilik domain belum mengubah konten
- Server online dan dapat diakses
- Konten belum dirusak
Dengan pengalamatan konten menggunakan CID:
- Tidak dapat diubah: CID menjamin konten tidak berubah
- Desentralisasi: Konten dapat diambil dari node IPFS mana pun yang memilikinya
- Verifikasi: Anda dapat memverifikasi secara kriptografis bahwa Anda menerima konten yang benar
- 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:
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdGKarakteristik:
- 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... # Base16Karakteristik:
- 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:
- Serialisasi: Konten diformat menurut codec-nya
- Hashing: Fungsi hash kriptografis memproses data yang diserialisasi
- Pembuatan Multihash: Hash dibungkus dengan informasi algoritma dan panjang
- 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: bafkreifjxz6zwqh27k5xnr5qfbx4w6n5vuwwwdcngguwjewzj2e3xxfgviPin 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.
