لاٹری کی مثال استعمال کرتے ہوئے بے ترتیب اوریکل کا استعمال

ایک صبح مجھے ایک مضمون ملا قابل تصدیق بے ترتیب نمبر جنریٹر ویوز پلیٹ فارم بلاکچین پر۔

مجموعی تصویر واضح تھی، لیکن عمل درآمد کا مخصوص طریقہ نہیں تھا۔ کچھ کوڈ، دستخط، کیا، کہاں، کیوں؟

اوریکل کے مصنف کے ساتھ متعدد مشاورت کے نتیجے میں، بے ترتیب نمبر حاصل کرنے کے لیے ڈرائنگ منطق (پی ایچ پی میں نافذ) کو الگورتھم کے ساتھ جوڑنا ممکن ہوا۔

  1. ٹورنامنٹ/راؤنڈ کے آغاز پر، ہم اوریکل سے کوڈ کے پہلے حصے (R-code) کی درخواست کرتے ہیں۔

    اس وقت، کھلاڑیوں کی تعداد، انعامی مقامات کی تعداد، انعامی ادائیگیوں کے سائز، یا عام طور پر لاٹری کے وجود کے بارے میں کوئی معلومات نہیں ہے۔ اوریکل، ایک لین دین کے ذریعے، ایک ذاتی بے ترتیب کوڈ جاری کرتا ہے، جسے پھر صرف ایک بار اور صرف وہ لوگ استعمال کر سکتے ہیں جنہوں نے اس کی درخواست کی۔ ویسے، آر کوڈ کو "خریدا" جا سکتا ہے (مطلب درخواست کی لین دین کی لاگت + جوابی لین دین کے لیے اوریکل کو معاوضہ، یہ موجودہ شرح پر تقریباً $0.015 کی رقم ہے، کوڈ خود ہی مفت جاری کیا جاتا ہے۔ ) کئی بار پیشگی، تاکہ بعد میں جوابی لین دین کی وصولی کا انتظار نہ کریں۔ میں نے ڈیٹا بیس میں ایک چھوٹا باقاعدگی سے اپ ڈیٹ شدہ بفر بنایا۔

  2. ٹورنامنٹ عام طور پر ویوز پلیٹ فارم بلاکچین کے 60 بلاکس پر مشتمل ہوتا ہے، اس وقت یہ تقریباً 1 گھنٹہ ہے۔ ٹورنامنٹ کو مکمل اور بند سمجھا جاتا ہے اگر 60 بلاکس کے بعد اس میں کم از کم دو ٹکٹ ہوں، بصورت دیگر ٹورنامنٹ کی سرگرمی کا وقت اگلے 60 بلاکس کے لیے بڑھا دیا جاتا ہے۔
  3. ٹورنامنٹ کے بند ہونے کے فوراً بعد، ہم تاریخ کا لین دین بناتے اور بھیجتے ہیں (ہم اس کے لیے تقریباً $0.005 کا کمیشن بھی ادا کرتے ہیں)، اگر ضروری ہو تو، کئی، جس میں ڈرائنگ کی تمام شرائط درج کی جاتی ہیں اور کھلاڑیوں کی ایک ترتیب شدہ فہرست (ٹکٹس) جس میں سے ہمیں فاتحوں کا انتخاب کرنا ہے۔
  4. اس مرحلے پر، ہمارے پاس پہلے سے ہی کوڈ کا پہلا حصہ (R-code) اور لین دین کی تاریخ ID (TXID) ہے۔ ہم انہیں دستخط کے لیے اوریکل کو کنکٹنیشن (R-code + TXID) کی شکل میں بھیجتے ہیں، پھر ہم کمیشن + معاوضہ ادا کرتے ہیں۔ اوریکل انفرادیت اور تعلق کے لیے موصول ہونے والے ڈیٹا کو چیک کرتا ہے، اور جواب میں ہمیں کوڈ کا دوسرا حصہ (S-code) sha256 فارمیٹ میں بھیجتا ہے، جو کہ بے ترتیب نمبر جنریٹر کے لیے نقطہ آغاز ہے۔
  5. ایک بے ترتیب نمبر حاصل کرنے کے لیے جو جیتنے والے ٹکٹ کی ترتیب نمبر کی نشاندہی کرے، ہم sha256 بائنری ڈیٹا سے S-code کو ہیکساڈیسیمل (HEX) نمائندگی میں تبدیل کرتے ہیں۔ پھر نتیجے میں HEX سٹرنگ سے، ہمیں ایک نمبر ملتا ہے۔ ہمیں نتیجے میں آنے والے نمبر کو ٹکٹوں کی تعداد (تمام_ٹکٹس) سے تقسیم کرنے کا بقیہ حصہ ملتا ہے اور نتیجہ میں 1 کا اضافہ کرتے ہیں (تمام_ٹکٹوں سے پہلے نمبر 1 حاصل کرنے کے لیے)۔ نتیجے کے طور پر، ہمیں فاتح کا سیریل نمبر ملتا ہے۔
  6. اگر، ڈرائنگ کی شرائط کے مطابق، کئی فاتحین ہیں، تو ہم پچھلے آپریشنز کو انعامی جگہوں کی تعداد کے برابر رقم میں دہراتے ہیں۔ اس صورت میں، جب بھی ہم فہرست سے ایک ٹکٹ ہٹاتے ہیں جو پہلے ہی جیت چکا ہے اور all_tickets کو 1 تک کم کرتے ہیں، اور S-code کے بجائے ہم موصول ہونے والے پچھلے نمبر کی نشاندہی کرتے ہیں۔

