engineeringfairnessmultiplayer
সার্ভারের কর্তৃত্ব মানে খেলার যে একমাত্র প্রতিলিপিটি গোনা হয়, তা সার্ভারের কাছে থাকে। আপনার যন্ত্র আপনি যে চালটি খেলতে চান তা পাঠায়, সার্ভার সেটিকে নিজের পাশা আর নিজের নিয়মের সামনে পরখ করে, আর তবেই বোর্ড বদলায়। বদলানো অ্যাপ যা খুশি দাবি করতে পারে: সত্য এমন জায়গায় থাকে যেখানে তার হাত পৌঁছায় না।
ব্যাকগ্যামন এই কড়াকড়ির যোগ্য। এটি সিঁড়ি আর পট-সহ পাশার খেলা, অর্থাৎ ঠকানোর দুটি পথ আছে: চাল জাল করা কিংবা দান বাঁকানো। ন্যায্য সার্ভারকে দুটি দরজাই বন্ধ করতে হবে। দ্বিতীয় দরজায় আমরা নিজেরাও আছি, আর সেখানে আমরা আসছি।
সার্ভারের কর্তৃত্ব আসলে কী বোঝায়?
Orion-এর চলমান প্রতিটি খেলা একটিমাত্র জায়গায় থাকে: আমাদের সার্ভারে। আপনার ফোনের বোর্ডটি একটি জানালা, খেলা নয়। আপনি ঘুঁটি টানলে অ্যাপ সেটি সরায় না। সে একটি ছোট্ট বার্তা পাঠায় যাতে বলা থাকে: আমি এটি খেলতে চাই। সার্ভার সেই অভিপ্রায়টি নিজের বোর্ডে, নিজের নিয়ম-ইঞ্জিন দিয়ে, সেই চালের জন্য নিজের ছোঁড়া পাশা দিয়ে ফের চালায়। বৈধ চাল খেলা এগিয়ে নেয়, আর দুই খেলোয়াড়ই একই নতুন অবস্থান পান। অবৈধ চাল কখনো ঘটেইনি।
এটি সবার জন্য একটিই সার্ভার। iOS অ্যাপ নেটিভ SwiftUI, Android অ্যাপ নেটিভ Jetpack Compose, আর দুটিই একই ব্যাকএন্ড আর একই খেলোয়াড়দলের জানালা। কাচ আলাদা, সত্য একই।
ক্লায়েন্টে ভরসা করা খেলায় ঠকানো হয় কেন?
কারণ আপনার প্রতিপক্ষের যন্ত্রটি আপনার প্রতিপক্ষেরই। তাতে যা কিছু চলে, তা বদলানো যায়। তালি দেওয়া ক্লায়েন্ট এমন চাল পাঠাতে পারে যা কখনো বৈধ ছিল না। মেমরি সম্পাদক ঘটনাস্থলেই একটি সংখ্যা পাল্টে দিতে পারে, আর পর্দা সেই মিথ্যাটি বিশ্বস্তভাবে দেখাবে। এর কিছুই বিরল নয়। যন্ত্রগুলো বিনামূল্যের, নথিভুক্ত আর স্মার্টফোনের চেয়েও পুরোনো।
ক্লায়েন্টে ভরসা করা খেলা প্রতিটি খেলোয়াড়ের কাছে প্রতিশ্রুতি চায় যে সে বনেটের নিচে উঁকি দেবে না। কেউ কেউ দেয়। তাই আমরা ক্লায়েন্টের মতামতকেই অপ্রাসঙ্গিক করে দিয়েছি। Orion-এ অ্যাপের ঠিক তিনটি কাজ:
- আঁকা: বোর্ড, ঘুঁটি, কিউব, ঘড়ি।
- চাওয়া: সার্ভারকে একটি চাল খেলতে বলা, ডাবল দেওয়া, হার মানা।
- পাওয়া: সার্ভার যে অবস্থানকে আসল বলে, তা দেখানো।
পাশা ছোঁড়া, বৈধতা বিচার করা আর একটি মুদ্রাও সরানো সেই তালিকায় নেই। ফলাফল ঠিক করে এমন কিছুই কোনো যন্ত্রে জন্ম নেয় না।
আমি একটি চাল খেললে কী হয়?
আপনি খেলেন।. আপনার অ্যাপ অভিপ্রায় পাঠায়: এই ঘুঁটি, এই পয়েন্টগুলো। আপনার যন্ত্রের কিছুই আসল বোর্ড বদলায় না।
সার্ভার তা ফের চালায়।. আমাদের নিয়ম-ইঞ্জিন চালটি সার্ভারের বোর্ড আর সার্ভারের পাশার সামনে চালায়। বৈধ হলে খেলা এগোয়। না হলে তা উৎসেই ফিরিয়ে দেওয়া হয়, যে অ্যাপই পাঠাক না কেন।
দুই পক্ষই একই সত্য পায়।. নতুন অবস্থানটি দুই খেলোয়াড়ের কাছেই যায়। সংযোগ কেটে গেলে চালের ঘড়ির পুনঃসংযোগের সময়সীমা আপনার জায়গা ধরে রাখে, আর আপনি বোর্ডে ফেরেন যেমনটি তা সত্যিই আছে, আপনার ফোন শেষবার যেমন মনে রেখেছিল তেমন নয়।
বাজিও একই নিয়ম মানে। প্রবেশমূল্যের খেলা শুরু হলে সার্ভার দুজনের প্রবেশমূল্যই জিম্মায় রাখে। পট একটিমাত্র খতিয়ানে থাকে, সার্ভারে, আর খেলা শেষে সেখানেই মিটে যায়। কোনো ক্লায়েন্টকে কখনো জিজ্ঞেস করা হয় না সে ভাবছে কত জিতেছে। মুদ্রা আর রত্ন ভার্চুয়াল, বাস্তব জগতে তাদের কোনো মূল্য নেই আর ভাঙানোও যায় না, তবু আমরা সেই খতিয়ান এমনভাবে রাখি যেন তাতে মূল্যবান কিছু আছে, কারণ আছে: বোর্ডের অবস্থানে আপনার আস্থা।
সার্ভারকেই ঠকানো থেকে কী আটকায়?
এটাই আসল প্রশ্ন, আর বেশির ভাগ খেলা আশা করে আপনি তা কখনো করবেন না। যে সার্ভার গোপনে পাশা ছোঁড়ে, সে যাকে সুবিধা দিচ্ছে তার জন্য দয়ালু দান ফেলতে পারে, আর আপনি তা কখনো দেখতে পাবেন না। প্রতিটি দানই বিশ্বাসযোগ্য লাগে। পাশা তো এমনই।
তাই আমরা সেই ক্ষমতা নিজেদের কাছ থেকেই কেড়ে নিয়েছি। খেলা শুরুর আগে সার্ভার একটি গোপন বীজ তৈরি করে আর তার SHA-256 অঙ্গীকার প্রকাশ করে। এরপর প্রতিটি দান সেই বীজ থেকে HMAC-SHA256 দিয়ে নেওয়া হয়, একটি একটি করে, ক্রমানুসারে। খেলা শেষ হলে সার্ভার বীজটি প্রকাশ করে। যে কেউ যাচাই করতে পারে যে বীজটি প্রথম দানের আগে দেওয়া অঙ্গীকারের সঙ্গে মেলে, আর খেলার প্রতিটি দান তা থেকেই আসে। ক্রিপ্টোগ্রাফিক অর্থে আপনার পাশা স্থির হয়ে গিয়েছিল দুই খেলোয়াড়ের কেউ ঘুঁটি ছোঁয়ার আগেই। শূন্যতম দানে প্রকাশিত প্রতিশ্রুতি না ভেঙে আমরা দ্বাদশ দানটি বাঁকাতে পারতাম না।
এর কোনোটির জন্যই আপনাকে আমাদের কথা মানতে হবে না। orion.arthea.ai/verify-এর যাচাই গোটা শিকলটি আপনার ব্রাউজারে, Web Crypto দিয়ে, আপনার যন্ত্রে, খেলার প্রকাশ্য নথি থেকে আবার হিসাব করে। কোনো অ্যাকাউন্ট নয়, কোনো ইনস্টল নয়। orion.arthea.ai/go-এর দরজা App Store আর Google Play-র লিংক বয়ে চলে এবং সব সময় দেখায় এই মুহূর্তে কী পাওয়া যাচ্ছে।