Coinbase Tx์ ๊ฐNode๊ฐ ์ค์ค๋ก ์์ฑํ์ฌ ์ฒซTx์ผ๋ก์จ ๋ผ์๋ฃ๋ ๊ฒ์ด๋ผ๋ ์ ์์,์ผ๋ฐUser๋ค์ด Node์ ์ ์ถํ๋ ํต์์ ์ธ Tx๊ณผ๋ ์ด์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ์ด๊ฐ ์๊ณ ,
๋ ํ๊ฐ์ง ํน์ง์ Bitcoin์ ์ฐฝ์ถ(ๅตๅบ)ํ๋ ๊ฑฐ๋์ธ ๋งํผ, ๊ฑฐ๋์์ค Inputs ๋ถ๋ถ์ ์๋ฌด ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก,๊ทธ ๋ด์ฉ์ ์ด๋์ ๋
์์๋ก ์์ฑํ ์ ์๋ค๋ ์ ์ด๋ค. ๋จ, ์ ์์ Tx๊ณผ ๋๊ฐ์ด ํ์์ ๋ง์ถฐ ์ฃผ์ด์ผ ํ๋ค.
Genesis Block์ Coinbase Tx์ ๋ด์ฉ์ Hex๋ก ๋ฐ์ ๋ด์ฉ์, ํฌ๊ฒ 4๋ถ๋ถ์ผ๋ก ๊ตฌ๋ถํ์ฌ, ๋ค์์ ๋ณด์๋ค.
================ Block #0 Coinbase Tx ===============
01000000: Version No
01: Inputs Count
0000000000000000000000000000000000000000000000000000000000000000: Previous Txid
ffffffff: output index
4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73: InputScript
ffffffff: Sequence (End of input)
01:Outputs Count
00f2052a01000000: Satoshis Value
434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac:OutputScript
00000000:Locktime
=================== End ==========================
์ฐฝ์์๋ค์ Previous Txid๋ฅผ 0000. . . 0000์ผ๋ก ํ๊ณ , Output index๋ ffffffff๋ก Setํ์๋ค. ์์ฃผ ์ต๊ทผ์ ์ฑ๊ตด๋ Block์ Coinbase Tx์ Hex๋ก ๋ฐ์ ๋น๊ตํด ๋ณด๋ฉด ์๊ฒ ๋๋๋ฐ, ์ด "์ ํต"์ ๊ทธ๋๋ก ์ง์ผ์ง๊ณ ์๋ ๊ฒ ๊ฐ๋ค. ์ด๊ฐ๋ค์ ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก, ์ด๋ค ๊ฒ์ ๋ฃ์ด๋ ๋ฌด๋ฐฉํ๊ฒ ์ง๋ง,ํ๋์ ๋ถ๋ฌธ๋ฅ ๋ก์จ "์ ํต"์ ์ ์งํ๊ณ ์๋ ๊ฒ์ด ์๋๊ฐ ์ฌ๊ฒจ์ง๋ค.
Input Script๋ ๊ทธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ค. ๋ค๋ง,๋ณด๋ค ์๋ฏธ์๊ฒ ์ด ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ๊ธฐ ์ํ์ฌ, InputScript์ ์ด๋ค Message๋ฅผ ํฌํจ์ํฌ ์๋ ์๋ค. Genesis Block์ Coinbase Tx Inputs๋ถ๋ถ์๋ ์ด๋ค Message๊ฐ ๋ด๊ฒจ ์์์๊น?
์ ๋์ "4d"๋ InputScript์ Byte Count์ด๋ฏ๋ก, InputScript ์ ๋ณธ๋ด์ฉ์,
04ffff001d01044554686520. . . . .722062616e6b73
์ด๋ค. ๋ฌด์จ Message๊ฐ ์์์๊น?
์ฌ๊ธฐ์ ์ ๊น! ์์ผ๋ก, ์ฐ๋ฆฌ๊ฐ "0x54"๋ผ๊ณ ์ฐ๋ฉด, ์ด๊ฒ์ "0x"๋ค์ ๋ฐ๋ฅด๋ ๊ฒ๋ค์ 16์ง์(Hexadecimal)์ด๋ฉฐ, 10์ง์๊ฐ ์๋์ ํ์คํ ํ๊ธฐ ์ํ ๊ฒ์ด๋ค. ์ซ์ 0์ ์๋ฌธ ์๋ฌธ์ x๋ฅผ ์ฌ์ฉํ๋ค. ์์ฃผ ์ ์๋ ค์ง ๊ดํ์ด๋ค.
์ด๋ฌํ ํ์๋ฒ์ ์จ์ ์ค๋ช
์ ๊ณ์ ํ๋ค.
์ Script๋ด์ฉ์์, ์ค๊ฐ ์ฏค์ . . . . .54686520 ๋ถ๋ถ์ ๋ณด์.
0x54๋ ์๋ฌธ ๋๋ฌธ์ "T"์ ASCII Code์ด๊ณ , 0x68,0x52 ๋ ๊ฐ๊ฐ "h"์ "e"์ ASCII Code์ด๋ค.
ASCII Code์ ํ๋,์ด ๋งํฌ ASCII Table๋ฅผ ์ฐธ์กฐํ๋ฉด ๋ณผ ์์๋ค.
์ฆ "The"๋ผ๋ ๋จ์ด์ด๋ค. ์ด๋ฅผ ๊ณ์ํ๋ฉด,
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
๋ผ๋ ๋ฌธ์ฅ์์ ์ ์ ์์ ๊ฒ์ด๋ค. ์ด๋ 2009๋
1์3์ผ์ ์๊ตญ Financial Times์ง์ Tittle์ด์๋ ๊ฒ์ด๋ค.
Genesis Block์ ์ฑ๊ตดํ ๋น์์ ์๋ ๋ฐฐ๊ฒฝ๊ณผ, ์๊ธฐ๋ค์ด ๋ฌด์์ ๋ฐ๊ธฐ๋ฅผ ๋ค๊ณ ์ ํ๋์ง๊ฐ ํ์คํ ๋ค์ด๋๋ค.
Nakamoto Satoshi๋ผ๋ ํ๋ช
์ผ๋ก ์๋ ค์ง ์ด๋ค ์ฐฝ์์ Group์ ์์ง ๊ทธ ์ ์ฒด๊ฐ ๋ฐํ์ง์ง ์๊ณ ์๋ค.
๊ธ๋
์๋ ๊ฐ,์๊ตญ ์ผ์๋ธ๋ฆฌ์ง ๋ํ์์ ์ฐ๊ตฌ์ ์ํ๋ฉด,์ด๊ธฐ์ ์ฑ๊ตด๋ Block Reward์ค ์๋น๋ถ๋ถ์ด,์์ง๊น์ง ํ๋ฒ๋ Spend๋์ง ์์์ฑ๋ก ๊ทธ๋๋ก ๊ทธ ์ฃผ์์์ ์ ์๊ณ ์๋ค๊ณ ํ๋ค. ์ด ์ฑ๊ตด๋์ ์ฝ 70%์ ์ด๋ฅธ๋ค๊ณ ํ๋ค. ์์ ๋ค์ ์ ์ฒด๋ฅผ ๊ณ์ ๊ฐ์ถ๊ธฐ ์ํด์ ์ผ๊น?
ํ๋ช ์ผ๋ก ๋ณด์, ์ฐฝ์์Group์๋ ,์ผ๋ณธ์ธ์ด ํฌํจ๋์ด ์์์์ ๋ถ๋ช ํด ๋ณด์ด๊ณ , 2009๋ ๋น์ Financial Times์ง๊ฐ ์์ง ์๊ตญํ์ฌ์๋ ๊ฒ์ผ๋ก ๋ณด์์, ์ฝ๊ฐ์ ์๊ตญ์ธ๋ค๋ ํฌํจ๋์ง ์์์๊น? ( FT์ง๋ ๊ทธํ 2015๋ ๋ฌด๋ ต, ์ผ๋ณธ์ ํ ํ์ฌ์ ์ธ์ ๋นํ๋ค) ๊ทธ๋ค์ด ์ ์ฒด๋ฅผ ๋ฐํ์ง ์๊ณ ์๋ ๊ฒ์ ํ๋ช ํ ์ฒ์ฌ๋ก ๋ณด์ธ๋ค. ์ ์ฒด๊ฐ ๋ฐํ์ง๋ฉด, ์๋ง๋,์จ๊ฐ ์ฌ๋๋ค๋ก ๋ถํฐ,๊ฐ์ข ๊ตฌ์ค์์ ์๋ฌ๋ฆฌ๊ฒ ๋ ๊ฒ์ด๋๊น. ํน์๋,๊ทธ ์ฆ์ CIA๊ฐ ๊ทธ๋ค์ ๋ฅ์น ๊ฒ์ด๋ผ๊ณ ๋ ๋งํ๋ค. ๋ ๋๋ ์๋ฌธ์๋, ์ธ๊ณ์ธ๋ค์ด ์ง๊ตฌ๋ฌธ๋ช ์ ์ฐธ์(?)์ ๋ณด๋ค ๋ชปํด, Satoshi๋ค์๊ฒ "์๊ฐ(inspiration)" ์ ๋ถ์ด๋ฃ์ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
์ฑ๊ตด์ ์ฑ๊ณตํ๊ธฐ ์ํด์, ์ฑ๊ตด์๊ฐ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ Block Header์ค 4Byte(32bit)๋ฐ์ ์๋๋ Nonce ๋ฐ์ ์๋ค.
Bits์ ์ํด์ ์ฑ๊ตด Diffculty๊ฐ ๊ทนํ ๋์์ง๋ฉด, ์ด Nonce 32bit์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ์๋ํด๋ ์คํจํ ํ์จ์ด ๋ง์ ์ง๊ฒ์ด๋ค. ํนํ ์ต๊ทผ์ Diffculty๋ ์ต์ด๋ณด๋ค 8600์ต๋ฐฐ๋ ๋์์ก๊ธฐ ๋๋ฌธ์ ๋์ฑ ๊ทธ๋ ๋ค.
์ด๋ ์ฑ๊ตด์Node๋,๊ฐ๋ น Tx์ ๋ ์ถ๊ฐํ์ฌ Merkle Root๋ฅผ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค๊ฑฐ๋, ์๋๋ฉด Tx๋ค์ ๊ทธ๋ฅ ๋์ฑ Coinbase์ Input๋ถ๋ถ์ ๋ณํ๋ฅผ ์ค์ผ๋ก์จ ๊ฒฐ๊ณผ์ ์ผ๋ก Merkle Root๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋ ํด์ผ ํ ๊ฒ์ด๋ค.
์ฃผ๋ก ํ์์ ๋ฐฉ๋ฒ์ด ๋์๋๋ ๊ฒ ๊ฐ๋ค. ์์ฃผ ์ต๊ทผ์ ์ฑ๊ตด๋ Block๋ค์ Coinbase Input๋ค์ ๋ณด๋ฉด,๊ฐ๋ Inputs์ค์ Sequence๊ฐ ffffffff๊ฐ ์๋๋ผ 00000000์ผ๋ก ๋์ด ์๋ ๊ฒ์ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
์ฆ, Sequence 4Byte์ ๋ณํ๋ฅผ ์ฃผ์ด ๊ฒฐ๊ณผ์ ์ผ๋ก Merkle Root๋ฅผ ์๊ฒ์ผ๋ก ๋ฐ๊พผ ๊ฒฝ์ฐ์ด๋ค. ๋ค์ ๋งํด์, Nonce 4Byte๋ก๋ ๋ถ์กฑํ๋ฉด, ์ด Sequence 4Byte๋ ๋์ํ์ฌ,๋ํฉ 8Byte๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ ์ฑ๊ตด์ ๋์ ํ๋ ์
์ด๋ค.
๋ง์ผ, ํฅํ ๋์ฑ ๋ Diffculty๊ฐ ์ฌ๋ผ๊ฐ๋ฉด, InputScript๋ถ๋ถ ๊น์ง๋ ์กฐ์ ํ ๋์์ ํฌํจํด์ผ ํ ์ง ๋ชจ๋ฅธ๋ค. ํ์ฌํผ, Diffculty๊ฐ ์๋ฌด๋ฆฌ ๋ ์ฌ๋ผ๊ฐ๋๋ผ๋ ์ด์ ๋์ฒํ ์ฌ์ ๋ ์ผ๋ง๋ ์ง ์์ผ๋ฏ๋ก ์ด์ ์ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค.
์ด์ฏค์์, Private Key,Public Key๊ทธ๋ฆฌ๊ณ Address์ ๋ํด์ ๊ฐ๋ตํ ์ ๋ฆฌํด ๋๊ณ ๋์ด ๊ฐ๊ณ ์ ํ๋ค.
๋๋ฌด Detailํ ๊ฒ ๊ฐ๋ค ์๊ฐ๋๋ฉด ์ด์ ์ ๊ฑด๋ ๋ฐ์ด๋ ์ข๋ค.
Private Key๋ 32Byte์ ์ ์(integer)์ด๋ค. 1 ~ (p-1) ์ฌ์ด์ ์ ์ ์ค์์ Randomํ๊ฒ ํ๋๋ฅผ ๊ณ ๋ฅธ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ p๋ 32Byte๋ฅผ ๊ฑฐ์ ๋ค "ffff. . . .fff..." ๋ก ์ฑ์ธ๋ฏํ ์ ๋๋ก ์์ฃผ ํฐ ์์(Prime number)์ด๋ค. 32Byte๋ ์์ฒญ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ๋๋ค. ๋ง๋ ๋ง์ธ์ง๋ ๋ชจ๋ฅด๋, ์ฐ์ฃผ์ ๋ชจ๋ ์์๋ค์ ์ซ์์ ๊ฐ๊น๋ค๊ณ ๋ ํ๋ค. Bitcoin์ ๋ณด์ ๋ฐ Backup์ ๋ชฉ์ ์ ๊ฒฐ๊ตญ ์ด Private Key๋ฅผ ์ด์ฐ ๋น๋ฐ์ ์ง ํ ๊ฒ์ธ๊ฐ์ ,์ด๋ป๊ฒ ๊ทธ ๋ด์ฉ์ ์์ ํ๊ณณ์ Backupํด๋ ๊ฒ์ธ๊ฐ์ ๋ฌธ์ ์ด๋ค.
์ฐ์ Public Key๋ ์ด๋ค ์ (Point)์ (x,y) ์ขํ์ด๋ค. ๋ณด์กฐ ์ค๋ช
์ ํ๊ฒ ๋ค.
Bitcoin ์ฒด๊ณ์์๋ Secp256k1์ด๋ผ๋ ๊ท๊ฒฉ์ ์ํ ์ํธ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ๋ค. 2์ฐจ์ ํ๋ฉด์ด์ง๋ง, x์ขํ ๋ฐ y์ขํ๊ฐ 0~(p-1)์ ์ ์(integer)๋ก ์ ํ๋,ํ๋ฉด์ ์๊ฐํ์.
์ด 2์ฐจ์ ํ๋ฉด์์ ๋์ ๋์ํ๊ฒ ์กด์ฌํ๋ ๋ชจ๋ ์ ๋ค ์ค์์,
์์ Elliptical Curve ๋ฐฉ์ ์์ด๋ผ๊ณ ํ๋,
y^2= x^3+7 (๋จ, mod p )
(y^2์ y์ ์ ๊ณฑ, x^3์ x์ ์ธ์ ๊ณฑ์ ๋ป์ด๋ค. ๋
ธํ์ฌ์์. . .)
์ ๋ง์กฑํ๋ ์ ๋ค์ด ๋ฌด์ํ ๋ง์ด ์๋ค. ๊ทธ๋ค์ ์ํจ ๋ํ ๊ฑฐ์ p์ ํ์ ํ ์ ๋๋ก ๋ง๋ค.
์จ ์ฐ์ฃผ์ ์์์ ์ ๋งํผ ๋ง์ ์ ๋ค์ด ์์ง๋ง,์ด๋ค ๋ชจ๋์๊ฒ ๊ณ ์ ํ ์ผ๋ จ๋ฒํธ๋ฅผ ๋ถ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ํ๋ฆฝ๋์ด ์๋ค.
Public Key๋ ์ด ์ ๋ค ์ค ์ d๋ฒ์งธ ์ ์ (x,y)์ขํ์ด๋ค. (๊ฐ๋ น, d๊ฐ Private Key์ผ๋.)
๋ฐ๋ผ์ Public key๋ 2x32Byte=64Byte๋ง ํ์ํ์ง๋ง, ์ ๋์
์ด๊ฒ์ด Full Format์ด๋ ๊ฒ์ ํ์ํ๊ธฐ ์ํ์ฌ "04"๋ผ๋ 16์ง์ ๊ณ ์ ๋ด์ฉ, 1Byte๋ฅผ ์ ๋์ ๋ฌ๊ธฐ๋ก ํ์๋ค.
๊ทธ๋์, Full Pubkey๋ 65Byte ๊ธธ์ด๋ค. ๊ทธ๋ฌ๋, ์ด๊ฒ์ ๊ณผ๊ฑฐ์ ์ฐ๋ Format์ด๊ณ , ํ์ฌ๋ ์์ถ๋ ์งง์ ํ์์ ๊ถ์ฅํ๊ณ ์๋ค.
์ฌ์ค์, Curve์์ ์ ์ด๋ฏ๋ก,x์ขํ๋ง ์์๋ "๊ฑฐ์" y๋ฅผ ๊ตฌํ ์ ์๋ค. Curve์ ์์ ํน์ง์, (x,y)๊ฐ ํด(่งฃ)์ด๋ฉด (x,-y)๋ ํด์ด๊ธฐ ๋๋ฌธ์, ๋์ค ์ด๋ ๊ฒ์ธ์ง๋ง ๊ทธ ์ ๋ณด๋ง ๋ ์๋ ค์ฃผ๋ฉด ๋๋ค.
๋จ, ์ฌ๊ธฐ์ -y๋ " y+(-y) = 0 : mod p " ์ ๋ป์ธ๋ฐ,์ค์ y+(-y)=p ๋ผ๋ ๋ป์ด๊ธฐ๋ ํ๋ค. p๋ ์์์ด๋ฏ๋ก ํ์์ด๋ค.
๋ฐ๋ผ์, y๊ฐ ์ง์๋ฉด -y๊ฐ ํ์ ์ฌ์ผํ๊ณ , ํ์๋ฉด ์ง์์ฌ์ผ ํ๋ค.
๊ทธ๋์ Pubkey์ Compressed format๋ ๋ค์ ์ฒ๋ผ ์ ํ๋ค.
x์ขํ๋ง ์ ๋, y๊ฐ ์ง์๋ฉด 16์ง์๋ก "02"๋ฅผ ์ ๋์ ๋๊ณ ,ํ์๋ฉด "03"์ ์ ๋์ ๋๊ธฐ๋ก. . . .
๋ฐ๋ผ์, ํ์ฌ ๊ถ์ฅํ๋ Compressed Format์ผ๋ก๋,Pubkey๋ 33Byte์ ๊ธธ์ด๋ฅผ ๊ฐ๋๋ค.
๊ฐ์ (Point)๋ค์ ์ผ๋ จ๋ฒํธ๊ฐ ๋ถ์ฌ ๋์๋ค๊ณ ํ๋๋ฐ, ์ผ๋ จ๋ฒํธ 1๋ฒ์ธ ์ ์ G(1)์ ์ด๋ผ ํ๋ฉด, Private Key d์ ๋์ํ๋ Publick Key๋ G(d)๋ผ๋ ์ด์ผ๊ธฐ๋ค.
G(1),G(2),G(3),. . . . .,G(d),. . . . . .
G(1)์ ํนํ Base Point๋ผ ๋ถ๋ฅด๋๋ฐ, ๋ณดํต G๋ก ํ์ํ๋๋ฐ, ๊ทธ ์ขํ๊ฐ์ ์ฌ๋ฌ ์๋ฃ๋ค์ ๋์ ์๋ค.
d๋ฅผ ์๊ณ ,๊ทธ๋ก๋ถํฐ ์ผ๋ จ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ, G(1)์ ์์์ ์ผ๋ก ํ์ฌ,G(d)์ ์ ๊ตฌํด๋ด๋ ๊ฒ์ ๋งค์ฐ ์ฌ์ด๋ฐ,
์ญ์ผ๋ก ์ G(d)์์ d๋ฅผ ์์๋ด๊ธฐ๋ ์ฐธ์ผ๋ก ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๊ฒ ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค.
๋ณด์์ ๋ ๊ฐํํ๊ธฐ ์ํ์ฌ Pubkey๋ฅผ hashํ์ฌ 20Byte๋ก ์ค์ธ๊ฒ์ด Pubkey hash์ด๋ค.
์ ํํ ๋งํ๋ฉด,๋๋ฒ์ Hash๊ณผ์ , RIPEMD160(Sha256(Pubkey)),์ ๊ฑฐ์ณ์ ์ป์ ๊ฒ์ด๋ค. Hashํจ์ ํน์ฑ์ ์ญ๋ฐฉํฅ ๊ณ์ฐ์ ๋ถ๊ฐ๋ฅํ๋ค. Output Script์ Bitcoin์ ๋ณด๋ด๋ ๊ณณ์ ์ง์ ํ ๋ ์ด Pubkey hash๋ฅผ ์ฌ์ฉํ๋ค. Wallet sotware๋ค์ ์์ด์๋ ์ด๊ฒ์ด Address์ธ ์
์ด๋ค. Tx์์ฑ์์๋ ์ด๊ฒ์ ์ด๋ค. Software์ ์ฌ์ฉ์์ธ ์ธ๊ฐ๊ณผ์ ์ ๋ณด ์ํต์์๋ง Bitcoin Address๋ก ๋ฐ๊พธ์ด ์ํต์ ํ๊ณ ์๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ Wallet software๋ฑ์ด,์ธ๊ฐ๋ค์ ํธ์ด๋ฅผ ์ํด์, ์ธ๊ฐ๋ค๊ณผ์ ์ ๋ณด๊ตํ์, Pubkey hash๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉํ๋๋ก ๊ณ ์๋ ๋์ฉ๋ฌผ์ด๋ค. ๋ฌธ์์ ์ซ์๋ฅผ ์ฌ์ฉํ๋ ํํ๋ก ๋ณํํ ๊ฒ ๋ฟ์ด๋ค. ์ฝ 34๊ฐ ์ ๋์ ๋ฌธ์/์ซ์์ ๋์ด๋ก ๋์ด์๋ค.
์ด ๋ณํ ๊ท๊ฒฉ์ Base58check ์ด๋ผ ๋ถ๋ฅธ๋ค. ์๋ฌธ์ 52๊ฐ(26x2)์ ์ซ์10๊ฐ ๋ฅผ ํฉํ๋ฉด, ์ด 62๊ฐ์ character๋ค์ด ๋๋๋ฐ,๊ทธ์ค์์ 0,O,l,I ์ด 4๊ฐ๋ ํผ๋/์ฐฉ๊ฐ์ด ์ฐ๋ ค๋๋ฏ๋ก ์ ์ธํ์ฌ,58๊ฐ์ Character๋ง์ ์ฌ์ฉํ๊ธฐ์ ๋ถ์ณ์ง ์ด๋ฆ์ด๋ค.
์ด๋ฅผ WIF(Wallet Import Format)์ด๋ผ๊ณ ๋ ๋งํ๋ค.
๋ฌผ๋ก Bitcoin Address๋ฅผ ์๋ฉด Pubkey hash๋ก ๋ณํ ํ ์์๋ค. Pubkey hash๋ก๋ถํฐ ๋ณํํ Address๋ "1"์๋ก ๋ถํฐ ์์ํ๋ค.
ํํธ, 20Byte์ ๊ธธ์ด์ธ ๊ฒ์ ๊ฐ์ง๋ง Pubkey hash๊ฐ ์๋๊ณ Script hash(ํ์ )๋ก๋ถํฐ ๋ณํํ ๊ฒ์ "3"์๋ก ์์ํ๋ค.
"5"์๋ก ์์ํ๋ฉฐ, 40์ ์ ๋๋ก,์ฝ๊ฐ ๋๊ธด,์ธ๋ป Address์ฒ๋ผ ๋ณด์ด๋ ๊ฒ๋ ์๋๋ฐ, ์ด๊ฒ์
Private key๋ฅผ ์ํ ๋์ฉ๋ฌผ์ด๋ค.
์์ 12์ ์์ ์ค๋ช
ํ OutputScript๋ "Pay to Pubkey"๋ผ๊ณ ํ์ฌ ,๊ฐ๋ตํ P2PK๋ฐฉ์์ด๋ผ ๋ถ๋ฅด๋ Payment๋ฐฉ์์ธ๋ฐ,
์ด์ ๋ ๊ฑฐ์ ์ ์ฐ๊ฒ ๋ ์๋ฐฉ์์ด๋ค.
์์ฆ์ ๊ฐ์ฅ ํํ๊ฒ ๋ง์ด ์ฐ๋ ๋ฐฉ์์ "Pay to Address"๋ฐฉ์์ธ๋ฐ,๊ทธ๋ฐ ํํ๋ณด๋ค๋ "Pay to Pubkey Hash"๋ผ๋ ์ฉ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ,์ค์ฌ์ "P2PKH"๋ฐฉ์์ด๋ผ ํ๋ค. ๊ทธ์ธ์ ๊ฐํน "Pay to Script Hash"(P2SH)๋ผ๋ ๊ฒ์ด ์ฐ์ธ๋ค.
์ด์ ์์๋ Blockchain์ ์๋ ์ค๋ก๋ฅผ ํตํด์ Payment์ ์ฌ๋ฌ ๋ฐฉ์์ ํ์ด๋ณด๊ธฐ๋ก ํ๋ค.
Blockchain.info ์์ ๋ค์ Txid,
a9b2a444eda4d21aa66d026d4f00b4bfd3078c3908d65d9501a26f74bed17cc2
๋ฅผ ๊ฒ์์ด๋ก ํด์ ์ฐ ๋ค์, ์ฃผ์๋ ๋์
?format=json์ ์ถ๊ฐํด์ json format์ผ๋ก ์ด Tx์ ๋ด์ฉ์ ๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
{
"ver":1,
"inputs":[
{
"sequence":4294967295,
"prev_out":{
"spent":true,
"tx_index":264429133,
"type":0,
"addr":"1Fzpm9KD8aTKYrWWiDKgGKobBKYti6wC69",
"value":1000000,
"n":1,
"script":"76a914a48156f9a588fd9d8c5c3f9f61a56cffeaf515bc88ac"
},
"script":"4730440220137248f9c7fca3e2aee70d2a7b99012c1de098061add231dd2f2b802523f3dbb0220516205adc13d67aecff92b3315c9936bbb2154fd5763f61c06f53eca9581ab87012102b1cb94ceb345ad1a195e6d8513a1f2cf5fadd764e23cdaba2187b1d8f48400fc"
}
],
(์ดํ ์๋ต)
"Inputs"๋ด์ "Prev_out"์ ์๊ธ์ ๊ทผ๊ฑฐ์ธ Previous Txid์ ๊ทธ index๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋์ ์,์น์ ํ๊ฒ๋,์์ ๊ทธ Previous Tx์ Output index 1์ ๋ด์ฉ์ ์กฐ์ฌํ์ฌ,
1000000 Satoshi์ Value์, ๊ฑฐ๊ธฐ์ ๊ฑธ๋ ค์๋ Encumbrance(๊ด๋ฌธ),Output Script, ์ ๋ด์ฉ์ ๋ณด์ฌ ์ฃผ๊ณ ์๋ค.
์ฆ,1000000 Satoshi์ ๊ฑธ๋ ค์๋ OutputScript์ ๋ด์ฉ์,
"76a914a48156f9a588fd9d8c5c3f9f61a56cffeaf515bc88ac"
์ด์์๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ,๊ทธ ๋ฐ๋ก ๋ฐ์๋ ์ด์ ๋์ํ์ฌ ์ ์ถ๋๋ inputScript๊ฐ,
"4730440220137248f9c7fca3e2aee70d2a7b99012c1de098061add231dd2f2b802523f3dbb0220516205adc13d67aecff92b3315c9936bbb2154fd5763f61c06f53eca9581ab8701;2102b1cb94ceb345ad1a195e6d8513a1f2cf5fadd764e23cdaba2187b1d8f48400fc"
์๋ฅผ ๋ณด์ฌ ์ฃผ๊ณ ์๋ค.
์ด์ ,Tx์ ๊ฒ์ฆ์ ์ํ์ฌ ์ค๋น๋๋, ๊ฒ์ฆProgram์ ๊ตฌ์ฑํด ๋ณด์. 12์ ์์ ์ค๋ช
ํ๋ฏ์ด,๊ทธ๋ฅ inputScript์, Previous Tx /index ์, OuputScript๋ฅผ ์ด์ด ๋ถ์น๋ฉด ๋๋ค.
์ฐ์ inputScript๋ฅผ Opcode์ data๋ก ๊ตฌ๋ถํด์ ์ข ์๊ธฐ ์ฌ์ด ํํ๋ก ์จ๋ณด์.
์ฒซByte์ธ 0x47์ ๋ค๋ฐ๋ฅด๋ 0x47(71๊ฐ)์ Byte๋ฅผ data๋ก์จ Stack์ ๋ฃ์ผ๋ผ๋ ๋ช
๋ น์ด๋ค. 0x01~0x4b๋ ์ ๋ถ ๋์ข
์ Opcode์ธ๋ฐ,์ด๋ฐ ์ข
๋ฅ์ Opcode๋ ์ด์นญํ์ฌ Constant๋ผ๊ณ ๋ถ๋ฅธ๋ค.(์์ ๋ช
๋ น์ด ๋ช
์นญ์กฐ์ฐจ ์๋ค!)
๋ฐ๋ผ์ ๋ค๋ฐ๋ฅด๋ Byte์ ์๋ฅผ ์ธ์ด๋ณด์, data๋,
< 304402. . . .ab8701 >์์ ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก,๋ฐ๋ก ๊ทธ ๋ค๋ฅผ ์๋ 0x21(์ญ์ง33)์ Opcode๋ก ํ์
ํด์ผ ํ๋ฉฐ,์ด๊ฒ ์ญ์ Constant์ ์ํ๋ Opcode์ด๋ค.
๊ฒฐ๊ตญ,inputScript๋
[47]< 304402. . .ab8701 >[21]< 02b1. . . 00fc >
๊ฐ ๋๋ค. ๊ทธ๋ฐ๋ฐ,์ฐ๋ฆฌ์ ํธ์ด์, Constant๋ฅ์ Opcode๋ ์์ ์๋ตํ๊ธฐ๋ก ํ์. ์ฆ, ๊ทธ๋ฅ
< 304402. . .ab8701 > < 02b1. . .00fc >
๋ก ์ฐ๊ธฐ๋ก ํ๊ณ , ๊ทธ๋์ data๋ฅผ ๋ปํ๋ < . . .. >์ ์์๋ ๊ทธ์ ๋ง๋ ์ ์ ํ Constant๊ฐ ์์์ง๋ง ์๋ตํ์๋ค๋ ์ฌ์ค๋ง ์์ง ์์ผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
< 304402. . .ab8701 >์ Signature์ด๋ค. < sig >๋ก ์ค์ฌ ์ฐ์. ๋ฌด์์ ๋์์ผ๋ก ํ์ฌ Sign์ ํ ๊ฒฐ๊ณผ์ธ๊ฐ ํ๋ ๊ฒ์ 12์ ์์ ๋๋ต ์ค๋ช
ํ๋ฐ ์๋ค. ๋ณดํต 70Byte๊ทผ๋ฐฉ์ ๊ธธ์ด๋ฅผ ๊ฐ๋๋ค.
ํํธ, < 02b1. . .00fc >๋ Pubkey์ด๋ค. 33Byte๊ธธ์ด ์์ ์ ์์๋ค.
๋ฐ๋ผ์, InputScript๋ ๊ฒฐ๊ตญ,
< sig > < pubkey >
๋ก ๊ฐ๋ตํ ํ์ํ ์ ์๋ค.
(์ฐธ๊ณ ์ฌํญ: ์ด์ฒ๋ผ InputScript์๋ ๋ < sig >๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ์,์ฌ๋๋ค์ InputScript๋ผ๊ณ ๋งํ๋ ๋์ "ScriptSig"๋ผ๋ ์ฉ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.)
ํํธ,์ด InputScript์ ๋์ํ๋ OutputScrypt๋ฅผ ๋ณด์.
0x76์ OP_DUP๋ผ๋ ๋ช
๋ น์ด(Opcode), 0xa9์ OP_HASH160 ์ด๋ผ๋ ๋ช
๋ น์ด์ด๋ฉฐ,0x14๋ ๋ค์ Constant๋ฅ์ Opcode์ด๋ฏ๋ก
ํธ์์ ์ญ์ ์๋ตํ๊ธฐ๋ก ํ๋ค. ๊ฒฐ๊ตญ์, ๋ค์ ์ฒ๋ผ ์ธ ์ ์๋ค.
OP_DUP OP_HASH160 < a481. . . .15bc >OP_EQUALVERIFY OP_CHECKSIG
(ํ์์ ์ดPost๋, Script์์ ์ฌ์ฉ๋๋ Opcode๋ค์ ์ธ์ธํ ์ค๋ช
ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง ์์๋ค. ๋ค๋ง, "๋ง๋ณด๊ธฐ"์ ๋๋ฅผ ์๋ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋,๋
์๋ค์ ๊ทธ์ "์! ๋๋ต ์ดํด๋ ๋๋ค!"๋ ์ ๋์ ๊ฐ์ด ์ค๋ฉด ๋๊ฒ ๋ค. )
ํํธ, data < a481. . . .15bc >์ ๋ด์ฉ์ Pubkey hash ์ด๋ฏ๋ก < pubkey hash >๋ก ์ฐ๊ธฐ๋ก ํ์. ๊ทธ ์์ constant๋ก ์ ์ ์๋ฏ์ด 20Byte์ ๊ธธ์ด์ด๋ค.
(์ฐธ๊ณ ์ฌํญ: ์ด์ฒ๋ผ, OutputScript์๋ ๋ณดํต, Pubkey ๋๋ Pubkey hash๋ฑ์ด ๋ ํฌํจ๋๋ฏ๋ก, OutputScript๋ผ๋ ์ฉ์ด ๋์ "ScriptPubkey"๋ผ๋ ์ฉ์ด๋ฅผ ์ฃผ๋ก ์ด๋ค.)
์,์ด์ ๋์ ์ด์ด ๋ถ์ฒ์, ๊ฒ์ฆ์ ์ํ Script Language Program์ ๋ชจ๋ ์จ๋ณด๋ฉด,
< sig > < pubkey > OP_DUP OP_HASH160 < Pubkey hash > OP_EQUALVERIFY OP_CHECKSIG
๊ฐ ๋๋ค.
์คํ์ ํด๋ณด์. ๋จผ์ < sig >๊ฐ Stack์ push๋๊ณ ,์ด์ด์ < pubkey >๊ฐ push๋๋ค.
Stack์ top์๋ < pubkey >๊ฐ ์๊ณ ,๊ทธ ์๋์ < sig >๊ฐ ์๋ค. ์ด๊ฒ์,
< pubkey > / < sig >
๋ก ๋ํ๋ด์.
๋ค์. OP_DUP๋ Opcode๋ Stack top์ ๋ด์ฉ๊ณผ ๋์ผํ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด,Stack์ pushํ๋ค. ๋ฐ๋ผ์ Stack์,
< pubkey>/< pubkey >/< sig >
๊ฐ ๋ ๊ฒ์ด๋ค. ์ฆ,Stack์ ๋งจ์์ < pubkey >๊ฐ ์๊ณ ๊ทธ ๋ฐ์ < pubkey >, < sig >๊ฐ ์ฐจ๋ก๋ก ์์ฌ ์๋ ๊ฒ์ด๋ค.
๋ค์. OP_HASH160์ Stack top์ ๋ฝ์(pop)๋ธํ,๊ทธ๊ฒ์ Hash160์ด๋ผ ๋ถ๋ฆฌ์ฐ๋ Hash์ฒ๋ฆฌ๋ฅผ ํ๊ณ , ๊ทธ๊ฒฐ๊ณผ๋ฅผ Stack์ pushํ๋ค. ๋ฐ๋ผ์,์ด์ Stack์,
< Pubkey hash > / < Pubkey >/< Sig >
๊ฐ ๋์์ ๊ฒ์ด๋ค. Hash160์ ๋ค๋ฆ์๋ ,14์์ ์ธ๊ธํ , RIPEMD160(Sha256( ) ) ๊ทธ๊ฒ์ด๋ค.
๋ค์. < pubkey hash >๊ฐ Push๋ ๊ฒ์ด๋ค. < pubkey hash > ๋ฐ๋ก ์ง์ ์, ์ ์ ํ Constant๊ฐ ์์์ง๋ง ์๋ตํ๋ ์ฌ์ค์ ์์ง๋ง๋ผ. ๋ฐ๋ผ์,Stack์ ์ํ๋ ์ด์ ,
< pubkey hash > / < pubkey hash >/ < pubkey >/ < sig >
๊ฐ ๋์์ ๊ฒ์ด๋ค.
๋ค์. OP_EQUALVERIFY๋,
Stack์ top์์ ๋ถํฐ 2๊ฐ๋ฅผ ์ฐจ๋ก๋ก ๋ฝ์(pop),์ด ๋์ด ๊ฐ์์ง ์๋์ง๋ฅผ ๊ฒ์ฌํ๊ณ ๋์,
๋ง์ผ ๋ค๋ฅผ ๊ฒฝ์ฐ์ ์ด Tx์ "๋ถํฉ๊ฒฉ"์ผ๋ก ์ง์ ํ๊ณ ,Program์ ์ข
๋ฃ๋๋ค.
๊ฐ์ ๊ฒฝ์ฐ์ ๋ค์ Opcode๋ก ๊ณ์ ์งํ๋๋ค. ๊ฒฐ๊ตญ,์ด ๊ณผ์ ์ ์ด Tx์ ScriptSig์ ํฌํจ๋ < Pubkey >๊ฐ ScriptPubkey์์ ์ ์๋ < Pubkey hash >์ ํฉ์นํ๋ ๊ฒ์ธ๊ฐ๋ฅผ ๋์กฐํ๋ ๊ณผ์ ์ด๋ค. Pubkey์์ Pubkey hash๋ฅผ ์ป๋ ๊ณผ์ ์ ์ผ๋ฐฉํฅ์ฑ์ด๋ผ๋ ๊ฒ์ ์ ์ํ๋ผ. ์ฆ,Pubkey Hash๋ก๋ถํฐ ์ญ์ผ๋ก Pubkey๋ฅผ ์์๋ผ ์๋ ์๋ค. ์. ๊ทธ๋ฌ๋,์ด๊ฒ๋ง์ผ๋ก๋ ๊ฒ์ฆ์ด ์๋ฒฝํ์ง ์๋ค. ์๋ํ๋ฉด, Pubkey๊ฐ ํ๋ฒ์ด๋ผ๋ Blcokchain์์์ ๋
ธ์ถ๋๋ฉด, ๋ค๋ฅธ ์ฌ๋๋ค๋ ๊ทธ ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ฏ๋ก,์ด ๊ฒ์ฌ๋ง์ผ๋ก๋ ๋ถ์ถฉ๋ถํ๋ค. ์ด Tx์ ์์ฑํ ์ฌ๋์ด ๊ณผ์ฐ ์ด Pubkey์ ๋์ํ๋ Private Key๋ก < Sig >๋ฅผ ์์ฑํ ์ ์์๋๊ฐ๋ฅผ ๋ฐ๋์ ๊ฒ์ฌํด์ผ ํ๋ค.
์ด์ ,Stack์ ์ํ๋,
< pubkey >/< sig >
์ผ ๊ฒ์ด๋ค.
๋ค์. OP_CHECKSIG๋ Stack์์ < pubkey >์ < sig >๋ฅผ ๋ฝ์, < pubkey >๋ก์จ < sig >์ ํฉ์น์ฌ๋ถ๋ฅผ Checkํ๋ค. ์ค์ ์ OP_CHECKSIG์ ์์
๋ด์ฉ์ ์ข ๋ณต์กํ๋,์์ปจ๋ฐ ์ด < sig >๊ฐ < pubkey >์ ๋์ํ๋ Private Key๋ก์จ ๋ง๋ Signature๊ฐ ๋ง๋์ง๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ด๋ค. ๋ณด๋ค ์ ํํ ๊ฒ์ ์๊ณ ์ ์ํ๋ ์์ค ๋๋ ๋
์๋ค์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๋ฉด ๋ ๊ฒ์ด๋ค.
OP_Checksig
์ด๋ฌํ ๋ชจ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ๊ทธ Tx์ ๊ฒ์ฆ์ด Pass๋ ๊ฒ์ผ๋ก ์ธ์ ๋์ด,Block์ฑ๊ตด์ ํฌํจ๋๋ Tx์ ์ผ์์ด ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ์ง ๋ชปํ ๊ฒฝ์ฐ ๊ทธ Tx์ ๊ฑฐ๋ถ(reject)๋์ด ๋ฒ๋ ค์ง๋ค.
์ฐ๋ฆฌ๊ฐ ๋ค๋ฃฌ ์ค๋ก์์ < Pubkey hash >๋
a48156f9a588fd9d8c5c3f9f61a56cffeaf515bc (20Byte)
์ด์๋๋ฐ, Blockchain.info๊ฐ Script์์ ์ด Pubkey hash๋ฅผ ๋ณด๊ณ ,์ด๊ฒ์ 1Fzpm9KD8aTKYrWWiDKgGKobBKYti6wC69 ๋ผ๋ Address๋ก ๋ณํํ์ฌ Web page๋ฑ์ ํ์ํ๊ณ ์๋ ๊ฒ์ด๋ค. ์์์ Json format์ผ๋ก ๋ฐ์ ๋ณด์๋ ๋ด์ฉ์ ๋ค์ ๋ณด์ ํ์ธ ๋ฐ๋๋ค.
๋จผ์ ์ค๋ก๋ฅผ ๋ณด์. Blockchain.info๋ฅผ ์ด์ด์ ๋ค์ Txid๋ฅผ ๊ฒ์ํด ๋ณด์.
40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8
์ด Tx์ page์ ๋ณด๋ฉด, 0.0099BTC๋ฅผ Bitcoin Address
3P14159f73E4gFr7JterCCQh9QjiTjiZrG
๋ก ๋ณด๋ธ ๊ฒ์ผ๋ก ๋์ด ์๋ค.
์๋ซ์ชฝ์ "Output ์คํฌ๋ฆฝํธ"๋์ ๋ณด๋ฉด,์ด 0.0099BTC์, ๋ค์ ๊ฐ์ Script๋ฅผ ๊ฑธ์ด ๋์์์ ์ ์ ์๋ค.
OP_HASH160 e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a OP_EQUAL
์ด๊ฒ์ ๋ค์ ์ฒ๋ผ ์ธ ์ ์๋๋ฐ,
OP_HASH160 < e9c3dd. . . . 6c160a > OP_EQUAL
์ด๊ฒ์ ํ์คํ, ์์์ ๋ค๋ฃฌ P2PKH์๋ ์ฝ๊ฐ ๋ค๋ฅธ Opcode๋ค์ ์ฐ๊ณ ์๋ค.
์ ์ฌํ ์ ์, data์ธ < e9c3dd. . . . 6c160a >๊ฐ 20Byte์ธ ์ ์ธ๋ฐ,Byte๊ฐฏ์๋ก ํ๋จํด ๋ณด๋ฉด, ๋ง์น < Pubkey Hash > ์ธ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก๋, ์ด 20Byte์ data๋ ์ด๋ค Pubkey๋ฅผ Hashํ ๊ฒ์ ์๋๊ณ , ์ด๋ค "Script"์ ๋ด์ฉ์ Hashํ ๊ฒ์ด๋ค.
"Script"๊ฐ ์ด๋ค ๋ด์ฉ์ ์ด๋ค ๊ธธ์ด๋ ๊ฐ์, RipEMD160(Sha256())์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๋ 20Byte๊ฐ ๋์ค๋ฏ๋ก. . .
์ง๊ธ์ ์ด "Script"๊ฐ ๋ฌด์จ ๋ง์ธ์ง, ์๋ง ์ ์ดํด๊ฐ ์๋ ์ง ๋ชจ๋ฅด๋,์ผ๋จ ๊ทธ๋ฅ ๋์ด๊ฐ์.
Blockchain.info ์ Server๋ ๊ทธ๋ฌํ ์ฌ์ค์ ์๊ณ ์๊ธฐ ๋๋ฌธ์,20Byte์ data < e9c3dd. . . . 6c160a >๋ฅผ Address๋ก Encode๋ฅผ ํ ๋, "์ด Address๋ Pubkey hash๊ฐ ์๋๋ผ,Script hash์ ๋ด์ฉ์ Encodeํ ๊ฒ์ด๋ค" ๋ผ๋ ์ฌ์ค์ ์๋ฆฌ๊ธฐ ์ํด์, Address์ ์ฒซ๊ธ์(Address์ ์ข
๋ฅ๋ฅผ ํ์)๋ฅผ 3์ผ๋ก ํ ๊ฒ์ด๋ค. (Pubkey hash๋ก ๋ถํฐ Encodeํ Address๋ 1์ ์ฒซ๋ฌธ์๋ก ํ๋ค.)
์ฐ๋ฆฌ์ ์ค์์์,Address๋
3P14159f73E4gFr7JterCCQh9QjiTjiZrG ์ด์๋ค. (์์ json format์ inputs ๋ด์ฉ์ ๋ณด๋ผ)
ํํธ, ์ด 0.0099BTC์ Accessํ์ฌ ์ด๋ฅผ ์๋นํ Txid๋,
7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45
์ด๋ค. ์ด Tx์ page๋ฅผ ์ด์ด์,๊ทธ๊ฒ์ "Input ์คํฌ๋ฆฝํธ"๋์ ๋ณด๋ฉด,
OP_FALSE
3045022100ad0851c69dd756
b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001
๋ผ๊ณ ๋์ค๋๋ฐ,์ด๊ฒ์ Blockchain.info๊ฐ ์ฝ๊ฐ ์๋ชป ํ์
ํ ๊ฒ์ด๊ณ ,์ ๋๋ก ํ์
ํ๋ฉด ๋ค์ ์ฒ๋ผ ๋์ด์ผ ํ๋ค.
(์ด Tx์ Hex๋ก ๋ฐ์์ ๋ถ์ํด ๋ณด๋ฉด,์ ์ ์๋ค)
OP_FALSE < 3045. . . .b79001 > < 514104. . . .df51ae >
์ฌ๊ธฐ์, < 3045. . . .b79001 >๋ถ๋ถ์ < sig >๋ก, < 514104. . . df51ae >๋ < script > ํ์ํ๋ฉด,
OP_FALSE < sig > < script >๊ฐ ๋๋ค. ์ด์ , ๊ฒ์ฆ Program์ ๋ง๋ค์ด ๋ณด๋ฉด,
OP_FALSE < sig > < script > OP_HASH160 < e9c3dd. . . . 6c160a > OP_EQUAL
๊ฐ ๋๋๋ฐ, ์ด๋ป๊ฒ ํ์ฌ ๊ด๋ฌธ์ ํต๊ณผํ ์ ์์๋์ง๋ฅผ ๋ณด์.
์ฐ์ ,OP_FALSE ๋ Stack์ 0x00์ Pushํ๋ Opcode์ด๋ค.
๊ทธ์ดํ ์ฐจ๋ก๋ก < sig >์ < script >๊ฐ Push๋๋ค. ์ฆ, Stack์ ์ํ๋ < script > ๋ฅผ top์ผ๋ก,๋ค์ ๊ฐ์ ์ํ์ผ ๊ฒ์ด๋ค.
< script > / < sig > / 0x00
๋ค์. OP_HASH160์ Stack์ top์ ๋ด์ฉ์ ๋ณต์ฌํํ, ๊ทธ๊ฒ์ HASH160์ด๋ผ๋ Hash์ฒ๋ฆฌ๋ฅผ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Stack์ Pushํ๋ค. ๋ฐ๋ผ์, OP_HASH160์ ์ํํ ํ์ Stack์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
< script hash > / < script >/ < sig >/ 0x00
๋ค์. < e9c3dd. . . . 6c160a >๋ฅผ ๋ง๋๊ฒ ๋๋๋ฐ, ๊ทธ์์ Constant๋ฅ์ Opcode๋ฅผ ์ฐ๋ฆฌ๊ฐ ์๋ตํ์๋ค๋ ๊ฒ์ ์์ง ๋ง์.
๋ฐ๋ผ์, < e9c3dd. . . . 6c160a >๊ฐ Stack์ Push๋๋ค. ๋ฐ๋ผ์,์ด์ Stack์, ๋ค์๊ณผ ๊ฐ๋ค.
< e9c3dd. . . . 6c160a > / < script hash > / < script >/ < sig >/ 0x00
๋ค์. OP_EQUAL์ Stack์ top๋ถํฐ, 2๊ฐ๋ฅผ ๋ฝ์๋ด์ด(pop),๊ทธ 2๊ฐ๊ฐ ์๋ก ๊ฐ์์ง๋ฅผ ๋์กฐํ๋ค.
๋ฌผ๋ก ๋ค๋ฅด๋ฉด ๊ฒ์ฆ์ ์คํจํ ๊ฒ์ผ๋ก ๋๋ค.
์ฌ๊ธฐ์,< script hash >๊ฐ ์ด๋ค ๊ฐ์ด์์์ง๋ฅผ ์ค์ ๋ก ๊ณ์ฐํด ๋ณด๊ธฐ๋ก ํ์.
์์ ๋งํ OP_HASH160์ด๋ Sha256์ผ๋ก 1์ฐจ Hash๋ฅผ ํํ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ RIPEMD160 ์ด๋ผ๋ Hash๋ก ๋ํ๋ฒ Hashํ๋ ๊ฒ์ ๋งํ๋ค. ์ฆ,
< script hash > = RIPEMD160(Sha256( < script >) )์ธ ๊ฒ์ด๋ค.
๋ค์ ๋งํฌ๋ hex๋ก inputํ์ฌ,์ฌ๋ฌ๊ฐ์ง Hashํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ Site์ด๋ค.
Various Hash-Online
์ด Web site๋ฅผ ์ด์ฉํด์, < 514104. . . df51ae >๋ฅผ Sha256์ผ๋ก 1์ฐจ Hashํ๋ฉด,
a1b2676332a6fcdd21363dbd456e20aed83d703404696036f42913353b000838
๋ฅผ ์ป์ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋ค์ RIPEMD160์ผ๋ก ์ฒ๋ฆฌํ๋ฉด,
e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a
๋ฅผ ์ป๋๋ค. ํํธ, ์๋ Output Script์ ์๋ data์ ๋น๊ตํด ๋ณด๋ฉด,๊ณผ์ฐ ๋๊ฐ๋ค!
์ฆ, OP_EQUAL์ ๋ฌด๋ํ Passํ ๊ฒ์ด๋ค!
๊ทธ๋ฐ๋ฐ, ์ค์ํ ์ฌ์ค์, ์ด ๋ Stack์๋ ์์ง๋,
< script >/ < sig >/0x00
์ด ๋จ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ,์ฆ Program์ด ์ข
๋ฃํ ๊ทธ ์์ ์ธ๋ฐ ์์ง๋ Stack์ ๋ฌด์ธ๊ฐ๊ฐ ๋จ์ ์๋ค๋ฉด, Stack์ top์ ๋ฝ์๋ด์ด(pop),๊ทธ๊ฒ์ data๊ฐ ์๋๋ผ ,์๊ธฐ๊ฐ ์ํํด์ผ ํ Script๋ก ๋ณด๊ณ , ๊ฒ์ฆ์ ๊ณ์ํ๋ค.
์ฌ์ค์ ์ง๊ธ๋ถํฐ, ์ ๋ง๋ก ์ค์ํ ์ง์ง ๊ฒ์ฆ์ด ์์๋ ๊ฒ์ด๋ค.
"์ํ! "ํ๊ณ ๊ฐ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋ค.
< script >์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์์๋ค.
5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424b0d79122a653ad0c7ec9896bdf51ae
ํํธ, Stack์ ์ํ๋,
< sig > / 0x00
์ด๋ค.
Script๋ฅผ Opcode์ data๋ค๋ก ๊ตฌ๋ถํด ๋ณด๋ฉด,๋ค์ ์ฒ๋ผ ๋๋ค.
OP_1 < 042f. . . .6bdf> OP_1 OP_CHECKMULTISIG
OP_1 ์ด๋ Opcode๋ Stack์ 0x01์ Pushํ๋ ๋ช
๋ น์ด๋ค.
OP_CHECKMULTISIG ๋ฐ๋ก ์ ๊น์ง๋ฅผ ์ํํ๋ฉด Stack์ ๋ค์ ์ฒ๋ผ ๋๋ค.
0x01 / <042f. . . .6bdf> / 0x01 / < sig > / 0x00
์ฌ๊ธฐ์, < 042f. . . .6bdf>๋ 65Byte๊ธธ์ด๋ก์จ, ์ค์ Full Pubkey์ด๋ค(0x04๋ก ์์ํ๊ณ ์๋ค). ์ด Tx์ 2013๋
๋ฌด๋ ต์ ๊ฑฐ๋์์ผ๋ฉฐ, ์์ง Full Pubkey๊ฐ ์ฌ์ฉ๋๊ณ ์์ ๋์๋ค. ์์ฆ์ ์ด๋ผ๋ฉด,33Byte์ ์งง์ ๊ธธ์ด์ Pubkey๋ฅผ ์ฌ์ฉํ์ ๊ฒ์ด๋ค.
์ด ๊ฑฐ๋๋ Multisig๋ฅผ ์ด์ฉํ ๊ฑฐ๋์ง๋ง ์ค๋ก๋ก ๋ค๊ธฐ์๋ ์ข ์ฑ๊ฑฐ์ด ๊ฑฐ๋( 1 of 1 )๊ฐ ๋๊ณ ๋ง์๋ค.
๋ณด๋ค ์ข์ ์ค๋ก์๋ค๋ฉด, Stack์ ๋ด์ฉ์,๊ฐ๋ น, ๋ค์๊ณผ ๊ฐ์์ ๊ฒ์ด๋ค. ๊ทธ๋์,์์ ์ด๊ฒ์ ์๋ก์จ ๋ฐ๊ฟ์ ์ค๋ช
์ ๊ณ์ํ๊ธฐ๋ก ํ๊ฒ ๋ค.
0x03 / < pubkey1 > / < pubkey2 >/< pubkey3 >/ 0x02 / < sig1 > / < sig2 > / 0x00
Stack์ด ์ด์ ๊ฐ์๋, OP_CHECKMULTISIG ๋ผ๋ ๋ช
๋ น์,์ด๊ฒ์ "2 of 3"์ Multisig๋ก ํ๋จํ์ฌ,
( 3์ฌ๋์ค ์์์ 2๋ช
์ Signature๊ฐ ์์ผ๋ฉด,๊ด๋ฌธ์ Passํ๋ ๊ฒ์ด "2 of 3"๋ฐฉ์์ด๋ค.)
Pubkey 3๊ฐ์ < sig >2๊ฐ๋ฅผ ์ ๋ถ popํ ํ์,
3๊ฐ์ Pubkey์ค < sig1 >๊ณผ ํฉ์นํ๋ ๊ฒ์ด ์๋์ง ์กฐ์ฌํ๋ค. ์์ผ๋ฉด ๋ถํฉ๊ฒฉ์ด๊ณ , ํฉ์นํ๋ Pubkey๊ฐ ์์ผ๋ฉด, ๊ทธ Pubkey๋
์ ๊ฑฐํ๊ณ ๋์,์ด๋ฒ์๋ < sig2 >์ ๋ํด์ ์กฐ์ฌํ๋ค. ์ฌ๊ธฐ์๋ ๋จ์ Pubkey์ค < sig2 >์ ํฉ์นํ๋ ๊ฒ์ด ์์ด์ผ ํ๋ค.
์ด์์ผ๋ก P2SH๋ฐฉ์์ ์ค๋ช
ํ์๋๋ฐ,์ฃผ๋ ์ฉ๋๋ "N of M"๋ฐฉ์์ Multisig ์ด์ง๋ง, ์ด "script"๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋๋์ ๋ฐ๋ผ ๋ค์ํ๊ณ ๋ณต์กํ ๊ด๋ฌธ(Encumbrance)๋ฅผ ๊ฑธ์ด์ค ์๊ฐ ์์ ๋ฟ๋ง์๋๋ผ,์ด๋ ๊ฒ ํ์ฌ, 3์ผ๋ก ์์๋๋ Address๊ฐ ๋ถ์ฌ๋๋ฏ๋ก,signer ๋น์ฌ์๋ค ๋ฟ๋ง์๋๋ผ ์ 3์๊ฐ ์๊ธ์ ๊ทธ Address๋ก ๋ณด๋ด๋ ๊ณผ์ ์ด ๊ฐ๋จํด ์ง๋ค๋ ์ด์ ์ด ์๋ค.
์ด ์ด์ ์ ๋ค์ ์์ ์์ ๋ช
ํํด ์ง ๊ฒ์ด๋ค.
Blockchain.info์์ ๋ค์ Txid๋ฅผ ์ด์ด๋ณด๋ผ.
09dd94f2c85262173da87a745a459007bb1eed6eeb6bfa238a0cd91a16cf7790
Outputs์ 4๊ณณ์ธ๋ฐ, 3๋ฒ์งธ(index 2) ์ถ๋ ฅ์๋ "์ถ๋ ฅ์ฃผ์๋ฅผ ๋์ฝ๋ฉ ํ ์ ์์๋๋ค"๋ผ๊ณ ๋์จ๋ค.
์๋์์ "์ถ๋ ฅ ์คํฌ๋ฆฝํธ"๋ฅผ ๋ณด๋ฉด,(์ฌ๊ธฐ๋ ์ฝ๊ฐ์ Miss๊ฐ ์๋ค),์ ๋๋ก ํด์ ํ๋ค๋ฉด ๋ค์ ์ฒ๋ผ ๋์ด์ผ ํ๋ ๊ฒ์ด์๋ค.
OP_1 < 0324. . . .3016 > < 0230. . . . 685a > OP_2 OP_CHECKMULTISIG
์ฌ๊ธฐ์ <0324. . . .3016>๊ณผ <0230. . . .685a>๋ ๊ฐ๊ฐ 33 Byte๊ธธ์ด์ data์ธ๋ฐ, ์ด๊ฒ๋ค์ ์งง๊ฒ ์ค์ธ Pubkey ์ธ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, 0.0001086BTC์ ๊ฑธ๋ฆฐ ๊ด๋ฌธ์,
OP_1 < pubkey1 > < pubkey2 > OP_2 OP_CHECKMULTISIG
์ด์๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ P2PK ๋,P2PKH,๋๋ P2SH ๊ทธ ์ด๋ ๋ฐฉ์๋ ์๋๊ธฐ์, ์ด 0.0001086BTC๋ฅผ ์ด๋๋ก ๋ณด๋ธ ๊ฒ์ธ์ง Blockchain.info๋ก์จ๋ ํํํ ๊ธธ์ด ์๋ ๊ฒ์ด๋ค.
P2SH๋ฐฉ์์ด ๋์ค๊ธฐ์ ์๋ Multisig๋ฐฉ์์ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์๋ค.
์ด ์ค๋ก๋ "1 of 2"์ Multisig๋ฐฉ์์ด๋ฏ๋ก, ์ด ๊ธ์ก์ Spendํ๋ ค๋ฉด, InputScript๋ฅผ
OP_FALSE < sig >
์ ๊ฐ์ด ํ๋ฉด ๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ,์ด < sig >๋ Pubkey1๋๋ Pubkey2์ ๋์ํ๋ Private Key๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ Signature๋ฉด ๋๋ค.
๊ฒ์ฆ์ ์ํ Program์,
OP_FALSE < sig > OP_1 < pubkey 2> < pubkey1 > OP_2 OP_CHECKMULTISIG
๊ฐ ๋์ด, OP_2๊น์ง ์ํ์ ํ๊ณ ๋ํ์ Stack์ํ๋ ,
0x02 / < pubkey1 > / < pubkey2 > / 0x01 / < sig > /0x00
๊ฐ ๋๊ณ ,
OP_CHECKMULTISIG ์ ์ํ ๋ด์ฉ์ ์ด๋ฏธ ์์ ์์ ์์ ์ค๋ช
ํ๋ฐ ์๋ค.
์ด ๊ฒ์ด ๊ณผ๊ฑฐ์ ํํด์๋ Multisig๋ฐฉ์์ด๋ค.
์์ฆ์์ ์ด๋ฅผ P2SH๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ, ๊ทธ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ๋ น, 2์ฌ๋์ด Online Shop์ ์ด์ํ๋๋ฐ, ์๋์ผ๋ก ๋ถํฐ ์
๊ธ๋ ๊ธ์ก์ ์ง์ถ ํ ๋๋,2์ฌ๋์ค ์์์ ํ๋ช
์ < sig >๋ง์ผ๋ก๋ ์ถ๊ธ์ด ๊ฐ๋ฅํ๊ธฐ๋ฅผ ์ํ๋ค๊ณ ํ ๋,(๋๋ ๋์ฌ๋ ๋ชจ๋์ sig๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฐ ๋ฑ๋ฑ ),
์๋๋ค์๊ฒ, ์์ ๊ฐ์ด ํน๋ณํ ๊ด๋ฌธ(OutputScript)์ ๊ฑธ์ด์ ๊ธ์ก์ ์ง๋ถํด ๋ฌ๋ผ๊ณ ์์ฒญํ๋ ๊ฒ์ ๋๋จํ ๊ฑฐ๋ถ์ค๋ฌ์ด ์ด์ผ๊ธฐ ์ด๋ค. ๋ฟ๋ง์๋๋ผ,์๋๋ค์ด ์ด์ฉํ๋๋จ์ํ Wallet๋ค์ ๊ทธ๋ฌํ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์ง๋ ์๋ค. ๊ฒ๋ค๊ฐ ์
๊ธ๋ ์ด ๊ธ์ก์ Blockchain.info์์ ํ์ธ์ฝ์ ํ ๋๋ ๋๋จํ ๋ถํธํ๋ค. ๋๋์ฒด ๊ฒ์ํ Address์กฐ์ฐจ ์์ผ๋. . . .
๊ทธ๋์,์์ฆ์์ ๋๋ถ๋ถ์ Multisig๊ธฐ๋ฅ์ P2SH๋ก์จ ์ฒ๋ฆฌํ๋ค. ์ด ๋ฐฉ์์ผ๋ก๋ 3์ผ๋ก ์์๋๋ Address๊ฐ ๋ถ์ฌ๋๊ธฐ ๋๋ฌธ์, ์ 3์์ธ ์๋์๊ฒ ๊ทธ Address๋ง ์๋ ค์ฃผ๋ฉด,์๋๋ค๋ ๊ฐ๋จํ ๊ทธ Address๋ก Send๋ฅผ ํ ์ ์๋ค๋ ํฐ ์ฅ์ ์ ๊ฐ๋๋ค. ์๋์
Wallet Software๋, ์ ์์ ์ธ Address์ด์์ ๋์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก, Address๋ก ๋ถํฐ Pubkey hash(์ค์ ๋ก๋ Script hash์ง๋ง)๋ฅผ ๊ณ์ฐํ ๋ค์,OutputScript๋ฅผ ๋ง๋ ๋ค. ์ด๋,Adress๊ฐ ์ซ์ 3 ์ผ๋ก ์์ํ๋ค๋ ์ฌ์ค๋ก๋ถํฐ, ์ด hash๋ < script hash >๋ผ๋ ๊ฒ์ ์๋ฏ๋ก, ๊ทธ์ ๊ฑธ๋ง๋ Opcode๋ฅผ ์ ํ์ ๋ฌ์์ฃผ๋ ๊ฒ์ด๋ค. ๋ค์ ์ฒ๋ผ.
OP_HASH160 < script hash > OP_EQUAL
๋ค์ Txid๋ฅผ ์ด์ด๋ณด๋ผ.
a4bfa8ab6435ae5f25dae9d89e4eb67dfa94283ca751f393c1ddc5a837bbc31b
์ด๊ฒ๋ "์ถ๋ ฅ์ฃผ์๋ฅผ Decodeํ ์ ์๋ค"๋ผ๊ณ ๋์จ๋ค. "์ถ๋ ฅ ์คํฌ๋ฆฝํธ"๊ฐ ์ด์จ๊ธธ๋ ๊ทธ๋ ๊ฒ ๋์๋์ง ๋ณด์.
์๋ซ์ชฝ์ "์ถ๋ ฅ ์คํฌ๋ฆฝํธ"๋์ ๋ณด๋ฉด,
OP_HASH256 < 6fe28c. . . .d6190000000000 > OP_EQUAL
์ผ๋ก ๋์ด์๋ค. ๋ณธ์ ์ด ์๋ ๊ธฐ์ดํ ํ์์ด๋ค. ๊ทธ๋ฌ๋ Blockchain.info๊ฐ "Decodeํ ์ ์๋ค"๋ ์ถ๋ ฅ์ ๋ณด์ด๋ ๊ฒ์ด๋ค.
data์ธ < 6fe28c. . . .d6190000000000> ๋ฅผ ์ธ์ด๋ณด๋ฉด 32Byte(256bit)์ด๋ค.
์ ๋จธ๋ฆฌ๋ฅผ ์จ๋ณด๋ฉด, ์ด๊ฒ์ ์ด๋ค Puzzle์ ๋ํ ๋ต์ ์ ์ถํ๋ฉด ๊ด๋ฌธ์ ์ด์ด์ฃผ๊ฒ ๋ค๋ ๋ป์์ ์ ์ ์๋ค.
๊ทธ puzzle์ด๋. . . .
Sha256(Sha256())์ ํ์ ๋,๊ทธ ๊ฒฐ๊ณผ๊ฐ < 6fe28c. . . .d6190000000000>๋ก ๋์ค๊ฒ ๋ ์
๋ ฅdata๋ฅผ ์์ ๋ธ๋ค๋ฉด, ๊ฑธ๋ ค์๋ BTC๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๋ค๋ ์ด์ผ๊ธฐ๋ค.
์ด Hash๊ฐ์ ๋์ด 00000000์ผ๋ก ๋์ด ์๋ ๊ฒ์ด ๋ฌด์ธ๊ฐ๋ฅผ ๊ธฐ์ต๋๊ฒ ํ์ง๋ ์๋๊ฐ?
๊ทธ๋ ๋ค!
์ฑ๊ตด์ ํ ๋, Block Header์ Hash๊ฐ Bits๊ฐ ์ ์ํ๋ ์กฐ๊ฑด๋ด์ ๋ค์ด์ผ ์ฑ๊ตด์ด ๋๋ ๊ฒ์ด์๊ณ ,๊ทธ Hash๋ฅผ Big Endianํํ์ผ๋ก ํ ๊ฒ์ด Block id๊ฐ ๋๋ค๋ ๊ฒ์ ์๊ธฐํ์.
๋ฐ๋ผ์,Block id๊ฐ < 000000.. . .8ce26f >์ธ Block์ Header๋ถ์ ๋ด์ฉ(Raw Hex)๋ฅผ ์ ์ถํ๋ฉด,์ด 1BTC๋ฅผ ๋ฐ์ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฐ๋ฐ, ์ด Puzzle์ ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ 1BTC๋ฅผ ๋ฐ์ ๊ฐ๋ค.
์ด์จ๊ฑฐ๋,
< 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f > Block id๋ฅผ ๊ฒ์ํด ๋ณด์.
๊ณผ์ฐ ๊ทธ๋ฐ ๊ฒ์ด ์์๋ค. ๋ค๋ฆ์๋ Genesis Block์ด์๋ค!
์ด Puzzle์ ํ์ด ์๊ธ์ ํ๊ฐ Tx๋,
09f691b2263260e71f363d1db51ff3100d285956a40cc0e4f8c8c2c4a80559b1
์ด์๋ค. ์ด Tx์ ์ด์ด๋ณด๊ณ , ๊ทธ "์
๋ ฅ ์คํฌ๋ฆฝํธ"๋ฅผ ๋ณด๋ฉด,
๋ค์ ๋งํฌ๋ฅผ ํด๋ฆญํด ๋ณด๋ผ.
Strange Address 1
์ด Page๋ Address๊ฐ 1BitcoinEaterAddressDontSendf59kuE ์ธ ์ฃผ์๋ฅผ ๊ฒ์์ด๋ก ์ฐ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ด์ํ ์ ์ Address์์ฒด์ด๋ค. ์๋ Address๋ Pubkey hash(20Byte)์ ๋์ฉ๋ฌผ๋ก์จ,์ด 20Byte๋ฅผ Base58๋ฐฉ์์ผ๋ก Encodeํ์ฌ(์๋ฐฉํฅ์ผ๋ก ๋ณํ๊ฐ๋ฅ)์ป์ด ์ง๋ ๊ฒ์ธ๋ฐ, ์ ์์ ์ธ ๊ณผ์ ์ ๋ฐ๋ผ, Pubkey hash๋ก๋ถํฐ ์ป์ด์ง Address๊ฐ ์ด๋ ๊ฒ ์ฐ์ฐํ ๋ฌธ์์ด์ ๊ฐ์ง ์๊ฐ ์๋ค! ๋ฐ๋ผ์,์ด Address๋ ์ญ์ผ๋ก Address๋ฅผ ๋จผ์ ๋ง๋ ํ ๊ทธ๋ก๋ถํฐ 20Byte์ Pubkey hash๋ฅผ ์ป์ ๊ฒ์ด๋ค. (์ฌ์ค Pubkey hash๋ผ๋ ์ฉ์ด๋ฅผ ์ฐ๊ธฐ ์ด๋ ต์ง๋ง. . .)
๋ฐ๋ผ์,์ด Address๋ก ๋ณด๋ด์ง BTC๋ ๊ฒฐ์ฝ Spendํ ์ ์๋ค. ๊ทธ๋๋ก ์ ๊ฒจ๋ฒ๋ฆฌ๋ ๋์ด ๋๋ค. ๋์ํ๋ Pubkey๋ ๋ฌผ๋ก ๊ทธ Private Key๋ฅผ ์ด์ฐ ์์๋ผ ์ ์๊ฒ ๋๊ฐ?
์ด๋ ๋๊ตฐ๊ฐ๊ฐ Blockchain์ Joke๋ฅผ ํ๋ ์ฌ๋ ค ๋์ ์
์ธ๋ฐ,๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ์๋์ง ๋ชจ๋ฅด๋์ง, ๋ง์ ์ฌ๋์ด ์ด๋ฆฌ๋ก BTC๋ฅผ ๋ณด๋ธ ๊ธฐ๋ก์ด ๋จ์ ์๋ ๊ฒ์ด๋ค. ์ ์ฌํ Address๊ฐ ๋ ์๋๋ฐ, ๋ค์์ด ๊ทธ๊ฒ์ด๋ค.
1111111111111111111114oLvT2
1CounterpartyXXXXXXXXXXXXXXXUWLpVr
ํนํ 1Counter. . . . .LpVr์๋ ๋ฌด๋ ค, 2130BTC๊ฐ ์์ํ ์ ๊ฒจ์๋ค.
๋๋์ฒด ์?
ํ์๋ ์ด๊ฐ์ ๊ธฐ์ดํ ์ ๋ณด๋ค์ ๋ค์ Site์์ ์ป์์๋ค.
Strange Transactions
ํ์์ ์๊ฐ์ผ๋ก๋,์๋ง๋ ๋ง์ ์ ๋ณด๊ธฐ๊ด๋ค์ด,(Terrorist๋ค๋?),Bitcoin Blockchain์ ์๋ฐํ ์ฐ๋ฝ์๋จ์ผ๋ก ํ์ฉํ๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋๋ค.
Script์์, 0x6a ๋ OP_RETURN ์ด๋ ์ด๋ฆ์ ๊ฐ๋ Opcode์ธ๋ฐ, Tx์ ๋ฌด์กฐ๊ฑด ๋ถํฉ๊ฒฉ์ผ๋ก ํ๊ณ ,๊ฒ์ฆ์ ์ข
๋ฃํ๋ ๋ช
๋ น์ด๋ค.
์ด ๋ช
๋ น ๋ค์ ๋ค๋ฅธ Script๋ค์ด ์๋๋ผ๋ ๊ทธ๊ฒ๋ค์ ์์ ๋ฌด์๋๋ค.
๋ฐ๋ผ์, ์ด ๋ช
๋ น์ด๋ฅผ OutputScript์ ์ฒซ Opcode๋ก ํ๋ฉด, ๊ทธ ๊ด๋ฌธ์ ์ฌํํ InputScript๋ก๋ Passํ์ง ๋ชปํ๋ ๊ฒ์ด ๋๋ค.
๋ฐ๋ผ์, ๊ทธ ๊ด๋ฌธ์ด ์ค์น๋ Value (Satoshi) ๋ ์์ ์ฐพ์ ์ ์๋ ๊ฒ์ด ๋๋ค.
์ด๋ฌํ Opcode๋ฅผ ์ ๋ง๋ค์ด ๋์์๊น ํ๊ณ ์ด์์ค๋ฝ๊ฒ ์๊ฐํ๊ฒ ์ง๋ง, ์ด Opcode๋ ๊ฝค ์ค์ํ ์ญํ ์ ํ๊ณ ์๋ค.
OutputScript์ ์ฒซCode๋ก์จ 0x6a๋ฅผ ๋๋ฉด,๊ทธ ์ดํ๋ ์์์ Byte์ด์ ๋ถ๋ด์์ด ๋ฌ์ ๋์ ์๊ฐ ์๋ค๋ ์ด์ผ๊ธฐ๋ฏ๋ก,
Blockchain์ ์ด๋ค Message๋ ์ฆ๊ฑฐ๋ฅผ ์์ํ ๊ธฐ๋กํ๊ณ ์ถ๋ค๋ฉด, ์ด OP_RETURN์ ํ์ฉํ ์ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ Value๋ zero๋ก ํด๋๋๊ฒ ์ข๋ค. ์์ ๋ชป ์ฐพ์ BTC๋๊น.
ํ์๊ฐ ์ฌ๋ฆฐ ๋๋ค๋ฅธ Post์ธ "๋นํธ์ฝ์ธ ๋ฐ๋ผ์ก๊ธฐ 4"์ 17์ ์์, Proof of Existence๋ฅผ ์ค๋ช
ํ ๋ฐ๊ฐ ์๋๋ฐ,
๊ทธ ๋,์์ทจ์ธ Address๋์, File์ Sha256์ฒ๋ฆฌํ ๊ฒฐ๊ณผ(32Byte)๋ฅผ ๋ณต์ฌํด ๋ฃ์ ๋ค์,์ ์ผ ์ ๋์ "6a"๋ฅผ ์ถ๊ฐํ๋ผ๋ ์๋ น์ ๋งํ์๋๋ฐ, ๊ทธ ๋์ ๊ทธ 0x6a๊ฐ ๋ฐ๋ก Opcode OP_RETURN์ด์๋ ๊ฒ์ด๋ค.
์ฌ์ค, OP_RETURN์ ๊ตณ์ด ์ฐ์ง ์์๋ ์ด๋ค data๋ฅผ Blockchain์ ๊ธฐ๋กํด ๋ ๋ฐฉ๋ฒ์ ๋ง๋ค.
์์, "๊ธฐ๋ฌํ Address๋ค"์์ Hint๋ฅผ ์ป์์ ๊ฒ์ด๋ค. ๋ง์น P2PKH ๋ฐฉ์์ผ๋ก Bitcoin์ ๋ณด๋ด๋ ๊ฒ์ฒ๋ผ ํ์ฌ,
OutputScript๋ฅผ ์์ฑํ๋ < Pubkey hash >์ ์์น์,์๊ธฐ๊ฐ ์ํ๋ 20Byte๊ธธ์ด์ data๋ฅผ,๋ค์ ์ฒ๋ผ ๋์นํด ๋ฃ์ด๋ ๋ ๊ฒ์ด๋ค.
OP_DUP OP_HASH160 < 20Byte data >OP_EQUALVERIFY OP_CHECKSIG
๋ค๋ง ์ด๊ฒฝ์ฐ,๊ทธ Script์ ์์ ์ด๋ฃจ๋ Value(Satoshi)๋ ์์ํ ๋์ฐพ์ ๊ฐ๋ง์ ์๊ฒ ๋๋ค.
๊ฐ๋ น,๋ค์ Tx์ page๋ฅผ ์ด์ด์, "์ถ๋ ฅ ์คํฌ๋ฆฝํธ"์ ๋ด์ฉ์ ์กฐ์ฌํด ๋ณด์๋ผ.
๊ทธ๊ณณ์ 20Byte data๋ Pubkey hash๊ฐ ์๋๋ผ, ๊ทธ๋ฅ ์์๋ก ์๊ธฐ๊ฐ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธฐ๊ธฐ๋ฅผ ์ํ๋,์ด๋ค Message๋ฅผ ์ฐจ๋ก๋ก ์ง์ด ๋ฃ์ ๊ฒ์ด๋ค.
930a2114cdaa86e1fac46d15c74e81c09eee1d4150ff9d48e76cb0697d8e1d72
"Proof of Existence"๋ก์จ ์ด๋ค File์ "์กด์ฌ ์ฆ๋ช
"์ Blockchain์ ๋จ๊ธฐ๊ณ ์ ํ๋ค๋ฉด, ๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค. File์ Sha256์ผ๋ก Hashํ ๋ค์,์ ๋ 20Byte๋ง ์งค๋ผ์ ๊ทธ๊ฒ์ ๊ฐ์ง Pubkey hash๋ก ์ผ์, ์ฝ๊ฐ์ BTC๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค. ๊ทธ ๋, ๋๋ฒ์งธ Output ์ Value๋ฅผ 0BTC๋ก ํ๊ณ , Output Script์ ๋์ 0x6a๋ฅผ ๋ฃ์ํ, ์ดํ์ ASCIII code๋ก ์ด๋ค Message๋ฅผ ๊ฐ์ด ๋จ๊ธฐ๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ด๊ฐ์ ์์
์ ์ข๋ ์ตํต์ฑ ์๋ Coinb.in ๊ฐ์ ๊ฒ์ ์จ์, ์์์
์ ์ข ํด์ผ ํ ๊ฒ์ด๋ค.
Coinb.in์ ์ฌ์ฉํ๋ฉด, Tx์ด ์ด๋ป๊ฒ ์์ฑ๋๋์ง Signature๋ฅผ ๋ฃ๊ธฐ ์ ํ์ ๋ณํ ๋ฑ๋ฑ์ ์ ์์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ์์ธ๋ฌ, ์์ฑํ Tx์ ์์์
์ผ๋ก ์ด๋ฐ ์ ๋ฐ ํธ์ง์ ํํ Verify๋ฅผ ์ด์ฉํ์ฌ ๋ด์ฉ์ Check๋ ํ ์์๊ณ , ๋ง์์ ๋ค๋ฉด ์ต์ข
์ ์ผ๋ก Sign์ ๋ง์น๊ณ Broadcast๋ ํ ์ ์๋ค.
์ด์์ผ๋ก Block์ฑ๊ตด์ด๋ผ๋ ๊ฐ, Blockchain์ ์ฌ๋ฌ๊ฐ์ง ์ธก๋ฉด, ๊ทธ๋ฆฌ๊ณ Script๊ฐ ๋ฌด์์ธ์ง ๋๋ต ๊ฐ์ ์ก์์ผ๋ฆฌ๋ผ
๋ณธ๋ค. Script๋ผ๋ ๊ฐ Programming์ ํฅ๋ฏธ๊ฐ ์๊ธด ๋
์๋ค์ ๋ค์ ๋งํฌ๋ฅผ ๋ฟ๋ฆฌ๋ก ํ์ฌ ์กฐ์ฌ๋ฅผ ํด๋๊ฐ๋ฉด ์ข์ผ๋ฆฌ๋ผ ์๊ฐํ๋ค.
Bitcoin Script
Developer Guide
๋ค์ ์ ์์๋ Fork๊ฐ ๋ฌด์์ธ์ง์ Soft Fork,Hard Fork์ ๋ํด์ ์ค๋ช ํ ๊ฒ์ด๋ค.