லாட்டரியின் உதாரணத்தைப் பயன்படுத்தி சீரற்ற ஆரக்கிளைப் பயன்படுத்துதல்

ஒரு நாள் காலையில் நான் ஒரு கட்டுரையைப் பார்த்தேன் சரிபார்க்கக்கூடிய சீரற்ற எண் ஜெனரேட்டர் அலைகள் இயங்குதள பிளாக்செயினில்.

ஒட்டுமொத்த படம் தெளிவாக இருந்தது, ஆனால் குறிப்பிட்ட செயலாக்க முறை இல்லை. சில குறியீடுகள், கையொப்பங்கள், என்ன, எங்கே, ஏன்?

ஆரக்கிளின் ஆசிரியருடன் பல ஆலோசனைகள், இதன் விளைவாக, வரைதல் தர்க்கத்தை (PHP இல் செயல்படுத்தப்பட்டது) ஒரு சீரற்ற எண்ணைப் பெறுவதற்கான வழிமுறையுடன் இணைக்க முடிந்தது.

  1. போட்டி/சுற்றின் தொடக்கத்தில், ஆரக்கிளிடம் இருந்து குறியீட்டின் முதல் பகுதியை (R-code) கோருகிறோம்.

    இந்த நேரத்தில், வீரர்களின் எண்ணிக்கை, பரிசு இடங்களின் எண்ணிக்கை, பரிசுத் தொகையின் அளவு அல்லது பொதுவாக லாட்டரியின் இருப்பு பற்றி எந்த தகவலும் இல்லை. ஆரக்கிள், ஒரு பரிவர்த்தனை மூலம், ஒரு தனிப்பட்ட சீரற்ற குறியீட்டை வெளியிடுகிறது, அதை ஒருமுறை மட்டுமே பயன்படுத்த முடியும் மற்றும் அதைக் கோருபவர்கள் மட்டுமே பயன்படுத்த முடியும். மூலம், R-குறியீட்டை "வாங்கலாம்" (கோரிக்கை பரிவர்த்தனையின் விலை + பதில் பரிவர்த்தனைக்கான ஆரக்கிளுக்கு இழப்பீடு, இது தற்போதைய விகிதத்தில் சுமார் $0.015 ஆகும், குறியீடு இலவசமாக வழங்கப்படுகிறது. ) பல முறை முன்கூட்டியே, பின்னர் பதில் பரிவர்த்தனையின் ரசீதுக்காக காத்திருக்க வேண்டாம். நான் தரவுத்தளத்தில் ஒரு சிறிய வழக்கமான புதுப்பிக்கப்பட்ட இடையகத்தை உருவாக்கினேன்.

  2. போட்டியானது வழக்கமாக வேவ்ஸ் பிளாட்ஃபார்ம் பிளாக்செயினின் 60 தொகுதிகள் நீடிக்கும், தற்போது அது தோராயமாக 1 மணிநேரம் ஆகும். 60 தொகுதிகளுக்குப் பிறகு குறைந்தது இரண்டு டிக்கெட்டுகள் இருந்தால், போட்டி முடிந்ததாகவும் மூடப்பட்டதாகவும் கருதப்படுகிறது, இல்லையெனில் போட்டியின் செயல்பாட்டு நேரம் அடுத்த 60 தொகுதிகளுக்கு நீட்டிக்கப்படும்.
  3. போட்டி முடிந்த உடனேயே, நாங்கள் ஒரு தேதி பரிவர்த்தனையை உருவாக்கி அனுப்புகிறோம் (அதற்கு தோராயமாக $0.005 கமிஷனும் செலுத்துகிறோம்), தேவைப்பட்டால், பல, அதில் வரைபடத்தின் அனைத்து நிபந்தனைகளும் பதிவு செய்யப்பட்டு, வீரர்களின் வரிசைப்படுத்தப்பட்ட பட்டியல் (டிக்கெட்டுகள்) அதில் இருந்து வெற்றியாளர்களை தேர்ந்தெடுக்க வேண்டும்.
  4. இந்த கட்டத்தில், எங்களிடம் ஏற்கனவே குறியீட்டின் முதல் பகுதி (R-code) மற்றும் பரிவர்த்தனை தேதி ஐடி (TXID) உள்ளது. நாங்கள் அவற்றை ஆரக்கிளுக்கு இணைத்தல் (R-code + TXID) வடிவத்தில் கையொப்பமிட அனுப்புகிறோம், மீண்டும் நாங்கள் கமிஷன் + இழப்பீடு செலுத்துகிறோம். ஆரக்கிள் பெறப்பட்ட தரவை தனித்துவம் மற்றும் சொந்தமானதா எனச் சரிபார்த்து, அதற்குப் பதில் குறியீட்டின் இரண்டாம் பகுதியை (S-code) sha256 வடிவத்தில் எங்களுக்கு அனுப்புகிறது, இது சீரற்ற எண் ஜெனரேட்டரின் தொடக்கப் புள்ளியாகும்.
  5. வெற்றிபெறும் டிக்கெட்டின் வரிசை எண்ணைக் குறிக்கும் சீரற்ற எண்ணைப் பெற, S-குறியீட்டை sha256 பைனரி தரவிலிருந்து ஹெக்ஸாடெசிமல் (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-code + 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

கருத்தைச் சேர்