Skip to content

ghdeo/myBlockchainProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1 Commit
ย 
ย 
ย 
ย 

Repository files navigation

๋ธ”๋ก์ฒด์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ”„๋กœ์ ํŠธ


๋ชฉ์ 

์–ด๋–ค ๋ฌผํ’ˆ์˜ ์†Œ์œ ๊ถŒ ์ด์ „ ํ˜„ํ™ฉ์„ ๋ธ”๋ก์ฒด์ธ์— ๊ธฐ๋ก ํ•˜์—ฌ ํŠน์ • ๋ฌผํ’ˆ์˜ ๋งค๋งค์‹œ ํ˜„์žฌ์˜ ์†Œ์œ ์ž, ์ „์ฒด ์†Œ์œ ๊ถŒ ์ด์ „ ํžˆ์Šคํ† ๋ฆฌ, ์‹ค๊ฑฐ๋ž˜ ๊ฐ€๊ฒฉ ๋ณ€๋™ ์ถ”์ด ๋“ฑ ์‹ ๋ขฐํ•  ์ˆ˜ ์ž‡๋Š” ์ •๋ณด๋ฅผ ๊ฑฐ๋ž˜ ๋‹น์‚ฌ์ž ์–‘์ธก์ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„

P2P ๋„คํŠธ์›Œํฌ

myBlockChain์„ ์œ„ํ•œ P2P ๋„คํŠธ์›Œํฌ๋Š” ๋‹ค์ˆ˜์˜ full ๋…ธ๋“œ๋“ค๊ณผ ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. P2P ๋„คํŠธ์›Œํฌ์˜ ์œ„์ƒ(topology)์€ ํŒŒ์ผ topology.dat์— ๊ธฐ์ˆ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ •ํ•ด์ง„๋‹ค. ํŒŒ์ผ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ Fi๋Š” full ๋…ธ๋“œ, Ui๋Š” ์‚ฌ์šฉ์ž ๋…ธ๋“œ, Ui-Fj๋Š” Ui์™€ Fj์‚ฌ์ด์˜ ๋งํฌ, Fi-Fj๋Š” Fi์™€ Fj ์‚ฌ ์ด์˜ ๋งํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    % cat topology.dat
    {
    node F0, F1, F2, F3, F4, F5
    node U0, U1, U2, U3
    link U0-F1, U1-F2, U2-F4, U3-F0
    link F0-F1, F2-F1, F2-F4, F3-F4, F4-F0, F4-F1, F3-F1, F2-F5, F4-F5 }
    %

๊ฐ full ๋…ธ๋“œ๋Š” ์ˆ˜์‹ ํ•œ ํŠธ๋žœ์žญ์…˜์„ ๊ฒ€์ฆํ•˜๋Š”๋ฐ, ๊ฒ€์ฆ ์„ฑ๊ณต(valid๋ผ ํŒ๋‹จ)ํ•˜๋ฉด ์ € ์žฅํ•œ ํ›„, ์ด๋ฅผ ์ด์›ƒ ๋…ธ๋“œ(๋“ค)์— ๋ณด๋‚ด๊ณ , ๊ฐ ์ด์›ƒ ๋…ธ๋“œ๋Š” ์ด๋ฅผ ๋‹ค์‹œ ์ด์›ƒ(๋“ค)์— ์ „ํŒŒ ํ•˜๋Š” ์‹์œผ๋กœ ์ „์ฒด ๋„คํŠธ์›Œํฌ์— ์ „ํŒŒ๋˜๊ฒŒ ํ•œ๋‹ค. Full ๋…ธ๋“œ๋Š” ์ž์‹ ์ด ํŒ๋‹จํ•˜๋Š” longest chain์˜ ๋งˆ์ง€๋ง‰ ๋ธ”๋ก์— ์—ฐ๊ฒฐํ•  ๋ธ”๋ก์„ ์ฑ„๊ตดํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ์ฑ„๊ตด์— ๋จผ์ € ์„ฑ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ full ๋…ธ๋“œ๋“ค๊ณผ ๊ฒฝ์Ÿํ•œ๋‹ค. Full ๋…ธ๋“œ๋Š” ์ฑ„๊ตด ์„ฑ๊ณต ์‹œ, ์ฑ„๊ตด ๋ธ”๋ก์„ ์ฆ‰ ์‹œ ์ด์›ƒ ๋…ธ๋“œ(๋“ค)์— ์ „๋‹ฌํ•ด ์ด ๋ธ”๋ก์ด ์ „์ฒด ๋„คํŠธ์›Œํฌ๋กœ ์ „ํŒŒ๋˜๊ฒŒ ํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๊ตฌ์„ฑ ๋ฐ ๋ฐœ์ƒ

