లాటరీ ఉదాహరణను ఉపయోగించి యాదృచ్ఛిక ఒరాకిల్‌ను ఉపయోగించడం

ఒక రోజు ఉదయం నేను ఒక కథనాన్ని చూశాను ధృవీకరించదగిన యాదృచ్ఛిక సంఖ్య జనరేటర్ వేవ్స్ ప్లాట్‌ఫారమ్ బ్లాక్‌చెయిన్‌లో.

మొత్తం చిత్రం స్పష్టంగా ఉంది, కానీ నిర్దిష్ట అమలు పద్ధతి కాదు. కొన్ని కోడ్‌లు, సంతకాలు, ఏమి, ఎక్కడ, ఎందుకు?

ఒరాకిల్ రచయితతో అనేక సంప్రదింపులు, ఫలితంగా, డ్రాయింగ్ లాజిక్‌ను (PHPలో అమలు చేయబడింది) యాదృచ్ఛిక సంఖ్యను పొందడం కోసం అల్గోరిథంతో కలపడం సాధ్యమైంది.

  1. టోర్నమెంట్/రౌండ్ ప్రారంభంలో, మేము ఒరాకిల్ నుండి కోడ్ (R-కోడ్) యొక్క మొదటి భాగాన్ని అభ్యర్థిస్తాము.

    ప్రస్తుతానికి, ఆటగాళ్ల సంఖ్య, బహుమతి స్థలాల సంఖ్య, బహుమతి చెల్లింపుల పరిమాణం లేదా సాధారణంగా లాటరీ ఉనికి గురించి ఎటువంటి సమాచారం లేదు. ఒరాకిల్, లావాదేవీ ద్వారా, వ్యక్తిగత యాదృచ్ఛిక కోడ్‌ను జారీ చేస్తుంది, ఆ తర్వాత దానిని అభ్యర్థించిన వారు ఒక్కసారి మాత్రమే ఉపయోగించగలరు. మార్గం ద్వారా, R-కోడ్‌ని "కొనుగోలు" చేయవచ్చు (అంటే అభ్యర్థన లావాదేవీ ఖర్చు + ప్రతిస్పందన లావాదేవీకి ఒరాకిల్‌కు పరిహారం, ఇది ప్రస్తుత రేటు ప్రకారం సుమారు $0.015 మొత్తం, కోడ్ కూడా ఉచితంగా జారీ చేయబడుతుంది. ) చాలా సార్లు ముందుగానే, తద్వారా ప్రతిస్పందన లావాదేవీ యొక్క రసీదు కోసం వేచి ఉండకూడదు. నేను డేటాబేస్‌లో క్రమం తప్పకుండా నవీకరించబడిన చిన్న బఫర్‌ని తయారు చేసాను.

  2. టోర్నమెంట్ సాధారణంగా వేవ్స్ ప్లాట్‌ఫారమ్ బ్లాక్‌చెయిన్ యొక్క 60 బ్లాక్‌ల వరకు ఉంటుంది, ప్రస్తుతానికి ఇది దాదాపు 1 గంట. 60 బ్లాక్‌ల తర్వాత కనీసం రెండు టిక్కెట్‌లు ఉంటే టోర్నమెంట్ పూర్తయినట్లుగా పరిగణించబడుతుంది మరియు మూసివేయబడుతుంది, లేకుంటే టోర్నమెంట్ కార్యాచరణ సమయం తదుపరి 60 బ్లాక్‌లకు పొడిగించబడుతుంది.
  3. టోర్నమెంట్ ముగిసిన వెంటనే, మేము లావాదేవీ తేదీని రూపొందించి పంపుతాము (దీనికి మేము సుమారు $0.005 కమీషన్ కూడా చెల్లిస్తాము), అవసరమైతే, అనేక, డ్రాయింగ్ యొక్క అన్ని షరతులు రికార్డ్ చేయబడతాయి మరియు ఆటగాళ్ల జాబితా (టికెట్లు) దాని నుండి మనం విజేతలను ఎంచుకోవాలి.
  4. ఈ దశలో, మేము ఇప్పటికే కోడ్ (R-కోడ్) మరియు లావాదేవీ తేదీ ID (TXID) యొక్క మొదటి భాగాన్ని కలిగి ఉన్నాము. మేము వాటిని సంయోగం (R- కోడ్ + TXID) రూపంలో ఒరాకిల్‌కు సంతకం కోసం పంపుతాము, మళ్లీ మేము కమీషన్ + పరిహారం చెల్లిస్తాము. ఒరాకిల్ స్వీకరించిన డేటాను ప్రత్యేకత మరియు స్వంతం కోసం తనిఖీ చేస్తుంది మరియు ప్రతిస్పందనగా మాకు కోడ్ (S-కోడ్) యొక్క రెండవ భాగాన్ని sha256 ఆకృతిలో పంపుతుంది, ఇది యాదృచ్ఛిక సంఖ్య జనరేటర్‌కు ప్రారంభ స్థానం.
  5. గెలిచిన టిక్కెట్ యొక్క సీక్వెన్స్ నంబర్‌ను సూచించే యాదృచ్ఛిక సంఖ్యను పొందడానికి, మేము S-కోడ్‌ను sha256 బైనరీ డేటా నుండి హెక్సాడెసిమల్ (HEX) ప్రాతినిధ్యంగా మారుస్తాము. ఫలితంగా HEX స్ట్రింగ్ నుండి, మనకు ఒక సంఖ్య వస్తుంది. మేము టిక్కెట్ల సంఖ్య (అన్ని_టికెట్లు) ద్వారా ఫలిత సంఖ్యను భాగిస్తే మిగిలిన మొత్తాన్ని మేము పొందుతాము మరియు ఫలితానికి 1ని జోడిస్తాము (అన్ని_టికెట్ల ముందు సంఖ్య 1ని పొందడానికి). ఫలితంగా, మేము విజేత యొక్క క్రమ సంఖ్యను పొందుతాము.
  6. డ్రాయింగ్ యొక్క పరిస్థితుల ప్రకారం, అనేక మంది విజేతలు ఉంటే, మేము బహుమతి స్థలాల సంఖ్యకు సమానమైన మొత్తంలో మునుపటి కార్యకలాపాలను పునరావృతం చేస్తాము. ఈ సందర్భంలో, ప్రతిసారీ మేము ఇప్పటికే గెలిచిన టిక్కెట్‌ను జాబితా నుండి తీసివేసి, ఆల్_టికెట్‌లను 1కి తగ్గిస్తాము మరియు S- కోడ్‌కు బదులుగా మేము అందుకున్న మునుపటి సంఖ్యను సూచిస్తాము.

