블록체인은 트랜잭션으로 변화하는 상태 기계다
현재 블록은 이전블록의 상태 + 현재 블록의 내용을 담는다.
변경하는 값들을 계속 반영한다.
이전 블록의 최종 상태는 현재 블록의 초기상태이다.
트랜잭션과 가스
트랜잭션의 목적은 블록체인의 상태를 변경하는 것
가스는 트랜잭션을 처리하는데 발생하는 비용
이더리움은 가스비 많이 내면 트랜잭션이 우선 처리 된다.
클레이튼은 가스비 많이 낸다고 우선처리 되지 않는다. 그냥 선착순
-----------------------------------------------------------------------------------------------------------------------
트랜잭션과 서명
트랜잭션을 보내려면 그 지갑으로 검증할 수 있는 서명이 필요하다.
현재 하려는 거래가 지갑 주인이 의도한게 맞는지. 검증하려고 서명이 필요하다.
트랜잭션에는 항상 서명이 따라온다.
트랜잭션을 보낸사람은 비용을 부담한다. -> 트랜잭션을 만들어서 네트워크에 보내는게 비용
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에는 왜 안들어갔는지도 적혀있다.
사용자와 노드는 같은 프로토콜로 대화해야 한다.
이더리움 트랜잭션 형태를 클레이튼 네트워크의 노드에게 보내면 안된다.
-----------------------------------------------------------------------------------------------------------------------
'프로그래밍' 카테고리의 다른 글
React 프로젝트에서 eject 를 하거나 바닥부터 만들어야 하는 이유 (0) | 2021.07.28 |
---|---|
프론트엔드 웹 서비스에서 우아하게 비동기 처리하기 (feat. Toss Slash 컨퍼런스) (0) | 2021.07.15 |
블록체인 네트워크 (0) | 2021.07.13 |
블록체인 앱 개념도 (0) | 2021.06.18 |
solidity 디앱개발 시작 (0) | 2021.06.17 |
댓글