· Nacho Coll · Guides · 9 min basahin
IPFS CID ipinaliwanag: ano ito at paano gumagana ang content addressing
Malinaw na teknikal na paliwanag ng IPFS Content Identifiers (CIDs). Paano gumagana ang content addressing, mga bersyon ng CID at kung paano gumawa ng iyong unang CID.

Kung nakapagtrabaho ka na sa IPFS (InterPlanetary File System), malamang nakatagpo ka na ng mga string tulad ng QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG o bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi. Hindi ito random na walang kabuluhan — sila ay Content Identifiers (CIDs), ang gulugod ng content addressing system ng IPFS.
Ang pag-unawa sa CIDs ay mahalaga para sa kahit sino na nagtatayo sa IPFS, ikaw man ay nag-uupload ng mga file, nagtatayo ng decentralized applications, o nag-iimplementa ng content distribution systems. Itong gabay ay magpapaliwanag ng lahat ng kailangan mong malaman tungkol sa IPFS CIDs, paano gumagana ang content addressing, at kung paano magsimulang gamitin ang mga ito sa iyong mga proyekto.

Ano ang IPFS CID?
Ang Content Identifier (CID) ay isang natatanging fingerprint na kumakatawan sa isang piraso ng content sa IPFS. Hindi tulad ng tradisyonal na web URLs na nagtuturo sa isang lokasyon (tulad ng https://example.com/file.pdf), ang CIDs ay nagtuturo sa mismong content, hindi alintana kung saan ito naka-store.
Isipin ito ng ganito:
- Location-based addressing: “Pumunta sa Main Street 123 at hingin ang pulang libro”
- Content-based addressing: “Hanapin ang libro na may ISBN 978-0-123456-78-9” (hindi mahalaga kung aling library ang may hawak nito)
Ang CIDs ay gumagana sa parehong paraan — kinikilala nila ang content batay sa cryptographic hash nito, ginagawang hindi nababago at mapapatunayan ang content. Kung magbabago ang isang byte sa file, ang CID ay magbabago nang buo.
Bakit mahalaga ang content addressing
Ang tradisyonal na web architecture ay umaasa sa location-based addressing. Kapag bumisita ka sa https://example.com/image.jpg, nagtitiwala ka na:
- Hindi binago ng may-ari ng domain ang content
- Ang server ay online at maaaring i-access
- Hindi nagalaw ang content
Sa content addressing gamit ang CIDs:
- Immutability: Ginagarantiyahan ng CID na hindi nabago ang content
- Decentralization: Maaaring makuha ang content mula sa anumang IPFS node na mayroon nito
- Verification: Maaari mong i-verify cryptographically na natanggap mo ang tamang content
- Efficiency: Ang magkakatulad na content ay awtomatikong na-deduplicate
Anatomya ng CID
I-breakdown natin ang isang tipikal na CID upang maunawaan ang mga bahagi nito:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
└─┬─┘└─────────────────┬─────────────────────────────────┘
│ │
│ └─ Content Hash (Base32 encoded)
└─ Multibase prefix (nagpapahiwatig ng encoding)Ang CID ay naglalaman ng ilang piraso ng impormasyon:
1. Multibase prefix
Ang unang character ay nagpapahiwatig kung paano naka-encode ang CID:
Q= Base58 encoding (CIDv0)b= Base32 encoding (CIDv1)f= Base16/hexadecimal (CIDv1)z= Base58 (CIDv1)
2. CID Version
- CIDv0: Palaging nagsisimula sa
Qm, gumagamit ng SHA-256, limitado sa DAG-PB codec - CIDv1: Mas flexible, sumusuporta sa maraming hash functions at codecs
3. Multicodec
Tinutukoy kung paano nakabalangkas ang content (DAG-PB, DAG-CBOR, raw bytes, atbp.)
4. Multihash
Ang aktwal na cryptographic hash ng content, kasama ang:
- Hash function identifier (kadalasan ay SHA-256)
- Hash length
- Hash digest
CIDv0 vs CIDv1: Pag-unawa sa pagkakaiba
Ang IPFS ay umunlad sa pamamagitan ng dalawang pangunahing bersyon ng CID, bawat isa ay may natatanging katangian:
CIDv0: Ang orihinal na format
Ang CIDv0 CIDs ay palaging nagsisimula sa Qm at mukhang ganito:
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdGMga katangian:
- Base58 encoding lamang
- SHA-256 hash function lamang
- DAG-PB (Protobuf) codec lamang
- 46 character ang haba
- Backward compatible sa lahat ng IPFS implementations
Kailan gamitin ang CIDv0:
- Maximum compatibility sa mga mas lumang IPFS nodes
- Pagtatrabaho sa mga umiiral na sistema na umaasa sa
Qmprefixes - File storage (pinakakaraniwang use case)
CIDv1: Ang modernong standard
Ang CIDv1 CIDs ay mas flexible at maaaring mukhang ganito:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi # Base32
zb2rhj7crUKTQYRGCRATFaQ6YFLTde2YzdqbbhAASkL9uRDXn # Base58
f01551220d1e2c35... # Base16Mga katangian:
- Maraming encoding formats (Base32, Base58, Base16)
- Suporta sa iba’t ibang hash functions (SHA-256, SHA-512, BLAKE2, atbp.)
- Maraming codecs (Raw, DAG-CBOR, DAG-JSON, atbp.)
- Self-describing format
- Hindi case-sensitive kapag gumagamit ng Base32
Kailan gamitin ang CIDv1:
- Pagbuo ng mga bagong application
- Kailangan ng case-insensitive identifiers
- Pagtatrabaho sa structured data (JSON, CBOR)
- Paggamit ng alternative hash functions
Conversion sa pagitan ng mga bersyon
Maaari mong i-convert ang CIDs sa pagitan ng mga bersyon habang pinanatili ang parehong content reference:
// CIDv0
const cidv0 = "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG";
// Convert to CIDv1 Base32
const cidv1 = "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi";
// Both reference the same content!Paano gumagana ang content addressing
Ang content addressing sa IPFS ay sumusunod sa isang deterministic na proseso na nagsisiguro na ang parehong content ay laging nagbubuo ng parehong CID:
1. Paghahanda ng content
Kapag nag-add ka ng content sa IPFS, una itong binubreak down:
- Maliit na mga file: Iniimbak bilang single blocks
- Malaking mga file: Hinati sa mga chunk at inayos sa Merkle DAG (directed acyclic graph)
- Mga directory: Kinakatawan bilang DAG structures na nagli-link sa mga file
2. Hashing process
Ang bawat piraso ng content ay dumadaan sa:
- Serialization: Ang content ay naka-format ayon sa codec nito
- Hashing: Pinoproseso ng cryptographic hash function ang serialized data
- Multihash creation: Ang hash ay binabalot ng algorithm at length information
- CID assembly: Pinagsama ang version, codec, at multihash
3. Merkle DAG structure
Ang IPFS ay nag-aayos ng content sa isang Merkle DAG kung saan:
- Ang bawat node ay may CID
- Ang parent nodes ay tumutukoy sa child nodes sa pamamagitan ng CID
- Ang mga pagbabago sa anumang node ay kumakalat pataas sa puno
- Ang buong istruktura ay maaaring i-verify cryptographically
Root CID: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
├── file1.txt (QmHash1...)
├── file2.jpg (QmHash2...)
└── subdirectory/
├── file3.pdf (QmHash3...)
└── file4.mp4 (QmHash4...)Praktikal na mga halimbawa: Pakikipagtulungan sa CIDs
Pag-aralan natin kung paano makipagtulungan sa CIDs sa pagsasanay gamit ang IPFS Ninja API:
Pag-upload ng content at pagkuha ng 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: bafkreifjxz6zwqh27k5xnr5qfbx4w6n5vuwwwdcngguwjewzj2e3xxfgviPag-pin ng umiiral na content sa pamamagitan ng CID
Kung mayroon ka nang CID, maaari mong i-pin ito upang masiguro ang availability:
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');Pag-access sa content sa pamamagitan ng CID
Kapag mayroon ka nang CID, maaari mong ma-access ang content sa pamamagitan ng iba’t ibang methods:
// 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;
};Mga best practice ng CID para sa mga developer
1. Palaging i-validate ang CIDs
Bago gamitin ang isang CID sa iyong application, i-validate ang format nito:
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. Pangasiwaan ang parehong bersyon ng CID
Ang iyong application ay dapat gumana sa parehong CIDv0 at 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. I-cache ang mga CID mapping
Kung madalas kang gumagawa ng CIDs, isaalang-alang ang 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. Gumamit ng makabuluhang mga deskripsyon
Kapag nag-upload ng content, isama ang descriptive metadata:
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'
}
})
});
};Mga karaniwang use case ng CID
1. Static website deployment
I-deploy ang buong website sa IPFS at i-reference sila sa pamamagitan ng 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;
};Upang malaman ang higit pa tungkol sa website deployment, tingnan ang aming gabay tungkol sa kung paano mag-upload ng mga file sa IPFS.
2. NFT metadata storage
Mag-imbak ng NFT metadata nang hindi nababago gamit ang CIDs:
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. Content distribution
Gamitin ang CIDs para sa distributed content delivery:
// 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 };
};Pag-unawa sa IPFS pinning gamit ang CIDs
Ang CIDs ay pansamantala bilang default — dapat silang “i-pin” upang manatiling available. Matuto pa tungkol sa mahalagang konseptong ito sa aming komprehensibong gabay tungkol sa ano ang IPFS pinning.
Kapag pumipili ng IPFS pinning service, isaalang-alang ang pagbabasa ng aming paghahambing na IPFS Ninja vs Pinata o tuklasin ang aming roundup ng mga pinakamahusay na IPFS pinning services na available ngayon.
Gumawa ng iyong unang CID sa 30 segundo
Handa nang mag-generate ng iyong unang CID? Narito ang isang mabilis na halimbawa gamit ang IPFS Ninja API:
# 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();Magreturn ito ng kahawig ng:
{
"cid": "bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
"sizeMB": 0.000017,
"uris": {
"ipfs": "ipfs://bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
"url": "https://ipfs.ninja/ipfs/bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw"
}
}Para sa mas detalyadong mga halimbawa ng API, tingnan ang aming IPFS upload API tutorial.
Konklusyon
Ang CIDs ay ang pundasyon ng content addressing system ng IPFS, nagbibigay ng immutable, verifiable, at decentralized na pagkakakilanlan ng content. Ang pag-unawa kung paano sila gumagana — mula sa teknikal na detalye ng CIDv0 vs CIDv1 hanggang sa praktikal na implementation patterns — ay mahalaga para sa pagbuo ng matatag na decentralized applications.
Mga pangunahing punto:
- Ang CIDs ay natatanging tinutukoy ang content, hindi lokasyon
- Ang CIDv0 ay nagbibigay ng maximum compatibility, ang CIDv1 ay nag-aalok ng flexibility
- Ang content addressing ay nagbibigay-daan sa verification at deduplication
- Ang wastong pamamahala ng CID ay mahalaga para sa production applications
Mag-store ka man ng NFT metadata, mag-deploy ng decentralized websites, o magbuo ng content distribution systems, ang CIDs ay nagbibigay ng maaasahang pundasyon na kailangan mo para sa tunay na decentralized applications.
Handa nang magsimulang mag-pin? Gumawa ng libreng account — 50 file, 1 GB storage, 2 GB bandwidth/buwan. Walang credit card.
