본문 바로가기
프로그래밍

블록체인 / 이더리움 / 클레이튼 / 트랜잭션

by 자유코딩 2021. 7. 14.

블록체인은 트랜잭션으로 변화하는 상태 기계다

 

현재 블록은 이전블록의 상태 + 현재 블록의 내용을 담는다.

변경하는 값들을 계속 반영한다.

이전 블록의 최종 상태는 현재 블록의 초기상태이다.

 

트랜잭션과 가스

트랜잭션의 목적은 블록체인의 상태를 변경하는 것

 

가스는 트랜잭션을 처리하는데 발생하는 비용

 

이더리움은 가스비 많이 내면 트랜잭션이 우선 처리 된다.

 

클레이튼은 가스비 많이 낸다고 우선처리 되지 않는다. 그냥 선착순

-----------------------------------------------------------------------------------------------------------------------

트랜잭션과 서명

트랜잭션을 보내려면 그 지갑으로 검증할 수 있는 서명이 필요하다. 

현재 하려는 거래가 지갑 주인이 의도한게 맞는지. 검증하려고 서명이 필요하다. 

트랜잭션에는 항상 서명이 따라온다.

 

트랜잭션을 보낸사람은 비용을 부담한다. -> 트랜잭션을 만들어서 네트워크에 보내는게 비용

 

1. 트랜잭션을 받아서 이게 얼마만큼의 가스가 필요한지 체크한다.

2. 보낸 사람을 확인해서 그 만큼 잔고가 있나 확인한다. 잔고가 부족하면 거절한다.

3. 잔고가 충분하다면 블록에 넣을 수 있을 시점에 블록에 넣는다.

4. 블록이 생기고 트랜잭션이 처리 될때 가스비를 차감한다.

클레이튼은 이더리움에서 합의 알고리즘을 바꾸고 트랜잭션 처리를 바꾸면서 성능을 높였다.

그 부분이 30%정도의 성능 차이를 가져왔다.

 

-----------------------------------------------------------------------------------------------------------------------

블록체인별 트랜잭션

 

트랜잭션의 예시

nonce 는 account 기반의 블록체인들에서 볼 수 있다.

account 가 트랜잭션을 보내고서 같은 걸 또 보내는 것을 방지한다.

 

nonce 는 account 가 몇번째 트랜잭션을 보내는지 말해준다.

from 은 보내는 사람의 주소

to 는 받는 사람의 주소

value 는 이 트랜잭션이 몇개의 토큰을 전송한다.

 

이더리움의 트랜잭션 예시

from 이 없다. 이전에 살펴봤듯이 네트워크 전송 데이터를 줄이려고 한다.

gas는 내가 몇개까지 가스를 쓰겠다.

gasPrice 는 내가 1개의 가스마다 얼마까지 지불하겠다. 

gas * gasPrice 를 하면 이 트랜잭션을 하는데 얼마까지 지불하겠다.

 

즉, gas * gasPrice 만큼이 balance에 없으면 실행을 못한다.

v: 식별자

r, s 는 서명이다.

v,r,s가 보이면 이것은 전자 서명이라고 대략 이해한다.

type : 이게 뭘 하는 트랜잭션인지 

이더리움은 type이 없다. 그래서 to가 누군지 확인하기 전까지는 이 트랜잭션이 뭐하는 것인지 모른다.

이더리움에서는 to가 external account 면 토큰 전송 트랜잭션

to가 contract 주소면 그건 컨트랙트 실행

to가 아무것도 없으면 그건 컨트랙트 배포

 

클레이튼은 이런 내용이 type에 들어가있다.

클레이튼의 gasPrice 값은 사용자가 바꿀 수 없다. 고정값이다.

 

이더리움에서 트랜잭션 1번 보내는 비용으로 클레이튼은 10번 보낼 수 있도록 설계했다.

그게 현재 0.00525 klay 이더리움의 1/10 수준이 다른 가격으로 바뀐다면 0.xxx klay를 수수료로 할지가 바뀔 수도 있다.

 

-----------------------------------------------------------------------------------------------------------------------

트랜잭션 이동 경로

 

유저 -> 노드 전달 

노드는 블록에 들어가려고 한다. 

블록에 들어가면 유저에게 영수증을 준다.

 

트랜잭션이 블록에 들어간지는 receipt 를 보고 알 수 있다.

receipt에는 왜 안들어갔는지도 적혀있다.

 

사용자와 노드는 같은 프로토콜로 대화해야 한다.

 

이더리움 트랜잭션 형태를 클레이튼 네트워크의 노드에게 보내면 안된다.

 

 

-----------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

댓글