ಲಾಟರಿಯ ಉದಾಹರಣೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಯಾದೃಚ್ಛಿಕ ಒರಾಕಲ್ ಅನ್ನು ಬಳಸುವುದು

ಒಂದು ದಿನ ಬೆಳಿಗ್ಗೆ ನಾನು ಈ ಬಗ್ಗೆ ಒಂದು ಲೇಖನವನ್ನು ನೋಡಿದೆ ಪರಿಶೀಲಿಸಬಹುದಾದ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆ ಜನರೇಟರ್ ವೇವ್ಸ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ.

ಒಟ್ಟಾರೆ ಚಿತ್ರವು ಸ್ಪಷ್ಟವಾಗಿತ್ತು, ಆದರೆ ನಿರ್ದಿಷ್ಟ ಅನುಷ್ಠಾನ ವಿಧಾನವು ಅಲ್ಲ. ಕೆಲವು ಕೋಡ್‌ಗಳು, ಸಹಿಗಳು, ಏನು, ಎಲ್ಲಿ, ಏಕೆ?

ಒರಾಕಲ್ನ ಲೇಖಕರೊಂದಿಗೆ ಹಲವಾರು ಸಮಾಲೋಚನೆಗಳು, ಪರಿಣಾಮವಾಗಿ, ಡ್ರಾಯಿಂಗ್ ಲಾಜಿಕ್ ಅನ್ನು (PHP ಯಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ) ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ಪಡೆಯಲು ಅಲ್ಗಾರಿದಮ್ನೊಂದಿಗೆ ಸಂಯೋಜಿಸಲು ಸಾಧ್ಯವಾಯಿತು.

  1. ಪಂದ್ಯಾವಳಿ/ಸುತ್ತಿನ ಪ್ರಾರಂಭದಲ್ಲಿ, ನಾವು ಒರಾಕಲ್‌ನಿಂದ ಕೋಡ್‌ನ ಮೊದಲ ಭಾಗವನ್ನು (R-ಕೋಡ್) ವಿನಂತಿಸುತ್ತೇವೆ.

    ಈ ಕ್ಷಣದಲ್ಲಿ, ಆಟಗಾರರ ಸಂಖ್ಯೆ, ಬಹುಮಾನದ ಸ್ಥಳಗಳ ಸಂಖ್ಯೆ, ಬಹುಮಾನ ಪಾವತಿಗಳ ಗಾತ್ರ ಅಥವಾ ಸಾಮಾನ್ಯವಾಗಿ ಲಾಟರಿ ಅಸ್ತಿತ್ವದ ಬಗ್ಗೆ ಯಾವುದೇ ಮಾಹಿತಿ ಇಲ್ಲ. ಒರಾಕಲ್, ವಹಿವಾಟಿನ ಮೂಲಕ, ವೈಯಕ್ತಿಕ ಯಾದೃಚ್ಛಿಕ ಕೋಡ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ನಂತರ ಅದನ್ನು ಒಮ್ಮೆ ಮಾತ್ರ ಬಳಸಬಹುದು ಮತ್ತು ಅದನ್ನು ವಿನಂತಿಸಿದವರು ಮಾತ್ರ ಬಳಸಬಹುದು. ಮೂಲಕ, ಆರ್-ಕೋಡ್ ಅನ್ನು "ಖರೀದಿಸಬಹುದು" (ಅಂದರೆ ವಿನಂತಿಯ ವಹಿವಾಟಿನ ವೆಚ್ಚ + ಪ್ರತಿಕ್ರಿಯೆ ವ್ಯವಹಾರಕ್ಕಾಗಿ ಒರಾಕಲ್‌ಗೆ ಪರಿಹಾರ, ಇದು ಪ್ರಸ್ತುತ ದರದಲ್ಲಿ ಸುಮಾರು $0.015 ಮೊತ್ತವಾಗಿದೆ, ಕೋಡ್ ಅನ್ನು ಉಚಿತವಾಗಿ ನೀಡಲಾಗುತ್ತದೆ. ) ಹಲವಾರು ಬಾರಿ ಮುಂಚಿತವಾಗಿ, ಆದ್ದರಿಂದ ಪ್ರತಿಕ್ರಿಯೆ ವಹಿವಾಟಿನ ರಸೀದಿಯನ್ನು ನಂತರ ನಿರೀಕ್ಷಿಸಿ ಅಲ್ಲ. ನಾನು ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ನಿಯಮಿತವಾಗಿ ನವೀಕರಿಸಿದ ಬಫರ್ ಅನ್ನು ಚಿಕ್ಕದಾಗಿ ಮಾಡಿದ್ದೇನೆ.

  2. ಪಂದ್ಯಾವಳಿಯು ಸಾಮಾನ್ಯವಾಗಿ ವೇವ್ಸ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಬ್ಲಾಕ್‌ಚೈನ್‌ನ 60 ಬ್ಲಾಕ್‌ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ, ಈ ಸಮಯದಲ್ಲಿ ಅದು ಸರಿಸುಮಾರು 1 ಗಂಟೆ. 60 ಬ್ಲಾಕ್‌ಗಳ ನಂತರ ಕನಿಷ್ಠ ಎರಡು ಟಿಕೆಟ್‌ಗಳಿದ್ದರೆ ಪಂದ್ಯಾವಳಿಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಮುಚ್ಚಲಾಗಿದೆ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ ಪಂದ್ಯಾವಳಿಯ ಚಟುವಟಿಕೆಯ ಸಮಯವನ್ನು ಮುಂದಿನ 60 ಬ್ಲಾಕ್‌ಗಳಿಗೆ ವಿಸ್ತರಿಸಲಾಗುತ್ತದೆ.
  3. ಪಂದ್ಯಾವಳಿ ಮುಗಿದ ತಕ್ಷಣ, ನಾವು ದಿನಾಂಕದ ವಹಿವಾಟನ್ನು ರಚಿಸುತ್ತೇವೆ ಮತ್ತು ಕಳುಹಿಸುತ್ತೇವೆ (ಅದಕ್ಕಾಗಿ ನಾವು ಅಂದಾಜು $0.005 ಕಮಿಷನ್ ಅನ್ನು ಸಹ ಪಾವತಿಸುತ್ತೇವೆ), ಅಗತ್ಯವಿದ್ದರೆ, ಹಲವಾರು, ಇದರಲ್ಲಿ ಡ್ರಾಯಿಂಗ್‌ನ ಎಲ್ಲಾ ಷರತ್ತುಗಳನ್ನು ದಾಖಲಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಆಟಗಾರರ ಆದೇಶ ಪಟ್ಟಿ (ಟಿಕೆಟ್‌ಗಳು) ಅದರಿಂದ ನಾವು ವಿಜೇತರನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕಾಗಿದೆ.
  4. ಈ ಹಂತದಲ್ಲಿ, ನಾವು ಈಗಾಗಲೇ ಕೋಡ್‌ನ ಮೊದಲ ಭಾಗವನ್ನು (R-ಕೋಡ್) ಜೊತೆಗೆ ವಹಿವಾಟು ದಿನಾಂಕ ID (TXID) ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ. ನಾವು ಅವುಗಳನ್ನು ಒರಾಕಲ್‌ಗೆ ಸಂಯೋಜನೆಯ ರೂಪದಲ್ಲಿ (R- ಕೋಡ್ + TXID) ಸಹಿಗಾಗಿ ಕಳುಹಿಸುತ್ತೇವೆ, ಮತ್ತೆ ನಾವು ಕಮಿಷನ್ + ಪರಿಹಾರವನ್ನು ಪಾವತಿಸುತ್ತೇವೆ. ಒರಾಕಲ್ ಸ್ವೀಕರಿಸಿದ ಡೇಟಾವನ್ನು ಅನನ್ಯತೆ ಮತ್ತು ಸೇರಿದ್ದಕ್ಕಾಗಿ ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಯಾಗಿ ನಮಗೆ ಕೋಡ್‌ನ ಎರಡನೇ ಭಾಗವನ್ನು (ಎಸ್-ಕೋಡ್) sha256 ಸ್ವರೂಪದಲ್ಲಿ ಕಳುಹಿಸುತ್ತದೆ, ಇದು ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯ ಜನರೇಟರ್‌ನ ಆರಂಭಿಕ ಹಂತವಾಗಿದೆ.
  5. ವಿಜೇತ ಟಿಕೆಟ್‌ನ ಅನುಕ್ರಮ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುವ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ಪಡೆಯಲು, ನಾವು S-ಕೋಡ್ ಅನ್ನು sha256 ಬೈನರಿ ಡೇಟಾದಿಂದ ಹೆಕ್ಸಾಡೆಸಿಮಲ್ (HEX) ಪ್ರಾತಿನಿಧ್ಯಕ್ಕೆ ಪರಿವರ್ತಿಸುತ್ತೇವೆ. ನಂತರ ಫಲಿತಾಂಶದ HEX ಸ್ಟ್ರಿಂಗ್‌ನಿಂದ, ನಾವು ಸಂಖ್ಯೆಯನ್ನು ಪಡೆಯುತ್ತೇವೆ. ಫಲಿತಾಂಶದ ಸಂಖ್ಯೆಯನ್ನು ಟಿಕೆಟ್‌ಗಳ ಸಂಖ್ಯೆಯಿಂದ (ಎಲ್ಲಾ_ಟಿಕೆಟ್‌ಗಳು) ಭಾಗಿಸುವ ಉಳಿದ ಭಾಗವನ್ನು ನಾವು ಪಡೆಯುತ್ತೇವೆ ಮತ್ತು ಫಲಿತಾಂಶಕ್ಕೆ 1 ಅನ್ನು ಸೇರಿಸುತ್ತೇವೆ (ಎಲ್ಲಾ_ಟಿಕೆಟ್‌ಗಳ ಮೊದಲು ಸಂಖ್ಯೆ 1 ಅನ್ನು ಪಡೆಯಲು). ಪರಿಣಾಮವಾಗಿ, ನಾವು ವಿಜೇತರ ಸರಣಿ ಸಂಖ್ಯೆಯನ್ನು ಪಡೆಯುತ್ತೇವೆ.
  6. ರೇಖಾಚಿತ್ರದ ಪರಿಸ್ಥಿತಿಗಳ ಪ್ರಕಾರ, ಹಲವಾರು ವಿಜೇತರು ಇದ್ದರೆ, ನಾವು ಹಿಂದಿನ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಬಹುಮಾನದ ಸ್ಥಳಗಳ ಸಂಖ್ಯೆಗೆ ಸಮಾನವಾದ ಮೊತ್ತದಲ್ಲಿ ಪುನರಾವರ್ತಿಸುತ್ತೇವೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ರತಿ ಬಾರಿ ನಾವು ಈಗಾಗಲೇ ಗೆದ್ದಿರುವ ಟಿಕೆಟ್ ಅನ್ನು ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕುತ್ತೇವೆ ಮತ್ತು ಎಲ್ಲಾ_ಟಿಕೆಟ್‌ಗಳನ್ನು 1 ರಿಂದ ಕಡಿಮೆ ಮಾಡುತ್ತೇವೆ ಮತ್ತು ಎಸ್-ಕೋಡ್ ಬದಲಿಗೆ ನಾವು ಸ್ವೀಕರಿಸಿದ ಹಿಂದಿನ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುತ್ತೇವೆ.

