Klaytn Design (5) : Computation

Gun Lee
Top Klass
Published in
10 min readOct 17, 2019

안녕하세요, Klaytn 스터디그룹 Top Klass입니다.

이번 글은 Klaytn Design 5번째 시리즈로, Computation에 대해 설명합니다.

* Klaytn Design 이전 시리즈 보기:

Klaytn Design (4) : Transaction

클레이튼 스마트 계약

  • 이더리움과 같이 Solidity를 지원합니다.
  • Remix 또는 Truffle과 같은 이더리움 개발 툴킷과도 상호운용성을 유지합니다.
  • 기존에 Solidity로 작성된 스마트 계약은 기존 Solidity 컴파일러를 사용하여 컴파일 할 수 있고, 추가 작업 없이 클레이튼에서 실행가능합니다.
  • Solidity가 이더리움의 표준 계약 프로그래밍 언어이기 때문에 많은 생태계적 지원이 있으며, 이를 클레이튼에서 이더리움 DApp 개발자가 기존 작업을 쉽게 Migration 할 수 있게합니다.
  • 다양한 프로그래밍 언어로 작성된 스마트 계약을 지원할 예정입니다.

적당한 스마트 계약 실행 비용

기존의 스마트 계약 실행 비용은 부실하거나 악의적으로 작성된 계약이 실행되지 않게해서 자원을 효율적으로 활용하게 하고, 블록체인 개발자가 효율적인 코드를 작성하도록 유도하기위해 다음과 같은 규칙을 정했습니다.

  1. 스마트 계약을 의도적으로 실행하는 데 드는 재정적 비용을 증가시킵니다.
  2. 예상되는 재정적 이득을 최소화하여 악의적 공격을 하는 해커들을 줄입니다.

이럴 경우 악의적인 실행의 수수료가 크고, 정상적인 실행의 수수료는 작아지게 됩니다.

이더리움은 opcode 기반의 요금 모델을 사용하고 있습니다. 이는 자원 낭비를 방지하는 데에는 유용하지만, 일부 opcode(예시: state write)의 높은 가스 가격 때문에 일반적인 스마트 계약의 실행을 저해할 수도 있습니다.

이더리움의 opcode 기반 요금 모델

클레이튼의 요금

  1. opcode 비용은 플랫폼에서 사용할 수 있는 리소스의 양과 직접적 관련이 있습니다. 스토리지 이후 이더리움 상태쓰기 비용은 스토리지 이후에 높아지고 변경된 상태를 기록하고 전파하는 데 필요한 네트워크 대역폭도 제한됩니다. 반대로 블록체인에서 풍부한 리소스(예: CPU시간, 스토리지, 네트워크 대역폭)가 있는 경우 opcode당 단가가 이더리움보다 낮을 수 있고 opcode간의 비용 차이를 최소화할 수 있습니다. Klaytn은 각 CN노드(최신의 하드웨어를 갖춘)의 수직적 스케일링, 병렬계산(에: 서비스체인을 통한 논리적 확장), 수평적 물리적 클러스터(예: 영역추가)를 통해 opcode 유닛 비용을 절감하는 것을 목표로 합니다.
  2. 이더리움 스마트 계약 수수료는 opcode를 실행하는 데 필요한 가스의 합계에 따라 결정됩니다. 직관적, 효과적이지만 비용이 실행된 opcode의 수와 정비례하기 때문에, 스마트 계약의 작은 변경에도 실행 비용을 크게 증가시킬 수 있습니다. 클레이튼은 규정된 opcode 실행범위에 대해 실행 비용을 동일한 수준으로 조정하는 미터링된 가격 모델, 즉 비례가 아닌 구간별 가격을 적용하여 짧은 스마트 계약 실행을 보다 저렴하고 안정적으로 수행합니다.

낮은 가격 변동성

이더리움이 복잡한 가스 기반의 수수료 모델을 선택한 이유는 이더리움과 명목화폐(달러, 원)간의 직접접인 매핑을 방지하여 컴퓨터 리소스를 효율적으로 배포, 암호화하여 통화 변동의 영향을 최소화합니다.

클레이튼도 클레이의 환율에서 스마트 계약 이행 비용을 분리하기 위해 일부 수정사항을 적용한 모델을 채택할 예정입니다.

스마트 계약의 언어

클레이튼은 스마트 계약 작성 언어로 Solidity를 사용합니다. 이를 통해기존 이더리움 디앱 개발자들이 스마트 계약을 쉽게 실험하거나 이전할 수 있습니다.

같은 논리가 fungible과 non-fungible 토큰 기준에도 적용됩니다. 따라서 클레이튼도 ERC20ERC721을 지원합니다.

클레이튼 실행 모델

