๋ชฉ์ฐจ : ๋คํธ์ํฌ ๊ฐ์ / ๋นํธ์ฝ์ธ์ ํธ๋์ ์ / ๋นํธ์ฝ์ธ์ ๋คํธ์ํฌ
๋คํธ์ํฌ ๊ฐ์
- Client-Server
๋จ์ผ ์ค์์๋ฒ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ๊ฐ ์๋ต, ๋ณ๋ชฉ ํ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ
๊ตฌํ๋น์ฉ ๋น์ธ์ง๋ง, ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅ
- P2P Network
๋คํธ์ํฌ์ ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก ๋ฐ์ดํฐ ๊ณต์
๊ฐ ๋ ธ๋๊ฐ ์์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๋ฉฐ, ๊ตฌํ ๋น์ฉ์ ์ ๋ ดํ์ง๋ง ๋ ธ๋ ์ ์ฆ๊ฐํ๋ฉด ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ
- ๊ธ์ต ๋คํธ์ํฌ์ ํ์ ์์
1. ๊ฑฐ๋ ์ฒ๋ฆฌ ๋๋ฆฌ์ธ
2. ์ด์ค์ง๋ถ์ ๊ฒ์ฆํ๋ ๊ฒ์ฆ์
3. ๊ฑฐ๋๋ด์ญ ์ ์ฅํ๋ DB
4. ๋๋ฆฌ์ธ๊ณผ ๊ฒ์ฆ์์ ๋ํ ์ ๋ขฐ
- ์ค์ ์๋ฒ๊ฐ ์๋ ๋ธ๋ก์ฒด์ธ์์๋?
- ๋น์ํด ์ฅ๊ตฐ ๋ฌธ์ (BFT : Byzantine Fault Tolerance)
๋น์ํฐ์ ์ ๊ตญ์ ์ฅ๊ตฐ๋ค์ด ์ ์ ์์ค์ ์๋ ๋์๋ฅผ ํฌ์ํ๋ ค ํ๋ค. ์ ํฌ ์ค๋น๋ฅผ ๋ง์น ๊ฐ ์ฅ๊ตฐ๋ค์ ์ ๊ตญ๊ตฐ์ ๋๋ถ๋ถ์ด ํ๊บผ๋ฒ์ ๋์๋ฅผ ๊ณต์ฑํด์ผ์ง๋ง ์ด ๋์๋ฅผ ํจ๋ฝ์ํฌ์ ์์์ ์๊ณ ์๋ค.
๊ทธ๋ฌ๋ ๋น์ํฐ์์ ์ฅ๊ตฐ๋ค์ ์์ ๋ค ์ค ๋ช๋ช์ด ์ด๋ฏธ ์ ๊ณผ ๋ดํตํ๊ณ ์์๊ณผ ์๋ก์๊ฒ ์ฐ๋ฝํ ์ ๋ น๋ค์ด ๋์์์ ๋์จ ์ฒํ๋์๊ฒ ์ฌ๋ก์กํ ์ ์์๋ ์๊ณ ์๋ค.
์ด๋ค ์ฅ๊ตฐ์ด ํฉ์ ์๊ฒ ์ถฉ์ฑ์ค๋ฌ์ด์ง, ํน์ ๋ชจ๋ฐ์ ํ๋ ค๋์ง ํ์คํ์ง ๋ชปํ ์ํฉ์์ ์ถฉ์ฑ์ค๋ฌ์ด ์ฅ๊ตฐ๋ค์ ๋ฐฐ์ ์๋ค์ด ๋ณ๋ ฅ์ ๋ฌผ๋ ค ๊ณต์ฑ์ ๋ฐฉํดํ๊ฑฐ๋ ์ ์๊ฒ ์์์ ๋๊ธธ์ ์๋ค๋ ์ํฉ ๋๋ฌธ์ ๋๋ ๋ง์ ๋น ์ง๋ค.
์ถฉ์งํ ์ฅ๊ตฐ๋ค์ ์ ๋ น๋ค์ด ๋ณด๋ธ ๋ช ๋ น์ ์ถฉ์คํ๊ฒ ๋ฐ๋ฅด๋ฉฐ ์ด ์ธ์ ํ๋์ ํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฒด ์ฅ๊ตฐ ์ค ์ผ๋ถ์ธ ๋ฐฐ์ ์ ์ฅ๊ตฐ๋ค์ ์ ๋ น์ ์ฝ๋งค์ด์ง ์๊ณ ๋ง์๋๋ก ํ๋ํ ์ ์๋ค. ์ด ๋ ๋ฐฐ์ ์์ ์กด์ฌ์๋ ๋ถ๊ตฌํ๊ณ ์ถฉ์งํ ์ฅ๊ตฐ๋ค์ด ๋์ผํ ๊ณต๊ฒฉ ๊ณํ์ ์ธ์ฐ๊ธฐ ์ํด์๋ ์ถฉ์งํ ์ฅ๊ตฐ๋ค์ ์๊ฐ ์ผ๋ง๋ ์์ด์ผ ํ๋ฉฐ, ์ฅ๊ตฐ๋ค์ด ์ด๋ค ๊ท์น์ ๋ฐ๋ผ ๊ต์ ํด์ผ ํ๋์ง์ ๋ํ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ๋น์ํฐ์ ์ฅ๊ตฐ ๋ฌธ์ ์ด๋ค.
์ด๋ฌํ ์ฐธ์ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฅ๊ตฐ๋ค์ ๋ฐฐ์ ์๋ฅผ ์ฐพ์๋ด๊ฑฐ๋, ๋ฐฐ์ ์๋ผ๋ฉด ์ ์ ์๋ ์ํธ๋ฅผ ํตํด ์ ๋ น์ ๋ณด๋ด๊ฑฐ๋, ์ฌ๋ฌ ์ฅ๊ตฐ๋ค์๊ฒ ํ๊บผ๋ฒ์ ์ ๋ น์ ๋ณด๋ด ๋ช ๋ น์ ๋์กฐํด๋ณด๋ ๋ฑ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
์ด๋ ๋นํธ์ฝ์ธ ๋ธ๋ก์ฒด์ธ์ ๋ ธ๋๋ค์ด ์๋ก๊ฐ์ ์ ๋ณด๋ฅผ ๋์กฐํ๊ฑฐ๋, ์์คํ ์ ์ค๋ฅ๊ฐ ์๋ ํ๋ก๊ทธ๋จ๋ค์ด ์์ด๋ ํ ํ๋ก๊ทธ๋จ๋ค์ด ์ค๋ฅ๋ฅผ ์ฐํํ ์ ์๋ ์ํฉ์ ๊ฐ์ ํ๋ ๋ฐ์ ๋์์ ์ค๋ค.
๋นํธ์ฝ์ธ์ ํธ๋์ ์
UTXO : Unspent Transaction Output
- ์๊ณ = ์ฌ์ฉํ์ง ์์ ํธ๋์ ์ output
- UTXO์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ํ์ธํจ์ผ๋ก์จ ์์ฐ์ ์์ ์ฑ ํ์ธ
Transaction
- B๊ฐ C์๊ฒ ๋นํธ์ฝ์ธ์ ์ ์กํ๋ ค๊ณ ํ๋ค.
1. B๋ ์ฐ์ ์ด์ ์ A์๊ฒ ๋ฐ์๋ ์์ก ๊ธฐ๋ก์ ์์น(UTXO)๋ฅผ ์ฐพ๋๋ค.
2. ์ด Output-b์ A๊ฐ B์ ๊ณต๊ฐํค๋ก ์ ๊ถ๋จ๊ณ , B์ ๊ฐ์ธํค๋ก ํด์ ํ ์ ์๋ค.(์ ์์๋ช )
3. B๋ C์ ์ฃผ์์ ๋ณด์ ์ก๊ธํ ๊ธ์ก์ ๊ธฐ๋กํ๋ค.
4. ๊ทธ๋ฆฌ๊ณ C์ ๊ณต๊ฐํค ํด์๋ก ์ ๊ธํ๋ค.
5. ์ด์ Output-b๋ ๋์ด์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ
- ๋ธ๋ก์ฒด์ธ์์๋ ํธ๋์ญ์ ๋ค๋ chaind์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก, Coinbase๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฑฐ๋ ๋ด์ญ์ ์ถ์ ๊ฐ๋ฅํ๋ค.
- ์ด๋ UTXO๊ฐ ์ฌ์ฉ๋์๋์ง ์ ์ ์์ผ๋ฏ๋ก, ์ด์ค์ง๋ถ์ด ๋ฐฉ์ง๋จ
Transaction ๊ตฌ์กฐ
- ์ ๋ ฅ๋ถ : ์ก์ ์์ UTXO ํฌ์ธํฐ์ ์ ์์๋ช ๋ฑ
Version, Input Count, Previous Output, Output Index, Script Length, Script Sig
- ์ถ๋ ฅ๋ถ : ์์ ์์ ๊ณต๊ฐํค ํด์์ ์ก๊ธ ๊ธ์ก ๋ฑ
Sequence, Output Count, Value, Script Length, Script PubKey, Lock Time
Transaction ์์๋ฃ (Fee)
์ ์ฒด input - ์ ์ฒด output = ํธ๋์ญ์ ์์๋ฃ
- ์ฑ๊ตด์๋ค์ ์ ์ ์ฉ๋ & ๋์ ์์๋ฃ ์ ํธ
Coinbase Transaction
- ์ฑ๊ตด์๊ฐ ์ฑ๊ณตํ ๋ ๋ฐ๋ ๊ธฐ๋ณธ ์์๋ฃ๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๊ฑฐ๋๋ก ๋ธ๋ก์ ํฌํจ๋จ.
- ์ฝ์ธ๋ฒ ์ด์ค ํธ๋์ ์ ํน์ง
1. ์ฑ๊ตด ๊ธฐ๋ณธ ๋ณด์ ์์๋ฃ์ ์ฑ๊ตดํ ๋ธ๋ก์ ํฌํจ๋ ๊ฑฐ๋ ์์๋ฃ๋ฅผ ํฌํจํ์ฌ ์ฑ๊ตด์์๊ฒ ์ ์ก
2. ํธ๋์ญ์ ์์๋ฃ๊ฐ ์์
3. ์ก์ ์์ ์ฃผ์๊ฐ ์์ (์ถ์ ๋ถ๊ฐ๋ฅ)
๋นํธ์ฝ์ธ์ ๋คํธ์ํฌ
(Tx)
- B๋ C์๊ฒ 3BTC๋ฅผ ์ ์กํ๋ ํธ๋์ ์ ์ ์์ฑํ๋ค.
1. B๋ ์์ฑํ ํธ๋์ญ์ Tb๋ฅผ ์ธ๊ทผ ๋ ธ๋๋ค์ ์ ์ก
2. ๋ ธ๋๋ค์ Tb๋ฅผ ๊ฒ์ฆํ๊ณ , ๋ค์ ์ธ๊ทผ ๋ ธ๋์ ์ ํ (Transaction Relay)
3. ์ ํ ๊ณผ์ ์ ํตํด Tb๊ฐ ํ ๋ ธ๋์ ๋์ฐฉ
4. ํ ๋ ธ๋๊ฐ ์์ ์ ๋ธ๋ก์ฒด์ธ ๋ฐ์ดํฐ์์ ํด๋น ํธ๋์ญ์ ์ด ๊ฐ๋ฆฌํค๋ UTXO๋ฅผ ํ์ธ
- 4๋ฒ ๊ณผ์ ์์ ๊ฒ์ฆ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํจ
- ๊ฒ์ฆ ์คํฌ๋ฆฝํธ : OP์ฝ๋๋ก ๊ตฌ์ฑ (Operation code)
Stack์ ํตํด ์คํ
๋ณด์์ ๋ฐ๋ชฉ๋ฌธ์ ์์
๋นํธ์ฝ์ธ OP ์ฝ๋ ์ค OP_DUP์์ OP_CHECKSIG๊น์ง์ ๊ณผ์ ์ ๋นํธ์ฝ์ธ ๊ฑฐ๋ ํ์ธ ์ค์ ์ํ๋๋ ์ผ๋ จ์ ์์ ์ ๋๋ค.
OP_DUP - ์์ ์คํ ํญ๋ชฉ ๋ณต์
OP_DUP opcode๋ ์คํ์ ๋งจ ์ ํญ๋ชฉ์ ๋ณต์ ํ์ฌ ์คํ์ ๋ฐ์ด๋ฃ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ช ํ์ธ ํ๋ก์ธ์ค์์ ์ฌ์ฉ๋ ๊ณต์ฉ ํค ํด์์ ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
OP_HASH160 - ์๋จ ์คํ ํญ๋ชฉ ํด์
OP_HASH160 opcode๋ SHA-256 ์๊ณ ๋ฆฌ์ฆ๊ณผ RIPEMD-160 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์คํ์ ์ต์์ ํญ๋ชฉ์ ํด์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ฐ ํค๋ฅผ ๋ธ๋ก ์ฒด์ธ์ ์ ์ฅํ๊ธฐ์ ๋ ์งง๊ณ ํจ์จ์ ์ธ ํด์๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
OP_EQUALVERIFY - ์์ ๋ ์คํ ํญ๋ชฉ ๋น๊ต ๋ฐ ์ ๊ฑฐ
OP_EQUALVERIF opcode๋ ์คํ์ ์์ ๋ ํญ๋ชฉ์ ๋น๊ตํ๊ณ ๋์ผํ ๊ฒฝ์ฐ ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต์ฉ ํค ํด์๊ฐ ์ด์ ํธ๋์ญ์ ์ ์ถ๋ ฅ ์คํฌ๋ฆฝํธ์ ์ ์ฅ๋ ํด์์ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
OP_CHECKSIG - ๊ณต๊ฐ ํค์ ๋ํ ์๋ช ํ์ธ
OP_CHECKSIGopcode๋ ํธ๋์ญ์ ์ ๋ ฅ ์คํฌ๋ฆฝํธ์ ์ ๊ณต๋ ์๋ช ์ด ์ด์ ์ ํด์๋ ๊ณต์ฉ ํค์ ๋ํด ์ ํจํ์ง ํ์ธํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํธ๋์ญ์ ์ ๋ ฅ์ด ๊ณต์ฉ ํค ํด์์ ์ฐ๊ฒฐ๋ ๊ฐ์ธ ํค์ ์์ ์์ ์ํด ์ธ์ฆ๋๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
5. ํ ๋ ธ๋์ ์ํด ๊ฒ์ฆ๋ Tb๋ ์ด๋ฅผ ์ ํํ๊ณ , ์ด๋ฅผ ๋ฐ์ ๋ง์ด๋ ๋ ธ๋๋ ์ ํจ์ฑ ๊ฒ์ฆ
6. ๊ฒ์ฆ๋๋ฉด ๋ค๋ฅธ Tx๋ค๊ณผ ํฉ์ณ ์ ๋ธ๋ก ์์ฑ
7. ์์ฑ๋ ์ ๋ธ๋ก์ ํ ๋ ธ๋๋ค์ ์ ํ
8. Tb ๊ฑฐ๋ ์๋ฃ
9. ์ดํ ๋ธ๋ก์ด 6๊ฐ ๋ ์ถ๊ฐ๋๋ฉด, ์์ ์น์ธ์ผ๋ก ํ๋จ
- ํ ๋ ธ๋๋ Tx ์์ ์ Tx์ input์ด ๊ฐ๋ฆฌํค๋ output์ด UTXO์ธ์ง ํ์ธํ๊ธฐ ์ํ ๋ณ๋์ DB(UTXO set) ๊ด๋ฆฌ
- ๋ฐ๋ผ์ ํ ๋ ธ๋๋ ๋น ๋ฅด๊ฒ Ta์ output์ ์ฐพ์
- Tb ์น์ธ ํ Ta์ output์ spent ์ํ๊ฐ ๋จ (์ด์ค์ง๋ถ ๋ฐฉ์ง, ๋ด์ฉ์ด ๋ฐ๋๋ ๊ฑด ์๋)
(Mining)
- ๋ง์ด๋ ๋ ธ๋๋ Tx๋ค์ ๋ชจ์ ๋จธํด ๋ฃจํธ ๊ณ์ฐ
๋ธ๋ก์ ์ฒซ Tx๋ Coinbase Tx, Segwit ๋์ ํ ์ ์์๋ช ์ ๋ชจ์ Coinbase Tx์ ๊ธฐ๋ก
- Difficulty Target (Bits) : ์ฑ๊ตด์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ์ ๋ณด
๋ธ๋กํค๋ ํด์๊ฐ์ ์ํ์ (ํค๋ ํด์)์ด ํ๊ฒ๊ฐ๋ณด๋ค ์์์ผ ์ ํจํ ๋ธ๋ก์ผ๋ก ์ธ์
๋ง์ด๋ ๋ ธ๋๋ ๋์ค ๊ฐ์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ํด์๊ฐ ํ๊ฒ๋ณด๋ค ๋ ์์์ง๋ ๋์ค๋ฅผ ์ฐพ์ (์์ ์ฆ๋ช )
- ๋ธ๋ก ์ฑ๊ตด ์, ๋์ค ๊ฐ์ ์ํด ์ปดํจํฐ ํ์๋ฅผ ์๋นํจ์ผ๋ก์จ ๊ฑฐ๋ ์๋ณ์กฐ ๊ณต๊ฒฉ ๋ฐฉ์ง
- ๋ธ๋ก์ ์ ๋ขฐ์ฑ ๋ณด์ฅ
- ์ ์ฒด Network hash์ ๋ฐ๋ผ difficulty ๋น๋ก
- ๋ง์ฝ ๊ฑฐ์ ๋์์ ๋ ์ฑ๊ตด์๊ฐ ์๋ก ๋ค๋ฅธ ์ ํจ ๋ธ๋ก์ ์์ฑํ๋ค๋ฉด?
๋ธ๋ก์ฒด์ธ์ ์ผ์์ ๋ถ๊ธฐ ๋ฐ์.
๊ฐ ์ฑ๊ตด์๋ ์์ ์ด ์์ฑํ ๋ธ๋ก์ ์ธ๊ทผ ๋ ธ๋์ ์ ํ, ํ ๋ ธ๋๋ ๋จผ์ ๋ฐ์ ๋ธ๋ก์ Main chain์ ์ฐ๊ฒฐ
๋ค์ ์์ฑ ๋ธ๋ก์ด Parent๋ก ์ ํํ๋ ๋ธ๋ก์ด ์ ํจํ ๊ฒ์ผ๋ก ์ธ์ .
์ฐ๊ฒฐ๋์ง ๋ชปํ ๋ธ๋ก์ ํ๊ธฐ๋จ -> ํฌํจ๋ ํธ๋์ญ์ ๊ณผ ์ฑ๊ตด ๋ณด์์ ์ทจ์
- ์ทจ์๋ ํธ๋์ญ์ ์ ๋ค์ ๋ธ๋ก ์์ฑ ์ ํฌํจ๋ ์ ์์
- ์ฑ๊ตด์๋ค์ ์์ ํ ๋ณด์์ ์ํด ํ๊ธฐ ๊ฐ๋ฅ์ฑ์ด ์ ์ Longest Chain์ ์ ํ.
- ๋ถ๋ชจ๊ฐ ์๋ ๊ณ ์ ๋ธ๋ก์ ์ ๋ฌ๋ฐ์ ์ ์์
์งง์ ์๊ฐ ์์ ์ฐ๋ฌ์ ์ด์ด์ง ๋ธ๋ก์ด ์์ฑ๋์ ๋, ์์์ ์ฅ์ ๋ณด๊ด ํ ๋ถ๋ชจ๋ธ๋ก์ด ๋์ฐฉํ๋ฉด ์ฒ๋ฆฌ
Hard Fork & Soft Fork
- ๊ฐ๋ฐ์๋ค์ด ์ํํธ์จ์ด ๋ณ๊ฒฝํ ๋ ๋ธ๋ก์ฒด์ธ์ด ๋ถ๊ธฐ๋ ์ ์์
- ์ํํธ ํฌํฌ : ์ sw๊ฐ ๊ธฐ์กด sw์ ํธํ
sw๊ฐ๋ฐ ๊ณํ์ ์ฑ๊ตด์๋ค์ด ๋์ํ๊ณ ์ ๊ทธ๋ ์ด๋, Chain์ด ํ๋๋ก ์ ์ง๋จ
์ ๊ทธ๋ ์ด๋ํ์ง ์์ ์ฑ๊ตด์์ ์ํด ์ผ์์ ๋ถ๊ธฐ ๋ฐ์ ๊ฐ๋ฅ
(์ผ์์ ๋ถ๊ธฐ ๋ธ๋ก์ ํ๊ธฐ๋ ๊ฐ๋ฅ์ฑ์ด ํผ -> ์ ๊ทธ๋ ์ด๋ํ๋๊ฒ ์ ๋ฆฌ)
- ํ๋ ํฌํฌ : ๋ณ๊ฒฝ๋ sw๊ฐ ํธํ๋์ง ์์ ๋
์๋ก์ด sw ์ฑ๊ตด์์ ๊ธฐ์กด sw ์ฑ๊ตด์๊ฐ ๊ฐ์ ๋ธ๋ก์ ์์ฑํ์ฌ, ์๊ตฌ์ ์ธ ๋ถ๊ธฐ๋ฅผ ๋ง๋ฆ
๋ Chain์ ์์ ํ ๋ค๋ฅธ ์๋ก์ด ์ฝ์ธ์ด ๋จ
๋คํธ์ํฌ๊ฐ ๋ถ๋ฆฌ๋๊ณ ๋นํธ์ฝ์ธ ์ ์ฒด ๊ฐ์น ํ๋ฝ ์ํ