Blockchain.info๋ฅผ ์ด์ด, Block #0์ ๊ฒ์ํ ๋ค,๊ทธ page์์ "ํด์"๋์ "๋ค์ ๋ธ๋ก"๋งํฌ๋ฅผ ๋๋ฅด๋ฉด ,Block #1์ ๋ณผ ์ ์๋ค. ์ด๋ฐ ๊ณผ์ ์ ๊ณ์ํ์ฌ,#2,#3, . . .๋ฑ์ ๋ณด๋ฉด,ํ๋์ ๊ณ์ Coinbase Tx๋ง ์๋ Block์ด ์ด์ด์ง ๊ฒ์ด๋ค.
๋ณดํต์ Tx, ์ฆ Coinbase Tx์ด ์๋ ๊ฒ์ Block #170์์ ์ฒ์ ๋ํ๋๋ค. Block #170์ ์ด์ด ๋ณด๋ผ.
๊ทธ๊ณณ ์๋์ชฝ์ ๋ณด๋ฉด ๋๊ฐ์ ๊ฑฐ๋๊ฐ ๋์ ์๋๋ฐ, ๋๋ฒ์งธ ๊ฑฐ๋์ Txid๋
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
์ผ๋ก ๋์ ์์ ๊ฒ์ธ๋ฐ, ์ด๊ฒ์ด Blockchain์ฌ์ ์ฒซ ์ ์์ Transaction์ด๋ค.
์ด Txid๋ ํธ๋ฅธ์(๋งํฌ)์ผ๋ก ์จ์์ ๊ฒ์ด๋ค. ์ด๊ฒ์ ํด๋ฆญํ์ฌ ์ด Transaction์ ์์ธ ๋ด์ฉ์ ์ด์ด๋ณด์.
์์ชฝ์ ๊ฐ์๊ฐ ๋์ ์๋๋ฐ,
12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S
๋ผ๋ Address๋ก ๋ถํฐ,๋ค์์ ๋ Address๋ก ๊ฐ๊ฐ 10BTC, 40BTC ๊ฐ ๋ณด๋ด์ก์์ ์ ์ ์๋ค.
1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 10 BTC
12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S 40BTC
์ ์ ํ๋ฒ ํด ๋ณด์๋ฏ์ด, ์ฃผ์์ค์ ๋์ "?format=hex"๋ฅผ ์ถ๊ฐํํ, Return Key๋ฅผ ๋๋ฅด๋ฉด,์ด Tx์ ๋ด์ฉ์ hex๋ก ๋ฐ์ ์ ์๋ค.
๋ค์์ด ๊ทธ๊ฒ์ด๋ค.
Transaction์ ํฌ๊ฒ 4 Parts๋ก๊ตฌ์ฑ๋์ด ์๋ค. ์์์ ๋ ์ฐ๋ฆฌ์ ์ค๋ก,Txid=f4184fc. . . . 9e16 ์ ๋ด์ฉ์ 4 Parts๋ก ๋๋์ด ๋ณธ๊ฒ์ด
๋ค์์ด๋ค.
์ด 4 Parts๋ฅผ ์ฐจ๋ก๋ก ์ค๋ช
ํ๋ค.
Transaction์ ์ด๋ป๊ฒ ์์ฑํ๊ณ ,๋ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๊ฒ์ฆํ๋๊ฐ ํ๋ ์ฌ๋ฌ ๊ท์น์ Version์ ๋งํ๋ค. ๋ฌผ๋ก ,๊ทธ Tx์ ์์ฑํ Software,๊ฐ๋ น Bitcoin Wallet, ๊ฐ ์ด๋ค Version์ ์
๊ฐํ์ฌ ์์ฑํ๋์ง๋ฅผ ๋ณด์ด๋ ๊ฒ์ด๋ค. ์์ ์์์๋
00000001(Big Endian ์ผ๋ก)์ด์๋ค.
๋ณด๋ผ ์๊ธ์ ๊ทผ๊ฑฐ๋ค๊ณผ ํจ๊ป,์์ ์ด ๊ทธ ์๊ธ๋ค์ ์ฌ์ฉํ ์๊ฒฉ์ด ์๋ค๋ ์ฆ๊ฑฐ๋ค์ ์ ์ํ๋ ๊ณณ์ด๋ค.
"Inputs"์ ๋์ ๋ณต์๋ผ๋ ์๋ฏธ์ "s"๊ฐ ๋ถ์์์ ์ฃผ์ ํ์ฌ๋ผ. ๊ฐ๋ น,๊ณผ๊ฑฐ ์ด๋ ๋ ๋ด ์ฃผ์๋ก 1.2BTC๋ฅผ ๋ฐ์ ์ ์ด ์๊ณ ,
๋ ๋ค๋ฅธ ์์ ์ 1.5BTC๋ฅผ ๋ฐ์ ์ ์ด ์๋ ๊ฒฝ์ฐ,๊ฐ๋ น Address X๋ก 2.0BTC๋ฅผ ๋ณด๋ด์ผ ํ๋ค๋ฉด, ์ด 2๊ฐ์ ๊ณผ๊ฑฐ ๊ธฐ๋ก์ ๋ชจ๋ ์ธ๊ธ(Refering)ํด์ผ ํ ๊ฒ์ด๋ค.
Inputs์์ ๊ทผ๊ฑฐ๋ก ์ ์ํ ๊ธ์ก(Satoshi)์ ์ด๋ ๊ณณ์ผ๋ก ๊ฐ๊ฐ ๋ชSatoshi์ฉ ๋ณด๋ผ ๊ฒ์ธ์ง๋ฅผ ๊ธฐ์ ํ๋ค.
๋ฌผ๋ก ,์ด ๊ธ์ก ํฉ์ Inputs์ ์๊ธ ์ด๊ณ์ ๊ฐ๊ฑฐ๋ ์ ์ด์ผ ํ๋ฉฐ, ์ฐจ์ก์ด ์๋ ๊ฒฝ์ฐ ์ด๊ฒ์ ์ฑ๊ตด์์๊ฒ ๊ฐ๋ Tx Fee๋ก ๊ฐ์ฃผ ๋๋ค.
Lock time์ ํด๋น ๊ฑฐ๋์๊ฐ Blockchain์ ์ถ๊ฐ ๋๋ ๊ฒ์ ์ง์ฐ์ํค๊ณ ์ ์ํ ๋,์ด์ฉ๋๋ค.
๋ณดํต์ 00000000์ผ๋ก ํด ๋๋ ๊ฒ์ด ๋๋ถ๋ถ์ด๋ค. ์ง์ฐ์ ๋์ง ์๋๋ค๋ ๋ป์ด ๋๋ค.
๊ทธ๋ฌ๋,์ด๋ค ํน์ ์๊ฐ(Unix Epoch time)์ด ๊ฒฝ๊ณผํ ํ์ Blockchain์ ๋ค์ด๊ฐ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ์ง์ ํ ์ ์๋ค.
๊ทธ๋ฐ ๊ฒฝ์ฐ,Node๋ค์ ์ด Tx์ ๋ฐ๋ก ๊ด๋ฆฌํด ๋๊ณ ์๋ค๊ฐ,๊ทธ ํน์ ์๊ฐ์ด ์ง๋ ํ์์ผ,Block์ฑ๊ตด์ ๊ทธ Tx์ ํฌํจํ๊ธฐ ์์ํ ๊ฒ์ด๋ค.
(N Block์ ๋ ์ง๋ํ Block์ ์ถ๊ฐํ ๋ก ์ง์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.)
์ค๋ช
์ ํธ์ด์ Inputs๊ฐ ์๋๋ผ,Outputs๋ฅผ ๋จผ์ ์ค๋ช
ํ๊ฒ ๋ค. ์ฐ์ , ๋ค์ ๊ทธ๋ฆผ์ ๋งจ ์๋ซ์ชฝ
๊ทผ๋ฐฉ์ ๋ณด๋ผ.
Outputs์ ๊ตฌ์กฐ๋ ์ ๊ทธ๋ฆผ์ ๋ํ๋ ์๋ ๊ฒ ์ฒ๋ผ,
(1)Outputs Count (1Byte)
(2)Amount (8Byte)
(3)OutputScript(๊ฐ๋ณ๊ธธ์ด)
๋จ, (2)๋ฐ (3)์ Outputs Count์์ ์ง์ ํ ์ ๋งํผ ์ด๊ฑฐ ๋๋ค.
์ฐ๋ฆฌ์ ์ด ์ค๋ก์์, Outputs Count๊ฐ 2์ด๋ฏ๋ก,(2)์ (3)์ด ๋๋ฒ ์ด๊ฑฐ ๋์ด ์๋ค.
์ฒซAmount๋ฅผ,
[00][00][00][00][3b][9a][ca][00]
์ผ๋ก ํ์
ํด์ผ ํ๋ฏ๋ก(Little Endian๋ฐฉ์์ผ๋ก ์จ์๋ค๋ ๊ฒ์ ์ ๋
),
[3b]x2563+[9a]x2562+[ca]x256+[00]
=(59)x2563+(154)x2562+(202)x256=1,000,000,000 Satoshis =10BTC
๊ทธ ๋ค๋ฅผ OutputScript๊ฐ ๋ฐ๋ฅด๊ณ ์๋๋ฐ,์ฌ๊ธฐ์ ๋
์๋ค์ ์๋ง,Amount ๋ค์ Bitcoin Address๊ฐ ๋ค๋ฐ๋ผ์ผ ํ๋๊ฒ ์๋๋ ๋ผ๊ณ ๋จ์ํ๊ฒ ์๊ฐํ ์ง ๋ชจ๋ฅธ๋ค. ๊ทธ๋ฌ๋,์ฅ๋์ ๋ค์ํ
Payment๋ฐฉ์์ ์ตํต์ฑ ์๊ฒ ๋์ฒํ๊ธฐ ์ํด์ "Output Script"๋ผ๋ ๊ฒ์ ๋๋ ๊ฒ์ผ๋ก ํ๋ค.
Output Script๋ "๊ด๋ฌธ(้้)"์ด๋ผ๋ ๋ป์ผ๋ก ์ดํดํ๋ฉด ์ข๋ค. ์๋ ์ด "๊ด(้)"์๋ "๋น์ฅ"์ด๋ผ๋ ๋ป์ด๋ค.
๋ฌดํ์์ค์ ๋ณด๋ฉด,"์๋ฆผํ" ์ฅ๋ฌธ์ธ์ ๋ง๋๋ ค๊ณ ,์ฃผ์ธ๊ณต์ด ์๋ฆผํ์ "๊ด๋ฌธ"์ ํต๊ณผํ๋ ์ด์ผ๊ธฐ๊ฐ ๋์จ๋ค. ๋ฌด๊ณต์ด ์ถ์คํด์ผ ์ด ์ํํ ๊ด๋ฌธ์ ํต๊ณผํ์ฌ ์๋ฆผํ ์ฅ๋ฌธ์ธ์ ๋ง๋ ์๊ฒฉ์ด ์ฃผ์ด์ง๋ ๊ฒ์ด๋ค.
Output Script๋ Bitcoin์ ์ํด์ ๊ณ ์๋ ๋ช
๋ น์ด(Byte Code)์ data๋ค๋ก ์์ฑ๋์ด ์๋ค. ์ด๋ค "์ํ(test)"๊ณผ์ ์ด Code๋ก ๊ธฐ์ ๋์ด ์๋ค๋ ์ด์ผ๊ธฐ๋ค. "์ํ์ ๋ค์ง ์๊ฒ ํ์ต์๋ฉฐ. . ."ํ ๋์ ๊ทธ "์ํ"๋๋ "์๋ จ" ๋ง์ด๋ค.
์์ด๋ก ๋ ์ฑ
์์์๋ "Satoshi Value๊ฐ์ Encumbrance๋ฅผ ๊ฑธ์ด ๋๋ค" ๋ผ๊ณ ๋ค ๋งํ๋ค.
์ฆ,๊ฐ๊ฐ์ Satoshi Value์ OutputScript๋ผ๋ ๊ฒ์ ์จ์, Encumbrance(์ฅ์ ๋ฌผ/๋น์ฅ/้้)๋ฅผ ๊ฑธ์ด ๋๋ ๊ฒ์ด๋ค. (๋ฌธํ์์๋ Amount๊ฐ ์๋๋ผ Value๋ผ๊ณ ๋ค ํ๋ค.)
๋๋ฒ์งธ Amount๋ 40BTC๋ก ๊ณ์ฐ ๋ ๊ฒ์ด๋ค. ๋ค์ ๊ทธ๋ฆผ์ Block #170 page์ Transaction๋ถ๋ถ์ ๋ณด์ธ ๊ฒ์ธ๋ฐ, 2๋ฒ์งธ ๊ฑฐ๋๋ฅผ ๋ณด๋ผ(์ฒซ๊ฑฐ๋๋ Coinbase Tx).
๊ณผ์ฐ,10BTC์ 40BTC๋ฅผ ๋ค์ ๋ Address๋ก ๋ณด๋ด๋ ๊ฒ์ผ๋ก ๋์ด ์๋ค.
1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3
12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S
์ด 40BTC๋ Address "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"๋ก ๋ณด๋ด ์ก๋๋ฐ,
๋์ค์ ์ดAddress์ ์์ ์๊ฐ 40BTC๋ฅผ "์๋น"(๋ ๋ค๋ฅธ Address๋ก ๋ณด๋ด๋ ๊ฒ)ํ๊ณ ์ ํ๊ณ ์ ํ๋ค๋ฉด,
Tx์ ์์ฑํ ๋, Input์์, ์๊ธ์ ๊ทผ๊ฑฐ๋ก์จ ์ด Txid=f418. . . .9e16 ์ Output index=1 (๋๋ฒ์งธ Output์ด๋ ๋ป)์ ์ฐ๊ณ ๋์,๊ทธ๋ค์ InputScript๋ฅผ ๋ฌ์ ์ฃผ๋๋ฐ,์ด InputScript๋ ์ด40BTC์ ๊ฑธ์ด ๋์๋ Encumbrance(๊ด๋ฌธ,์ฆ OutputScript)๋ฅผ Passํ๊ธฐ์ํ Script์ธ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ ์ค์ํ ํต์ฌ์, "Satoshi Amount์ OutputScript๋ก์จ Encumbrance(๊ด๋ฌธ)๋ฅผ ๊ฑธ์ด ๋๋๋ฐ,๋์ค์ ๊ทธ ๊ธ์ก์ "์๋น"ํ ๋, InputScript๋ก์จ ๊ทธ Encumbrance๋ฅผ Pass(๋ํ)ํ๋ค" ๋ผ๊ณ ํ๋ ์ ์ด๋ค! ์ด๊ฒ์ด, Node๋ค์ด Tx์ ๊ฒ์ฆํ ๋์,์ฃผ์ ์์
๋ด์ฉ์ด๋ค.
์ฃผ์ ํ ์ ํ๊ฐ์ง. ๊ฐ๋ น,์๊ทธ๋ฆผ์์ 40BTC Amount์ ๋ค๋ฅผ ์๋ Byte๋ค ์ค ์ฒซByte๋ Byte Count๋ก์จ, "OutputScript"๊ฐ ๋ช๊ฐ์ Byte๋ก ๋์ด์๋๊ฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด๋ฏ๋ก,
์ ๋์ [43](10์ง์; 67)์ ์ ์ธํ ์ดํ์ 67๊ฐ์ Byte ,"410411. . . . 12a3ac", ๊ฐ OutputScript์ ๋ณธ ๋ด์ฉ์ด๋ค. ์ด๊ฒ์ Input Script์์๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
์ด OutputScript์ ๋ณธ ๋ด์ฉ์ค, ์ ์ผ ์ฒซByte์ธ [41]๊ณผ ๋งจ ๋Byte์ธ [ac]๊ฐ ๋ช
๋ น์ด(Opcode๋ผ ๋ถ๋ฆ)์ด๋ฉฐ, "0411. . .12a3"๋ data์ด๋ค. Opcode๋ [ ]์์ ๋ฃ์ด ๊ตฌ๋ถํ๊ณ ,data๋ค์ < >๋ฅผ ์จ์ ๊ตฌ๋ถ ํ์ํ๋ค๋ฉด,
[41]<0411. . . .12a3>[a3]
์ ๊ผด์ด ๋์ด ์ฝ๊ฐ ๊ฐ๋
์ฑ(ๅฏ่ฎๆง)์ด ์ข์์ง ๊ฒ์ด๋ค. ์ด๋ป๊ฒ Opcode์ data๋ฅผ ๊ตฌ๋ถํด ๋ด์๋๊ฐ ๊ถ๊ธํ๊ฒ ์ง๋ง, ์ฐจ์ฐจ ์๊ฒ ๋ ๊ฒ์ด๋ค.
Inputs๋ถ๋ถ์ ๋ค์,
(1) Inputs Count(1 Byte)
(2)Txid (32Byte)
(3)Output index(4Byte)
(4)Input Script
(5)Sequence(4Byte) : ffffffff
๋จ, (2)~(5)๋ Input Count์ ํ์ ๋งํผ ๊ณ์ ๋์ด๋๋ค. Sequence๋ input๋ค์ ๊ตฌ๋ถํ๋ Byte์ด๋ก ์ดํดํ๋ฉด ๋๋ค.
์ฐ๋ฆฌ์ ์ค๋ก์์๋ Input๊ฐ ๋จ ํ๊ฐ์ด๋ค. ๊ทธ Input์ด ์ธ๊ธํ๋ ์๊ธ ์ถ์ฒ๋ฅผ ๋ณด๋ฉด,Big Endian๋ฐฉ์์ผ๋ก ์ฝ์ ๋,
Txid=0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
Output index=00000000
์ผ๋ก ๋์ด ์์ผ๋ฏ๋ก,
Txid=0437. . . .97c9์ธ Tx์ Outputs์ ์ด๊ฑฐ ๋๊ฒ์ค,์ ์ผ ์ฒ์์ Output,์ ์๊ธ์ ๊ทผ๊ฑฐ๋ก ์ ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ,๋ฐ๋ก ๋ค๋ฅผ ๋ฐ๋ฅด๋ Input Script์ ๋ณธ๋ด์ฉ์ (Byte Count 48์ ์ ์ธ!),
47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901
๊ฐ ๋๋ค.
์ด๊ฒ์ด ๋ฌด์์ด๊ฒ ๋๊ฐ? ์ด๊ฒ์ ๋ฐ๋ก,
Txid=0437. . . .97c9, Output index=0 ์ ๊ฑธ์ด ๋์์ "๊ด๋ฌธ(้ๅ)์ฅ์น"(Output Script)์ ๋์ํ์ฌ, ๊ทธ ๊ด๋ฌธ์ ํต๊ณผํ๊ธฐ ์ํ "์ฆ๋น์๋ฃ"์ธ ๊ฒ์ด๋ค.
์ด Input Script์ "๋ณธ ๋ด์ฉ"(Byte Count"48"์ ์ ์ธํ)์ Opcode์ data๋ก ๊ตฌ๋ถํด ํ์ํด ๋ณด๋ฉด,
[47]<3044. . .0901>
๊ฐ ๋๋ค. ์ง๊ธ์ ๊ทธ๋ฌ๋ ค๋ ํ๊ณ ๋์ด๊ฐ์.
์ด์ , Txid=0437. . . .97c9 ,Output index=0 ์, ์ด๋ค "๊ด๋ฌธ(้ๅ)"(Output Script)์ด ๊ฑธ๋ ค ์์๋์ง๋ฅผ ์กฐ์ฌํ์ฌ,์ด๋ป๊ฒ "๊ฒ์ฆ๊ณผ์ "์ด ์งํ๋์๋์ง๋ฅผ ์๊ณ ์ง ํ๋ค. ๊ทธ๋ฌ์๋ฉด,์ด Tx์ Blockchain.info์์ ๊ฒ์ํ์ฌ,๊ทธ ๋ด์ฉ์ค Outputs๋ถ๋ถ์ ๋ณด๋ฉด ๋ ๊ฒ์ด๋ค. ๋ ์๋ค๋ ์ด Txid๋ฅผ ์จ์ ๊ฒ์์ ์๋ํด ๋ณด๋ผ.
ํ์๊ฐ ๊ฒ์์ ํด ๋ณด๋,Oops! ๋ค์๊ณผ ๊ฐ์ด, ์ฐพ์ ์ ์์๋ค๋ ๋ด์ฉ์ด ๋ฌ๋ค!
์ด๊ฒ์ ๋๋ฌด ์ค๋๋ Tx์ด๋ผ์,์ด Server์ index์ ์์ ๋ด๊ณ ์์ง ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๊ทธ๋ ๋ค๊ณ ,๊ทธ ๊ฑฐ๋ ๊ธฐ๋ก์ด ์์ด์ง ๋ฆฌ๋ ์ ๋ ์๋ค. ์ด์ฐ ํด์ผ ํ ๊น?
ํ์๋ Address๋ก ๊ฒ์์ ํ์ฌ,์ฝ๊ฐ ๋จธ๋ฆฌ๋ฅผ ์ด ๊ฒฐ๊ณผ, ์ด Tx์ด Block #9์ Coinbase Tx ์ด์์์ ์์ ๋ด์์ผ๋ฉฐ,
๊ทธ Txid๋ฅผ ํด๋ฆญํ์ฌ ๋ค์ ๊ฐ์ด ์ด์ ์์๋ค. (๋
์๋ค์, ํ์๊ฐ ์ด๋ป๊ฒ ์ด page๋ฅผ ์ด์๋์ง ๊ถ๋ฆฌ๋ฅผ ํด ๋ณด๋ผ)
๋
์๋ค์ Block #9์ ์ด๊ณ ,๊ทธ๊ฒ์ Coinbase Tx์ Txid๋ฅผ ํด๋ฆญํ์ฌ, ์ด Tx์ page๋ฅผ ์ด ์ ์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์,์ด๋ฒ์๋ ์ข ๋ค๋ฅธ Format๋ก ์ด Tx์ ๋ด์ฉ์ Browser๋ก ๋ฐ์๋ณด์. ์ ์๋ "?format=hex"๋ฅผ ๋ง๋ถ์์์ผ๋,์ด๋ฒ์
"?format=json"์ ์ถ๊ฐ ํด๋ณด๋ผ. ๋ณด๊ธฐ์ ํธ๋ฆฌํ ๊ตฌ์กฐ์ ์ธ ํํ๋ก ๋ณด๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ page์ "Out"์์ OutputScript๋ฅผ ๋ณผ ์์๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
Output Script:
410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac
์ด๊ฒ์ ์์์ ์์ ๋ฐ๋ผ,Opcode์ data๋ก ๊ตฌ๋ถํ์ฌ ํ์ํด ๋ณด๋ฉด,
[41]<0411. . . .12a3>[ac]
๋ก ๋๋ค.
๊ฒฐ๊ตญ,Block Reward๋ก ๋ฐ์ 50BTC์๋ Encumbrance๋ก์จ
[41]<0411. . . .12a3>[ac]
๊ฐ ๊ฑธ๋ ค ์์๋๋ฐ, ์ด ๊ด๋ฌธ์ Passํ๊ธฐ ์ํ์ฌ,
[47]<3044. . .0901>
๋ฅผ ์ ์ถ ํ๊ฒ์ด ๋๋ค. ์ด์ 12์ ์์๋ ์ด Pass๊ณผ์ (๊ฒ์ฆ๊ณผ์ )์ด ์ด๋ป๊ฒ ์งํ ๋์๋์ง๋ฅผ ์ค๋ช
ํ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ์ Tx์ค๋ก์ธ,
Txid=f418. . . . 9e16 ์ธ ๊ฑฐ๋,์ฆ Block #170์ 2๋ฒ์งธ ๊ฑฐ๋๊ฐ, ์ด๋ป๊ฒ Node๋ค์ ๊ฒ์ฆ์ Passํ์ฌ,Block #170์ ์๋ก์ด ๋์๋์ง๋ฅผ ๋ณต๊ธฐ(ๅพฉๆฃ)ํด ๋ณด๋๋ก ํ์.
๋จผ์ ๊ฐNode๋ค์,๊ฐ์ ๋
๋ฆฝ์ ์ผ๋ก,
input์์ ์ ์ํ๋ ์๊ธ๊ทผ๊ฑฐ์ธ Txid=0437. . . .97c9์ธ ๊ฑฐ๋๊ฐ ์กด์ฌํ๋์ง์,๊ทธ๊ฒ์ ์ฒซ๋ฒ์งธ Ouput์ด ํน์ ์ค๋ณตํ์ฌ "์๋น"ํ๋ ๊ฒ์ ์๋์ง๋ฅผ Checkํ๋ค.
ํ๋ฒ์ด๋ผ๋ Input์์ ์ฌ์ฉ๋ ์ ์ด ์๋ Output์ ๊ฑฐ๋ถ ๋์ด์ผ ํ๋๊น(Double Spend๋ฐฉ์ง).
๊ทธ ๋ค์,
InputScript์ ๋ณธ ๋ด์ฉ๊ณผ, ๊ทธ์ ๋์ํ๋ Encumbrance(Output Script)์ ๋ณธ ๋ด์ฉ์ ์ด์ด ๋ถ์ฌ์,์ด๋ฅผ ํ๋์ Excutable Program์ผ๋ก ๋ณด๋ ๊ฒ์ด๋ค.
์ฆ, ์ฐ๋ฆฌ์ ์ค๋ก์ ๊ฒฝ์ฐ,
[47]<3044. . .0901>[41]<0411. . . .12a3>[ac]
๊ฐ "๊ฒ์ฆ"์ ์ํด ์คํํด์ผ ํ Program์ด ๋๋ ๊ฒ์ด๋ค.
์ด์ Program์ ์คํ๊ณผ์ ,์ฆ ๊ฒ์ฆ ๊ณผ์ , ์ ์ค๋ช
ํ๋ค.
์ฐ์ ์ ๋ ์ฒซByte๋ Opcode(๋ช
๋ น์ด)๋ก ๋ณด๊ณ ์์ํ๋ค.
์ฒซ Opcode์ธ [47]์,์ดํ์ ๋ฐ๋ฅด๋ [47]๊ฐ(71๊ฐ)์ Byte๋ฅผ data๋ก์จ Stack์ Pushํ๋ผ๋ ๋ช
๋ น์ด๋ค. Byte์๋ฅผ ์ธ์ด ๋ณด๋ฉด ์๊ฒ ์ง๋ง <3044. . . .0901>์ ์ ๋ถ 71Byte์์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค. ์ฌ์ค, [01]~[4b]์ Opcode๋ ์ ๋ถ ๊ทธ๋ฐ ์๋ฏธ์ ๋ช
๋ น์ธ๋ฐ, ๋ช
๋ น์ด์ Name์กฐ์ฐจ ์ง์ ๋์ด ์์ง ์๋ค.
<3044. . . .0901>์ ์๋ ๋ฌด์ ์ด์์๊น? ์ด๊ฒ์ ์ด Tx( Txid=f418. . . . 9e16 )์ ๋ด์ฉ์ ๋์์ผ๋ก ํด์, Private Key๋ก Encryptํด์ ์ป๋ ๊ฒฐ๊ณผ๋ฌผ๋ก์จ,์์ "Signature"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
๋ ์ ํํ ๋งํ๋ฉด,Tx (Txid=f418. . . . 9e16)์ ๋ด์ฉ์ค, ์ด Signature๋ถ๋ถ์ ์ ์ธํ ๋ด์ฉ, ์ ๋์์ผ๋ก ํ์ฌ,Private Key๋ก Encryptํ ๊ฒฐ๊ณผ๋ฌผ๋ก ์ดํดํ๋ฉด ์ข๋ค. ์ด๋ฅผ ์์ผ๋ก๋ < Sig >๋ผ๊ณ ์ฐ๊ธฐ๋ก ํ์.
๋ฌผ๋ก , ์ด Private Key๋ Address 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S ์ ๋์ํ๋ ๋น๋ฐKey๋ฅผ ๋งํ๋ค.
์ด < Sig >๋ ์ด Private Key๋ก๋ถํฐ ๊ณ์ฐ ๋์ด์ง๋ Public Key(์ดํ Pubkey๋ก ์ฝ๊ธฐ)๋ก Decryptํด์ผ๋ง ์ ๋๋ก ํด๋ ์ด ๋์ด,์๋์ ์๋ณธ ๋ด์ฉ,์ฆ Tx์ค < Sig > ๋ฅผ ์ ์ธํ ๋ด์ฉ์ ๋ณผ์ ์๋ค.
์คํ(Execution)์ ๊ณ์ํ์. ๋จ,์ง๊ธ Stack์๋ < Sig >๊ฐ ๋ค์ด ์๋ค.
[41]์ด ๋ค์ Opcode์ธ๋ฐ,์์ ์ด์ผ๊ธฐ ํ๋ฏ์ด,์ด๊ฒ์ ์ดํ์ [41]๊ฐ(65๊ฐ)์ Byte๋ฅผ Stack์ ๋ฃ์ผ๋ผ๋ ๋ช
๋ น์ด๋ค.
๋ฐ๋ผ์ ์ด๋ฒ์๋,<0411. . . .12a3>๊ฐ Stack์ ๋ค์ด ๊ฐ๋ค. ์ธ์ด๋ณด๋ฉด <0411. . . .12a3>๋ 65Byte๊ธธ์ด ์์ ์ ๊ฒ์ด๋ค.
์ด <0411. . . .12a3>๋ ์๋ ๋ฌด์ ์ด์์๊น? ์ด๊ฒ์ Address 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S ์ ๋์ํ๋
Pubkey์๋ ๊ฒ์ด๋ค. (Pubkey๋ 65Byte์ ๊ธธ์ด๋ฅผ ๊ฐ๋๋ค) ๊ทธ๋์ ์ดdata๋ฅผ < Pubkey >๋ก ์ฐ๊ธฐ๋ก ํ์.
๋ฐ๋ผ์ ์ง๊ธ์ Stack์ ์ ์ผ ์์๋ < Pubkey >๊ฐ ์๊ณ ,๊ทธ ์๋์ < Sig >๊ฐ ์๋ค.
๋ค์ Opcode์ธ [ac]๋ "OP_CHECKSIG" ๋ผ๊ณ ํ๋ ๋ช
๋ น์ด Name์ ๊ฐ๊ณ ์๋๋ฐ,์ด ๋ช
๋ น์ด๋ Stack์์ Popํ ๊ฒ,์ฆ < Pubkey >,๋ฅผ key๋ก ํ์ฌ, ๋ํ๋ฒ Popํ ๊ฒ,์ฆ < Sig >,์ ๋ด์ฉ์ Decrypt(ํด๋
)ํ๋ค์,๊ทธ ๊ฒฐ๊ณผ๋ฅผ, Tx์ ์๋ณธ(๋ฌผ๋ก ,< Sig>๋ ์ ์ธํ)๊ณผ ๋น๊ตํ๋ผ๋ ๋ป์ด๋ค.
์์๊ฐ ์ผ์นํ๋ฉด, ์ด < Sig >๊ฐ ํ์คํ ๊ทธ < Pubkey >์ ๋์ํ๋ Private Key๋ก Encryptํ ๊ฒ์ด ํ๋ฆผ์๋ค๋ ๊ฒ์ด ์ฆ๋ช
๋๋ฏ๋ก, ๊ฒ์ฆ์ Passํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด์ ๋
์๋ค์ ์ด๋ป๊ฒ ๊ฒ์ฆ์ด Passํ์๋์ง๋ฅผ ,๊ทธ๋ฆฌ๊ณ Script์ค์์ Opcode์ data๋ฅผ ํ์๊ฐ ์ด๋ป๊ฒ ๊ตฌ๋ถํด ๋ผ ์ ์์๋์ง๋ ์ดํด ๋์์ผ๋ฆฌ๋ผ ๋ณธ๋ค. ์ฌ์ค์ Script์ ์ ์ฒด์ ๋ฌธ๋งฅ์ ์ด๋ค ๊ฒ์ Opcode๊ฐ ๋๊ณ ,์ด๋ค ๊ฒ์ data๊ฐ ๋๋ ๊ฒ์ด๋ค.
ํํธ, < Sig > ๋ ๊ด๋ฌธ์ Passํ๊ธฐ ์ํ ์ฆ๊ฑฐ๋ฌผ์ด๊ธฐ๋ ํ์ง๋ง,๋ ํํธ์ผ๋ก๋ Tx์ ๋ด์ฉ์ ๋ณดํธํ๋ ์ญํ ๋ ๊ฐ์ด ์ํํจ์ด ์ดํด ๋์์ผ๋ฆฌ๋ผ ๋ณธ๋ค. ๋ง์ฝ Node๋ก์ data์ ์ก๊ณผ์ ์์ Hacker๋ค์ด Tx์ ๋ด์ฉ์ 1Bit๋ผ๋ ๋ณ์กฐ๋ฅผ ํ๋ฉด ๊ทธ๊ฒ์ ์ ์ฒด Tx์ ๋ฌดํจํ ํ๋ ๊ฒ์ด ๋๋ค. ๊ฒ์ฆ๊ณผ์ ์์ ์คํจํ๊ฒ ๋ ํ
๋๊น.
ํํธ, ๊ฒ์ฆ์ ์ฌ์ฉํ Script Program ์ธ
[47]<3044. . .0901>[41]<0411. . . .12a3>[ac]
๋ฅผ,๊ฐ๋
์ฑ(ๅฏ่ฎๆง)์ข๊ฒ, ํ์ํ๋ฉด,
[47]< Sig >[41]< Pubkey >OP_CHECKSIG
๊ฐ ๋๋๋ฐ,[47] ,[41]๋ค์ ์์ ์๋ตํ์ฌ,
< Sig > < Pubkey >OP_CHECKSIG
๋ก ํ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ฆ, ๊ทธ๋ ๊ฒ ์จ ๋๊ณ ๋,ํด์ค์ ํ ๋๋,
< Sig >๋ฅผ Stack์ Push
< Pubkey >๋ฅผ Stack์ Push
Stack์์ ํ๋๋ฅผ ๋ฝ์(Pop) ๊ทธ๊ฒ์ Key๋ก ์ผ๊ณ ,
Stack์์ ๋ํ๋๋ฅผ ๋ฝ์(Pop) ๊ทธ ๋ด์ฉ์,์์ Key๋ก Decryptํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ
์ฝ์๋ ์๋ณธ๊ณผ ๋น๊ตํ๋ค.
์ด๋ฐ ์์ธ ๊ฒ์ด๋ค. ๊ทธ๋์ Opcode [01]~[4b]๋ Opcode๋ช
์นญ๋ ํ ๋นํ์ง ์์๊ณ , ๊ทธ๋ฅ ์ด์นญํ์ฌ Constant๋ฅ(้ก)์ Opcode๋ผ ํ๋ค.
๊ฐ๋ น 11.3์์ ๋ณด์ธ ๋ฐ ์๋, Txid=0437. . . .97c9 ์ page ์๋ซ์ชฝ์ ๋ณด๋ฉด, "์ถ๋ ฅ ์คํฌ๋ฆฝํธ"๊ฐ ์๋๋ฐ ๊ทธ๊ณณ์
0411db93. . . . .b412a3 OP_CHECKSIG
๋ก ์จ ์์์ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์๋ ์ ๋ Opcode์ธ Constant [41]์ ์ฌ์ฉ ์๋ต ๋์ด ์๋ค.
๋จ, json format์ผ๋ก ๋ค์ฌ๋ค ๋ณด๋ฉด,๊ทธ๊ณณ์ Script์๋ [41]๋ ํฌํจํ Script์ ์ฒด๊ฐ Hex๋ก ๊ธฐ์ ๋์ด ์์ ๊ฒ์ด๋ค.
์ด์ ์ด๋ค Tx์ ๋ด์ฉ์ ๋ณผ ๋, ๊ทธpage์ "Input ์คํฌ๋ฆฝํธ" ,"Output ์คํฌ๋ฆฝํธ"์ ๋ด์ฉ์ ์๋ ๊ฒ๋ค์ด Script๋ผ๊ณ ๋ถ๋ฅด๋ ์ผ์ข
์ Program Language ๋ผ๋ ์ ์ด ์ดํด๋์์ ๊ฒ์ด๋ค.
๋ค๋ง,๊ฑฐ๊ธฐ์ ํจ๊ป ๋์ ์๋ ๋ Script๊ฐ ์๋ก์ ์์ ์๋๋ผ๋ ์ ์ด๋ค. ์ฆ, ๊ทธ๊ณณ์ "Input์คํฌ๋ฆฝํธ"์ ์์ด ๋๋ ์๋๋ฐฉ์,Tx์ Inputs์์ ๊ธฐ์ ๋ Previous Txid ์ index์ ๊ฑธ๋ ค์๋ Output Script์ธ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฒํ ํ ์ด Output Script์ ์ค๋ก๋ Bitcoin์ด๊ธฐ์ ๊ตฌ์๋ฐฉ์์ด๋ฉฐ, "Pubkey๋ก Payํ๋(์ก๊ธํ๋)๋ฐฉ์"์ด๋ฏ๋ก, "P2PK (Pay to Public Key)"๋ฐฉ์์ด๋ผ๊ณ ๋ค ๋ถ๋ฅธ๋ค. ์ค๋๋ ์ ์ฐ์ง ์๋ ๋ฐฉ์์ด๋ค. ์ฌ์ค Block #170 ๋น์์๋ Bitcoin Address๋ผ๋ ๊ฐ๋ ์ด ๋์ ๋๊ธฐ ์ ์ด์๋ค. ๋ฐ๋ผ์, Block #170์ ๋์ค๋ Address๋, ๊ทธ Pubkey์ ํ์ฌ์ Address๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์๊ธ์ ์ผ๋ก ์ ์ฉํ์ฌ,๊ทธ๊ฒ์ ๋ณด์ด๊ณ ์๋ ๊ฒ์ด๋ค.
์ด์๊ณผ ๊ฐ์ด Inputs๋ถ๋ถ์ ๋ํ ๊ฒ์ฆ์ด Pass๋๋ฉด, 2์ฐจ์ ์ผ๋ก Outputs๋ถ๋ถ์ ๋ํ ๊ฒ์ฌ๊ฐ ์ด๋ฃจ์ด ์ง๋๋ฐ, ๊ทธ๋ด์ฉ์, Outputs๋ถ๋ถ์ Value(Satoshi)์ดํฉ์ด Inputs์ ์๊ธ ์ดํฉ์ ๋์ง๋ ์๋๊ฐ๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ด๋ค. OuputScript์ ๋ด์ฉ์ ์ผ์ Checkํ์ง ์๋ ๊ฒ์ผ๋ก ์๋ค. ๊ทธ๊ณณ์ Pass๋ถ๊ฐ๋ฅํ ๊ด๋ฌธ์ด ์ค์น๋์ด ์์ ๊ทธ Satoshi์ ์ ๊ทผ์ ํ ์ ์๊ฒ ๋์ด๋ ํ ์ ์๋ ์ผ์ด๋ค. (๊ทธ๋ฌํ ๊ฒ์ Unspendable Output์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.)
๋ชจ๋ ๊ฒ์ฆ/๊ฒ์ฌ๋ฅผ ๋ฌด์ฌํ Passํ Tx์ ๋ค๋ฅธ ๋ช๋ช Node๋ค์๊ฒ๋ ์ ๋ฌ๋๋ฉฐ("์๋ฌธ"์ด ํผ์ง๋ ๊ณผ์ ์ฒ๋ผ),๊ทธ๊ฒ์ ๋ฐ์ Node๋ค์ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์ฆ/๊ฒ์ฌ๋ฅผ ์ค์ํ๋ค. ๊ฒ์ฆ์ Passํ์ง ๋ชปํ Tx์ ๋ฒ๋ ค์ง๋ค(Reject).