클레이튼 실행 모델의 전체적인 실행과정은 다음과 같습니다.

  1. 플랫폼 API를 이용하여 트랜잭션을 생성합니다.
  2. 이 트랜잭션은 블록에 저장될 CN으로 전송하여 CN은 거래가 유효한지 확인하여, 유효한 트랜잭션이라면 트랜잭션 풀에 저장하고 그렇지 않으면 삭제합니다.
  3. CN은 트랜잭션 풀의 현재 블록에서 실행가능한 트랜잭션을 선택하여 하나씩 실행합니다.
  4. 거래를 실행하려면 발신인은 일정 금액의 클레이를 수수료로 지불하게됩니다. 클레이는 가스가격을 기준으로 계산 되며, 모든 작업은 미리 정의된 양의 가스를 소비하게 됩니다. 거래에 성공한다면 현재 블록에 트랜잭션이 포함되게 됩니다. 거래가 실패하는 경우는 송신자가 불충분한 가스를 수반하는 거래를 제출하거나 보낸 사람의 계정에 잔액이 부족한 경우입니다.
  5. CN은 블록 가스 제한 및 블록 시간 제한에 도달할때까지 트랜잭션을 수집후 트랜잭션을 차단, 트랜잭션, 영수증, 상태등의 해쉬값을 계산합니다.
  6. 필요한 모든 필드가 완료된 후 CN은 블록해쉬를 생성하고 블록검증이 완료되면 블록이 다른 모든 CN으로 전파 됩니다.
  7. 다른 모든 CN은 모두 전파된 블록을 검증하고 BFT 컨센서스 알고리즘을 이용하여 검증결과에 대한 합의를 도출합니다.
  8. 대부분의 CN에서 확인 프로세스가 성공적으로 완료되면 블록이 블록체인에 저장됩니다.

BFT 컨센서스 알고리즘은 즉각적인 피니컬 특성을 충족하기 때문에 블록은 최종적으로 제거되지 않습니다. 블록이 완료된 후 해당 블록의 모든 트랜잭션의 실행은 불가역적으로 보장되며, 요청시 해당 실행 결과를 송신자에게 반환할 수 있습니다.

스마트 계약 생성하기

스마트 계약은 2진 데이터로 하는 빈 주소로 트랜잭션을 전송하여 클레이튼 블록체인에서 만들 수 있습니다.

현재는 하나의 이진 형식인 EVM 바이트 코드를 지원하지만, 다양한 형식을 지원할 예정입니다.

이 거래는 실행 대금이 필요하며 블록에 거래가 저장된 후 발신자 계정의 계좌 잔액은 거래 수수료 모델에 따라 줄어듭니다. 일정시간이 지난 후에 거래는 블록으로 나타나야 하며, 이는 거래에 수반되는 상태가 합의에 도달했음을 의미합니다.

스마트 계약 실행하기

  • 스마트 계약의 기능은 스마트 계약에 트랜잭션을 전송하거나 노드에서 로컬로 기능을 후출하여 실행할 수 있습니다.
  • 트랜잭션 전송을 통해 함수가 호출되면 트랜잭션을 처리하여 함수가 실행됨 이 경우 트랜잭션 전송에 대한 클레이 비용이 수반되며, 통화는 블록체인에 영구적으로 기록됨 이러한 방식으로 이루어지는 호출의 반환 값은 트랜잭션의 Hash입니다.

이 기능이 로컬로 호출되면 KLVM(Klaytn Virtual Machine)에서 로컬로 실행되고 호출은 기능의 반환값을 반환합니다.

이러한 방식으로 이루어지는 통화는 블록체인에 기록되지 않으므로 계약의 내부 상태를 수정할 수 없습니다. 이러한 유형의 통화를 상수함수호출이라고 합니다.

이러한 방식으로 이루어지는 통화에는 클레이 비용이 들지 않습니다. 일정 함수 호출은 반품 값만 관심있을 때 사용하고, 거래는 계약상태에 대한 부작용이 관심있을 때 사용해야합니다.

스마트 계약 불능화

스마트 계약은 블록체인에 존재하기 때문에 ‘삭제’할 수 없고 ‘비활성화’만 가능합니다.

현재 클레이튼은 이더리움에서 스마트 계약을 비활성화하는데 사용되는 것과 같은 프로세스를 채택했습니다.

예를 들어 KLVM에 대한 클레이튼 스마트 계약은 솔리디티 또는 KLVM opcode SELFDESTRUCT에서 주소 수신인의 자체 파기 호출을 사용하여 비활성화할 수 있습니다. 클레이튼 팀은 다른 실행환경에서 스마트 계약을 비활성화할 수 있는 방법을 제공할 것입니다.

스마트 계약 업그레이드

클레이튼은 배포된 스마트 계약을 업그레이드하여 기존 블록체인의 불편한 사용자 경험을 해결할 수 있는 방법을 제공합니다.

