μ΄λ리μμ μ‘κΈνλ€κ³ νμ λ κ³μ μ μνκ° μ΄λ»κ² λ³νλμ§ μλμμ μ€λͺ ν©λλ€.
νΈλμμ μ΄ νμμ μ λλ‘ λ§λμ§(μ¦, μ¬λ°λ₯Έ κ°μμ κ°μ κ°μ§κ³ μλμ§) 체ν¬νκ³ , μλͺ μ΄ μ ν¨νμ§, nonceκ° λ°μ μ² κ³μ μ nonceμ μΌμΉνλμ§λ₯Ό 체ν¬. κ·Έλ μ§ μλ€λ©΄ μ€λ₯λ₯Ό λ°ν
gaslimit * gasprice λ‘ νΈλμμ μμλ£λ₯Ό κ³μ°νκ³ , μλͺ μΌλ‘λΆν° λ°μ μ² μ£Όμλ₯Ό κ²°μ
λ°μ μ² κ³μ μκ³ μμ μμμ ꡬν νΈλμμ μμλ£λ₯Ό λΉΌκ³ λ°μ μ nonceλ₯Ό μ¦κ°. λ°μ μ² μκ³ κ° μΆ©λΆνμ§ μμΌλ©΄ μ€λ₯λ₯Ό λ°ν
GAS = gaslimit μΌλ‘ μ΄κΈ°ν ν ν, νΈλμμ μμ μ¬μ©λ λ°μ΄νΈμ λν κ°μ μ§λΆνκΈ° μν΄ λ°μ΄νΈλΉ gasμ νΉμ μμ μ°¨κ°
λ°μ μ² κ³μ μμ μμ μ² κ³μ μΌλ‘ νΈλμμ κ°μ 보λ. μμ μ² κ³μ μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ μλ‘ μμ±
μμ μ² κ³μ μ΄ μ»¨νΈλνΈλ©΄, 컨νΈλνΈμ μ½λλ₯Ό λκΉμ§, λλ GASκ° λͺ¨λ μλͺ¨λ λ κΉμ§ μν
λ°μ μ²κ° μΆ©λΆν βλ'μ κ°μ§κ³ μμ§ λͺ»ν΄μ κ° μ μ‘μ΄ μ€ν¨νκ±°λ, μ½λ μνμ GASκ° λΆμ‘±νλ©΄, λͺ¨λ μν λ³κ²½λ₯Ό μμνλ‘ λλ €λμ. λ¨, μμλ£(μ½λλ₯Ό μνν GAS)λ μ μΈλκ³ μ΄ μμλ£λ μ±κ΅΄μ κ³μ μ λν΄μ§κ² λ¨. κ·Έ μΈμλ, λͺ¨λ λ¨μμλ λͺ¨λ GASμ λν μμλ£λ₯Ό λ°μ μ²μκ² λλ €μ£Όκ³ , μλͺ¨λ GASμ μ§λΆλ μμλ£λ₯Ό μ±κ΅΄μμκ² λ³΄λ
μλμ κ°μ΄ κ°μ κ°μ§κ³ μλ€κ³ κ°μ νλ©΄ μν λ³ν ν¨μμ νλ‘μΈμ€λ λ€μκ³Ό κ°μ΅λλ€.
컨νΈλνΈ κ³μ μ storageλ 0μ΄λΌκ³ κ°μ .
νΈλμμ μ μλμ κ°μ΄ νλλ₯Ό κ°μ§κ³ μ λ¬λλ€κ³ κ°μ
- value = 10 ether
- gaslimit = 2000
- gasprice = 0.001ether
- data = 64λ°μ΄νΈ(0-31 λ°μ΄νΈκΉμ§λ μ«μ 2λ₯Ό λνλ΄κ³ , 32-63 λ°μ΄νΈλ CHARLIE λΌλ λ¬Έμμ΄)
νΈλμμ μ μ΄ 170λ°μ΄νΈ κΈΈμ΄λ₯Ό κ°μ§κ³ , λ°μ΄νΈλΉ GASμμλ£λ 5λΌκ³ κ°μ
μ½λ μ€ν μ, index μ€μ μμ μ GASμμλ£λ 187GASλ‘ κ°μ
νΈλμμ μ΄ μ ν¨νκ³ νμμ΄ μ λλ‘ λ§λμ§ νμΈ
νΈλμμ λ°μ‘μ²κ° μ΅μ 2000 * 0.001 = 2 etherλ₯Ό κ°μ§κ³ μλμ§ νμΈνκ³ μ ν¨ν κ²½μ°, λ°μ‘μ²μ κ³μ μμ 2etherλ₯Ό μ°¨κ°
GAS = 2000μΌλ‘ μ΄κΈ°ν ν ν, νΈλμμ μ²λ¦¬ μμλ£μΈ 850 GASλ₯Ό μ°¨κ°νλ©΄ 1150 GASκ° λ¨μ
λ°μ‘μ² κ³μ μμ 보λ΄κ³ μ νλ 10etherλ₯Ό μ°¨κ°νκ³ μ΄κ²μ 컨νΈλνΈ κ³μ μ λν¨
μ½λ(μ΄λ―Έ μμ±λμ΄ μλ 컨νΈλνΈ μ½λ)λ₯Ό μ€ν. μ΄ κ²½μ°λ κ°λ¨νλ°, 컨νΈλνΈμ index 2μ ν΄λΉνλ μ€ν 리μ§κ° μ¬μ©λμλμ§ νμΈνκ³ (μ΄ κ²½μ°, μ¬μ©λμ§ μμ) index 2μ ν΄λΉνλ μ€ν λ¦¬μ§ κ°μ CHARLIE λ‘ μ€μ . μ΄ μμ μ νλ GAS μμλ£λ₯Ό μ°¨κ°νλ©΄, λ¨μμλ GASμ μμ 1150 - 187 = 963
963*0.001 = 0.963 etherλ₯Ό μ‘μ μ²μ κ³μ’λ‘ λλλ €μ£Όκ³ , κ²°κ³Όμνλ₯Ό λ°ν
νΈλμμ μ μμ μ²μ 컨νΈλνΈκ° μμΌλ©΄, μ΄ νΈλμμ μμλ£λ μ 곡λ gaspriceμ νΈλμμ μ λ°μ΄νΈ μλ₯Ό κ³±ν κ°κ³Ό κ°μμ§κ³ , νΈλμμ κ³Ό ν¨κ» 보λ΄μ§ λ°μ΄ν°λ κ΄λ ¨μ΄ μμ΄μ§κ² λ©λλ€. μ¦, μ μμ λ₯Ό μ¬μ©νμ¬ μ€λͺ νλ©΄ μμ μ²μ 컨νΈλνΈκ° μμΌλ©΄ 1150 GASκ° μ΄ μμλ£μ΄κ³ μ½λλ₯Ό μ€νμν¬ νμκ° μκΈ° λλ¬Έμ 187GAS μμλ£λ₯Ό μ¬μ©νμ§ μκ² λ©λλ€.
λ©μμ§λ νΈλμμ κ³Ό λ§μ°¬κ°μ§ λ°©μμΌλ‘, μνλ₯Ό μλ μνλ‘ λλλ¦°λ€λ κ²μ μ£Όλͺ©ν΄μΌ ν©λλ€. λ©μμ§ μ€νμ GASκ° λΆμ‘±νκ² λλ©΄ λ©μμ§ μ€νκ³Ό μ€νμ μν΄ λ°μλ λ€λ₯Έ λͺ¨λ μ€νλ€μ μλλλ‘ λλλ €μ§κ² λμ§λ§, κ·Έ λΆλͺ¨ μ€νμ λλλ €μ§ νμκ° μμ΅λλ€. μ΄κ²μ 컨νΈλνΈκ° λ€λ₯Έ 컨νΈλνΈλ₯Ό νΈμΆνλ κ²μ μμ νλ€λ κ²μ μλ―Έν©λλ€. μλ₯Ό λ€μ΄, Aκ° 100 GASλ₯Ό κ°μ§κ³ Bλ₯Ό νΈμΆνλ©΄, Aμ μ€νμ μ΅λ 100 GASλ§ μλλ€λ κ²μ 보μ₯λ°κ² λ©λλ€. 컨νΈλνΈλ₯Ό μμ±νλ CREATEλΌλ opcodeλ₯Ό 보면, μ€ν λ°©μμ λμ²΄λ‘ CALLκ³Ό μ μ¬νλ, μ€ν κ²°κ³Όλ μλ‘ μμ±λ 컨νΈλνΈμ μ½λλ₯Ό κ²°μ νλ€λ μ°¨μ΄κ° μμ΅λλ€.
μ½λ μ€νμ μ΄λ―Έ μμ±λμ΄ μλ 컨νΈλνΈμ μ½λλ₯Ό μ€ννλ κ²μ λλ€. μ΄λ―Έ μμ½λμ΄ μλ μμ μ μ€ννλ κ²μΌλ‘ λ³Ό μ μμ΅λλ€.
μ΄λ리μ 컨νΈλνΈλ₯Ό ꡬμ±νλ μ½λλ μ΄λ리μ λ²μΆμΌ λ¨Έμ μ½λ λλ EVM μ½λλ‘ λΆλ¦¬λ λ‘μ°-λ 벨, μ€ν κΈ°λ°μ λ°μ΄νΈμ½λ μΈμ΄λ‘ μμ±λ©λλ€. μ΄ μ½λλ μ°μλ λ°μ΄νΈλ‘ ꡬμ±λμ΄ μκ³ , κ°κ°μ λ°μ΄νΈλ μ°μ°(operation)μ λνλ λλ€. 보ν΅, μ½λ μ€νμ 0λΆν° μμνλ νλ‘κ·Έλ¨ μΉ΄μ΄ν°(pc)λ₯Ό νλμ© μ¦κ° μν€λ©΄μ λ°λ³΅μ μΌλ‘ μ°μ°μ μννλλ‘ κ΅¬μ±λ 무ν 루νμ΄κ³ μ½λμ λ§μ§λ§μ λλ¬νκ±°λ ERROR, STOP, RETURN λͺ λ Ήμ λ§λλ©΄ μ€νμ λ©μΆκ² λ©λλ€. μ°μ°μ μννκΈ° μν΄μλ μλ λ°μ΄ν°λ₯Ό μ μ₯νλ μΈκ°μ§ νμ μ 곡κ°μ μ κ·Όν μ μμ΄μΌ ν©λλ€.
EVM μ½λμ 곡μ μ€ν λͺ¨λΈμ λ¨μν κ΅¬μ‘°λ‘ λμ΄ μμ΅λλ€. EVMμ΄ μ€νλλ λμ λͺ¨λ κ³μ° μνλ (block_state, transaction, message, code, memory, stack, pc, gas) μΌλ‘ ννλ‘ μ μλ μ μκ³ , block_stateλ λͺ¨λ κ³μ μ ν¬ν¨νλ μ μμν(global state)λ‘μ μκ³ (value)μ μ μ₯μ(storage)λ₯Ό ν¬ν¨ν©λλ€. 무ν 루νμ μν΄ λ°λ³΅λλ μ½λλ₯Ό μ€ν ν λ, codeμ pc(νλ‘κ·Έλ¨ μΉ΄μ΄ν°)λ²μ§Έ λ°μ΄νΈμ νμ¬ λͺ λ Ήμ΄ μ€νλκ³ (pc κ° μ½λμ κΈΈμ΄λ³΄λ€ κ°κ±°λ ν¬λ©΄ pcλ 0μΌλ‘ μ΄κΈ°ν), μ€νλλ κ°κ°μ λͺ λ Ήμ ννμ μ΄λ»κ² λ³νμν¬μ§μ λν μμ μ μ μλ₯Ό μκ³ μμ΅λλ€. μλ₯Ό λ€μ΄, ADDλ μ€νμμ λκ°μ μμ΄ν μ κΊΌλ΄(pop), κ·Έ ν©μ ꡬν ν λ€μ μ€νμ λ£κ³ (push) GASλ₯Ό 1λ§νΌ κ°μμν€κ³ , pcλ 1 μ¦κ°μν΅λλ€. SSTORE λ μ€νμμ λκ°μ μμ΄ν μ κΊΌλ΄ μ΄ μμ΄ν μ 첫λ²μ§Έ κ°μ΄ κ°λ¦¬ν€λ 컨νΈλνΈ μ μ₯μ μΈλ±μ€μ λλ²μ§Έ μμ΄ν μ λ£μ΅λλ€.