μ΄λ² ν¬μ€ν μ λΉνΈμ½μΈ λμ΄λ κ°μ ꡬνλ 곡μμ λν΄μ μμλ³΄κ² μ΅λλ€. μ€λΉλ λ§μ΄νμΌλ μ§μ²μ΄ μμ΄ κ·Έλμ λ―Έλ€λμλ ν¬μ€ν λ΄μ©μ λλ€. λ§μ΄ λΆμ‘±ν μ μμ§λ§ νΉμλ μ μ κ°μ΄ 곡λΆνμλλΆμκ² μ‘°κΈμ΄λΌλ λμμ΄ λ μ μμμΌλ©΄ νλ λ°λ¨μ λλ€. μΆκ°μ μΌλ‘ νΉμ μ μ λΆμ‘±ν¨μ μ±μμ£Όμ€ λΈλ‘μ²΄μΈ κΈ°μ μλ! λκΈλ‘ μλ €μ£Όμλ©΄ λ무λ무 κ°μ¬νκ² μ΅λλ€!
'#5 - λΈλ‘ν΄μμκ΄νμ μ'νΈμ ν΅ν΄ λΈλ‘ν΄μ κ°μ μ΄λ»κ² ꡬνλμ§ κ·Έλ¦¬κ³ μ€μ κ·Έλ κ² κ°μ΄ ꡬν΄μ§λμ§ μμ μμ€λ₯Ό ν΅ν΄μ μ§μ νμΈκΉμ§ ν΄λ΄€μ΅λλ€.
κ·Έλ¦¬κ³ μ±κ΅΄κ³Ό κ΄λ ¨λ ν¬μ€ν μ ν΅ν΄ μνλ¬Έμ λ μ΄λ»κ² νμ΄λ΄λμ§μ λν΄μ μμλ΄€μ΅λλ€.
μ±κ΅΄(λ§μ΄λ)μ΄λ μμ΄μ nonce κ°μ λμ νμ¬ target κ°λ³΄λ€ μμ λΈλ‘ν΄μ κ²°κ³Ό κ°μ μ°ΎμμΌν©λλ€. κ·Έλ λ€λ©΄ targetμ μ 보λ μ΄λ»κ² ꡬν κΉμ?
λΉνΈμ½μΈ λμ΄λλ 2μ£Ό(2016 λΈλ‘)λ§λ€ λ³κ²½λ©λλ€. λμ΄λλ₯Ό ꡬνκΈ° μν΄μλ λΈλ‘ν€λμ ꡬμ±μμμΈ 'bits'μ 보λ₯Ό μ΄μ©νμ¬ κ΅¬ν μ μμ΅λλ€.
λΉνΈμ½μΈ μν€μ μ μλ λμ΄λλ₯Ό ꡬνλ 곡μκ³Ό μ€λͺ μ μλμ κ°μ΅λλ€.
difficulty = difficulty_1_target / current_target
(target is a 256 bit number)
difficulty_1_target can be different for various ways to measure difficulty. Traditionally, it represents a hash where the leading 32 bits are zero and the rest are one (this is known as "pool difficulty" or "pdiff"). The Bitcoin protocol represents targets as a custom floating point type with limited precision; as a result, Bitcoin clients often approximate difficulty based on this (this is known as "bdiff").
Each block stores a packed representation (called "Bits") for its actual hexadecimal target. The target can be derived from it via a predefined formula. For example, if the packed target in the block is 0x1b0404cb, the hexadecimal target is
0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
Note that the 0x0404cb value is a signed value in this format. The largest legal value for this field is 0x7fffff. To make a larger value you must shift it down one full byte. Also 0x008000 is the smallest positive valid value.
The highest possible target (difficulty 1) is defined as 0x1d00ffff, which gives us a hex target of
0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
It should be noted that pooled mining often uses non-truncated targets, which puts "pool difficulty 1" at
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
So the difficulty at 0x1b0404cb is therefore:
0x00000000FFFF0000000000000000000000000000000000000000000000000000 /
0x00000000000404CB000000000000000000000000000000000000000000000000
= 16307.420938523983 (bdiff)
And:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /
0x00000000000404CB000000000000000000000000000000000000000000000000
= 16307.669773817162 (pdiff)
[μΆμ² - λΉνΈμ½μΈ μν€(https://en.bitcoin.it/wiki/Difficulty)]
μμ λ΄μ©μ μ΄ν΄νκ³ μ μμ£Ό λ§μ μ½μ§μ νλ κ² κ°μ΅λλ€. μ°μ λΉνΈμ½μΈ λμ΄λλ₯Ό ꡬνλ 곡μμ μ΄ν΄λ³΄κ² μ΅λλ€.
difficulty = difficulty_1_target / current_target
(target is a 256 bit number)
μμ 곡μμ μ‘°κΈ μ½κ² νμ΄λ³΄λ©΄ μλμ κ°μ΅λλ€.
λμ΄λ = μ΅κ³ λμ΄λ / νμ¬ λμ΄λ
μ¬κΈ°μ μ΅κ³ λμ΄λ(maximum_target)μ νμ κ³ μ λ μμ κ°μΌλ‘ '0x00000000FFFF0000000000000000000000000000000000000000000000000000'미리 μ ν΄μ Έμμ΅λλ€.
μ΅κ³ λμ΄λκ° λ³νμ§ μλ μμλ‘ μ ν΄μ ΈμκΈ° λλ¬Έμ νμ¬ λμ΄λ(current_target) μ 보κ°μ ꡬνμ¬ λλμ΄μ£Όλ©΄ λΉνΈμ½μΈ λμ΄λ κ°μ ꡬν μ μκ² μ΅λλ€.
νμ¬ λμ΄λλ₯Ό ꡬνκΈ° μν΄μλ λΈλ‘ν€λ μ λ³΄μΈ 'bits'κ°μ ν΅ν΄ ꡬν μ μμΌλ©° bits μ 보λ₯Ό μλμ κ°μ΄ μ°μ°νμ¬ νμ¬ λμ΄λ κ°μ ꡬν μ μμ΅λλ€.
μ€μ λμ΄λλ₯Ό ꡬνλ 곡μμ λΉνΈμ½μΈ μν€μμ μ 곡νκ³ μμ΅λλ€.
#include
#include
inline float fast_log(float val)
{
int * const exp_ptr = reinterpret_cast <int *>(&val);
int x = *exp_ptr;
const int log_2 = ((x >> 23) & 255) - 128;
x &= ~(255 << 23);
x += 127 << 23;
*exp_ptr = x;
val = ((-1.0f/3) * val + 2) * val - 2.0f/3;
return ((val + log_2) * 0.69314718f);
}
float difficulty(unsigned int bits)
{
static double max_body = fast_log(0x00ffff), scaland = fast_log(256);
return exp(max_body - fast_log(bits & 0x00ffffff) + scaland * (0x1d - ((bits & 0xff000000) >> 24)));
}
int main()
{
std::cout << difficulty(0x1b0404cb) << std::endl;
return 0;
}
[μΆμ² - λΉνΈμ½μΈ μν€(https://en.bitcoin.it/wiki/Difficulty)]
ν .. CμΈμ΄λ₯Ό 곡λΆν΄λ³Έμ μ΄ μλ μ λ‘μ¨λ CμΈμ΄ λ³΄λ€ μ΅μν PHPλ‘ ν¬ν νκ³ μΆμμ΅λλ€. μλꡬμ? μ κ° ν΄λ³΄κ³ μΆμ 무μΈκ°κ° μμ΄μ κ·Έλ¬μ΅λλ€.. νμ§λ§ μ΄ μ½λλ₯Ό μ΄ν΄νκΈ° μν΄μλ μ¬ννΈ μ°μ°μ λν μ΄ν΄λμ μνμ μ§μμ΄ νμνλκ΅°μ.. κ·Έλμ PHPλ‘ μλ²½ν ν¬ν νλλ° μ€ν¨νμμ΅λλ€ γ γ (νμ§λ§.. ν¬κΈ°νμ§ μκ³ μΈμ κ° κΌ ν΄λΌκ²λλ€ ννν..)
λΈλ‘ν΄μ κ°μ μ΄λ»κ² ꡬνλμ§ μλ²½ν μ΄ν΄νκ³ , μΆκ°μ μΌλ‘ μ±κ΅΄μ λν μ΄λ‘ λ μλ²½ν μ΄ν΄νμμ΅λλ€. κ·Έλμ μ±κ΅΄ νλ‘κ·Έλ¨μ μΌλΆ ꡬμ±μ΄ μ΄λ»κ² μ΄λ£¨μ΄μ‘λμ§μ λν΄μ κ²μ¦μ νκΈ° μν μμ μ½λλ₯Ό λ§λ€κ³ μΆμμ΅λλ€.
μ±κ΅΄νλ‘κ·Έλ¨μ κ²°κ΅ nonceκ°μ 0λΆν° 1μ© μ¦κ°νλ©΄μ μ»μ 'λΈλ‘ν΄μ'κ°μ΄ 'target'λ³΄λ€ μμΌλ©΄ μ±κ³΅μ λλ€. μ κ° μμ±νλ μμ μ½λμ ν΅μ¬ μ½λλ§ μΆμΆνλ©΄ μλμ κ°μ΅λλ€.
μμ μ½λλ₯Ό μ‘°κΈ μ€λͺ ν΄λ³΄μλ©΄ μλ‘μ΄ λΈλ‘μ μμ±νκΈ° μν΄ μ 곡λ°μ μ μλ 5κ°μ§ ꡬμ±μμλ₯Ό λΈλ‘ν΄μ κ°μ ꡬνκΈ° μνμ¬ λ³νμμΌ°μ΅λλ€.(μ΄μ κ΄λ ¨λ λ΄μ©μ5νΈμ λ΄μ©μ μμΈνκ² μμ΅λλ€.) κ·Έλ¦¬κ³ nonceλ₯Ό μ΅μ΄μ 0μΌλ‘ λμ μν€κ³ 'λΈλ‘ν΄μ' μ 보λ₯Ό μΆμΆν ν 'target'κ°κ³Ό λΉκ΅νμ¬ κ°μ΄ μμ κ²½μ° whileλ¬Έμ λΉ μ Έλμ€κ² νμμ΅λλ€. λ§μ½ 'λΈλ‘ν΄'κ°μ΄ μμ§ μλ€λ©΄ nonceμ κ°μ 1λ§νΌ μ¦κ°μν¨ ν λ€μ μ΄μ κ°μ μμ μ κ³μν΄μ λ°λ³΅νλλ‘ μμ±νμμ΅λλ€.
μμ μ½λκ° μ μμ μΌλ‘ λμνκΈ° μν΄μλ μ°μ targetμ κ°μ ꡬν΄μΌ ν©λλ€. νμ§λ§ targetμ κ°μ ꡬνλ μμ€λ₯Ό μλ²½ν ꡬννμ§ λͺ»νμ΅λλ€. κ·Έλμ μκ°ν λ°©μμ΄ λμ΄λλ 2μ£Όλ§λ€ λ³κ²½λκΈ° λλ¬Έμ νμ¬ λμ΄λ μ 보λ₯Ό μλ €μ£Όλ μ¬μ΄νΈκ° μμ§ μμκΉ? κ·Έλ¦¬κ³ μ΄λ¬ν μ 보λ₯Ό μ 곡ν΄μ£Όλ μ¬μ΄νΈλ₯Ό μ°Ύκ²λμμ΅λλ€.
(https://data.bitcoinity.org/bitcoin/difficulty/5y?t=l)
νμ¬ μ μ©λ λμ΄λ μ 보μ, λ€μμ μ μ©λ μμ λμ΄λ μ 보,κ·Έλ¦¬κ³ λ¨μ μκ° μ 보λ±μ νμΈν μ μμμ΅λλ€.
νμ§λ§ μ¬κΈ°μ λ λ¬Έμ μ μ΄ λ°μν©λλ€. μ κ° μΆμΆν λΈλ‘ν΄μ κ°μ 0000000000000000004e5c0a5a398b92a032663b1287e92efce4cbd4c94fd02aμ κ°μ ν΄μ λ¬Έμμ΄μ λλ€. κ·Έλ¦¬κ³ μ 곡 λ°μ λμ΄λμ μ 보λ 3,007,383,866,430μ κ°μ μ«μμ λλ€. μ΄λ»κ² μ΄ 2κ°μ§μ κ°μ λΉκ΅νμ¬ κ°μ΄ μμμ§ νλ¨ν μ μμκΉμ? μ΄λ° λ¬Έμ μ λ€ λλ¬Έμ μ κ° μκ°νλ μ±κ΅΄ νλ‘κ·Έλ¨μ μΌλΆ ꡬνμ μ μ μ€λ¨ν μ λ°μ μμμ΅λλ€.(νμ§λ§ μΆνμ κΌ μμ±μν€κ² μ΅λλ€.)
λ΄μ©μ΄ μ΄μμ νμ§λ§ μ κ° μ λ§ νκ³ μΆμλ κ³Όμ μ μλμ κ°μ΅λλ€.
μμ κ³Όμ μ΄ νμ΅μ μ νμνλꡬμ? μ λ§ μ κ° κ°μ§ κ³ λ¬Ό μ»΄ν¨ν°λ‘ μ±κ΅΄μ 걸리λ μκ°μ΄ μΌλ§λ 걸리λμ§ μκ³ μΆμμ΅λλ€. κ·ΈλμΌμ§λ§ λ§μ΄λνμ νμμ±μ λ λλ μ μλ€κ³ μκ°νμ΅λλ€. κ·Έλ¦¬κ³ μΆκ°μ μΌλ‘ νΌμμ 'μ±κ΅΄' ν μ μλ λ°©μμ λν λ‘μ§μ λ§λ€κ³ μΆμμ΅λλ€.
μλ₯Ό λ€μ΄μ nonceμ κ°μ λ¨μν 0μ© μ¦κ° μν€μ§ μκ³ μμ΄μ λμ κ°μ μ νμ¬, μλ₯Όλ€μ΄ 100,000,000μ μ«μ κ°μμ -1μ© κ°μνλ©΄μ λμ ν΄λ³΄λκ²λλ€. λλ μΌλΆ μ«μλ₯Ό μ μΈνλ ν¨ν΄μ μ μ©ν΄μ λ¬Έμ λ₯Ό νμ΄λ³΄λκ²λλ€. μ΄λ κ² ν κ²½μ° λ§€λ² λΈλ‘μ μ°Ύμ§ λͺ»νλλΌλ νλ¬μ νλ²λ§ μ±κ΅΄μ μ±κ³΅ν μ μλ€λ©΄.. 보μμ΄ 1μ΅7μ²λ§μ μμ€μ λλ€.. μ΄λ° μμ© νλ‘κ·Έλ¨μ λ§λ€κ³ μΆμ΄μ μμ μ½μ§μ νλκ²λλ€!!
λΉλ‘ λ΄μ©μ΄ λΆμ‘±νκ³ .. μλ²½νμ§ λͺ»ν ν¬μ€ν μ΄μμ§λ§ μ μ κ°μ΄ 곡λΆνκ³ μλ λκ΅°κ°μκ² λμμ΄ λ μλ μμ κ² κ°λ€λ μκ°μ΄λ€μ΄μ μ΄λ² ν¬μ€ν μ μμ±νκ² λμμ΅λλ€...
λ€μν¬μ€ν
μμλ μ§λ ν¬μ€ν
λ
Έλμ λν κ°λ
μ 리μ μ΄μ΄μ λΉνΈμ½μΈ μ§κ°μ λν κ°λ
μ 리λ₯Ό νλλ‘ νκ² μ΅λλ€.
[μ°Έκ³ μλ£]
https://steemit.com/kr/@loum/21zhq3-how-to-calculate-the-difficulty-of-bitcoin
https://data.bitcoinity.org/bitcoin/difficulty/5y?r=day&t=l
https://en.bitcoin.it/wiki/Difficulty