· Nacho Coll · Guides · 10 मिनट पढ़ें
IPFS CID समझाया गया: यह क्या है और कंटेंट एड्रेसिंग कैसे काम करती है
IPFS कंटेंट आइडेंटिफायर्स (CIDs) की स्पष्ट तकनीकी व्याख्या। कंटेंट एड्रेसिंग कैसे काम करती है, CID संस्करण और अपना पहला CID कैसे बनाएं।

यदि आपने कभी IPFS (इंटरप्लैनेटरी फाइल सिस्टम) के साथ काम किया है, तो आपने शायद QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG या bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi जैसे स्ट्रिंग्स देखे होंगे। ये यादृच्छिक गिबरिश नहीं हैं — ये कंटेंट आइडेंटिफायर्स (CIDs) हैं, जो IPFS की कंटेंट एड्रेसिंग सिस्टम की रीढ़ हैं।
CIDs को समझना IPFS पर निर्माण करने वाले किसी भी व्यक्ति के लिए महत्वपूर्ण है, चाहे आप फाइलें अपलोड कर रहे हों, विकेंद्रीकृत एप्लिकेशन बना रहे हों, या कंटेंट डिस्ट्रिब्यूशन सिस्टम लागू कर रहे हों। यह गाइड IPFS CIDs के बारे में आपको जो कुछ भी जानने की आवश्यकता है, कंटेंट एड्रेसिंग कैसे काम करती है, और अपनी परियोजनाओं में उनका उपयोग कैसे शुरू करें, सब कुछ समझाएगी।