ನಿರ್ದಿಷ್ಟ ನೈಜ ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ, ಪಂದ್ಯಾವಳಿ ಸಂಖ್ಯೆ 119:

ಒಟ್ಟು 7 ಟಿಕೆಟ್‌ಗಳು (ಎಲ್ಲಾ_ಟಿಕೆಟ್‌ಗಳು)
ಟಿಕೆಟ್ ಬೆಲೆ 50 ನಾಣ್ಯಗಳು (ಬೆಟ್)
ಆಟದ ಶುಲ್ಕ 10% (ಶುಲ್ಕ)

ಲಾಟರಿಯ ಷರತ್ತುಗಳ ಪ್ರಕಾರ, 30% ಬಹುಮಾನದ ಹಣಕ್ಕೆ ಹೋಗುತ್ತದೆ, ಅಂದರೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, 2 ಟಿಕೆಟ್‌ಗಳು ಬಹುಮಾನವನ್ನು ಪಡೆಯಬೇಕು, ಅದರ ಗಾತ್ರವನ್ನು ಸೂತ್ರದ ಪ್ರಕಾರ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ (ಬೆಟ್*ಎಲ್ಲಾ_ಟಿಕೆಟ್‌ಗಳು-ಶುಲ್ಕ)/2.

1. R-ಕೋಡ್ ಸ್ವೀಕರಿಸಲಾಗಿದೆ: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. ಪಂದ್ಯಾವಳಿಯನ್ನು ಮುಚ್ಚಿದ ನಂತರ, ನಾವು ಜೋಡಿಗಳ ರೂಪದಲ್ಲಿ ಟಿಕೆಟ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿದ್ದೇವೆ: ಸಂಖ್ಯೆ + ವಿಳಾಸ (ಪಂದ್ಯಾವಳಿಯಲ್ಲಿ ಭಾಗವಹಿಸಲು ಪಾವತಿ ಮಾಡಿದ ವಾಲೆಟ್‌ನ ವಿಳಾಸ). ವಿಳಾಸಗಳು ಪುನರಾವರ್ತನೆಯಾಗಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ, ಇದರರ್ಥ ಒಬ್ಬ ಭಾಗವಹಿಸುವವರು ಒಂದು ಪಂದ್ಯಾವಳಿಗೆ ಹಲವಾರು ಟಿಕೆಟ್‌ಗಳನ್ನು ಖರೀದಿಸಿದ್ದಾರೆ, ಇದನ್ನು ನಿಯಮಗಳಿಂದ ನಿಷೇಧಿಸಲಾಗಿಲ್ಲ.

ಕಳುಹಿಸಲಾದ ವಹಿವಾಟಿನ ದಿನಾಂಕ: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. ವಿನಂತಿಸಿದ ಎಸ್-ಕೋಡ್: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV ಕಾಮೆಂಟ್‌ನೊಂದಿಗೆ (R-ಕೋಡ್ + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. ಸ್ವೀಕರಿಸಿದ ಎಸ್-ಕೋಡ್: 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