본문 바로가기
New IT tech/Study

[ 기술 ] 이더리움 거래 작동원리를 이해하기 위해 알아야 할 용어

by Vellena 2023. 11. 11.
반응형

 

이더리움 계정

 

이더리움 주소와 개인키의 조합을 계정(account)이라고 합니다. 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있으며, 2가지 유형이 있습니다.

 

1. 외부 소유 계정(EOA):

위에서 언급한, 공개 주소와 개인키의 조합을 말합니다. 외부 소유 계정, 또는 외부 계정을 사용하면

  1. 다른 계정과 이더를 송수신하고
  2. 스마트 컨트랙트에 트랜잭션을 보낼 수 있습니다.

2. 컨트랙트 계정:

컨트랙트 계정에는 상응하는 개인키가 없습니다.  이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성됩니다. 컨트랙트 계정 대신 컨트랙트(contract)로만 표시되기도 합니다. 컨트랙트(계정)의 몇 가지 주요 기능은 다음과 같습니다.

  1. 다른 계정과 이더를 송수신하고(EOA와 동일)
  2. 관련된 코드를 담고(EOA와 다름)
  3. EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킵니다.

 

 

 

지갑

지갑은 이더리움 계정을 저장하고 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리입니다. 지갑을 통해 여러 계정을 관리하고, 트랜잭션에 서명하고, 잔고을 추적하는 등의 기능을 사용할 수 있습니다. 지갑은 크게 2 가지 유형으로 분류할 수 있습니다.

 

 1. 비결정적 지갑: 이것은 임의의 개인키/공개키 쌍을 사용하는 유형의 지갑입니다. 개인키/공개키 쌍을 많이 생성할 수 있지만 각 키 쌍 간에는 아무런 상관관계가 없습니다.

 

*공개키/개인키

이전에 말씀드린 개인키랑 다릅니다.( 비대칭키로 암호화할때랑 복호활때 서로 다른 키를 사용) 이 공개키는 암호화할때만 쓰이는 키이고 개인키는 복호화할 때만 쓰입니다.

 

 2. 결정론적 지갑: 이 유형의 지갑에서는 모든 키가 시드(seed)라는 단일 시작 지점에서 파생됩니다. 이 시드는 사용자가 다른 정보를 요구하지 않고 지갑을 쉽게 백업하고 복원할 수 있게 해주며, 경우에 따라 개인키를 모른 채 공개키를 생성할 수 있게 해 줍니다. 시드는 일반적으로 사람이 읽을 수 있는 니모닉 문구 단어로 배열됩니다. 메타마스크(metamask)와 같은 플러그인을 사용한다면 처음 설치했을 때 12개 단어로 이루어진 시드를 저장하라는 요청을 받았을 것입니다. 다음 장의 메타마스크 부분에서 이에 대한 비디오 데모를 다룰 것입니다.

 

 

 

 

gas architecture

 

가스(Gas)  - 거래 연산에 필요한 자원량

이더리움 블록체인에 스마트 계약을 배포하고 트랜잭션을 실행하기 위해서는 각 상호 작용과 관련된 비용이 소모됩니다. 블록체인에서 트랜잭션을 실행하려면 네트워크의 채굴자에게 이더를 지불해야 합니다.

그럼 트랜잭션을 위해 지불하는 이더의 양은 누가 결정할까요? 이는 이더리움에 익숙하지 않은 많은 개발자들이 혼란스러워하는 부분이기도 합니다. 여기에 대한 답은 이더리움 황서에 기재되어 있는데, 트랜잭션에 얼마나 많은 '단위 연산'이 포함되는지에 따라 달라집니다. 예를 들어 트랜잭션이 단순히 두 개의 숫자를 더하는 작업이라면 이는 3개의 단위 연산에 해당합니다. 곱셈이라면 5개의 단위 연산에 해당합니다. 이러한 연산의 단위를 가스(Gas)라고 합니다.

 

 

 

 

가스 가격(Gas Price)

각 트랜잭션이 얼마나 많은 가스를 필요로 하는지 알아도, 실제로 채굴자에게 지불해야 하는 이더의 양은 아직 알 수 없습니다. 이것을 결정하는 요소가 가스 가격(Gas price)입니다. 재미있는 점은, 트랜잭션 생성자가 원하는 가스 가격을 설정할 수 있다는 점입니다. 예를 들어, '가스당 3Gwei를 지불할 용의가 있습니다'라고 설정하는 식입니다. 당신의 트랜잭션이 100000 가스를 소비하고 가스 가격을 3 Gwei로 설정하면, 해당 트랜잭션에 대한 수수료로 3000000 Gwei를 지불하게 됩니다.