టోర్నమెంట్ నెం. 119 అనే నిర్దిష్ట వాస్తవ ఉదాహరణను చూద్దాం:

మొత్తం 7 టిక్కెట్లు (అన్ని_టికెట్లు)
టిక్కెట్ ధర 50 నాణేలు (పందెం)
గేమ్ ఫీజు 10% (ఫీజు)

లాటరీ యొక్క షరతుల ప్రకారం, 30% ప్రైజ్ మనీకి వెళుతుంది, అనగా. ఈ సందర్భంలో, 2 టిక్కెట్‌లు తప్పనిసరిగా బహుమతిని అందుకోవాలి, దాని పరిమాణం సూత్రం (Bet*all_tickets-Fee)/2 ప్రకారం లెక్కించబడుతుంది.

1. అందుకున్న R-కోడ్: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. టోర్నమెంట్ ముగిసిన తర్వాత, మేము జతల రూపంలో టిక్కెట్ల జాబితాను కలిగి ఉన్నాము: నంబర్ + చిరునామా (టోర్నమెంట్‌లో పాల్గొనడానికి చెల్లింపు చేయబడిన వాలెట్ చిరునామా). చిరునామాలు పునరావృతం కావచ్చని దయచేసి గమనించండి, దీని అర్థం ఒక పాల్గొనేవారు ఒక టోర్నమెంట్‌కు అనేక టిక్కెట్‌లను కొనుగోలు చేసారు; ఇది నిబంధనల ప్రకారం నిషేధించబడలేదు.

పంపిన లావాదేవీ తేదీ: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. S-కోడ్ అభ్యర్థించబడింది: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV వ్యాఖ్యతో (R-కోడ్ + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. స్వీకరించిన S-కోడ్: 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

ఒక వ్యాఖ్యను జోడించండి