Mike Hearn एक Bitcoin डेवलपर और कई BIP के सहलेखक हैं। BIP ऐसे दस्तावेज़ हैं जो प्रस्तावित तकनीकी समाधान बताते हैं। उन्होंने bitcoinj लाइब्रेरी, कनेक्शन की जाँच, ज़रूरी लेनदेन चुनने और भुगतान के दौरान संदेश भेजने के तरीकों पर काम किया। फोन के वॉलेट से भुगतान का इंतज़ार कर रही दुकान तक का सफ़र देखें, तो उनका योगदान समझना आसान होता है।
बिटकॉइन वॉलेट बनाने वाले को नेटवर्क से बातचीत का पूरा कोड खुद नहीं लिखना पड़ता। वह लाइब्रेरी इस्तेमाल कर सकता है: पहले से तैयार कार्यों का संग्रह, जिसके आधार पर अपना ऐप बनाया जाता है। bitcoinj ऐसी ही लाइब्रेरी है। उसकी AUTHORS फ़ाइल में कई योगदानकर्ताओं के साथ Mike Hearn का नाम है और Git में बदलावों के इतिहास का संदर्भ दिया गया है। इससे विशिष्ट योगदान देखे जा सकते हैं। इसका अर्थ यह नहीं कि हर सुविधा Hearn ने अकेले लिखी या आज पूरे प्रोजेक्ट का नेतृत्व उन्हीं के पास है। [1]
bitcoinj, Java की लाइब्रेरी है जिससे स्थानीय रूप से Bitcoin Core स्थापित किए बिना वॉलेट चलाना और लेनदेन भेजना या प्राप्त करना संभव है। फोन के लिए SPV, यानी Simplified Payment Verification, उपयोगी है। यह सरलीकृत भुगतान सत्यापन हर लेनदेन की पूरी जाँच करने के बजाय ब्लॉक हेडर और वॉलेट से संबंधित लेनदेन पर काम करता है। इससे डेटा और फोन के संसाधन बचते हैं। दस्तावेज़ प्रयोगात्मक पूर्ण सत्यापन मोड भी बताते हैं। दोनों अलग तरीके हैं; हल्का चलने का मतलब वही सभी नियम जाँचना, बस अधिक तेज़ी से, नहीं है। [2]
कल्पना करें कि लैपटॉप स्लीप मोड से जागा है। दूसरे नोड से कनेक्शन खुला दिख सकता है, जबकि वह काम करना बंद कर चुका हो। Hearn का BIP 31, nonce वाला ping भेजने देता है। यहाँ nonce एक संख्या है जो किसी विशेष अनुरोध की पहचान करती है। सामने वाला नोड pong संदेश में वही संख्या लौटाता है। प्रोटोकॉल संस्करण 60000 से ऊपर इससे अनुरोध और उत्तर का मिलान तथा प्रतिक्रिया समय का मापन हो सकता है। यह संवाद की जाँच है; केवल जवाब मिलना नोड की ईमानदारी या भुगतान की वैधता सिद्ध नहीं करता। [3]
फोन उन लेनदेन को क्यों डाउनलोड करे जो उससे संबंधित ही नहीं हैं? Hearn और Matt Corallo का BIP 37, Bloom फ़िल्टर बताता है: संभावित मिलान चुनने वाला छोटा-सा साधन। filterload फ़िल्टर सेट करता है, filteradd एक मद जोड़ता है और filterclear फ़िल्टर हटा देता है। असंबंधित लेनदेन भी निकलकर आ सकता है; इसे गलत सकारात्मक परिणाम कहते हैं। अधिक सटीक फ़िल्टर डेटा कम भेजता है, पर सामने वाले नोड के लिए लेनदेन को वॉलेट के IP पते से जोड़ना आसान कर सकता है। इसलिए डेटा बचना अपने आप गोपनीयता सुरक्षित होना नहीं है। [4]
फोन को जानना होता है कि प्राप्त लेनदेन वास्तव में किसी खास ब्लॉक का हिस्सा है या नहीं। BIP 37 का merkleblock संदेश Merkle प्रमाण के लिए डेटा देता है। डेटा के कुछ डिजिटल निशान, यानी हैश, इस्तेमाल करके लेनदेन का संबंध ब्लॉक हेडर में मौजूद संयुक्त निशान से जाँचा जा सकता है। इसके लिए पूरा ब्लॉक डाउनलोड करना ज़रूरी नहीं। लेकिन यह प्रमाण नहीं बताता कि सामने वाले ने अन्य लेनदेन छिपाए हैं या नहीं। SPV लेनदेन की वैधता की पूरी जाँच का विकल्प भी नहीं है। bitcoinj के दस्तावेज़ बताते हैं कि हमलावर वॉलेट के सभी कनेक्शन नियंत्रित करके उसे दिखने वाली जानकारी चुन सके, तो क्या खतरा होता है। [4] [5]
खरीदारी में राशि और प्राप्तकर्ता दोनों जानने होते हैं। Gavin Andresen और Hearn का BIP 70 इसके लिए PaymentRequest पेश करता है। संदेश में भुगतान का विवरण होता है: आउटपुट, जो बताते हैं कि लेनदेन धन कहाँ आवंटित करे, राशि और अनुरोध की वैकल्पिक समाप्ति अवधि। X.509 प्रमाणपत्रों से दुकानदार की पहचान प्रमाणित की जा सकती है, जैसे वेब सर्वर की होती है। लेकिन प्रोटोकॉल pki_type none भी स्वीकार करता है, जिसमें यह पहचान-जाँच नहीं होती। इसलिए भुगतान अनुरोध का प्रारूप अपने आप दुकान की प्रमाणित पहचान सिद्ध नहीं करता। [6]
यदि अनुरोध में भुगतान सर्वर दिया है, तो आपकी मंज़ूरी के बाद वॉलेट उसे Payment संदेश भेजता है। PaymentACK उत्तर बता सकता है कि दुकान ने भुगतान प्रसंस्करण के लिए स्वीकार किया है। ग्राहक के लिए यह उपयोगी सूचना है, पर अभी भी दुकानदार के सर्वर का कथन है, ब्लॉक में पुष्टि का प्रमाण नहीं। इसी तरह refund_to केवल यह बताता है कि दुकान ज़रूरत पड़ने पर पैसे कहाँ वापस भेज सकती है; वह फ़ील्ड खुद धन नहीं लौटाती। ऐप को भुगतान के संदेशों और धन के वास्तविक हस्तांतरण के बीच अंतर रखना होता है। [6]
पुरानी मार्गदर्शिका पढ़कर लग सकता है कि उसमें बताया तरीका हर जगह काम करेगा। रजिस्टर में BIP 70 का दर्जा Deployed है, यानी इसे लागू किया गया था। लेकिन Bitcoin Core 0.20.0 के रिलीज़ नोट बताते हैं कि उस प्रोग्राम से इसका समर्थन पूरी तरह हटा दिया गया। इसमें विरोधाभास नहीं है: अतीत में इस्तेमाल हुआ तकनीकी विनिर्देश हर मौजूदा क्लाइंट में समर्थित हो, यह ज़रूरी नहीं। Hearn का काम वॉलेट का विकास समझाता है; किसी तरीके को उपयोग में लाने से पहले उस खास प्रोग्राम और संस्करण की सुविधाएँ भी देखनी होंगी। [6] [7]
पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Jeff Garzik, Gloria Zhao, Merkle Tree. इस प्रविष्टि का उल्लेख यहाँ भी है Jeff Garzik, Gloria Zhao.