์ด ์„œ๋น„์Šค์—์„œ ํ•„์š”ํ•œ ํŠธ๋žœ์žญ์…˜์€ ๋‹จ ํ•œ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ํŒ๋งค์ž(seller)๊ฐ€ ๊ตฌ๋งค์ž(buyer)์—๊ฒŒ ๋ฌผํ’ˆ์˜ ์†Œ์œ ๊ถŒ์„ ๋„˜๊ธฐ๋Š” ๊ฑฐ๋ž˜ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•œ ๊ฒƒ์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ trID: <input, output, identifier, modelNo, manufactured date, price, trading date, others>๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, input์€ ํŠน์ • ๋ฌผํ’ˆ์˜ ํŒ๋งค์ž(ํ˜„์žฌ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ์†Œ์œ ์ž)์˜ public key์ด๋ฉฐ, output์€ ์ด ๋ฌผํ’ˆ ๊ตฌ๋งค์ž์˜ public key์ด๋‹ค. ๋˜ํ•œ identifier(ํŠน์ • ๋ฌผํ’ˆ์„ ์ง€์นญํ•˜๋Š” ID(์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌผํ’ˆ์— ๋ถ€์ฐฉ๋œ bar-code๋‚˜ QR- code ํ†ตํ•ด ์–ป๋Š” ๊ฐ’)), modelNo(๋ฌผํ’ˆ์˜ ๋ชจ๋ธ๋ช…), manufactured date(๋ฌผํ’ˆ์˜ ์ œ์กฐ์ผ)์€ ์ด ๋ฌผํ’ˆ์˜ ๋ชจ ๋“  ๊ณผ๊ฑฐ ๋ฐ ํ˜„์žฌ์™€ ๋ฏธ๋ž˜์˜ ํŒ๋งค ํŠธ๋žœ์žญ์…˜๋“ค์—์„œ ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜ ์—†๋Š” immutable์ด๋ฉฐ, price(ํŒ๋งค๋œ ๊ฐ€๊ฒฉ), trading date(๊ฑฐ๋ž˜์ผ)์™€ others๋Š” mutable์ด๋‹ค. others ํ•„๋“œ๋Š” ์ด ๋ฌผํ’ˆ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์–ด๋–ค ๋‚ด์šฉ์ด๋“  ์“ธ ์ˆ˜ ์žˆ๋‹ค. trID๋Š” ํŠธ๋žœ์žญ์…˜์˜ ID๋กœ์„œ ํŠธ๋žœ์žญ์…˜ ์ „์ฒด(์„œ๋ช… ์ œ์™ธ)์— ๋Œ€ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜ ์ ์šฉ ๊ฒฐ๊ณผ์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ํŒ๋งค์ž์™€ ๊ตฌ๋งค์ž์˜ ํ™•์ธ ํ›„, ํŒ๋งค์ž์˜ ํŠธ๋žœ์žญ์…˜ ์ „์ฒด์— ๋Œ€ํ•œ ์„œ๋ช…์ด ์ถ”๊ฐ€๋œ ์ƒํƒœ๋กœ P2P ๋„คํŠธ์›Œํฌ์— ์ „ํŒŒ๋œ๋‹ค. ์ด ์„œ๋ช…์€ ํŒ๋งค์ž์˜ public key๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ธ”๋ก ๊ตฌ์กฐ