IPFS CID क्या है?
कंटेंट आइडेंटिफायर (CID) एक अनूठा फिंगरप्रिंट है जो IPFS पर एक कंटेंट टुकड़े का प्रतिनिधित्व करता है। पारंपरिक वेब URL के विपरीत जो एक स्थान की ओर इशारा करते हैं (जैसे https://example.com/file.pdf), CIDs कंटेंट की ओर ही इशारा करते हैं, चाहे वह कहीं भी संग्रहीत हो।
इसे ऐसे सोचें:
- स्थान-आधारित एड्रेसिंग: “मेन स्ट्रीट 123 पर जाएं और लाल किताब के लिए पूछें”
- कंटेंट-आधारित एड्रेसिंग: “ISBN 978-0-123456-78-9 वाली किताब ढूंढें” (किस लाइब्रेरी में है, इससे फर्क नहीं पड़ता)
CIDs इसी तरह काम करते हैं — वे कंटेंट की क्रिप्टोग्राफिक हैश के आधार पर इसकी पहचान करते हैं, जिससे कंटेंट अपरिवर्तनीय और सत्यापन योग्य बन जाता है। यदि फाइल में एक भी बाइट बदलता है, तो CID पूरी तरह से बदल जाता है।
कंटेंट एड्रेसिंग क्यों महत्वपूर्ण है
पारंपरिक वेब आर्किटेक्चर स्थान-आधारित एड्रेसिंग पर निर्भर करती है। जब आप https://example.com/image.jpg पर जाते हैं, तो आप विश्वास करते हैं कि:
- डोमेन मालिक ने कंटेंट नहीं बदला है
- सर्वर ऑनलाइन और सुलभ है
- कंटेंट के साथ छेड़छाड़ नहीं की गई है
CIDs का उपयोग करके कंटेंट एड्रेसिंग के साथ:
- अपरिवर्तनीयता: CID गारंटी देता है कि कंटेंट नहीं बदला है
- विकेंद्रीकरण: कंटेंट किसी भी IPFS नोड से प्राप्त किया जा सकता है जिसके पास यह है
- सत्यापन: आप क्रिप्टोग्राफिक रूप से सत्यापित कर सकते हैं कि आपको सही कंटेंट मिला है
- दक्षता: समान कंटेंट स्वचालित रूप से डुप्लीकेट हटा दिए जाते हैं
CID की एनाटॉमी
इसके घटकों को समझने के लिए एक सामान्य CID को विभाजित करें:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
└─┬─┘└─────────────────┬─────────────────────────────────┘
│ │
│ └─ कंटेंट हैश (Base32 एन्कोडेड)
└─ Multibase उपसर्ग (एन्कोडिंग को इंगित करता है)एक CID में कई जानकारी के टुकड़े होते हैं:
1. Multibase उपसर्ग
पहला अक्षर इंगित करता है कि CID कैसे एन्कोड किया गया है:
Q= Base58 एन्कोडिंग (CIDv0)b= Base32 एन्कोडिंग (CIDv1)f= Base16/हेक्साडेसिमल (CIDv1)z= Base58 (CIDv1)
2. CID संस्करण
- CIDv0: हमेशा
Qmसे शुरू होता है, SHA-256 का उपयोग करता है, DAG-PB codec तक सीमित - CIDv1: अधिक लचीला, कई हैश फ़ंक्शन और codec का समर्थन करता है
3. Multicodec
निर्दिष्ट करता है कि कंटेंट कैसे संरचित है (DAG-PB, DAG-CBOR, कच्चे बाइट्स, आदि)
4. Multihash
कंटेंट का वास्तविक क्रिप्टोग्राफिक हैश, जिसमें शामिल है:
- हैश फ़ंक्शन पहचानकर्ता (आमतौर पर SHA-256)
- हैश की लंबाई
- हैश डाइजेस्ट
CIDv0 vs CIDv1: अंतरों को समझना
IPFS दो प्रमुख CID संस्करणों के माध्यम से विकसित हुआ है, प्रत्येक की विशिष्ट विशेषताएं हैं:
CIDv0: मूल प्रारूप
CIDv0 CIDs हमेशा Qm से शुरू होते हैं और ऐसे दिखते हैं:
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdGविशेषताएं:
- केवल Base58 एन्कोडिंग
- केवल SHA-256 हैश फ़ंक्शन
- केवल DAG-PB (Protobuf) codec
- 46 अक्षर लंबा
- सभी IPFS कार्यान्वयनों के साथ पीछे संगत
CIDv0 का उपयोग कब करें:
- पुराने IPFS नोड्स के साथ अधिकतम संगतता
- मौजूदा सिस्टम के साथ काम करते हुए जो
Qmउपसर्गों की अपेक्षा करते हैं - फ़ाइल भंडारण (सबसे आम उपयोग का मामला)
CIDv1: आधुनिक मानक
CIDv1 CIDs अधिक लचीले होते हैं और इस तरह दिख सकते हैं:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi # Base32
zb2rhj7crUKTQYRGCRATFaQ6YFLTde2YzdqbbhAASkL9uRDXn # Base58
f01551220d1e2c35... # Base16विशेषताएं:
- कई एन्कोडिंग प्रारूप (Base32, Base58, Base16)
- विभिन्न हैश फ़ंक्शनों के लिए समर्थन (SHA-256, SHA-512, BLAKE2, आदि)
- कई codec (Raw, DAG-CBOR, DAG-JSON, आदि)
- स्व-वर्णनात्मक प्रारूप
- Base32 का उपयोग करते समय केस-असंवेदनशील
CIDv1 का उपयोग कब करें:
- नए एप्लिकेशन बनाना
- केस-असंवेदनशील पहचानकर्ताओं की आवश्यकता
- संरचित डेटा (JSON, CBOR) के साथ काम करना
- वैकल्पिक हैश फ़ंक्शनों का उपयोग करना
संस्करणों के बीच रूपांतरण
आप समान कंटेंट संदर्भ बनाए रखते हुए CIDs को संस्करणों के बीच परिवर्तित कर सकते हैं:
// CIDv0
const cidv0 = "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG";
// Convert to CIDv1 Base32
const cidv1 = "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi";
// Both reference the same content!कंटेंट एड्रेसिंग कैसे काम करती है
IPFS में कंटेंट एड्रेसिंग एक नियतात्मक प्रक्रिया का अनुसरण करती है जो सुनिश्चित करती है कि एक ही कंटेंट हमेशा एक ही CID उत्पन्न करता है:
1. कंटेंट तैयारी
जब आप IPFS में कंटेंट जोड़ते हैं, तो इसे पहले विभाजित किया जाता है:
- छोटी फ़ाइलें: एकल ब्लॉक के रूप में संग्रहीत
- बड़ी फ़ाइलें: टुकड़ों में विभाजित और Merkle DAG (निर्देशित अचक्रीय ग्राफ) में संगठित
- डायरेक्टरीज़: फ़ाइलों से लिंक करने वाली DAG संरचनाओं के रूप में दर्शाई गई
2. हैशिंग प्रक्रिया
कंटेंट का प्रत्येक टुकड़ा इन चरणों से गुजरता है:
- सीरियलाइज़ेशन: कंटेंट को उसके codec के अनुसार स्वरूपित किया जाता है
- हैशिंग: क्रिप्टोग्राफिक हैश फ़ंक्शन सीरियलाइज़ किए गए डेटा को संसाधित करता है
- Multihash निर्माण: हैश को एल्गोरिथम और लंबाई जानकारी के साथ लपेटा जाता है
- CID असेंबली: संस्करण, codec, और multihash को संयोजित किया जाता है
3. Merkle DAG संरचना
IPFS कंटेंट को Merkle DAG में संगठित करता है जहां:
- प्रत्येक नोड का एक CID होता है
- मूल नोड्स CID द्वारा चाइल्ड नोड्स को संदर्भित करते हैं
- किसी भी नोड में परिवर्तन पेड़ के ऊपर प्रसारित होते हैं
- पूरी संरचनाओं को क्रिप्टोग्राफिक रूप से सत्यापित किया जा सकता है
Root CID: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
├── file1.txt (QmHash1...)
├── file2.jpg (QmHash2...)
└── subdirectory/
├── file3.pdf (QmHash3...)
└── file4.mp4 (QmHash4...)व्यावहारिक उदाहरण: CIDs के साथ काम करना
आइए IPFS Ninja API का उपयोग करके CIDs के साथ व्यवहार में कैसे काम करें इसकी खोज करें:
कंटेंट अपलोड करना और 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: bafkreifjxz6zwqh27k5xnr5qfbx4w6n5vuwwwdcngguwjewzj2e3xxfgviCID द्वारा मौजूदा कंटेंट को पिन करना
यदि आपके पास पहले से एक CID है, तो आप उपलब्धता सुनिश्चित करने के लिए इसे पिन कर सकते हैं:
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');CID के माध्यम से कंटेंट तक पहुंच
एक बार जब आपके पास CID होता है, तो आप विभिन्न विधियों के माध्यम से कंटेंट तक पहुंच सकते हैं:
// 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;
};डेवलपर्स के लिए CID सर्वोत्तम अभ्यास
1. हमेशा CIDs को मान्य करें
अपने एप्लिकेशन में CID का उपयोग करने से पहले, इसके प्रारूप को मान्य करें:
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. दोनों CID संस्करणों को संभालें
आपके एप्लिकेशन को CIDv0 और 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. CID मैपिंग कैश करें
यदि आप अक्सर CIDs उत्पन्न करते हैं, तो कैशिंग पर विचार करें:
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. सार्थक विवरण का उपयोग करें
कंटेंट अपलोड करते समय, वर्णनात्मक मेटाडेटा शामिल करें:
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'
}
})
});
};सामान्य CID उपयोग के मामले
1. स्थैतिक वेबसाइट तैनाती
पूरी वेबसाइटों को IPFS में तैनात करें और 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;
};वेबसाइट तैनाती के बारे में अधिक जानने के लिए, हमारी गाइड देखें IPFS पर फ़ाइलें कैसे अपलोड करें।
2. NFT मेटाडेटा भंडारण
CIDs का उपयोग करके NFT मेटाडेटा को अपरिवर्तनीय रूप से संग्रहीत करें:
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. कंटेंट वितरण
वितरित कंटेंट डिलीवरी के लिए CIDs का उपयोग करें:
// 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 };
};CIDs के साथ IPFS पिनिंग को समझना
CIDs डिफ़ॉल्ट रूप से अस्थायी हैं — उन्हें उपलब्ध रहने के लिए “पिन” किया जाना चाहिए। इस महत्वपूर्ण अवधारणा के बारे में अधिक जानें हमारी व्यापक गाइड में IPFS पिनिंग क्या है।
IPFS पिनिंग सेवा चुनते समय, हमारी IPFS Ninja vs Pinata तुलना पढ़ने पर विचार करें या आज उपलब्ध सर्वोत्तम IPFS पिनिंग सेवाओं के हमारे राउंडअप का अन्वेषण करें।
30 सेकंड में अपना पहला CID बनाएं
अपना पहला CID उत्पन्न करने के लिए तैयार हैं? 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();यह कुछ ऐसा लौटाएगा:
{
"cid": "bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
"sizeMB": 0.000017,
"uris": {
"ipfs": "ipfs://bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw",
"url": "https://ipfs.ninja/ipfs/bafkreif2pall7dybz7vecqka3zo24irdwabf7rbiiweuhau7a2hjlqvfjw"
}
}अधिक विस्तृत API उदाहरणों के लिए, हमारा IPFS अपलोड API ट्यूटोरियल देखें।
निष्कर्ष
CIDs IPFS की कंटेंट एड्रेसिंग सिस्टम की नींव हैं, जो अपरिवर्तनीय, सत्यापन योग्य और विकेंद्रीकृत कंटेंट पहचान प्रदान करते हैं। वे कैसे काम करते हैं इसे समझना — CIDv0 vs CIDv1 के तकनीकी विवरणों से व्यावहारिक कार्यान्वयन पैटर्न तक — मजबूत विकेंद्रीकृत एप्लिकेशन बनाने के लिए आवश्यक है।
मुख्य निष्कर्ष:
- CIDs कंटेंट की विशिष्ट पहचान करते हैं, स्थानों की नहीं
- CIDv0 अधिकतम संगतता प्रदान करता है, CIDv1 लचीलापन प्रदान करता है
- कंटेंट एड्रेसिंग सत्यापन को सक्षम करती है और डिडुप्लीकेशन
- उचित CID हैंडलिंग प्रोडक्शन एप्लिकेशन के लिए महत्वपूर्ण है
चाहे आप NFT मेटाडेटा संग्रहीत कर रहे हों, विकेंद्रीकृत वेबसाइटें तैनात कर रहे हों, या कंटेंट वितरण सिस्टम बना रहे हों, CIDs वास्तव में विकेंद्रीकृत एप्लिकेशन के लिए आपको आवश्यक विश्वसनीय नींव प्रदान करते हैं।
पिन करना शुरू करने के लिए तैयार हैं? एक मुफ्त खाता बनाएं — 50 फ़ाइलें, 1 GB स्टोरेज, 2 GB बैंडविड्थ/महीना। कोई क्रेडिट कार्ड नहीं चाहिए।
