Nonce๋ ๋ธ๋ก์ฒด์ธ์ ์์ ์ฆ๋ช (Proof of Work, PoW) ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๋๋ ์์์ ์ซ์๋ก, ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํด์๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋ฐ๋ณต์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฐ์ ๋๋ค.
๋ธ๋ก์ฒด์ธ์์ nonce ๊ฐ์:
- ์ง์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐํ์ฌ ๋ฌธ์์ด๋ก ํฌํจํ ํ ํด์๋ฅผ ๊ณ์ฐํ๊ฑฐ๋,
- ๋ธ๋ก ํค๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ณ๋์ ํ๋๋ก ์ค์ ํ์ฌ ํด์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๐งฎ ๊ณ์ฐ์ ๋ฐ ํจ์ ํ๋ผ๋ฏธํฐ๋ก nonce ์ ๋ฌ ์์
1๏ธโฃ ๋ฌธ์์ด ์ฐ๊ฒฐ ๋ฐฉ์
๊ฐ์ฅ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๊ตฌ์ฑํด nonce๋ฅผ ๋ถ์ ๋๋ค.
import hashlib
def calculate_hash(prev_hash, transaction_data, nonce):
data = f"{prev_hash}{transaction_data}{nonce}"
return hashlib.sha256(data.encode()).hexdigest()
# ์ฌ์ฉ ์์
prev_hash = "000000abc123"
transaction_data = "์ฌ์ฉ์ A๊ฐ ์ฌ์ฉ์ B์๊ฒ 5์ฝ์ธ์ ๋ณด๋"
nonce = 1
hash_result = calculate_hash(prev_hash, transaction_data, nonce)
print(hash_result)
- ์ ์์์์๋
prev_hash
,transaction_data
,nonce
๊ฐ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐ๋ ํ SHA-256 ํด์ ํจ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
2๏ธโฃ ํจ์ ํ๋ผ๋ฏธํฐ๋ก ๋ณ๋ ํ๋๋ก ๋๊ธฐ๋ ๋ฐฉ์
๋ธ๋ก์ฒด์ธ์ ์ค์ ๊ตฌํ์์๋ nonce๋ฅผ ๋ธ๋ก ํค๋์ ์ผ๋ถ๋ก ๋ณ๋์ ํ๋๋ก ๊ด๋ฆฌํ์ฌ ๊ตฌ์ฑํ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ํด์ ํจ์๋ก ์ ๋ฌํฉ๋๋ค.
import hashlib
import struct
def calculate_hash(prev_hash, transaction_data, nonce):
data = prev_hash.encode() + transaction_data.encode() + struct.pack("<I", nonce)
return hashlib.sha256(data).hexdigest()
nonce = 1
hash_result = calculate_hash("000000abc123", "์ฌ์ฉ์ A๊ฐ ์ฌ์ฉ์ B์๊ฒ 5์ฝ์ธ์ ๋ณด๋", nonce)
print(hash_result)
- ์ฌ๊ธฐ์๋
nonce
๊ฐ์ ์ ์๋ก ๋ณ๋๋ก ์ ๋ฌํ์ฌ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๊ตฌ์ฑํฉ๋๋ค.
๐ ์ค์ง์ ์ธ ๋ธ๋ก์ฒด์ธ ๊ตฌํ์์๋?
์ค์ ๋ธ๋ก์ฒด์ธ ๊ตฌํ(Bitcoin, Ethereum ๋ฑ)์ nonce ๊ฐ์ ํฌํจํ ๋ธ๋ก ํค๋๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ด ๋ธ๋ก ํค๋ ์ ์ฒด๋ฅผ ํด์ํฉ๋๋ค.
๋ธ๋ก ํค๋ ๊ตฌ์ฑ ์์:
| Version (๋ฒ์ ) | Previous Block Hash | Merkle Root | Timestamp | Difficulty | Nonce |
์ด๋ Nonce๋ ๋ ๋ฆฝ๋ ์ ์ ํ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ธ๋ก ํค๋ ์ ์ฒด๋ฅผ ์ง๋ ฌํ(serialize)ํ์ฌ SHA-256 ํด์ ํจ์์ ์ ๋ฌํฉ๋๋ค.
๐ ๋ฐ๋ณต์ ๊ณผ์ ์ ์๋ฆฌ
์์ ์์์์ ๋ณด๋ฏ์ด, nonce ๊ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด์ ํด์๋ฅผ ๊ณ์ฐํ๊ณ , ๋ชฉํ ์กฐ๊ฑด(์: ์์ ์ผ์ ๊ฐ์์ 0์ผ๋ก ์์ํ๋ ํด์๊ฐ)์ ๋ง์กฑํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์ฆ,
- Nonce ๊ฐ์ ๋ณ๊ฒฝํ๋ฉฐ ๋ฐ์ดํฐ ์กฐํฉ
- ๋ฐ์ดํฐ ์กฐํฉ์ ํด์ ํจ์์ ์ ๋ ฅ
- ์ถ๋ ฅ๋ ํด์๊ฐ์ ์กฐ๊ฑด๊ณผ ๋น๊ต
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด nonce ์ฆ๊ฐ ํ ๋ฐ๋ณต
์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ nonce ๊ฐ์ ์ฐพ์ผ๋ฉด ํด๋น nonce๊ฐ ์ต์ข ๋ธ๋ก์ ์ผ๋ถ๋ก ๊ธฐ๋ก๋ฉ๋๋ค.
๐ ์ ๋ฆฌ
nonce ๊ฐ์:
- ๋ฌธ์์ด ํํ๋ก ์ง์ ๋ฐ์ดํฐ์ ํฌํจ์ํค๊ฑฐ๋,
- ํจ์ ํ๋ผ๋ฏธํฐ๋ก ์ ์ ํํ๋ก ๋ฐ๋ก ์ ๋ฌ๋์ด,
- ํด์ ๊ณ์ฐ ์ ๋ ฅ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐ๋ณต์ ์ธ nonce ๋ณ๊ฒฝ ์์ ์ด ๋ธ๋ก์ฒด์ธ์ PoW ์์ ์ฆ๋ช ์ ํต์ฌ์ ์๋ฆฌ์ ๋๋ค.
๋ต๊ธ ๋จ๊ธฐ๊ธฐ