[Blockchain] Klaytn 실행모델

공효은·2022년 2월 18일
0

Blockchain

목록 보기
2/10
post-thumbnail

klaytn 스마트 컨트랙트의 실행 모델, 데이터 구조 및 생명 주기에 관해 설명한다.

실행모델(Execution Model)

트랜잭션 들은 블록에 저장되기 위해 컨센서스 노드(CNs)로 보내진다.
CN은 전송된 각 트랜잭션이 유효한지 검사한다.
유효한 트랜잭션은 트랜잭션 풀에 저장되고, 그렇지 않으면 버려진다.
CN은 트랜잭션 풀에서 현재 블록에서 실행 가능한 트랜잭션을 선택하고, 하나씩 실행한다.

트랜잭션이 성공적으로 실행되면, 트랜잭션은 현재 블록에 담긴다.
CN은 블록 가스 한도나 블록 생성 제한 시간에 도달할 때까지 트랜잭션을 모은다.
그 후, CN은 트랜잭션이 담긴 블록을 생성한다. 이 단계에서는 블록의 여러 필드를 채워 넣어야 한다. 예를 들어 트랜잭션, 영수증, 상태 등의 해시를 계산해야 한다. 채워야 하는 모든 필드가 채워지면 CN은 블록 해시를 생성한다.

블록생성이 끝나면 블록은 다른 모든 CN(모든이 아니라 위원회 인듯)들로 전파된다. 다른 모든(모든이 아니라 위원회 인듯..) CN들은 전파된 블록을 검증하고 BFT 합의 알고리즘을 이용하여 검증 결과에 대한 합의에 도달한다. 필요 숫자 이상의 CN이 검증 과정을 성공적으로 마치면 블록이 블록체인에 저장된다. BFT합의 알고리즘은 즉각적인 완결성을 특성으로 가지므로, 블록은 완결되고 절대 삭제되지 않는다. 블록이 완결되고 나면 블록의 모든 트랜잭션은 되돌릴 수 없고, 트랜잭션 결과는 발신자가 요청시 리턴된다.

트랜잭션을 실행하려면 발신자가 일정량의 KLAY를 트랜잭션 수수료로 지불해야한다. 트랜잭션 수수료는 사용된 가스 와 단가(unit price)를 기준으로 계산된다. 가스는 연산의 기본적인 단위이다. 클레이튼 노드에서 실행되는 모든 연산은 미리 정의된양의 가스를 소모한다. 트랜잭션에 필요한 정확한 KLAY야은 공식으로 계산된다. 트랜잭션이 충분한 가스와 함께 보내지지 않는다면 트랜잭션은 실행되지 않는다. 또한, 발신인의 잔고가 부족할 때도 트랜잭션이 보내지지 않는다.

트랜잭션 실행에 관한 제한 사항

클레이튼의 Baobab 및 Cypress 네트워크에는 현재 트랜잭션 실행에 관해 다음과 같은 제한이 있다.

  • 트랜잭션은 가스 가격을 클레이튼의 단위가격으로 설정해야한다. 즉, 25 Gpeb
  • 연산 비용 한도보다 실행 비용이 큰 트랜잭션은 버려진다.

데이터 구조(Data Structures)

계정

클레이튼의 계정(account)은 개인의 잔액이나 스마트 컨트랙트에 관한 정보를 포함하는 데이터 구조이다.

트랜잭션(Transaction)

블록체인 플랫폼의 트랜잭션은 블록체인의 상태를 변경하는 노드간 전송되는 메시지이다.

상태(State)

클레이튼의 상태는 계정 상태를 모은것이다. 클레이튼의 노드들이 같은 블록들을 같은 순서대로 처리했다면 상태는 클레이튼 네트워크의 모든 노드에서 동일해야 한다. 상태는 클레이튼 노드에서 트랜잭션이 실행될 때 변경된다.

아래 표는 상태에 저장된 계정 데이터를 보여준다.

구성요소 설명
Nonce 계정에서 실행한 트랜잭션의 수를 나타내는 정숫값.
트랜잭션 을 보낼 때 트랜잭션의 논스는 계정의 논스와 같아야한 다.
Blance 계정이 현재 가지고 있는 KLAY를 나타내는 양의 정숫값.
StorageRoot 계정에 저장된 모든 변수들의 값을 포함하는
Merkle Patricia trie의 루트의 256 비트 해시값
CodeHash 계정 바이트코드의 해시. 이 값은 변경할 수 없으며,
스마트 컨트랙트가 생성될 때만 설정된다.
계정이 EOA 또는 EA인 경우, 이 값은 null 의 해시값으로 설정된다.

블록

블록체인은 문자 그대로 블록을 체인으로 연결한 것이기 때문에 블록은 클레이튼 블록체인의 아주 중요한 요소이다. 아래 표은 블록의 구성요소를 보여준다.

