μ΄λ리μμ νΌλΈλ¦ λΈλ‘체μΈμ μΌμ’ μΌλ‘ μ€λ§νΈ 컨νΈλνΈ(smart contract)λ₯Ό μ€ννλ νμ€μνλ μλ μ»΄ν¨ν°μ΄λ€.
μ΄λ리μμ κ²°μ λ‘ μ μ΄μ§λ§, νμ λμ§ μμ μν λ¨Έμ μ΄λ©°, μ μμ μΌλ‘ μ κ·Ό κ°λ₯ν μ±κΈν€ μνμ κ·Έ μνλ₯Ό λ³νμν¬ μ μλ κ°μλ¨Έμ μΌλ‘ ꡬμ±λμ΄ μλ€.
- Peer-to-Peer λ€νΈμν¬ (P2P network)
μ΄λ리μμ TCP ν¬νΈ 30303μΌλ‘ μ μ κ°λ₯ν μ΄λ리μ λ©μΈ λ€νΈμν¬(Ethereum main network)μμ μ€νλλ€.
- ν©μ κ·μΉ(consensus rules)
μ΄λ리μμ ν©μ κ·μΉμ κΈ°μ€ μ¬μμΈ ν©μ(Yello Paper)μ μ μλμ΄ μλ€.
- νΈλμμ (transactons)
μ΄λ리μ νΈλμμ μ λ³΄λΈ μ¬λ, λ°λ μ¬λ, κ° λ° λ°μ΄ν° νμ΄λ‘λκ° ν¬ν¨λ λ€νΈμν¬ λ©μμ§μ΄λ€.
- μν λ¨Έμ (state machine)
μ΄λ리μ μν μ μ΄λ λ°μ΄νΈμ½λ(bytecode, κΈ°κ³μ΄ λͺ λ Ήμ΄)λ₯Ό μ€ννλ μ€ν κΈ°λ° κ°μλ¨Έμ μΈ EVM(Ethereum Virtual Machine, μ΄λ리μ κ°μλ¨Έμ )μ μν΄ μ²λ¦¬λλ€.
μ€λ§νΈ 컨νΈλνΈλ λ°μ΄νΈ μ½λλ‘ μ»΄νμΌλμ΄ EVMμ ν΅ν΄ μ€νλλ€.
- λ°μ΄ν° ꡬ쑰(data structure)
μ΄λ리μμ μνλ νΈλμμ λ° μμ€ν μνκ° λ¨Έν΄ ν¨νΈλ¦¬μ€ νΈλ¦¬(Merkle Patricia Tree)λΌκ³ νλ μ§λ ¬ν(seriallize)λ ν΄μ λ°μ΄ν° ꡬ쑰λ‘, κ° λ Έλμ λ°μ΄ν°λ² μ΄μ€(levelDB)μ μ μ₯λλ€.
- ν©μ μκ³ λ¦¬μ¦(consensus algorithm)
μ΄λ리μμ λΉνΈμ½μΈμ ν©μ λͺ¨λΈμΈ λκ°λͺ¨ν ν©μ(Nakamoto Consensus)λ₯Ό μ¬μ©νλ€.
λμΉ΄λͺ¨ν ν©μλ μμ°¨ λ¨μΌ μλͺ λΈλ‘μ μ¬μ©νμ¬ μμ μ¦λͺ (PoW)μ μ€μλ κ°μ€μΉκ° κ°μ₯ κΈ΄ 체μΈ(νμ¬ μν)μ κ²°μ νλ€.
κ·Έλ¬λ μ΄λ리μ 2.0λΆν΄ μ§λΆμ¦λͺ (PoS) κ°μ€ ν¬ν μμ€ν μΌλ‘ μ νν κ³νμ΄λ€.
- κ²½μ μ 보μμ±(economic security)
μ΄λ리μμ νμ¬ EthashλΌλ μμ μ¦λͺ (PoW) μκ³ λ¦¬μ¦μ μ¬μ©νμ§λ§, ν₯νμλ κ²°κ΅ μ§λΆμ¦λͺ (PoS) μκ³ λ¦¬μ¦μ μ¬μ©ν μμ μ΄λ€.
- ν΄λΌμ΄μΈνΈ(clients)
μ΄λ리μμ ν΄λΌμ΄μΈνΈ μννΈμ¨μ΄λ₯Ό μνΈμ΄μ©ν μ μλ ꡬ쑰체λ₯Ό κ°κ³ μλ€.
κ°μ₯ μ λͺ ν κ²μ κ²μ€(Go-Ehtereum, Geth)μ ν¨λ¦¬ν°(Parity)μ΄λ€.
- μ΄λ리μμ λ³Έμ§μ μΌλ‘ νΈλμμ μ κΈ°λ°ν μν λ¨Έμ (state machine)μ΄λ€.
- μν λ¨Έμ μ μΌλ ¨μ μ 보λ₯Ό μ½κ³ μ΄λ₯Ό λ°νμΌλ‘ μλ‘μ΄ stateλ‘ μ΄λνλ μμ€ν μ μλ―Ένλ€.
- μ΄λ리μ μν λ¨Έμ μ μμ μ λ€μμ€(Genesis)λΌ λΆλ¦¬λ stateμμ μΆλ°νλ©° μ λ€μμ€λ λ€νΈμν¬μμ μ΄λ ν νΈλμμ λ λ°μνμ§ μμ stateλ₯Ό λ§νλ€.
- μ΄λ리μμ stateλ μλ°±λ§μ νΈλμμ λ€λ‘ μ΄λ£¨μ΄μ Έ μλλ°, μ΄λ λΈλ‘λ¨μλ‘ λ¬Άμ¬ μλ€.
- λΈλ‘μ μΌλ ¨μ νΈλμμ λ€μ ν¬ν¨νκ³ , κ°κ°μ λΈλ‘λ€μ μ΄μ λΈλ‘κ³Ό λΈλ‘ ν΄μλ₯Ό 맀κ°λ‘ μ°κ²°λμ΄ μλ€.
- νλμ stateλ‘λΆν° λ€μ stateλ‘ λμ΄κ°κΈ° μν΄μλ λ°λμ ν΄λΉ νΈλμμ μ΄ μ ν¨ν νΈλμμ μ΄μ΄μΌ νλ€.
- νΈλμμ μ΄ μ ν¨νλ€λ©΄, λ€νΈμν¬μ μ°Έμ¬νλ λ€μμ μ±κ΅΄μ λ Έλλ€λ‘λΆν° κ²½μμ μΈ μ±κ΅΄μ κ±°μ³ λΈλ‘μΌλ‘ λ³ν© λ° λ±λ‘λλ€.
- μ΄λ리μμ μν(State)λ κΈλ‘λ²νκ² κ³΅μ λλ©° μ΄λ κ³μ (Account)μ 맀νμν¨ μ£Όμλ€μ μ§ν©μ΄λ€.
- νΉμ κ³μ μ λ©μμ§ μ λ¬ νλ μμν¬λ₯Ό ν΅ν΄ λ€λ₯Έ κ³μ κ³Ό μνΈμμ©νλ€.
- κ° κ³μ μ μμ μ λν μ 보μ 20λ°μ΄νΈμ μ£Όμλ₯Ό κ°μ§λ€.
- μΈλΆ μμ κ³μ (Externally Owned Account: EOA)
- κ°μΈν€κ° μλ€.
- κ°μΈ ν€λ‘ μ μ΄λλ©° μ½λλ₯Ό μ μ₯ν μ μλ€.
- μκΈ λλ 컨νΈλνΈμ λν μ κ·Όμ μ μ΄νλ€.
- νΈλμμ μ μμν μ μλ€.
- 컨νΈννΈ κ³μ (Contract Account: CA)
- κ°μΈν€κ° μλ€.
- μ€λ§νΈ 컨νΈλνΈ λ‘μ§μ μν΄ μ μ΄λλ©° μ€λ§νΈ 컨νΈλνΈ μ½λλ₯Ό μ μ₯ν μ μλ€.
- κ°μΈν€κ° μμ΄ μ€μ€λ‘ νΈλμμ μ μμν μ μλ€.
- μΈλΆ νΈλμμ μ λν μλ΅μ ν΅ν΄ νΈλμμ μ μ€νν μ μλ€.
- λ Όμ€(Nonce)
- EOAμ κ²½μ°, ν΄λΉ κ³μ μ μ£Όμλ‘λΆν° μμν νΈλμμ λ€μ μλ₯Ό μλ―Ένλ€.
- CAμ κ²½μ°, ν΄λΉ κ³μ μ μν΄ μμ±λ 컨νΈλνΈμ μλ₯Ό μλ―Ένλ€.
- Balance
- ν΄λΉ κ³μ μ΄ μμ νκ³ μλ Weiμ μ (10^18 Wei = 1 ETH)
- StorageRoot
- λ¨Έν΄ ν¨νΈλ¦¬μ€ νΈλ¦¬μ 루νΈλ Έλλ₯Ό ν΄μ±ν κ°
- λ¨Έν΄ ν¨νΈλ¦¬μ€ νΈλ¦¬λ μ΄λ리μμ TXλ₯Ό 보κ΄νκ³ μ ν¨μ±μ κ²μ¦νκΈ° μν μλ£κ΅¬μ‘°λ‘ κ³μ μ μ μ₯λ μμλ€μ ν΄μκ°μΌλ‘ μνΈννμλ€.
- CodeHash
- EVM(Ethereum Virtual Machine)μμ μ€νλ μ½λμ ν΄μκ°
- CAμ κ²½μ°, ν΄λΉ κ³μ μμ μ€νμν¬ μ€λ§νΈ 컨νΈλνΈ μ½λμ ν΄μκ°μ΄λ€.
- EOAμ κ²½μ°, μ½λλ₯Ό μ μ₯ν μ μκΈ°ν΄ empty λ¬Έμμ΄μ ν΄μκ°μ΄λ€.
- νΈλμμ μ μΈλΆ μμ κ³μ (EOA)μ μν΄ μλͺ λ λ°μ΄λ리 λ©μμ§μ΄λ€.
- μ΄λ리μ λ€νΈμν¬μ μν΄ μ μ‘λκ³ μ΄λ리μ λΈλ‘체μΈμ κΈ°λ‘λλ€.
- νΈλμμ μ EVMμμ μν λ³κ²½μ μ λ°νκ±°λ 컨νΈλνΈλ₯Ό μ€νν μ μλ μ μΌν λ°©λ²μ΄λ€.
- λ Όμ€(Nonce)
λ°μ EOAμ μν΄ λ°νλμ΄ λ©μμ§ μ¬μ¬μ©μ λ°©μ§νλλ° μ¬μ©λλ μΌλ ¬λ²νΈ
νμ€μνλ μμ€ν μμ νΈλμμ μ²λ¦¬ μ°μ μμλ₯Ό νλ³ν λ μ¬μ©νλ€.
- κ°μ€ κ°κ²©(gas price)
λ°μ μκ° μ§κΈνλ κ°μ€μ κ°κ²©
- κ°μ€ νλ(gas limit)
μ΄ νΈλμμ μ μν΄ κ΅¬μ ν κ°μ€μ μ΅λλ
- μμ μ(recipient)
λͺ©μ μ§ μ΄λ리μ μ£Όμ
- κ°(value)
λͺ©μ μ§μ λ³΄λΌ μ΄λμ μ
- λ°μ΄ν°(data)
κ°λ³ κΈΈμ΄ λ°μ΄λ리 λ°μ΄ν° νμ΄λ‘λ
- v,r,s
EOAμ ECDSA λμ§νΈ μλͺ μ μΈκ°μ§ ꡬμ±μμ
- κ°μ€λ μ΄λ리μμ μ°λ£λ‘ νΈλμμ λ° μ°μ° λ°μ μ λ°μ μκ° λΆλ΄νλ μμλ£μ΄λ©° μ΄λ μ±κ΅΄μμκ² λ³΄μμΌλ‘ μ§κΈλλ€.
- μ΄λ리μμ νΈλμμ μ κ°μ€λ₯Ό λΆκ³Όνμ¬ νΈλμμ λ°μκ³Ό νΈλμμ μ΄ μ¬μ©νλ μμμ μμ μ μ΄νλ€.
- κ°μ€ κ°κ²©μ μ‘°μ ν΄ νΈλμμ 컨ν μ°μ μμλ₯Ό μ‘°μ ν μ μλ€.
- νΈλμμ μμ κ³Όλν μ°μ°μ΄ λ°μν΄ κ°μ€ νλ(gas limit)λ₯Ό λμ΄μ€ κ²½μ° ν΄λΉ νΈλμμ μ²λ¦¬λ₯Ό μ€λ¨νλ€.
- κ°μ€ κ°κ²©(gas price) * κ°μ€ νλ(gas limit) = μ΅λ μμλ£
- 20byteμ μ΄λ리μ μ£Όμλ₯Ό ν¬ν¨νλ©° EOA λλ 컨νΈλνΈμ μ£ΌμμΌ μ μλ€.
- μ΄λ리μμ ν΄λΉ νλλ₯Ό κ²μ¦νμ§ μμΌλ©° λͺ¨λ 20byte κ°μ μ ν¨νλ€κ³ κ°μ£Όνλ€.
- νΈλμμ μ μ£Όμ νμ΄λ‘λλ κ°κ³Ό λ°μ΄ν°μ ν¬ν¨λλ€.
- νΈλμμ μ κ°κ³Ό λ°μ΄ν°, κ°λ§, λ°μ΄ν°λ§, κ°κ³Ό λ°μ΄ν° λͺ¨λ κ°μ§μ§ μλ λ€κ°μ§ μ‘°ν©μ΄ λͺ¨λ μ ν¨νλ€.
- κ°λ§ μλ νΈλμμ μ μ§κΈ(payment), λ°μ΄ν°λ§ μλ νΈλμμ μ νΈμΆ(invocation), κ°κ³Ό λ°μ΄ν° λͺ¨λ μ¬μ©νλ νΈλμμ μ μ§κΈκ³Ό νΈμΆμ΄λ€.
- μ§κΈ νΈλμμ μ μμ μ μ£Όμκ° EOAμΈμ§ 컨νΈλνΈμΈμ§μ λ°λΌ λ€λ₯΄κ² μλνλ€.
- EOAμΈ κ²½μ°, μ΄λ리μμ μν λ³κ²½μ κΈ°λ‘νμ¬ μ£Όμ μμ‘μ λ³΄λΈ κ°μ μΆκ°νλ€.
- 컨νΈλνΈμΈ κ²½μ°, EVMμ 컨νΈλνΈλ₯Ό μ€ννκ³ νΈλμμ μ λ°μ΄ν° νμ΄λ‘λμ μ§μ λ ν¨μλ₯Ό νΈμΆνλ € νλ€.
- λ°μ΄ν°κ° μμΌλ©΄ ν΄λ°± ν¨μλ₯Ό νΈμΆνκ³ , ν΄λ°±ν¨μκ° μ€μ λμ§ μμ κ²½μ°μ EOAμ λ§μ°¬κ°μ§λ‘ 컨νΈλνΈμ μμ‘μ λλ¦°λ€.
- νΈμΆ νΈλμμ μ λλΆλΆ 컨νΈλνΈλ‘ ν₯νλ©° μ λ¬λ λ°μ΄ν°λ EVMμ μν΄ μ»¨νΈλνΈ νΈμΆλ‘μ ν΄μλκ³ μ»¨νΈλνΈμμλ μ΄λ₯Ό ν¨μ νΈμΆλ‘ μ¬μ©νλ€.
- 컨νΈλνΈ μμ± νΈλμμ μ μ λ‘ μ΄λλ μ€λΌκ³ νλ νΉμ λμ μ£Όμλ‘ μ μ‘λλ€.
- 컨νΈλνΈ μμ±μ μμ μ μ£Όμλ 0x0μΌλ‘ ν΄λΉ μ£Όμλ EOAλ 컨νΈλνΈλ₯Ό λνλ΄μ§ μμΌλ©° μ΄λλ₯Ό μλΉνκ±°λ νΈλμμ μ μμν μ μλ€.
- μ΄λ리μ λ€νΈμν¬λ 'νλ¬λ λΌμ°ν (flood routing)' νλ‘ν μ½μ μ¬μ©νλ€.
- κ° μ΄λ리μ ν΄λΌμ΄μΈνΈλ λ©μ λ€νΈμν¬λ₯Ό νμ±νλ P2P λ€ν¬μν¬μμ λ Έλ μν μ νλ€.
- νΈλμμ μ νλ μλͺ λ νΈλμμ μ μμ±ν μ΄λ리μ λ Έλμμ μμν΄ μ΄μ λ ΈλλΌ λΆλ¦¬λ μ§μ μ°κ²°λ λ€λ₯Έ λͺ¨λ μ΄λ리μ λ Έλλ‘ μ μ‘λλ€.
- κ° μ΄μ λ Έλλ νΈλμμ μ μμ νλ©΄ μ¦μ μ ν¨μ±μ κ²μ¬νλ€.
- νΈλμμ μ μ ν¨μ±μ΄ μ μ¦λλ©΄ μ΄μ λ Έλλ€μ ν΄λΉ μ¬λ³Έμ μ μ₯νκ³ λͺ¨λ μ΄μμκ² νΈλμμ μ μ ννλ€.
- κ²°κ³Όμ μΌλ‘ νΈλμμ μ λ€νΈμν¬μ λͺ¨λ λ Έλκ° νΈλμμ μ¬λ³Έμ κ°μ§ λκΉμ§ μμ λ Έλμμ λ°κΉ₯μͺ½μΌλ‘ λ¬Όκ²°μΉλ©° νΌμ§λ€(flooding).
- μ€λ§νΈ 컨νΈλνΈλ λΆλ³μ μΈ(immutable) μ»΄ν¨ν° νλ‘κ·Έλ¨μΌλ‘ EVM(μ΄λ리μ κ°μ λ¨Έμ )μ 컨νΈλνΈμμμ κ²°μ λ‘ μ (deterministically) μλνλ€.
- μ€λ§νΈ 컨νΈλνΈ μ½λλ μΌλ¨ λ°°ν¬λλ©΄ λ³κ²½ν μ μμΌλ©° μμ νλ μ μΌν λ°©λ²μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ°°ν¬νλ κ²μ΄λ€.
- μ€λ§νΈ 컨νΈλνΈλ₯Ό μ€νν κ²°κ³Όλ¬Όμ κ·Έκ²μ μ€νν λͺ¨λ λ Έλμκ² λμΌνλ°, μ΄λ μ€νμ μμν νΈλμμ μ 컨ν μ€νΈμ μ€ν μμ μ μ΄λ리μ λΈλ‘체μΈμ μνκ° λμΌνκΈ° λλ¬Έμ΄λ€.
- μ€λ§νΈ 컨νΈλνΈλ μ리λν°(Solidity)λ λ°μ΄νΌ(Vyper)μ κ°μ κ³ κΈ νλ‘κ·Έλλ° μΈμ΄λ‘ μμ±λλ€.
- μ€λ§νΈ 컨νΈλνΈλ EVM μμμ μ€νλλ©° μ΄λ₯Ό μν΄μ μ μμ€μ λ°μ΄νΈ μ½λλ‘ μ»΄νμΌ λμ΄μΌ νλ€.
- μ€λ§νΈ 컨νΈλνΈλ₯Ό μμ±νλ€.
- 컨νΈλνΈλ₯Ό EVMμμ μ€νλλ μ μμ€μ λ°μ΄νΈμ½λλ‘ μ»΄νμΌνλ€.
- μ»΄νμΌλλ©΄ 컨νΈλνΈ μμ± νΈλμμ μ μ¬μ©νμ¬ μ΄λ리μ νλ«νΌμ λ°°ν¬λλ€.
- λ°°ν¬λ 컨νΈλνΈλ νΈλμμ μ μν΄ νΈμΆλ κ²½μ°μλ§ μ€νλλ©° μ체μ μΌλ‘ λ°±κ·ΈλΌμ΄λμμ μ€νλμ§ μλλ€.
- νΈλμμ μ μμμ±(atomic)μ κ°μ§λλ° λͺ¨λ μ€νμ΄ μ±κ³΅μ μΌλ‘ μ’ λ£λ κ²½μ°μλ§ μν λ³κ²½ μ¬νμ΄ κΈ°λ‘ λ° μ€νλκ³ μ€λ₯λ‘ μΈν΄ μ€νμ΄ μ€ν¨νλ©΄ λͺ¨λ μν λ³κ²½ νΈλμμ μ΄ μ€νλμ§ μμ κ²μ²λΌ λ‘€λ°±λλ€.
- νλ² λ°°ν¬λ 컨νΈλνΈλ μμ μ΄ λΆκ°νμ§λ§ μμ νμ¬ ν΄λΉ μ£Όμμμ μ½λμ μ€ν 리μ§λ₯Ό μ κ±°νκ³ λΉ κ³μ μΌλ‘ λ¨κΈΈ μ μλ€.
- 컨νΈλνΈλ₯Ό μμ νλ©΄ κ°μ€λ₯Ό νλΆμ΄ λ°μνλ©°, μ΄λ μμ λ₯Ό ν΅ν΄ λ€νΈμν¬ ν΄λΌμ΄μΈνΈ μμμ λ°ννλλ‘ νλ λκΈ°λΆμ¬λ‘ μμ©νλ€.
- 컨νΈλνΈλ₯Ό μμ νλλΌλ νΈλμμ λ΄μμ μ κ±°λμ§ μλλ€.
- μ΄λ리μ κ°μ λ¨Έμ (Ethereum Virtual Machine)μ λ°μ΄νΈμ½λλ‘ μ»΄νμΌλ νλ‘κ·Έλλ° μΈμ΄μ μΈν°ν리ν°μ λΉμ·ν κ³μ° μμ§μ΄λ€.
- EOAμμ EOAλ‘ κ°λ¨ν κ°μ μ μ‘νλ νΈλμμ μ μ μΈν λͺ¨λ EVMμ μν μν μ λ°μ΄νΈλ₯Ό μλ°νλ€.
- EVMμ λͺ¨λ μ΄λ리μ λ Έλμμ λ‘컬 μΈμ€ν΄μ€λ‘ μ€νλμ§λ§, EVMμ λͺ¨λ μΈμ€ν΄μ€λ λμΌν μ΄κΈ° μνμμ μλνκ³ λμΌνμ΅μ’ μνλ₯Ό μμ±νκΈ° λλ¬Έμ μμ€ν μ μ²΄κ° νμ€μνλ λ¨μΌ μλ μ»΄ν¨ν°λ‘ μλνλ€.
- EVMμ λ©λͺ¨λ¦¬ λ΄μ λͺ¨λ κ°μ μ€νμ μ μ₯νλ μ€ν κΈ°λ° μν€ν μ²μ΄λ©° 256λΉνΈμ λ¨μ΄ ν¬κΈ°λ‘ λμνλ€.
- EVMμ μ μ¬ νλ§ μμ μν λ¨Έμ μΌλ‘ 무ν 루νλ₯Ό μ μΈν λͺ¨λ νλ‘κ·Έλ¨μ μ€νν μ μλ€.
- EVMμ μ€ν μμκ° μΈλΆ(μ΄λ리μ ν΄λΌμ΄μΈνΈ)μμ ꡬμ±λκΈ°μ μ€μΌμ€λ§ κΈ°λ₯μ΄ μλ€.
- EVMμ μμ€ν μΈν°νμ΄μ€(System Interface) μ²λ¦¬κ° μλ€.
- EVM μλ μν (EVM World State)
μ΄λ리μ μ£Όμλ₯Ό 맀νν κ³μ (Account)μ μ§ν©
- λ³μμ μ λμ EVM κΈλ‘λ² λ€μμ€νμ΄μ€
- EVM μ€νλͺ¨λΈ (EVM Execution Model)
- EVM μν
- νλ‘κ·Έλ¨ μ½λ(μ€λ§νΈ 컨νΈλνΈμ λ°μ΄νΈμ½λ) ROM
- μꡬ μ€ν 리μ§
- νλ°μ± λ©λͺ¨λ¦¬
- νλ‘κ·Έλ¨ μΉ΄μ΄ν°
- μ€ν
- λ°μ΄νΈμ½λ ννμ μ°μ°μ½λ(OPCODE) μν μ¬μ΄ν΄
- Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood
- https://hersheythings.xyz/entry/ethtereumstructure