BlockValidation - everjs78/study GitHub Wiki
Chain์ block์ addํ๊ธฐ์ validation์ ์ํํ๋ค. ์ด๋๋ฆฌ์์ ์ฐธ์กฐํ๋ค. ์ด๋๋ฆฌ์ WhitePaper |
๋นํธ์ฝ์ธ block ๊ฒ์ฆ
์ด ์ฒด๊ณ์์ ํ๋์ ๋ธ๋ก์ด ์ ํจํ์ง ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ๋ธ๋ก์ ์ํด ์ฐธ์กฐ๋๋ ์ด์ ๋ธ๋ก์ด ์กด์ฌํ๋์ง, ์ ํจํ์ง ํ์ธํ๋ค.
ํ์์คํฌํ ๊ฐ์ด ์ด์ ๋ธ๋ก์ ํ์์คํฌํ ๊ฐ๋ณด๋ค ํฌ๋ฉด์ 2์๊ฐ ์ด๋ด์ธ์ง ํ์ธํ๋ค.
์์
์ฆ๋ช
(proof of work)์ด ์ ํจํ์ง ํ์ธํ๋ค.
S[0]๋ฅผ ์ด์ ๋ธ๋ก์ ๋ง์ง๋ง ์ํ(state)๊ฐ ๋๋๋ก ์ค์ ํ๋ค.
TX๋ฅผ n๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ง๋, ๋ธ๋ก์ ํธ๋์ญ์
๋ชฉ๋ก์ผ๋ก ๊ฐ์ ํ๋ค. ํ๊ตฌ๊ฐ 0...n-1์ ๋ชจ๋ i์ ๋ํด, S[i+1] = APPLY(S[i], TX[i])์งํฉ ์ค ์ด๋ ํ๋๋ผ๋ ์๋ฌ๋ฅผ ๋ฆฌํดํ๋ฉด ๊ฑฐ์ง(false)์ ๋ฆฌํดํ๋ฉฐ ์ข
๋ฃํ๋ค.
์ฐธ(true)์ ๋ฆฌํดํ๊ณ , S[n]๋ฅผ ์ด ๋ธ๋ก์ ๋ง์ง๋ง ์ํ๋ก ๋ฑ๋กํ๋ค.
์ด๋๋ฆฌ์ block ๊ฒ์ฆ
์ฐธ์กฐํ๊ณ ์๋ ์ด์ ๋ธ๋ก์ด ์กด์ฌํ๋์ง ๊ทธ๋ฆฌ๊ณ , ์ ํจํ์ง ํ์ธํ๋ค.
ํ์ฌ ๋ธ๋ก์ ํ์์คํฌํ๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ด์ ๋ธ๋ก์ ๊ทธ๊ฒ๋ณด๋ค ํฌ๋ฉด์, ๋์์ ํ ์์ ์ ๊ธฐ์ค์ผ๋ก 15๋ถ ํ๋ณด๋ค ์์ ๊ฐ์ธ์ง ํ์ธํ๋ค.
๋ธ๋ก ๋๋ฒ, difficulty, ํธ๋์ญ์
๋ฃจํธ, ์ผ์ด ๋ฃจํธ, gas ๋ฆฌ๋ฏธํธ๋ฑ(๊ธฐํ ๋ค์ํ ์ด๋๋ฆฌ์ ๋ก์ฐ ๋ ๋ฒจ ๊ฐ๋
)์ด ์ ํจํ์ง ํ์ธํ๋ค.
๋ธ๋ก์ ํฌํจ๋ ์์
์ฆ๋ช
์ด ์ ํจํ์ง ํ์ธํ๋ค.
S[0] ์ด ์ด์ ๋ธ๋ก์ ๋ง์ง๋ง ์ํ(state)๋ผ๊ณ ๊ฐ์ ํ์.
TX๋ฅผ ํ์ฌ ๋ธ๋ก์ n๊ฐ์ ํธ๋์ญ์
๋ฆฌ์คํธ๋ผ๊ณ ํ์. 0 ๋ถํฐ n-1์ ๋ํด, S[i+1] = APPLY(S[i], TX[i]) ๋ก ์ค์ ํ์. ์ดํ๋ฆฌ์ผ์ด์
์ด ์ค๋ฅ๋ฅผ ๋ฐํํ๊ฑฐ๋, ์ด ์์ ๊น์ง ๋ธ๋ก์์ ์๋ชจ๋ ์ด gas๊ฐ GASLIMIT๋ฅผ ์ด๊ณผํ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํ๋ค.
์ฑ๊ตด์์๊ฒ ์ง๋ถ๋ ๋ณด์ ๋ธ๋ก์ S[n] ๋ง๋ถ์ธ ํ ์ด๊ฒ์ S_FINAL ์ด๋ผ ํ์.
์ํ S_FINAL์ ๋จธํด ํธ๋ฆฌ ๋ฃจํธ๊ฐ ๋ธ๋ก ํค๋๊ฐ ๊ฐ์ง๊ณ ์๋ ์ต์ข
์ํ ๋ฃจํธ์ ๊ฐ์์ง๋ฅผ ๊ฒ์ฆํ๋ค. ์ด ๊ฐ์ด ๊ฐ์ผ๋ฉด ๊ทธ ๋ธ๋ก์ ์ ํจํ ๋ธ๋ก์ด๋ฉฐ, ๋ค๋ฅด๋ฉด ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ํ๋จํ๋ค
block validation
- verifyHeader
check extradata size
size > 32 ์ด๋ฉด ์๋ฌ
check time
parent time๋ณด๋ค ์ด์ ์ธ ๊ฒฝ์ฐ ์๋ฌ
uncle์ด ์๋ ๊ฒฝ์ฐ 15์ด ์ด์ ์ง๋ block error
check difficulty
check gas limit
max limit (2^63) check
used > limit
parent gas limit ๊ณผ diff check
check block no = paraent + 1
verifySeal()
POW check
DAG์ ์ด์ฉํ hash ๊ฐ ๊ฒ์ฆ
VerifyDAOHeaderExtraData
chekc DAO hard fork rule
extra data๊ฐ hard fork rule์ ๋ฐ๋ฅด๋์ง ๊ฒ์ฆ
- validateBody
check known block , state . ์กด์ฌํ๋ฉด ์๋ฌ
block
header.stateRoot
check parent block, state. ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ฌ
check uncle
check tx root hash
์๋ฅด๊ณ validation ์ถ๊ฐ
Done
block/parent block์ ๋ํ db check
block ์กด์ฌ/parent block ์กด์ฌ ์ด๋ฏธ check ํจ
consensus validate
check time
concensus์์ slot๊ณผ timestamp check๋ฅผ ํ๊ณ ์์ผ๋ฏ๋ก ํ์์์
Tx validate
๋ค๋ฅธ ๋
ธ๋์์ ๋ฐ์ block ์ธ ๊ฒฝ์ฐ tx ๋ณ signature check ํ์
TxRootHash
๋จธํด ์ฆ๋ช
๊ตฌํ์ TODO๋ก ํฅํ ๊ตฌํ