예를 들어 블록 체인에 배포된 서비스는 업그레이드하기 어려우나 클레이튼은 서비스 공급자(Service Provider)가 배포된 서비스를 업그레이드하고 서비스 정보를 마이그레이션할 수 있도록 프레임워크와 스마트 계약 라이브러리를 제공합니다. 클레이튼은 다음 요구사항을 고려하여 기능을 제공합니다.

  • 공인 계정 또는 스마트 계약 소유자만 스마트 계약을 업그레이드할 수 있어야 합니다
  • 업그레이드된 스마트 계약은 기존 스마트 계약으로 유지되는 기존 데이터를 조작할 수 있어야합니다.
  • 기존의 스마트 계약을 참조하는 다른 스마트 계약에서는 해당 스마트 계약의 최신 업그레이드 버전을 사용할 지 여부를 결정할 수 있어야 합니다.

클레이튼 토큰과 트랜잭션 수수료

클레이(KLAY)

  • 클레이튼의 주요 내부 전송가능 암호화폐입니다.
  • 스마트 계약을 작성하거나 실행하거나 클레이를 양도할 때 거래 수수료를 지불하는 데 사용됩니다.
  • 클레이튼 네트워크를 작동하기 위해 기본적으로 필요한 연료입니다.
  • 플랫폼 사용자가 요청된 작업을 실행하는 합의 노드(CN)에 지불하는 형태입니다. 다른 방식으로 말하자면 클레이는 인센티브 개념입니다. 잘못 짜여진 코드는 수수료가 더 들게하는 방식으로 개발자가 고품질 애플리케이션을 작성할 수 있도록 보장하여 네트워크가 정상 상태를 유지할 수 있게합니다. 클레이튼 노드는 자신이 기여하는 리소스에 대해 보상을 받으며 클레이튼의 거래 수수료는 거래가 실행되는 실행 환경에 따라 다양한 방법으로 계산할 수 있습니다.

KLVM에 대한 트랜잭션 수수료는 거래 수수료 := F(총 사용된 가스) x (유닛 가격))

  • F()는 단계적 가격결정기능이 될 수 있습니다. 이 기능은 완료되지 않았으며 클레이튼의 추가 개발 중에 변경될 수 있습니다. 클레이튼 테스트넷의 경우 F()는 ID 함수 이며 거래 수수료는 단순히 사용된 총 가스량 x 단가로 계산됩니다.
  • 사용된 총 가스는 opcode의 가스 비용과 고유 가스 비용을 기준으로 KLVM이 계산합니다. 이 계산된 거래 수수료는 거래에 따라 발신인 또는 기업 계좌 잔액에서 차감됩니다.
  • 클레이 토큰 및 거래 수수료(https://docs.klaytn.com/klaytn/design/computation/exec_model )

KLVM

  • 클레이튼의 실행모델을 공식적으로 지정하는 가상 상태의 시스템입니다.
  • 실행 모델은 일련의 바이트 코드 명령과 소규모 환경 데이터의 경우 시스템 상태를 변경하는 방법을 지정함 KLVM은 준 튜링-완전 기계입니다.
  • 연산이 수행되는 총 계산량을 결정하는 매개 변수인 가스를 통해 본질적으로 경계된다는 사실을 기반으로 작동합니다.
  • KLVM 명령으로 구성된 클레이튼 가상 시스템 코드를 실행합니다.
  • KLVM 코드는 코드가 포함된 클레이튼 블록체인의 계정에 사용되는 프로그래밍 언어입니다.
  • 계정과 연결된 KLVM 코드는 24개의 메시지가 해당 계정으로 전송될 때마다 실행되며 이 코드로 저장소에서 메시지를 읽고 보낼 수 있습니다.

KLVM 버전은 EVM(이더리움 버츄얼 머신)에서 파생되었으며 클레이튼 개발자에 의해 지속적으로 개선중입니다.

KLVM은 EVM과 무엇이 다른가?

현재 KLVM은 EVM을 기반으로 하므로 사양은 EVM과 상당히 유사합니다. 그러나 KLVM에는 차별점이 있는데요, KLVM과 EVM의 차이는 다음과 같습니다.

  • KLVM은 클레이튼의 가스유닛(예: peb, ston, KLAY)를 사용합니다.
  • KLVM은 사용자의 가스 가격을 수락하지 않고 대신 플랫폼에 정의된 값을 가스 가격으로 사용합니다. 클레이튼 개발자는 가까운 미래에 KLVM과 EVM 간의 호환성을 유지하는 것을 목표로 하지만 클레이튼 개발이 가속화됨에 따라 KLVM사양도 함께 업데이트 될 것입니다.

발제자: 이건

작성자: 이건

검토자: 배희수, 송현수

Klaytn Design

#1. Klaytn Network Structure, Klaytn Main Chain Network

#2. Block Generation and Propagation

#3. Klaytn Accounts

#4. Klaytn Transactions

#5. Computation

--

--