آئیے ایک مخصوص حقیقی مثال دیکھتے ہیں، ٹورنامنٹ نمبر 119:

کل 7 ٹکٹیں (تمام_ٹکٹس)
ٹکٹ کی قیمت 50 سکے (شرط)
گیم فیس 10% (فیس)

لاٹری کی شرائط کے مطابق، 30% انعامی رقم میں جاتا ہے، یعنی اس صورت میں، 2 ٹکٹوں کو ایک انعام ملنا چاہیے، جس کے سائز کا حساب فارمولہ (Bet*all_tickets-Fee)/2 کے مطابق کیا جاتا ہے۔

1. موصولہ آر کوڈ: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. ٹورنامنٹ بند ہونے کے بعد، ہمارے پاس ٹکٹوں کی ایک فہرست جوڑوں کی شکل میں ہوتی ہے: نمبر + پتہ (پرس کا پتہ جس سے ٹورنامنٹ میں شرکت کے لیے ادائیگی کی گئی تھی)۔ براہ کرم نوٹ کریں کہ پتے دہرائے جا سکتے ہیں، اس کا مطلب ہے کہ ایک شریک نے ایک ٹورنامنٹ کے کئی ٹکٹ خریدے؛ یہ قواعد کے مطابق ممنوع نہیں ہے۔

لین دین کی تاریخ بھیجی گئی: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. درخواست کردہ ایس کوڈ: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV تبصرہ کے ساتھ (R-code + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. موصولہ S-code: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. فاتحین کا تعین کیا گیا۔

6. ادائیگیاں بھیجی گئیں۔

نتیجے کے طور پر، ہمارے پاس بلاکچین میں انعامی ڈرائنگ کے طریقہ کار کی مرحلہ وار ریکارڈنگ ہے جس میں اسے کسی بھی وقت چیک کرنے کی صلاحیت ہے۔ آرگنائزر کے لیے نتائج میں ہیرا پھیری کرنا تقریباً ناممکن ہے؛ کم از کم، اب اسے کسی کا دھیان نہیں دینا ممکن نہیں ہوگا۔

determine the winner № 1

All_tickets:
Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:145
Index: 5 Ticket:147
Index: 6 Ticket:149
Index: 7 Ticket:151

1. bin -> hex ( bin2hex(sha256(S-code)) ): Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC -> 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596

2. hex -> gmp number: 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 99037963059744689166154019807924045947962565922868104113173478160267437352342

3. gmp -> modulo (mod=7): 99037963059744689166154019807924045947962565922868104113173478160267437352342 -> 4

4. modulo -> ticket: 4 -> 145

determine the winner № 2

All_tickets:

Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:147
Index: 5 Ticket:149
Index: 6 Ticket:151

1. bin -> hex ( bin2hex(sha256(previous hex)) ): daf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0
2. hex -> gmp number: 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0 -> 67565829218838067182838043983962684143266386786567427968312120473742580659360
3. gmp -> modulo (mod=6): 67565829218838067182838043983962684143266386786567427968312120473742580659360 -> 1
4. modulo -> ticket: 1 -> 139

End.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں