15 Π°Π²Π³ΡΡΡΠ° 2010 Π³ΠΎΠ΄Π° ΠΠΈΡΠΊΠΎΠΈΠ½ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ» ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΎΠΏΠ°ΡΠ½ΡΡ
Π°ΡΠ°ΠΊ Π·Π° Π²ΡΡ ΡΠ²ΠΎΡ ΠΈΡΡΠΎΡΠΈΡ. Π Π±Π»ΠΎΠΊΠ΅ β74638 Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°Π» ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π² ΠΊΠΎΠ΄Π΅ Bitcoin Core ΠΈ ΡΠΎΠ·Π΄Π°Π» ΠΈΠ· Π²ΠΎΠ·Π΄ΡΡ
Π°β¦ 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC β Π² Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π»ΠΈΠΌΠΈΡΠΎΠΌ Π² 21 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΠΌΠΎΠ½Π΅Ρ.
ΠΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΡΠ°Π»ΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠ΅ΠΉ Π²Π΅Ρ
ΠΎΠΉ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΠΠΈΡΠΊΠΎΠΈΠ½ ΠΈ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ β Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΡΠ΄ΠΈ, ΡΡΠΎΡΡΠΈΠ΅ Π·Π° Π½ΠΈΠΌ.
β οΈ Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ?
ΠΠ»ΠΎΠΊ 74638
- ΠΠ°ΡΠ°: 15 Π°Π²Π³ΡΡΡΠ° 2010 Π³ΠΎΠ΄Π°
- ΠΠ»ΠΎΠΊ: β74638
- Π‘ΡΡΡ Π±Π°Π³Π°: Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (integer overflow), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠ΅ΡΠΈ ΡΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ 92,2 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC ΠΊΠ°ΠΆΠ΄Π°Ρ β Π² ΡΡΠΌΠΌΠ΅ 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC.
ΠΠΎΡΠ΅ΠΌΡ Π±Π°Π³ ΡΡΠ°Π±ΠΎΡΠ°Π»?
Bitcoin Core Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ» ΡΡΠΌΠΌΡ Π²ΡΡ
ΠΎΠ΄ΠΎΠ² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π». Π C/C++ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΌΠΌΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2^64), ΠΎΠ½Π° ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π² ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΠΈ.
if (txout_total > MAX_MONEY) // ΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΈΠ·-Π·Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΡΠΌΠΎΠ³ ΠΎΠ±ΠΎΠΉΡΠΈ Π»ΠΈΠΌΠΈΡ ΠΌΠΎΠ½Π΅Ρ, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ».
π¨ Π Π΅Π°ΠΊΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π±ΡΠ»Π° Π·Π°ΠΌΠ΅ΡΠ΅Π½Π° ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. Π£ΠΆΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ:
- Π‘Π°ΡΠΎΡΠΈ ΠΠ°ΠΊΠ°ΠΌΠΎΡΠΎ Π»ΠΈΡΠ½ΠΎ Π²ΡΠΏΡΡΡΠΈΠ» ΠΏΠ°ΡΡ Bitcoin Π²Π΅ΡΡΠΈΠΈ 0.3.10, ΡΡΡΡΠ°Π½ΡΡΡΠΈΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ.
- ΠΡΠ»Π° Π²Π½Π΅Π΄ΡΠ΅Π½Π° ΡΡΡΠΎΠ³Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΌΠΌΡ Π²ΡΡ
ΠΎΠ΄ΠΎΠ² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
- ΠΠ»ΠΎΠΊ 74638 ΠΈ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ Π±ΡΠ»ΠΈ ΠΎΡΠΊΠ°ΡΠ°Π½Ρ.
- Π£Π·Π»Ρ ΡΠ΅ΡΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ Π½Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈ Π½Π°ΡΠ°Π»ΠΈ ΠΌΠ°ΠΉΠ½ΠΈΡΡ Π±Π»ΠΎΠΊΠΈ Π½Π° «ΡΠΈΡΡΠΎΠΉ» ΡΠ΅ΠΏΠΎΡΠΊΠ΅.
- Π§Π΅ΡΠ΅Π· 5 ΡΠ°ΡΠΎΠ² Π·Π»ΠΎΠ²ΡΠ΅Π΄Π½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° Π±ΡΠ»Π° Π²ΡΡΠ΅ΡΠ½Π΅Π½Π° ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠ°.
ΠΡΠΎ Π±ΡΠ» Ρ
Π°ΡΠ΄ΡΠΎΡΠΊ, Π½ΠΎ Π½Π΅ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, Π° ΡΠΊΡΡΡΠ΅Π½Π½ΡΠΉ β ΠΈ Π²ΡΠ΅ ΠΆΠ΅ ΠΎΠ½ ΠΏΡΠΎΡΡΠ» Π±ΡΡΡΡΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°.
π§ Π§ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ Π΄Π»Ρ ΠΠΈΡΠΊΠΎΠΈΠ½Π°?
π ΠΠΈΡ: Β«ΠΠΈΡΠΊΠΎΠΈΠ½ β ΡΡΠΎ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ ΠΊ ΠΊΠΎΠ΄ΡΒ»
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΌΠ°Π½ΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΠΈΡΠΊΠΎΠΈΠ½ Π΄Π΅ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½, ΡΡΡΠΎΠΉΡΠΈΠ², ΠΈ Π²ΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΎ Π² Π°Π²Π³ΡΡΡΠ΅ 2010 Π³ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ΄ Π΄Π°Π» ΡΠ±ΠΎΠΉ β ΠΈ ΡΠΏΠ°ΡΠ»Π° ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ ΠΌΠ°Π³ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π° Π»ΡΠ΄ΠΈ:
- ΠΡΠΎ-ΡΠΎ Π·Π°ΠΌΠ΅ΡΠΈΠ» Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ.
- ΠΡΠΎ-ΡΠΎ ΠΏΠΎΠ½ΡΠ», Π² ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
- ΠΡΠΎ-ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π» ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
- ΠΡΠΎ-ΡΠΎ ΡΠ±Π΅Π΄ΠΈΠ» ΠΌΠ°ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠ΅ΡΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ.
ΠΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ: Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΠΈΡΠΊΠΎΠΈΠ½Π° Π»Π΅ΠΆΠΈΡ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ.
π ΠΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°?
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°:
- ΠΡΠ»Π° Π²Π½Π΅Π΄ΡΠ΅Π½Π° ΠΆΡΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠΌΠΈΡΠ° ΠΌΠΎΠ½Π΅Ρ.
- ΠΠ²Π΅Π΄Π΅Π½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ.
- Π£ΡΠΈΠ»Π΅Π½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΡΠ΅Π»ΠΈΠ·ΠΎΠ².
- Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠΎΠ·Π½Π°Π²Π°ΡΡ Π²Π°ΠΆΠ½ΠΎΡΡΡ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ.
π ΠΠ΅Π»Π°Π΅ΠΌ Π Π΅Π·ΡΠΌΠ΅
ΠΠ°Π³ Π½Π° 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°, ΡΡΠΎ Π»Π°ΠΊΠΌΡΡΠΎΠ²Π°Ρ Π±ΡΠΌΠ°ΠΆΠΊΠ° Π΄Π΅ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ. ΠΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π», ΡΡΠΎ:
- ΠΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ.
- ΠΡΠ΄ΠΈ, ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, β Π΅Ρ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ Ρ
ΡΠ°Π½ΠΈΡΠ΅Π»ΠΈ.
- ΠΠΎΠ²Π΅ΡΠΈΠ΅ Π² ΠΠΈΡΠΊΠΎΠΈΠ½Π΅ β ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π°, Π½ΠΎ ΠΈ ΠΏΡΠΎ Π·ΡΠ΅Π»ΠΎΡΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°.
ΠΠΈΡΠΊΠΎΠΈΠ½ Π²ΡΠΆΠΈΠ» Π½Π΅ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ Π±Π΅Π·ΡΠΏΡΠ΅ΡΠ΅Π½. Π ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠ»ΠΎ Π³ΠΎΡΠΎΠ²ΠΎ Π·Π°ΡΠΈΡΠΈΡΡ Π΅Π³ΠΎ.
ΠΡΠ»ΠΈ Ρ
ΠΎΡΠ΅ΡΡ, ΠΌΠΎΠ³Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΡΠ°ΡΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΊΠΎΠ΄Π°, ΡΡΡΠ»ΠΊΠΈ Π½Π° Π°ΡΡ
ΠΈΠ² ΡΠΎΡΡΠΌΠ° Bitcointalk ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΎΠ³ΡΠ°ΡΠΈΠΊΡ.
Π₯Π²Π°Π»Π° ΠΠ»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΡ
ΠΠ»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠ³ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΡΡ ΡΡΠΌΠΌΡ, Π½ΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠ½ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ Π²ΡΠ±ΡΠ°Π» ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΡΠΈΡΡΡ β 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC, ΡΡΠΎΠ±Ρ:
β
1. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΏΡΠΎΠ²ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
- Π ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C++, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ Bitcoin Core, ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (
integer overflow) ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
. - Π’ΠΈΠΏ
int64_t (signed 64-bit integer), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΌΠΌΡ ΡΠ°ΡΠΎΡΠΈ (1 BTC = 100,000,000 ΡΠ°ΡΠΎΡΠΈ), ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈΠΌΠΈΡ ΠΎΠΊΠΎΠ»ΠΎ Β±9.22 Γ 10^18. - ΠΠ½Π°ΡΠ΅Π½ΠΈΡ, Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠ΅Π΄Π΅Π»Ρ, ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ β Π²ΡΠΎΠ΄Π΅ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Β«ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡΒ» ΡΠΈΡΠ»Π°.
β ΠΠ»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΠΊΡΠ°ΠΉΠ½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΠ²ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°Π³.
β
2. Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π°ΡΠ°ΠΊΠ° ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°
- ΠΡΠ»ΠΈ Π±Ρ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π», ΡΠΊΠ°ΠΆΠ΅ΠΌ, 1000 BTC, ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ Π±Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΈ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ» Π±Ρ ΡΡΠ°Π·Ρ.
- 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC β ΡΡΠΎ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ»ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°.
ΠΡΠΎ Π±ΡΠ» ΡΠΏΠΎΡΠΎΠ± ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π³ΡΠΎΠΌΠΊΠΎ, ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΊ Β«white-hatΒ» (ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Ρ
Π°ΠΊΠ΅Ρ), Π½ΠΎ Π±Π΅Π· ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΉ.
β
3. ΠΠ³ΡΠ° Π½Π° ΡΡΡΠ΅ΠΊΡΠ΅: ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅Π»ΡΡ Π±ΡΠ»ΠΎ Π½Π΅ ΠΎΠ±ΠΎΠ³Π°ΡΠΈΡΡΡΡ, Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΌΠΈΡΡ, ΡΡΠΎ Π² ΠΠΈΡΠΊΠΎΠΈΠ½Π΅ Π²ΡΡ Π΅ΡΠ΅ Π΅ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄ΡΡΡ.
- Π 2010 Π³ΠΎΠ΄Ρ ΠΠΈΡΠΊΠΎΠΈΠ½ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π±ΠΈΡΠ°Π» ΠΎΠ±ΠΎΡΠΎΡΡ, ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π°ΡΠ°ΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π·ΡΡΡΠΈΡΡ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ.
π‘ ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΡΠ°ΠΊΡ
ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ» ΡΡΠΈ 184 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC. ΠΠ½ΠΈ Π±ΡΠ»ΠΈ Π±ΡΡΡΡΠΎ Π·Π°ΠΌΠ΅ΡΠ΅Π½Ρ, Π° ΡΠ΅ΠΏΠΎΡΠΊΠ° Ρ Π±Π°Π³ΠΎΠΌ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½Π°. ΠΠΎΡΡΠΎΠΌΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΠΎΠΉ Π²ΡΠ³ΠΎΠ΄Ρ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ».
π ΠΡΠ²ΠΎΠ΄
ΠΠ»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ Π²ΡΠ±ΡΠ°Π» ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΡΡΠΌΠΌΡ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΡΠΎ Π±ΡΠ»Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π·ΠΎΠ½Π°Π½ΡΠ½ΡΡ ΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ. ΠΠ°Π»Π΅Π½ΡΠΊΠ°Ρ ΡΡΠΌΠΌΠ° ΠΎΡΡΠ°Π»Π°ΡΡ Π±Ρ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ, Π° ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ β ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΡΠΏΡΠΎΠ²ΠΎΡΠΈΡΠΎΠ²Π°Π»Π° ΡΠ΅Π°ΠΊΡΠΈΡ.
Π₯ΠΎΡΠ΅ΡΡ, ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π±Π»ΠΎΠΊ Ρ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ Π² Π±Π»ΠΎΠΊΠ΅.
ΠΠΎΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° C++, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΡΡΡ Π±Π°Π³Π° Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΡΠ» 15 Π°Π²Π³ΡΡΡΠ° 2010 Π³ΠΎΠ΄Π° Π² ΠΠΈΡΠΊΠΎΠΈΠ½Π΅.
π» ΠΡΠΈΠΌΠ΅Ρ: ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ int64_t ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΡΠΌΠΌΡ Π²ΡΡ
ΠΎΠ΄ΠΎΠ²
πΉ ΠΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ:
- Π‘Π°ΡΠΎΡΠΈ Π² ΠΊΠΎΠ΄Π΅ Ρ
ΡΠ°Π½ΡΡΡΡ ΠΊΠ°ΠΊ 64-Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
int64_t. - ΠΠΈΠΌΠΈΡ: 21 ΠΌΠ»Π½ BTC =
2.1 * 10^15 ΡΠ°ΡΠΎΡΠΈ. - ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ: ΡΡΠΌΠΌΠ° Π²ΡΡ
ΠΎΠ΄ΠΎΠ² β€ 21 ΠΌΠ»Π½ BTC (Π² ΡΠ°ΡΠΎΡΠΈ).
πΉ ΠΠΎΠ΄ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΌ Π±Π°Π³ΠΎΠΌ:
#include
#include int main() {
// ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β 92.2 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° BTC Π² ΡΠ°ΡΠΎΡΠΈ
int64_t txout1 = 9223372036854775807; // ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ int64_t
int64_t txout2 = 100; // ΠΡΠ±Π°Ρ ΠΌΠ°Π»Π°Ρ ΡΡΠΌΠΌΠ°int64_t total = txout1 + txout2; // ΡΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅std::cout << "txout1: " << txout1 << std::endl;
std::cout << "txout2: " << txout2 << std::endl;
std::cout << "total: " << total << std::endl; // Π΄Π°ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ!// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΠΈ β Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ
if (total < 21000000LL * 100000000LL) {
std::cout << "Π‘ΡΠΌΠΌΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°" << std::endl;
} else {
std::cout << "Π‘ΡΠΌΠΌΠ° ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π»ΠΈΠΌΠΈΡ!" << std::endl;
}
return 0;
}
π Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ?
txout1 β ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ int64_t: 9223372036854775807 - ΠΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈΠ»ΠΈ «ΠΎΠ±Π½ΡΠ»ΠΈΡΡΡ» Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
- ΠΡΠΎΠ²Π΅ΡΠΊΠ°
if (total < MAX_MONEY) Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ total β ΡΠΆΠ΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΈ ΠΎΠ½ΠΎ «ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ» ΠΏΠΎΠ΄ Π»ΠΈΠΌΠΈΡΠΎΠΌ.
π ΠΠ°ΠΊ ΡΡΠΎ ΡΡΡΡΠ°Π½ΠΈΠ»ΠΈ Π² Bitcoin Core
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ:
if (!MoneyRange(txout.nValue))
return state.DoS(100, false, REJECT_INVALID, "txout.nValue out of range");CAmount nValueOut = 0;
for (const auto& txout : tx.vout) {
nValueOut += txout.nValue;
if (!MoneyRange(nValueOut))
return state.DoS(100, false, REJECT_INVALID, "txout total out of range");
}
Π€ΡΠ½ΠΊΡΠΈΡ MoneyRange() Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ Π²ΡΡ
ΠΎΠ΄ΡΡ Π·Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
69