د لاټري مثال په کارولو سره د تصادفي اوریکل کارول

یو سهار ما په اړه یوه مقاله ولیده د تایید وړ تصادفي شمیره جنریټر د څپو پلیټ فارم بلاکچین کې.

ټولیز انځور روښانه و، مګر د پلي کولو ځانګړې طریقه نه وه. ځینې ​​کوډونه، لاسلیکونه، څه، چیرته، ولې؟

د اوریکل لیکوال سره څو مشورې، په پایله کې، دا ممکنه وه چې د تصادفي شمیره ترلاسه کولو لپاره د الګوریتم سره د انځور کولو منطق (په PHP کې پلي شوی) سره یوځای کړئ.

  1. د ټورنمنټ / پړاو په پیل کې، موږ د اوریکل څخه د کوډ لومړۍ برخه (R-code) غوښتنه کوو.

    په اوس وخت کې، د لوبغاړو شمیر، د جایزو ځایونو شمیر، د انعام تادیاتو اندازه، یا په عمومي توګه د لاټري شتون په اړه هیڅ معلومات شتون نلري. اوریکل، د لیږد له لارې، یو شخصي تصادفي کوډ خپروي، چې بیا یوازې یو ځل کارول کیدی شي او یوازې د هغه چا لخوا چې غوښتنه یې کړې. په هرصورت، R-code "پیرودل" کیدی شي (د غوښتنې لیږد لګښت + د ځواب لیږد لپاره اوریکل ته خساره، دا په اوسني نرخ کې شاوخوا $ 0.015 اندازه ده، کوډ پخپله وړیا صادر شوی. ) څو ځله مخکې له دې، چې وروسته د ځواب لیږد رسید ته انتظار مه کوئ. ما په ډیټابیس کې یو کوچنی منظم تازه بفر جوړ کړ.

  2. ټورنمنټ معمولا د ویوز پلیټ فارم بلاکچین 60 بلاکونه دوام کوي ، دا مهال دا نږدې 1 ساعت دی. ټورنمنټ بشپړ شوی او بند ګڼل کیږي که چیرې د 60 بلاکونو وروسته لږترلږه دوه ټکټونه شتون ولري، که نه نو د ټورنمنټ فعالیت وخت د راتلونکو 60 بلاکونو لپاره غځول کیږي.
  3. د ټورنمنټ پای ته رسیدو سمدلاسه وروسته ، موږ د نیټې لیږد رامینځته کوو او لیږو (موږ د دې لپاره نږدې $ 0.005 کمیشن هم ورکوو) ، که اړتیا وي ، ډیری ، په کوم کې چې د ډراینګ ټول شرایط ثبت شوي او د لوبغاړو ترتیب شوی لیست (ټیکټونه) له کوم څخه چې موږ باید ګټونکي غوره کړو.
  4. پدې مرحله کې، موږ دمخه د کوډ لومړۍ برخه (R-code) او د لیږد نیټې ID (TXID) لرو. موږ دوی د لاسلیک لپاره اوریکل ته د کنټینیشن (R-code + TXID) په بڼه لیږو، بیا موږ یو کمیشن + خساره ورکوو. اوریکل د انفرادیت او تړاو لپاره ترلاسه شوي ډاټا چک کوي، او په ځواب کې موږ ته د کوډ دویمه برخه (S-code) د sha256 بڼه کې لیږي، کوم چې د تصادفي شمیرې جنریټر لپاره د پیل ټکی دی.
  5. د تصادفي شمیرې ترلاسه کولو لپاره چې د ګټونکي ټیکټ ترتیب شمیره به په ګوته کړي ، موږ د S-code د sha256 بائنری ډیټا څخه هیکساډیسیمل (HEX) نمایش ته بدلوو. بیا د پایله شوي HEX تار څخه، موږ یو شمیر ترلاسه کوو. موږ د پایلې شمیره د ټکټونو (ټول_ټیکټونو) په شمیره ویشلو پاتې ترلاسه کوو او پایلې ته 1 اضافه کوو (د ټولو_ټیکټونو دمخه 1 شمیره ترلاسه کولو لپاره). د پایلې په توګه، موږ د ګټونکي سیریل نمبر ترلاسه کوو.
  6. که چیرې د انځور کولو شرایطو سره سم، ډیری ګټونکي شتون ولري، نو موږ تیر عملیات د انعام ځایونو شمیر سره مساوي اندازه تکرار کوو. پدې حالت کې ، هرځله چې موږ له لیست څخه یو ټیکټ لرې کړو چې دمخه یې ګټلی وي او ټول_ټیکټونه 1 لخوا کم کړي ، او د S-code پرځای موږ ترلاسه شوې پخوانۍ شمیره په ګوته کوو.

راځئ چې یو ځانګړی اصلي مثال وګورو، د ټورنمنټ نمبر 119:

ټولټال 7 ټکټونه (ټول_ټیکټونه)
د ټکټ قیمت 50 سکې (شرط)
د لوبې فیس 10٪ (فیس)

د لاټري شرایطو سره سم، 30٪ د انعام پیسو ته ځي، د بیلګې په توګه. په دې حالت کې، 2 ټکټونه باید انعام ترلاسه کړي، چې اندازه یې د فورمول (Bet*all_tickets-Fee)/2 له مخې محاسبه کیږي.

1. ترلاسه شوی R-code: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. وروسته له دې چې ټورنمنټ پای ته ورسیږي، موږ د جوړو په بڼه د ټکټونو لیست لرو: شمیره + پته (د بټوې پته چې په ټورنمنټ کې د ګډون لپاره پیسې ورکول کیږي). مهرباني وکړئ په یاد ولرئ چې ادرسونه تکرار کیدی شي، دا پدې مانا ده چې یو ګډون کونکي یو ټورنمنټ ته څو ټکټونه اخیستي؛ دا د مقرراتو لخوا منع نه دی.

د راکړې ورکړې نېټه: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. غوښتل شوي S-code: 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

Add a comment