सामग्री परोसना
एक प्रोटोकॉल रिकॉर्ड कभी एक फ़ाइल नहीं ले जाता। वह एक CID ले जाता है — कहीं और संग्रहित सामग्री का एक स्व-वर्णनकारी हैश — जो एक 10 MB रसीद को एक gossip payload से बाहर रखता है जिसे हर नोड को संग्रहित और फिर से चलाना होता है, जबकि फिर भी एक मध्यस्थ को यह स्थापित करने देता है कि जो छवि वे देख रहे हैं वही है जिस पर पक्ष ने हस्ताक्षर किया।
फिर भी किसी को बाइट धारण करने होते हैं। वह कोई आपका नोड है, और वह पहले से यह कर रहा है: सामग्री परोसना डिफ़ॉल्ट रूप से चालू है और इसे कोई कॉन्फ़िगरेशन नहीं चाहिए।
यह नोड में क्यों है और एक daemon में नहीं
इसका पहला संस्करण एक अलग Kubo daemon के माध्यम से
pin करता था, --ipfs-api-url पर पहुँचा गया। वह काम करता था, और दिखने से अधिक लागत
लेता था: नेटवर्क पर एक दूसरी peer पहचान, एक Go रनटाइम और उसकी नोड के साथ रहने वाली
मेमोरी, और पोर्ट 5001 पर एक अप्रमाणित /api/v0 नियंत्रण सतह जो किसी को भी जो उस
तक पहुँचे, daemon के धारण किए सब कुछ को pin, unpin और पढ़ने देती है — केवल इसे
loopback से बाँधकर कम की गई।
गहरी समस्या डिफ़ॉल्ट थी। एक daemon चलाना काम है, इसलिए pin करना ऑप्ट-इन था, इसलिए लगभग कोई इसे चालू नहीं करता — और एक स्थायित्व गारंटी जिसमें कोई ऑप्ट-इन नहीं करता, कोई गारंटी नहीं है। एक नोड अब प्रक्रिया में bitswap बोलता है, उसी libp2p पहचान पर जिससे वह पहले से gossip करता है, जो व्यवहार को डिफ़ॉल्ट रूप से चालू होने देता है। वह बदले में पुरस्कार प्रीमियम को कुछ असली मापने देता है: सबके परोसने के साथ, गुणक उन नोड्स को जो वास्तव में सामग्री धारण करते और उसके लिए उत्तर देते हैं, उन नोड्स से अलग करता है जो ऑफ़लाइन हैं या जिन्होंने प्रून कर दिया, न कि उन ऑपरेटरों को जिन्होंने Go स्थापित करने की परवाह की, उनसे जिन्होंने नहीं की।
आपका नोड क्या धारण करता है, और क्या नहीं
यह उन अटैचमेंट रिकॉर्डों द्वारा संदर्भित सामग्री धारण करता है जिन्हें उसने स्वीकार किया, उसकी प्रतिधारण विंडो के भीतर। यह हर CID जो देखता है उसे नहीं लाता — एक नोड जो ऐसा करता, वह जो भी कोई उसे इंगित करना चुनता उसे संग्रहित कर रहा होता।
वह सीमा एक वादा नहीं है, यह अंकगणित है: एक अटैचमेंट को एक निपटान नामित करना होता है, और एक निपटान को असली एस्क्रो के विरुद्ध एक असली आरक्षण चाहिए। आपकी डिस्क से जो माँगा जाता है उसकी छत नेटवर्क का वास्तविक व्यापार आयतन है, न कि एक अजनबी का धैर्य।
पुनःप्राप्त हर चीज़ रखे जाने से पहले उसके CID के विरुद्ध जाँची जाती है, चाहे वह एक peer से आई हो या एक गेटवे से।
अपने नोड से पूछें कि वह क्या धारण कर रहा है:
curl -s -X POST http://localhost:7080/rpc -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getHeldContent","params":{"cid":"bafkrei..."}}'
# {"jsonrpc":"2.0","id":1,"result":{"content":"<base64>"}} ← धारण किया गया
# {"jsonrpc":"2.0","id":1,"result":{"content":null}} ← धारण नहीं किया गया
पहली प्रति कहाँ से आती है
Bitswap ब्लॉकों को उन peers के बीच घुमाता है जिनके पास पहले से हैं; यह पहला नहीं बनाता। सामग्री उस pin सेवा के माध्यम से नेटवर्क में प्रवेश करती है जिसमें इंटरफ़ेस ने उसे अपलोड किया, इसलिए किसी CID को चाहने वाले पहले नोड को उसे व्यापक IPFS नेटवर्क से लाना होता है, बाइट को CID के विरुद्ध जाँचना होता है, और तब से उसे अपने peers को परोसना होता है।
--content-gateway https://ipfs.example.com # डिफ़ॉल्ट: https://ipfs.filebase.io
गेटवे अविश्वसनीय परिवहन है, कोई प्राधिकरण नहीं। यह गलत बाइट, कोई बाइट नहीं, परोस सकता है, या लॉग कर सकता है कि किसने क्या माँगा; यह नहीं बदल सकता कि एक CID कौन-सी सामग्री नामित करता है, क्योंकि CID उस सामग्री का एक हैश है। जो बाइट CID जो नामित करता है वह नहीं हैं, अस्वीकृत होते हैं, और एक गेटवे जो कुछ भी प्रतिस्थापित करता है, एक ऐसे गेटवे से अभेद्य है जो केवल बंद है।
गोपनीयता वह एक चीज़ है जिसे सत्यापन ठीक नहीं करता: जो भी गेटवे चलाता है, वह जान लेता है कि आपके नोड ने यह CID माँगा। इसीलिए फ़्लैग मौजूद है — इसे अपने ही पर इंगित करें — और इसीलिए यह पहली पसंद के बजाय एक फ़ॉलबैक है। आपका नोड अपने peers को पसंद करता है।
यदि आप पहले से Kubo चलाते हैं
--ipfs-api-url http://127.0.0.1:5001 अब भी काम करता है और अब कुछ पहले से संकरा
अर्थ रखता है: प्रोटोकॉल सामग्री आपके daemon में साथ ही pin की जाती है, एक प्रति
कहीं रखते हुए जिसे आपके नोड की अपनी प्रतिधारण विंडो नियंत्रित नहीं करती। यह अब वह
तरीका नहीं जिससे एक नोड सामग्री परोसता है।
इसे बंद करना, और उसकी लागत क्या है
openfiat-node --no-content-serving
वह नोड कुछ भी संग्रहित नहीं करता और एक पुनःप्राप्ति चुनौती का उत्तर नहीं दे सकता, इसलिए यह घटा हुआ हिस्सा कमाता है। वह ईमानदार परिणाम है — यह नेटवर्क के लिए कम कर रहा है — और यह सही फ़्लैग है यदि डिस्क सचमुच वहाँ नहीं है। नोड फिर भी दोनों तरह से अपने peers को चुनौती देता है: कौन सामग्री परोसता है इसे मापना एक ऐसी सेवा है जो एक नोड चाहे स्वयं कुछ भी संग्रहित करे या न करे, करता है।
चुनौती कैसे काम करती है
एक नोड एक CID चुनता है जिसे नेटवर्क जानता है, दूसरे नोड से बाइट माँगता है, और जो वापस आता है उसे हैश करता है। एक सामग्री पता ही उसकी सामग्री का हैश है, इसलिए सही बाइट लौटाना कुछ ऐसा नहीं जो एक नोड उन्हें रखे बिना कर सके। यह एकमात्र नोड-गुणवत्ता संकेत है जिसे माने जाने के बजाय जाँचा जाता है।
केवल कुछ CID प्रश्न तय कर सकते हैं। एक raw-codec CID का डाइजेस्ट फ़ाइल पर ही लिया जाता है; एक dag-pb CID एक टुकड़ों वाले DAG की जड़ को पता करता है, इसलिए एक peer सही फ़ाइल लौटा सकता है और फिर भी एक भोली हैश जाँच में विफल हो सकता है। प्रदाता 262,144 बाइट पर दोनों के बीच स्विच करते हैं, इसलिए चुनौतियाँ 256 KiB पर या उससे कम की फ़ाइलों का नमूना लेती हैं — अवतार लगभग हमेशा, अटैचमेंट कभी-कभी। वह उस नोड को जो सब कुछ pin करता है, उससे अलग करने के लिए पर्याप्त है जो कुछ भी pin नहीं करता, जो गुणक को चाहिए; यह इस बात का प्रमाण नहीं कि एक नोड एक विशिष्ट बड़ा अटैचमेंट धारण करता है, और कुछ भी दावा नहीं करता कि है।
गुणक क्या है
एक नोड जो उत्तर देता है अपना पूरा हिस्सा रखता है; एक नोड जो नहीं दे सकता 0.7
पर स्केल होता है, इसलिए एक परोसने वाला नोड एक अन्यथा समान न-परोसने वाले नोड का
लगभग 1.43× कमाता है। दोनों आँकड़े [PROPOSED — NEEDS SIGN-OFF] हैं — देखें
OFS-4100 §9.2 और crates/rewards/src/params.rs।
प्रीमियम एक दंड के रूप में व्यक्त किया जाता है एक ऐसे कारण से जो प्रस्तुतिपरक नहीं है। प्रति युग उत्सर्जन निश्चित है, और ये गुणक तय करते हैं कि इसे कैसे विभाजित किया जाए। 1.0 से ऊपर का एक बोनस एक pin करने वाले नोड को कहीं से भुगतान नहीं करता, यह ऐसा उत्सर्जन गढ़ेगा जो अवसंरचना बकेट में नहीं है — जिसे पुरस्कार पैरामीटर सीधे अस्वीकार करते हैं। इसलिए pin करने वाला नोड अपना पूरा हिस्सा रखता है और न-pin करने वाला नोड अपने का एक हिस्सा त्यागता है।
केवल-gossip के 0.4 के बजाय 0.7, क्योंकि भंडारण नेटवर्क के लिए एक चेन कनेक्शन से एक छोटा उपकार है: एक नोड जो pin नहीं करता वह फिर भी बाकी सब कुछ रिले, सत्यापित और परोसता है।
सामग्री कितने समय रखी जाती है
हर नोड को पूरा इतिहास नहीं ढोना चाहिए।
--retention 30 # डिफ़ॉल्ट: एक रोलिंग 30-दिन विंडो
--retention 365 # एक लंबी विंडो, फिर भी रोलिंग
--retention archival # सब कुछ रखें, हमेशा के लिए — एक स्पष्ट विकल्प
30 दिन वह न्यूनतम भी है जो हर नोड नेटवर्क का ऋणी है, इसलिए छोटे मान चुपचाप उठाए जाने के बजाय अस्वीकृत होते हैं — सात दिनों के लिए कॉन्फ़िगर किया एक नोड जो चुपचाप तीस के लिए चलता, वह अपने ऑपरेटर के माँगे से कुछ भिन्न कर रहा होता।
वह न्यूनतम ही निष्कासन और पुरस्कारों को सह-अस्तित्व देता है। चुनौतियाँ हमेशा केवल उसके भीतर की सामग्री से खींची जाती हैं, इसलिए एक रोलिंग नोड जिसने पिछले साल के साक्ष्य को सही ढंग से निष्कासित किया, उससे कभी नहीं पूछा जाता और सही काम करने के लिए अपना हिस्सा कभी नहीं खोता। समान रूप से, कोई नोड एक छोटी विंडो घोषित करके उससे पूछे जा सकने वाले को कम नहीं कर सकता।