구성요소 설명
ParentHash 부모 블록의 해시
Rewordbase 블록 보상을 받는 계정 주소
Root 블록체인 상태의 Merkle Patricia Trie루트의 해시
TxHash 블록에 포함된 트랜잭션들의 해시
ReceiptHash 블록에 포함된 트랜잭션들의 영수증의 해시
Bloom 영수증의 블룸필터 값
Number 이전 블록 수와 동일한 정숫값
GasUsed 블록에서 트랜잭션을 처리하는 데 사용된 가스
Time 블록 생성시 Unix 타임스탬프와 동일한 정숫값
Extra 검증자 목록, 제안자 및 참여한 검증자의 seal 등을 포함하는 RLP 인코딩된 문자열
Transactions 블록에 포함된 트랜잭션 들

스마트 컨트랙트

스마트 컨트랙트는 클레이튼 블록체인의 특정 주소에 있는 코드(functions)와 데이터(state)의 모음이다. 컨트랙트 계정은 실질적으로 튜링 완전한 연산을 수행할 뿐만 아니라 서로 간에 메시지를 전달 할수 있다. 스마트 컨트랙트는 블록체인 상에 클레이튼 고유의 바이너리 형식으로 존재한다.

스마트 컨트랙트 생성

빈 주소 로 바이너리 데이터를 트랜잭션에 담아 보내면 클레이튼 블록체인에 스마트 컨트랙트가 생성된다. 바이너리 데이터는 여러 형식으로 존재할 수 있지만, 클레이튼에서는 현재 EVM 바이트 코드 한 가지만을 지원한다.

트랜잭션을 실행하기 위해서는 수수료를 지불해야한다. 블록에 트랜잭션이 저장된 후, 발신자의 계정 잔고는 트랜잭션 수수료 모델에 따라서 줄어든다. 일정 시간이 지나면 트랜잭션을 블록에서 확인할 수 있으며 이는 트랜잭션 상태가 합의에 도달했음을 알려준다. 이 시점 부터 스마트 컨트랙트는 클레이튼 블록체인 상에 존재한다.

스마트 컨트랙트 실행

스마트 컨트랙트의 함수는 스마트 컨트랙트에 트랜잭션을 보내거나 노드에서 로컬로 함수를 호출하여 실행 할 수 있다.

트랜잭션을 보내 함수가 호출되면, 트랜잭션을 처리하여 함수가 실행된다. 트랜잭션을 보내면 klay가 소모되며, 이 호출은 블록체인 상에 영원히 기록된다. 이런 호출의 리턴 값은 트랜잭션의 해시이다.

로컬에서 함수가 호출되면 클레이튼 가상머신(KLVM)에서 로컬로 실행되며
함수의 리턴값을 반환한다. 이런 호출은 블록체인 상에 기록되지 않는다. 따라서 스마트 컨트랙트의 내부 상태를 바꾸지 않는다. 이런 종류의 호출은 상수 함수 호출 이라고 한다. 이런 호출은 klay를 소모하지 않는다. 상수 함수 호출은 오직 리턴값만 필요할때 사용하고, 컨트랙트 상태의 부작용에 관심히 있으면 트랜잭션을 사용하면 된다.

스마트 컨트랙트 비활성화

스마트 컨트랙트는 클레이튼 블록체인 상에 존재하기 때문에 삭제될 수 없다. 오직 비활성화 될 수만 있다. 현재 클레이튼 스마트 컨트랙트를 비활성화 하기 위해서는 이더리움에서 사용된 방식과 같은 방식을 이용할 수 있다. 예를들어 클레이튼 스마트 컨트랙트는 솔리디티의 selfdestruct(address recipient) 호출이나 (the KLVM opcode SELFDESTRUCT)을 이용하여 비활성화 될 수 있다.

스마트 컨트랙트 업그레이드

클레이튼은 현존하는 블록체인의 불편한 사용자 경험 문제를 해결하기 위해 배포된 스마트 컨트랙트를 업그레이드 할 수 있는 방법을 제공할 것이다. 예를 들어, 블록체인 상에 배포된 서비스는 업그레이드 하기 힘들다. 클레이튼은 프레임워크와 스마트 컨트랙트 라이브러리를 제공하여 서비스 제공자가 배포된 서비스를 업그레이드하고, 서비스 정보를 옯길 수 있도록 할 예정이다.

profile
잼나게 코딩하면서 살고 싶어요 ^O^/

2개의 댓글

comment-user-thumbnail
2022년 6월 4일

공효은님 혹시 알고계시다면 코딩해서 클레이튼 트잭을보내는 프로그래밍 언어 배우고싶은데
가능할까요?

1개의 답글