খালি পেলোড, সবুজ টিক: অন-চেইন স্পোর্টস ডেটার নীরব ব্যর্থতা
মূল উত্তর: অন-চেইন স্পোর্টস ডেটার সবচেয়ে বড় ঝুঁকি গঠনগতভাবে বৈধ কিন্তু অর্থশূন্য পেলোড। স্কিমা ভ্যালিডেটর সফল সিল দেয়, অথচ ভেতরের ফিল্ড null; চেইনে null শূন্য হিসেবে সেটেল হয়। সমাধান হলো খালি তথ্য-অ্যারেতে কঠোর ব্যর্থতা-গেট। মূল তথ্য: - ২ ফেব্রুয়ারি ২০২২: Wormhole ব্রিজে ১,২০,০০০ র্যাপড wETH তৈরি, বাজারমূল্য প্রায় ৩২৬ মিলিয়ন ডলার। - ১১ অক্টোবর ২০২২: Mango Markets-এ অরাকেল দাম কারসাজি, ক্ষতি প্রায় ১১৪ মিলিয়ন ডলার। - ফেব্রুয়ারি ২০২০: bZx প্রোটোকলে অরাকেল-নির্ভর হামলা। - একটি খালি অ্যারে তিনটি বৈধ-দেখতে কিন্তু অর্থহীন ডেরাইভড ফিল্ড তৈরি করতে পারে। সূত্র: Stage-2 ডেটা-ইন্টিগ্রিটি ডায়াগনস্টিক প্রতিবেদন, ২ আগস্ট ২০২৬ | Cross-checked: cricsultan.com সম্পর্কিত প্রশ্নোত্তর: প্রশ্ন: স্কিমা ভ্যালিডেশন কেন যথেষ্ট নয়? উত্তর: কারণ এটি ফিল্ডের উপস্থিতি যাচাই করে, ফিল্ডের সত্যতা যাচাই করে না। প্রশ্ন: চেইনে null কীভাবে পড়া হয়? উত্তর: শূন্য হিসেবে, ফলে অনুপস্থিত তথ্য বৈধ মানের মতো সেটেল হয়। প্রশ্ন: ব্যবহারিক সমাধান কী? উত্তর: খালি তথ্য-অ্যারেতে পাইপলাইনকে স্পষ্টভাবে ব্যর্থ হতে দেওয়া, সুন্দর ফাঁপা পেলোড ফেরত না দেওয়া।
সকাল ৬টা ৪৭ মিনিটে ফাইলটা সার্ভারে ঢুকল। ভ্যালিডেটর সবুজ বাতি জ্বালাল। চৌদ্দটি ফিল্ড, বারোটিতে টিক, দুইটিতে null। যে ড্যাশবোর্ড ওই ফাইল পড়ে, তার স্ক্রিনে একটাও লাল দাগ নেই। সমস্যাটা ঠিক এখানেই — সিস্টেম বলছে “সফল”, অথচ ভেতরে যা আছে তা ফাঁপা।
আমার এই অভ্যাসটা ২০১৭ সাল থেকে। জার্সি রোডে ছয় সপ্তাহ কাটানোর সময় প্রতিদিন একটা খাতা ভরতাম — কত রেপ, কত সেট, কত মিনিট, কার পায়ে ব্যথা। কোনো দিন যদি খাতায় লেখা থাকত “৩৩টি সেট-পিস ড্রিল”, অথচ কোন ড্রিল, কার জন্য, কত মিনিট — কিছুই লেখা না থাকত, আমি সেটাকে সম্পূর্ণ বলতাম না। বলতাম: ফাইল এসেছে, তথ্য আসেনি।
গত কয়েক বছরে খেলাধুলার যে ডেটা অন-চেইনে যাচ্ছে — ফ্যান টোকেন, প্রেডিকশন মার্কেট, খেলোয়াড়-কার্ড, স্পনসরশিপ সেটেলমেন্ট — তার বড় অংশ এই একই রোগে আক্রান্ত। পাইপলাইন “সফল” বলে সিল দিচ্ছে, ভেতরে ফাঁপা। আর পাবলিক চেইনে ফাঁপা তথ্য একবার ঢুকে গেলে সেটা ফেরানোর কোনো উপায় নেই।
প্রক্রিয়াটা দেখতে সহজ। একটি ডেটা প্রোভাইডার ম্যাচের ইভেন্ট API-তে পাঠায়, একটি অরাকেল নেটওয়ার্ক সেটা টেনে আনে, কয়েকটি নোড সেটার উপর সিলমোহর দেয়, তারপর স্মার্ট কন্ট্রাক্ট সেটা দিয়ে সেটেলমেন্ট করে। ফ্যান টোকেনের রিওয়ার্ড বণ্টন, প্রেডিকশন মার্কেটের পেআউট, NFT-র অ্যাট্রিবিউট — সব এই এক লাইনে দাঁড়িয়ে।
এই লাইনের যে অংশটা সবচেয়ে বেশি অডিট হয়, সেটা কনসেনসাস লেয়ার। স্মার্ট কন্ট্রাক্ট অডিট হয়, সিগনেচার ভেরিফিকেশন অডিট হয়, রিপ্লে অ্যাটাক নিয়ে গবেষণাপত্র লেখা হয়। কিন্তু লাইনের যে অংশটা সবচেয়ে বেশি ভুল করে — ইনজেশন, অর্থাৎ ডেটাটা বাইরের জগৎ থেকে চেইনে ঢোকার মুহূর্ত — সেটা প্রায়ই অডিটের বাইরে থাকে।
এই ফাঁকটা বিনা মূল্যে নয়। ২০২০ সালের ফেব্রুয়ারিতে bZx প্রোটোকলে অরাকেল দাম নিয়ে কারসাজি করে তহবিল সরিয়ে নেওয়া হয়েছিল। ২০২২ সালের ১১ অক্টোবরে Mango Markets-এ একটি পাতলা মার্কেটে কৃত্রিম অবস্থান তৈরি করে দাম বাড়িয়ে দেওয়া হয়, তারপর ফোলা জামানতের বিপরীতে ঋণ নেওয়া হয় — ক্ষতি প্রায় ১১৪ মিলিয়ন ডলার। আর ২০২২ সালের ২ ফেব্রুয়ারি Wormhole ব্রিজে হামলাকারী ১,২০,০০০ র্যাপড wETH তৈরি করেছিল, যার বাজারমূল্য প্রায় ৩২৬ মিলিয়ন ডলার; সেখানে সমস্যা ছিল না তথ্যের অভাব, সমস্যা ছিল বৈধ দেখতে একটি বার্তা বৈধ বলে গৃহীত হয়ে যাওয়া।
তিনটির কোনোটিই “ডেটা ভুল ছিল” জাতীয় সহজ গল্প নয়। প্রতিটিতেই একটা গঠনগতভাবে সঠিক, কিন্তু অর্থগতভাবে ফাঁপা বা মিথ্যা ইনপুট সিস্টেমের ভেতরে ঢুকেছিল — এবং সিস্টেম তাকে গ্রহণ করেছিল, কারণ তার হাতে যাচাইয়ের নিয়ম ছিল না, শুধু কাঠামোর নিয়ম ছিল।
অডিট শিল্পের পুরো অর্থনীতি স্মার্ট কন্ট্রাক্ট ঘিরে গড়ে উঠেছে। কিন্তু একটি প্রোটোকল যদি বলে তার ডেটা নির্ভরযোগ্য, অথচ সেই ডেটার ইনজেশন লেয়ার কেউ দেখেনি, তাহলে সেটা নিরাপত্তার দাবির চেয়ে বিপণনের দাবি বেশি।
মূল কথাটা হলো: স্কিমা ভ্যালিডেশন আর সত্য যাচাই এক জিনিস নয়। স্কিমা জিজ্ঞেস করে ফিল্ডটা আছে কি, জিজ্ঞেস করে না ভেতরে কিছু আছে কি।
এই পার্থক্যটা যেখানে সবচেয়ে বিপজ্জনক, তা হলো ডেরাইভড ফিল্ডে। ধরুন একটি ডিকনস্ট্রাকশন স্কিমায় লেখা আছে — “Entities Involved: উপরের ইনফরমেশন পয়েন্ট থেকে নির্ণয় করুন”। এখন যদি ইনফরমেশন পয়েন্টের অ্যারে খালি থাকে, তাহলে এই ফিল্ডটি ব্যর্থ হবে না; সে একটি বৈধ স্ট্রিং ফিরিয়ে দেবে — “N/A”। আউটপুট ফাইলটি দেখতে নিখুঁত। ভেতরে শূন্য।
অন-চেইনে এই “N/A” আরও ভয়ংকর রূপ নেয়, কারণ চেইনে null মানে শূন্য। গোলের সংখ্যা null হলে স্কোরলাইন পড়া হবে ০-০। পজেশন null হলে পড়া হবে ০ শতাংশ। স্প্রিন্ট কাউন্ট null হলে পড়া হবে শূন্য স্প্রিন্ট। শূন্য নিজেই একটি মান, আর স্মার্ট কন্ট্রাক্ট সেই মানের উপরেই সেটেল করে।
আমি এই জিনিসটা প্রশিক্ষণ মাঠে চোখে দেখেছি। জিপিএস ভেস্টের ফাইল নব্বই মিনিট লগ করে, স্প্রিন্ট কলামে শূন্য। কেউ যদি শুধু ফাইলটা দেখে সিদ্ধান্ত নেয়, সে বলবে খেলোয়াড়টা নব্বই মিনিট হাঁটাহাঁটি করেছে। অথচ ভেস্টটা হয়তো পঞ্চাশ মিনিটে ব্যাটারি হারিয়েছে। ফাইলটা মিথ্যা বলেনি; ফাইলটা নীরব ছিল। নীরবতাকে ডেটা হিসেবে পড়লে সিদ্ধান্ত ভুল হয়।
দ্বিতীয় সমস্যা ডেরাইভড ফিল্ডের চেইন। যদি A ফিল্ড B থেকে আসে, B আসে C থেকে, আর C খালি — তাহলে A, B, C তিনটিই বৈধ দেখতে হবে, অথচ তিনটিই অর্থহীন। পাইপলাইনে এটাকে বলে ক্যাসকেডিং নাল। ব্যবহারকারী লগে দেখবেন সব সবুজ; শুধু এক জায়গায় লেখা থাকবে “মূল্যায়ন করা হয়নি”।
তৃতীয় সমস্যা সময়। প্রতিবেদনে যদি লেখা থাকে “টাইম সেনসিটিভিটি: প্রথম ধাপে মূল্যায়ন করা হয়নি”, তাহলে সেই তথ্যকে ক্যালেন্ডারে বসানোই যায় না। অন-চেইনে এর মানে হলো টাইমস্ট্যাম্প থাকবে, কিন্তু কোন মৌসুম, কোন ম্যাচ, কোন চক্র — কিছুই নির্গত হবে না। তারিখহীন তথ্য চেইনে গেলে সেটা চিরকালের জন্য কোন এক সময়ের তথ্য হয়ে থাকে।
আরও শান্ত একটা সংস্করণ আছে। খালি পেলোড সবসময় খালি দেখায় না। কখনও সে পূর্ববর্তী রানের ক্যাশে করা মান বহন করে, কখনও ডিফল্ট মান বসিয়ে দেয়। তখন ব্যবহারকারী বুঝতেই পারেন না যে আজকের সংখ্যাটি গত মাসের। চেইনে টাইমস্ট্যাম্প থাকলেও সেটি ডেটার জন্মসময় বলে না, লেখার সময় বলে।
চতুর্থ সমস্যা পুঁজির হিসাব। অন-চেইন সেটেলমেন্ট মানে প্রতিটি ভুল এন্ট্রি পরে বিল পাঠায়। তাপ, মিনিট আর খাতা — তিন কলাম স্কোরের চেয়ে বেশি বলেছিল, কারণ ক্ষয়টা জমে। ডেটা পাইপলাইনেও তাই: একটি ফাঁপা ফিল্ড আজ সেটেলমেন্ট আটকায় না, কিন্তু তিন মাস পরে রিওয়ার্ড বণ্টনে গিয়ে একটা সম্পূর্ণ সম্প্রদায়ের হিসাব এলোমেলো করে দেয়।
জার্সি রোডে বিশ্বাস কখনো ঘোষণা করা হতো না; গোনা হতো — ড্রিল ধরে ধরে। পাইপলাইনেও একই নিয়ম হওয়া উচিত। যেখানে সমাধানটা সহজ, সেটা হলো গেট। যদি ইনফরমেশন পয়েন্টের অ্যারে খালি হয়, পাইপলাইনের উচিত সুন্দর দেখতে ফাঁপা পেলোড ফেরত না দিয়ে স্পষ্টভাবে ব্যর্থ হওয়া — EXTRACTION_FAILED। একটি লাইন যোগ করলেই পুরো নয়-মাত্রার বিশ্লেষণ কাঠামো সচল হয়ে যায়। খরচ: একবার পুনরায় চালানো, বা একবার হাতে টেক্সট পেস্ট।
একটি কাজ করা গেট দেখতে চার স্তরের। প্রথমত উপস্থিতি: প্রতিটি বাধ্যতামূলক অ্যারে অন্তত একটি আইটেম ধরে আছে কি না। দ্বিতীয়ত কার্ডিনালিটি: ইনফরমেশন পয়েন্টের সংখ্যা শূন্য হলে সেটা ব্যর্থতা, “কোনো তথ্য নেই” নয়। তৃতীয়ত সূত্র: প্রতিটি পয়েন্টের সাথে আউটলেট ও তারিখ বাধ্যতামূলক। চতুর্থত প্রোভেন্যান্স: চেইনে যাওয়ার আগে মূল ফাইলের একটি ফিঙ্গারপ্রিন্ট, যাতে পরে বোঝা যায় কোন সংস্করণ থেকে কোন সংখ্যা এসেছে।
বাইরের পাঠ সাধারণত দুটো একটা দিকে যায়। প্রথমটা: আরও নোড, আরও ডিসেন্ট্রালাইজেশন, আরও কনসেনসাস দরকার। দ্বিতীয়টা: কৃত্রিম বুদ্ধিমত্তা ডেটা পরিষ্কার করে দেবে।
দুটোই মূল জায়গাটা এড়িয়ে যায়। দশটি স্বাধীন অরাকেল যদি একই ভাঙা এক্সট্র্যাক্টর থেকে খাবার নেয়, তারা দশটাই একই ফাঁপা পেলোডে একমত হবে। ফাঁপা তথ্যের উপর কনসেনসাস মানে ফাঁপা তথ্য — এবার শুধু সেটা স্বাক্ষরিত, টাইমস্ট্যাম্পযুক্ত এবং অপরিবর্তনীয়।
কৃত্রিম বুদ্ধিমত্তার প্রতিশ্রুতিটা আরও বিপজ্জনক এক কারণে: একটি খালি পেলোড “পরিষ্কার” করতে দেওয়া হলে মডেলটি ফাঁক পূরণ করতে যাবে। সে একটি বিশ্বাসযোগ্য সংখ্যা বানিয়ে দেবে — বিশ্বাসযোগ্য, কারণ প্রশিক্ষণ ডেটায় ঠিক তেমন সংখ্যা প্রচুর আছে। ফাঁপা তথ্য তখন মসৃণ মিথ্যা হয়ে চেইনে ঢুকবে।
দ্বিতীয় আরামদায়ক বিশ্বাসটা হলো, অন-চেইন স্বচ্ছতা জবাবদিহি তৈরি করে। করে না। স্বচ্ছতা শুধু স্থায়িত্ব তৈরি করে। একটি ভুল সংখ্যা পাবলিক লেজারে থাকলে সেটা আরও ভুল হয় না, শুধু আরও বেশি মানুষ দেখতে পায়। আর যেহেতু চেইনে রোলব্যাক ব্যয়বহুল, সংশোধনের খরচটা প্রায়ই মূল ক্ষতির চেয়ে বড় হয়ে দাঁড়ায়।
এই পুরো আলোচনায় একটি প্রশ্ন চাপা পড়ে যায়: ফাঁপা ফিল্ডটা কার উপর বিল পাঠায়? সাধারণত তার উপর, যার হাতে যাচাইয়ের ক্ষমতা নেই। যে ভক্ত টোকেন কিনে বসে আছে, সে জানে না তার রিওয়ার্ডের ভিত্তি একটি null ছিল। ২০২০ সালের ফাঁকা স্টেডিয়ামগুলো নিয়ে কাজ করার সময় আমি এটা শিখেছিলাম — নীরবতা খালি জায়গা নয়, সেখানে কেউ অপেক্ষা করছে। ডেটা পাইপলাইনে সেই অপেক্ষার নাম সেটেলমেন্ট।
প্রশিক্ষণ মাঠের পর্যবেক্ষক সেই জিনিসগুলো গোনে যা সম্প্রচারে আসে না। প্রশ্নটা তাই সরল: স্মার্ট কন্ট্রাক্টের জন্য যেমন অডিট ফার্ম আছে, ইনজেশন লেয়ারের জন্য কে আছে? যে পাইপলাইন বলছে সবুজ, তার সবুজের সংজ্ঞা কে যাচাই করছে?
আমি আমার খাতায় যা লিখি তা হলফনামা নয়, কিন্তু প্রতিটি সংখ্যার পাশে একটা সূত্র থাকে। অন-চেইন স্পোর্টস ডেটার জন্য এখন সেই সূত্রটাই সবচেয়ে দুষ্প্রাপ্য জিনিস। পরের ফ্যান-টোকেন সেটেলমেন্ট যদি এমন একটি null-এর উপর দাঁড়ায় যা শূন্য হয়ে রেন্ডার হয়েছে, তাহলে তাতে সই করবে কে?


সংশ্লিষ্ট খেলোয়াড়গণ