๋ธ”๋ก์€ ํ—ค๋”์™€ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ํ—ค๋”์—๋Š” blockNo(myBlockChain ์ƒ์˜ ๋ธ”๋ก ์ˆœ์„œ๋กœ์„œ genesis block์€ blockNo๋กœ 0, ๋‹ค์Œ ๋ธ”๋ก์€ 1, ... ์˜ No๋ฅผ ๊ฐ€์ง), prevHash(myBlockChain ์ƒ ์ง์ „ ๋ธ”๋ก์— ๋Œ€ํ•œ hash pointer), nonce(hash puzzle ํ’€ ๋•Œ, ์ด๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉฐ target number๋ณด๋‹ค ๋ธ”๋ก hash ๊ฒฐ๊ณผ๊ฐ€ ์ž‘์•„์งˆ ๋•Œ๊นŒ ์ง€ ์‹œ๋„ํ•จ) ๋ฐ Merkle-root(ํŠธ๋žœ์žญ์…˜๋“ค์„ leaf๋กœ ๊ฐ€์ง€๋Š” Merkle-tree์˜ root์— ํ•ด๋‹นํ•˜๋Š” hash ๊ฐ’)์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ์ด ๋ธ”๋ก์— ํฌํ•จ๋  ํŠธ๋žœ์žญ์…˜๋“ค์„ leaf ๋“ค๋กœ ํ•˜๋Š” Merkle-tree์ด๋‹ค(๋‹ค๋งŒ Bitcoin๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ coinbase ํŠธ๋žœ์žญ์…˜์€ ์—†์Œ).

์ฑ„๊ตด ๋ฐ mhBlockChain ํ˜•์„ฑ

๊ฐ full ๋…ธ๋“œ๋Š” ์ฑ„๊ตด์„ ์œ„ํ•ด ๋ธ”๋ก์— ํฌํ•จ๋  ํŠธ๋žœ์žญ์…˜๋“ค์„ ๋ชจ๋‘ ๊ฒ€์ฆํ•˜๋Š”๋ฐ, ๊ฒ€์ฆ์„ ์œ„ํ•œ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํŠธ๋žœ์žญ์…˜ T์— ๋Œ€ํ•˜์—ฌ, (1) T๋ฅผ ํ†ตํ•ด ํŒ๋งคํ•˜๋ ค๋Š” ๋ฌผํ’ˆ์˜ ์ตœ์ข… ์†Œ์œ ์ž(์ฆ‰ ํ•ฉ์˜๋œ ๋งˆ์ง€๋ง‰ ํŒ๋งค์˜ ๊ตฌ๋งค์ž)๊ฐ€ T์˜ input(์ฆ‰ ํŒ๋งค์ž)๊ณผ ๊ฐ™์€ ์ง€, (2) T์˜ immutable ํ•„๋“œ๋“ค ๊ฐ’์ด ํ•ฉ์˜๋œ ๋งˆ์ง€๋ง‰ ํŒ๋งค์˜ ๊ทธ๊ฒƒ๋“ค๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€, (3) ์„œ๋ช…์ด T์˜ input ์ฃผ์†Œ์ธ public key๋กœ ๊ฒ€์ฆํ•œ ๊ฒฐ๊ณผ T ์ „์ฒด(์„œ๋ช… ์ œ์™ธํ•œ)์˜ ์„œ๋ช…์ด ๋งž๋Š”์ง€, ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•œ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์„ ํƒํ•ด Merkle-tree๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๋ธ”๋ก ํ—ค๋”์˜ nonce ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ target number๋ณด๋‹ค ์ž‘์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ฑ„๊ตด์— ์„ฑ๊ณตํ•œ full ๋…ธ๋“œ๋Š” ์ฑ„๊ตดํ•œ ๋ธ”๋ก์„ ์ฆ‰์‹œ P2P ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์—๊ฒŒ ์ „ํŒŒํ•œ๋‹ค(์‚ฌ์šฉ์ž ๋…ธ๋“œ๋Š” ๋„์ฐฉํ•œ ์ฑ„๊ตด ๋ธ”๋ก์„ ๋ฌด์‹œํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ Fj->Ui๋ฐฉํ–ฅ์˜ ํ†ต์‹ ์„ ์ฐจ๋‹จํ•จ). ์ฑ„๊ตด๋œ ๋ธ”๋ก์„ ์ˆ˜์‹ ํ•œ full ๋…ธ๋“œ๋Š” ์ด ๋ธ”๋ก์„ ๊ฒ€์ฆํ•œ ํ›„, ์ด ๋ธ”๋ก์„ ๋ฐ˜์˜ํ•œ ๊ฐฑ์‹ ๋œ myBlockChain์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ธ”๋ก์˜ ์ฑ„๊ตด์„ ์‹œ๋„ํ•œ๋‹ค. Bitcoin๊ณผ ๋‹ฌ๋ฆฌ, ์ด๋Ÿฌํ•œ ์ฑ„๊ตด ๊ณผ์ •์˜ ๋‚œ๋„(difficulty)๋Š” ๋ถˆ๋ณ€์ด๋ผ ๊ฐ€์ •ํ•˜๊ณ  target number ์—ญ์‹œ ๊ณ ์ •๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ target number๋Š” ๋ธ”๋ก ์ฑ„๊ตด์— ์†Œ์š”๋˜๋Š” ํ‰๊ท  ์‹œ๊ฐ„์ด (10์ดˆ~15์ดˆ) ์ •๋„๊ฐ€ ๋˜๋„๋ก ์ž์œ ๋กญ๊ฒŒ ์ •ํ•œ๋‹ค. myBlockChain์€ Bitcoin์˜ longest chain rule์„ ๋”ฐ๋ผ ๊ฐ full ๋…ธ๋“œ๊ฐ€ ํ˜„์žฌ ํ•ฉ์˜๋œ chain์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ๋…์ž์ ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ์ฑ„๊ตด๋  ๋ธ”๋ก์„ ์–ด๋А ๋ธ”๋ก์— ์—ฐ๊ฒฐํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ฒŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Bitcoin ๋ธ”๋ก์ฒด์ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ผ์ • ๊ธฐ๊ฐ„ full ๋…ธ๋“œ ์‚ฌ์ด์˜ ํ•ฉ์˜๋œ ์ฒด์ธ์— ๋Œ€ํ•œ ์˜๊ฒฌ ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ถ๊ทน์  ์œผ๋กœ ๋ชจ๋“  full ๋…ธ๋“œ๋“ค ์‚ฌ์ด์— ํ•ฉ์˜๋œ, ๊ฐ€์žฅ ๊ธด myBlockChain์ด ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค.

