ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [blockchain] 이더리움 트랜잭션에 대하여
    블록체인 2023. 3. 20. 23:37
    반응형

    비트코인에서 트랜잭션이란 송금을 이야기한다. 체인에 저장하는 정보가 거래로만 한정되어 있기 때문이다.

    이더리움은 이더송금 이외에도 스마트컨트랙트 생성이나 스마트컨트랙트 함수 호출과 같은 트랜잭션이 있다. 

    따라서 이더리움에서의 트랜잭션은 evm의 상태변경과 컨트랙트 실행할수 있는 유일한 방법이라는 것에 의미가있다.

     

    트랜잭션 구조 

    트랜잭션은 블록체인에 저장할 데이터들의 시리얼라이즈된 바이너리 메시지 이다.

    그럼 어떤 데이터들이 시리얼라이즈 되어있는지 살펴보자.

     

    - 논스 :

     1. 주소당 tx건수를 나타내며 해당값은 블록체인 계정상태에 저장되어 있지는 않고 동적으로 계산된다.(getTransactionCount)

     2. 트랜잭션 복제방지의 기능을 할수있다.

     3. 트랜잭션 순서보장. (nonce가 10인 tx는 nonce가 0~9인 tx들이 처리 되기 이전에는 해당 트랜잭션은 무시된다) > 이중지불문제방지

     

    - gas price :

     1. 이더리움은 수수료로 이더를 지불하는것이 아니라 가스를 지불하고 이 가스에 대한 가스당 이더가격(wei)을 설정할수 있다.

     2. 이더를 수수료로 사용하지 않는것은 변동성으로부터 시스템을 보호하기위함이다.

     3. 트랜잭션은 노드에서 유효성 검사 이후에 성공하면 트랜잭션풀에 추가되고 블록생성시에 트랜잭션 풀에서 트랜잭션을 선택하여 블록에 담기게 되는데 이때 gas price 가 높은 tx의 우선순위가 높아진다.

     

     - gas limit :

     1. 트랜잭션시 사용되는 실제 사용되는 가스량은 opcode별로 정해진 값의 누적이며 실사용량을 gas used라고 표현한다 하지만 트랜잭션이전에 설정해주는 gas limit의 경우는 gas used의 최대값을 의미한다.

     

    -  수신자 :

     1. 20바이트의 이더리움 주소를 이야기 하고 수신자는 eoa 또는 ca 일수 있다.

     2. 이더리움 프로토콜은 수신자에 대한 검증은 하지 않으므로 유효성 검사는 사용자가 해야한다

     

    - 값(value)

     1. 수신자에게 보내는 이더의 양을 이야기 한다.

     2. 수신자가 컨트랙트가 아닌경우 이더리움은 주소의 잔액상태를 변경한다.

     3. 수신자가 컨트랙트인 경우 

        - data 에 지정된 페이로드 함수를 통해서 값이 전달되는경우 해당함수 호출

        - 지정된 함수가 없는 경우 fallback 함수가 호출된다.

        - fallback 함수도 없는경우 트랜잭션 실패하게된다.

    비슷하게 receive 함수도 있는데 이는 돈을 받으면 항상 실행되는 로직을 담은 함수이고 fallback 함수는 지정된 함수가 없는 경우에 실행되는 함수라는 차이가 있다.

     

    - data

     1. 일반적으로 데이터를 포함한 tx의 경우 컨트랙트의 함수호출로 해석이 되지만 eoa 일수도 있다.

     2. 수신자가 eoa인 경우 데이터가 전달은 되지만 수신자가 따로 data에 접근하지는 않는다(무시한다)

     3. 수신자가 ca인 경우 데이터는 함수의 시그니쳐와 함수에 전달된 argument의 조합이다.

     

    - r,s,v

     1. eoa의 ecdsa 디지털 서명의 세 가지 구성요소.

     2. 내가 알고있는 거는 원문+(해쉬(원문)+암호화(개인키)) 과정이 서명, 서명+복호화(공개키) => 해쉬(원문) == 해쉬원문 이면 검증 인데 r,s,v 가 어떻게 사용되는지는 잘 모르겠다. 디지털 서명 관련해서는 따로 작성 해봐야 겠다. 무튼 과정속에서 필요한 값이 r,s,v 값들 인거로..

     

    트랜잭션 이 블락에 담기는 과정

    생성 > 서명 > 전파 의 과정이다.

     

    1. 위의 데이터 구조를 생성한다 

    2. RLP 인코딩 체계를 사용하여 시리얼라이즈 한다.

    (데이터 나 객체의 의미가 유지된채로 컴퓨터에서 사용가능한 언어로 변환하는과정)

    3. 발신자의 개인키로 서명하여 ECDSA 서명을 계산하고 결과(r,s,v)값을 트랜잭션에 추가한다.

    4. 서명이 완료된 트랜잭션은 이더리움 네트워크에 전송할수 있다.

    5. 이더리움 네트워크는 이웃노드들을 통해 서명된 트랜잭션을 전파하고 해당노드들은 트랜잭션을 검증하고 검증이 완료된 트랜잭션은 트랜잭션 풀에 저장합니다.

    6. 마이닝 과정에서 트랜잭션풀에서 gasprice 와 block gas limit을 고려해 우선순위에 맞게 tx를 선택해 블락에 담고 채굴합니다.

     

     

     

     

    출처: 마스터링 이더리움 6.트랜잭션

     

     

     

     

     

     

     

     

Designed by Tistory.