[블록체인] 트랜잭션(Transaction)

2024. 11. 8. 23:58·CS/Blockchain

 

⚡ 트랜잭션

외부 소유 계정(EOA)에 의해 서명된 메시지

  • 이더리움 네트워크에 전송되고 블록체인에 기록된다.
  • 블록체인 상태 변경을 유발하거나 컨트랙트를 실행하는 유일한 방법이다.
    • 이더리움은 독자적으로 상태가 변경되지 않는다.
    • 컨트랙트는 독자적으로 실행되지 않는다.

이더리움은 거대한 하나의 컴퓨터이고, 트랜잭션을 통해 그 데이터를 업데이트(상태 변경)한다.

 

⚡ 트랜잭션 구조

논스 (nonce) 발신 주소(EOA)에 의해 발행된 일련번호
가스 가격 (gas price) 발신자가 지급하는 가스의 가격
가스 한도 (gas limit) 트랜잭션을 위해 지불 허용할 가스의 최대량
수신자 (recipient) 목적지 이더리움 주소
값 (value) 목적지에 보낼 이더의 양
데이터 (data) 가변 길이의 바이너리 데이터 페이로드 (payload)
디지털 서명 (v, r, s) 트랜잭션 무결성 및 부인 방지를 위한 디지털 서명

 

🔅 논스 (nonce)

해당 주소에서 생성한 트랜잭션의 건수

  • 논스값은 0부터 시작하여 트랜잭션을 생성할 때마다 순차적으로 증가한다.
    • ex) 이더리움 주소를 처음 만들면 논스값 0, 트랜잭션을 3번 보내면 논스값 3
  • 트랜잭션을 순차적으로 처리하기 위해 사용한다.
    • nonce 1이 먼저 노드에 도달하더라도 nonce 0이 처리될 때까지 nonce 1 트랜잭션은 무시된다.
  • 트랜잭션을 복제할 수 없게 한다.
    • 만약에 nonce가 없는 트랜잭션을 무한히 복제해서 보내면 잘못된 공격.. 이런 거 막으려고 하기 위해 nonce가 있다.

 

🔅 가스 (gas)

이더리움 네트워크를 사용하기 위한 수수료

  • 이더리움에 트랜잭션을 볼 때마다 사용료를 지불해야 한다.
    • 그 사용료는 이더리움을 채굴하는 사람이 가져간다.
  • 1 이더(ETH)는 너무 크기 때문에 이걸 아주 작은 단위로 쪼개서 보낸다.
    • 이더(ETH)에 대한 사용자 지정 환율(gas price)
    • 1 ETH = 10^18 wei
  • 트랜잭션이 사용할 수 있는 자원의 양을 제어하는데 사용된다.
    • 트랜잭션 수수료의 최댓값 = gasPrice × gasLimit
    • gasPrice: 1가스마다 지갑할 가격(wei)을 설정
    • gasLimit: 최대 가스 단위 수를 지정
      • 이더 전송에 필요한 가스양은 21,000개로 고정

 

🔅 값과 데이터 (value & data)

트랜잭션의 주요 페이로드

총 4가지 조합 모두 유효하다.

  1. 값만 있는 경우: 이더 지급 (payment)
  2. 데이터만 있는 경우: 호출 (invocation)
  3. 값과 데이터 모두 있는 경우: 지급 + 호출
  4. 값과 데이터 모두 없는 경우: 트랜잭션은 보내지지만 가스 낭비
  • 새로운 컨트랙트는 트랜잭션
    • 수신자 주소: 0x0(영 주소), 데이터: 컴파일된 컨트랙트의 바이트코드

 

🔅 디지털 서명 (Digital Signature)

트랜잭션 정보를 개인키를 사용하여 서명

  • 타원 곡선 디지털 서명 알고리즘(ECDSA, Elliptic Curve Digital Signature Algorithm)을 사용하여 인코딩 된 트랜잭션 정보를 EOA의 개인키를 이용하여 서명을 만든다.
    • 개인키를 암호화해서 서명을 만든다.
  • 서명이 담긴 트랜잭션을 함께 받은 누구나 메시지와 공개키만 사용하여 서명을 검증할 수 있다.
    • 개인키 소지자에 의해 트랜잭션이 승인되었음을 증명한다.
    • 개인키 소지자가 해당 트랜잭션을 승인했음을 부인할 수 없다. (부인 방지 non-repudiation)
    • 서명 후 데이터가 수정되지 않았다.
  • 보안의 이유로 개인키의 서명과 전송을 분리한다.
  • 서명된 트랜잭션은 이더리움 네트워크로 전송할 준비가 완료된 것이다.
  • 서명된 트랜잭션을 받은 P2P 네트워크에 연결된 노드는 다음과 같이 동작한다.
    1. 수신한 트랜잭션의 서명을 검증한다.
      • 서명값과 보낸 사람의 주소가 일치하는지 확인
    2. 유효한 경우, 사본을 저장하고 자신의 이웃 노드에게 전파한다.
  • 결과적으로 트랜잭션은 모든 노드에게 전파되며 몇 초 내에 전세계 모든 노드로 전파된다.
    • 각 노드의 관점에서는 트랜잭션의 출처 식별이 불가하다.
    • 특정 노드는 트랜잭션을 블록에 추가하여 새로운 블록을 만드는 작업을 수행한다.

 

반응형

'CS > Blockchain' 카테고리의 다른 글

[블록체인] Smart Contract, DApp  (1) 2024.11.10
[블록체인] 합의(자격 증명, 지분 증명)  (0) 2024.11.09
[블록체인] 암호학(Cryptography)  (0) 2024.11.07
'CS/Blockchain' 카테고리의 다른 글
  • [블록체인] Smart Contract, DApp
  • [블록체인] 합의(자격 증명, 지분 증명)
  • [블록체인] 암호학(Cryptography)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (144) N
      • SSAFY (10)
      • Algorithm (71) N
        • 이론 (5)
        • 백준 (BOJ) (65) N
        • 프로그래머스 (1)
      • Language (9)
        • JavaScript (0)
        • TypeScript (0)
        • Java (9)
        • Python (0)
      • Library & Runtime (15)
        • React (13)
        • Node.js (2)
      • Framework (9)
        • 이론 (2)
        • Next.js (3)
        • Vue (4)
      • DevOps (3)
        • Git (3)
      • WEB (17)
        • HTML (9)
        • error (6)
        • etc (2)
      • Computer (5)
        • 자격증 (2)
        • tip (2)
        • etc (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    Next.js
    강의
    알고리즘
    html5
    bfs
    DP
    해시
    재귀
    Java
    누적합
    SSAFY
    SSAFYcial
    싸피
    자바
    github
    카카오맵
    kakaomap
    파이썬
    React
    딕셔너리
    우선순위큐
    Algorithm
    vue
    Error
    렌더링최적화
    dfs
    티스토리챌린지
    블록체인
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[블록체인] 트랜잭션(Transaction)
상단으로

티스토리툴바