๋งˆ์Šคํ„ฐ process๋ฅผ ํ†ตํ•œ ๋™์ž‘ ํ™•์ธ

๊ตฌํ˜„๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ์งˆ์˜๋ฅผ ๋ฐ›๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๊ตฌํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋งˆ์Šคํ„ฐ process๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด process๋Š” myBlockChain ๋ฐ ๋ชจ๋“  full ๋…ธ๋“œ๋“ค์— ์ ‘๊ทผํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜ ๊ฑฐ๋‚˜ ์š”์ฒญํ•˜์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. Full ๋…ธ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ process๋Š” ๋งˆ์Šคํ„ฐ process์˜ ๋ฐ ์ดํ„ฐ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ์ฆ‰๊ฐ์ ์œผ๋กœ ์‘ํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ๋งˆ์Šคํ„ฐ process๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

(1) snapshot myBlockChain ALL(๋˜๋Š” ํŠน์ • Fi) ALL์ด ์ง€์ •๋˜๋ฉด ํ˜„์žฌ ์‹œ์ ์˜ ๊ฐ full ๋…ธ๋“œ๊ฐ€ ํŒ๋‹จํ•˜๋Š” myBlockChain์„, ํŠน์ • Fi ๊ฐ€ ์ง€์ •๋˜๋ฉด ํ•ด๋‹น Fi๊ฐ€ ํŒ๋‹จํ•˜๋Š” myBlockChain์„, ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค.

(2) snapshot trPool <Fi> Full ๋…ธ๋“œ Fi๊ฐ€ ํ˜„์žฌ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜ ํ’€(์ฑ„๊ตด ์‹œ ๋ธ”๋ก์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์˜ ์ง‘ํ•ฉ)์˜ ๋‚ด์šฉ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค.

(3) verifyLastTr <Fi> Full ๋…ธ๋“œ Fi๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๋ธ”๋ก ์ฑ„๊ตด ์‹œ ํฌํ•จํ•œ ๋งˆ์ง€๋ง‰ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒ€์ฆ ๊ฒฐ๊ณผ (์ฆ‰, Fi๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ ์‹œ๋„ํ•œ ์ฑ„๊ตด ์‹œ(์„ฑ๊ณต ์—ฌ๋ถ€ ๋ฌด๊ด€) ์‚ฌ์šฉํ•œ ๋ธ”๋ก์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํฌํ•จ๋œ(Merkle tree์˜ rightmost leaf์— ํ•ด๋‹นํ•˜๋Š”) ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ๊ฒ€์ฆ ๋‚ด์šฉ ๋ฐ ๊ฒฐ๊ณผ)๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published