⚡ 트랜잭션
외부 소유 계정(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가지 조합 모두 유효하다.
- 값만 있는 경우: 이더 지급 (payment)
- 데이터만 있는 경우: 호출 (invocation)
- 값과 데이터 모두 있는 경우: 지급 + 호출
- 값과 데이터 모두 없는 경우: 트랜잭션은 보내지지만 가스 낭비
- 새로운 컨트랙트는 트랜잭션
- 수신자 주소: 0x0(영 주소), 데이터: 컴파일된 컨트랙트의 바이트코드
🔅 디지털 서명 (Digital Signature)
트랜잭션 정보를 개인키를 사용하여 서명
- 타원 곡선 디지털 서명 알고리즘(ECDSA, Elliptic Curve Digital Signature Algorithm)을 사용하여 인코딩 된 트랜잭션 정보를 EOA의 개인키를 이용하여 서명을 만든다.
- 개인키를 암호화해서 서명을 만든다.
- 서명이 담긴 트랜잭션을 함께 받은 누구나 메시지와 공개키만 사용하여 서명을 검증할 수 있다.
- 개인키 소지자에 의해 트랜잭션이 승인되었음을 증명한다.
- 개인키 소지자가 해당 트랜잭션을 승인했음을 부인할 수 없다. (부인 방지 non-repudiation)
- 서명 후 데이터가 수정되지 않았다.
- 보안의 이유로 개인키의 서명과 전송을 분리한다.
- 서명된 트랜잭션은 이더리움 네트워크로 전송할 준비가 완료된 것이다.
- 서명된 트랜잭션을 받은 P2P 네트워크에 연결된 노드는 다음과 같이 동작한다.
- 수신한 트랜잭션의 서명을 검증한다.
- 서명값과 보낸 사람의 주소가 일치하는지 확인
- 유효한 경우, 사본을 저장하고 자신의 이웃 노드에게 전파한다.
- 수신한 트랜잭션의 서명을 검증한다.
- 결과적으로 트랜잭션은 모든 노드에게 전파되며 몇 초 내에 전세계 모든 노드로 전파된다.
- 각 노드의 관점에서는 트랜잭션의 출처 식별이 불가하다.
- 특정 노드는 트랜잭션을 블록에 추가하여 새로운 블록을 만드는 작업을 수행한다.
반응형
'CS > Blockchain' 카테고리의 다른 글
[블록체인] Smart Contract, DApp (1) | 2024.11.10 |
---|---|
[블록체인] 합의(자격 증명, 지분 증명) (0) | 2024.11.09 |
[블록체인] 암호학(Cryptography) (0) | 2024.11.07 |