설정한 가스 가격이 높을수록 트랜잭션이 더 빨리 처리됩니다. 이는 대부분의 채굴자들이 가스 가격의 내림차순으로 트랜잭션을 분류하고 가스 가격이 높은 트랜잭션을 선택하여 블록에 포함시키기 때문입니다. 가격을 낮게 책정해도 결국 트랜잭션이 블록에 포함되기는 하겠지만, 그 대기 시간이 상당히 길어질 수 있습니다.

 

 

예를 들어 Jordan이 Taylor에게 1 ETH를 지불해야 한다고 가정해 보겠습니다. ETH 전송에는 21,000 단위의 가스가 필요하며 기본 수수료는 10gwei입니다. 요르단에는 2 gwei의 팁이 포함되어 있습니다.

이제 총 수수료는 다음과 같습니다.

 

units of gas used * (base fee + priority fee)

 

여기서 base fee는 프로토콜에 의해 설정된 값이고 priority fee는 네트워크 사용량에 따라 다르고 사용자가 유효성 검사기에 대한 팁으로 설정한 값입니다.

 

즉. 21,000 * (10 + 2) = 252,000 gwei (0.000252 ETH).

Jordan이 돈을 보내면 1.000252 ETH가 Jordan의 계좌에서 차감됩니다. Taylor에게는 1.0000 ETH가 적립됩니다. 검증인은 0.000042 ETH의 팁을 받습니다. base fee 0.00021 ETH가 소각되었습니다.

 

 

 

 

 

가스 한도(Gas Limit)

트랜잭션이 소모하는 가스의 양을 정확하게 파악하는 것은 매우 어렵습니다. 사용자 입장에서는 아무 생각 없이 트랜잭션을 전송했다가 수백 달러 어치의 이더를 수수료로 소모하고 싶지는 않을 겁니다. 사용자는 이 상황을 피하기 위해, 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액을 나타내는 가스 한도(Gas Limit)를 지정할 수 있습니다.

 

가스 한도를 블록 가스 한도(Block Gas Limit)와 혼동하면 안 됩니다. 블록 가스 한도는 이더리움의 각 블록에 적용되는 최대 캡입니다. 현재 이더리움의 블록은 가스 총액이 800만 이내의 범위에서만 트랜잭션을 포함할 수 있습니다. 각 블록에 대해 가스 제한이 있는 이유는, 누군가가 무한 루프를 실행할 수 없도록 하기 위함입니다. 무한 루프가 발생하면 트랜잭션 실행이 완료되지 않아 블록 채굴이 발생하지 않기 때문입니다.

 

*무한 루프

네트워크 안에서 출발지에서 도착지에 도달하는게 원래 목적인데 실수이든 고의이든 도착지에 도달하지 못하는 상태가 있습니다.

 

 

 

 

바이트코드(Byte Code) 

스마트 계약 코드는 대개 솔리디티(Solidity)와 같은 고급 프로그래밍 언어로 작성됩니다. 이 코드는 이더리움 블록체인에 배포되는 EVM 바이트코드로 컴파일됩니다. 이것은 코드가 JVM 바이트코드로 변환되는 자바 등의 프로그래밍 언어와 매우 유사합니다. 이더리움의 런타임 환경은 바이트코드만을 이해하고 실행할 수 있습니다. 이러한 설계의 이점 중 하나는 개발자가 다른 프로그래밍 언어를 사용하여 스마트 계약을 구현할 수 있는 옵션을 제공한다는 점입니다. 현재 파이썬과 유사한 바이퍼(Vyper) 등 몇몇 언어가 EVM 바이트코드로 컴파일됩니다. 프로그램 언어 설계자 입장에서는 이더리움 황서를 참조하여 독자적인 이더리움 프로그래밍 언어를 구현할 수도 있습니다!

 

 

 

 

EVM

이더리움 가상 머신(Ethereum Virtual Machine, EVM)은 단순하지만 강력한, 튜링 완전성을 가진 256비트 가상 머신으로써 누구나 임의의 EVM 바이트코드를 실행할 수 있습니다. EVM은 이더리움 프로토콜의 일부이며, 이더리움 시스템의 합의 엔진에서 중요한 역할을 합니다. EVM은 누구나 신뢰가 필요 없는 환경에서 임의의 코드를 실행하고, 그 결과로 완전히 결정론적이고 실행 결과가 보장됩니다. gethparity 등의 이더리움 클라이언트를 설치하고 실행하면 EVM이 시작되고, EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작합니다.

 

 

이더리움 사이트 - 이더리움 정보 참고

https://ethereum.org/ko/developers/docs/gas/

 

Home | ethereum.org

Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.

ethereum.org

 

반응형