짐바랩스(Gimbalabs)의 인기 강사인 Mix 교수(M. 알리 모디리)가 제작하고 강의하는 이 종합 3부 시리즈에서는 자체 플루투스 컨트랙트를 효과적으로 생성, 배포 및 관리하는 방법에 대해 깊이 있게 이해할 수 있습니다.
학생 학습 목표(SLT)
- 나만의 플루투스 컨트랙트를 계획하고 구현할 수 있다.
- 플루투스 프로젝트를 생성, 업데이트 및 유지 관리할 수 있다.
- 플루투스(POSIXTime)와 원장(슬롯 번호)에서 시간이 어떻게 작동하는지 이해한다.
이 시리즈의 1부에서는 첫 번째 SLT에 초점을 맞출 것입니다:
나만의 플루투스 컨트랙트를 계획하고 구현할 수 있다.
그림 1. 짐바랩스 플루투스 PBL 모듈 302:
PPBL
플루투스 스마트 컨트랙트의 복잡성에 대해 자세히 알아보기 전에, 세심한 계획 수립이 얼마나 중요한지 이해하는 것이 중요합니다. 스마트 컨트랙트를 건물의 설계도라고 상상해보면, 설계도의 품질은 건물의 견고함과 안정성에 직접적인 영향을 미칩니다. 마찬가지로 스마트 컨트랙트의 계획 단계는 신뢰성과 예측 가능성을 위한 기반이 됩니다.
계획 수립 시 주요 고려 사항
- 결정론
- 입력 매개변수
- 로직 설계
- 상태 관리
- 오류 처리
- 보안
토큰 예치 컨트랙트
계획 개념을 설명하기 위해 ‘토큰 예치’ 또는 ‘토큰 락업’ 컨트랙트를 대표적인 예로 사용하겠습니다. 이러한 컨트랙트는 암호화폐와 블록체인 영역에서 중추적인 역할을 하며, 특히 초기 코인 공개(ICO) 또는 토큰 배포 이벤트에서 중요한 역할을 합니다.
다음과 같은 예를 생각해 보겠습니다: 새로운 암호화폐를 출시하고 초기 투자자와 개발팀에게 토큰을 배포하려고 합니다. 모든 토큰을 한꺼번에 발행하여 지갑에 보관했다가 해제하는 대신 토큰 예치 컨트랙트를 생성하여 일정 비율의 토큰을 일정 간격으로 잠금 해제할 수 있습니다.
결정론
토큰 분배와 관련된 토큰 예치 컨트랙트 내의 모든 계산은 결정론적이어야 합니다. 예를 들어 투자자가 매달 토큰의 10%를 받을 자격이 있다면, 컨트랙트는 현재 날짜를 기준으로 릴리스할 토큰의 정확한 수를 일관되게 계산해야 합니다. 동일한 입력값(현재 날짜, 컨트랙트 시작 날짜, 토큰 할당량)이 주어지면 컨트랙트는 항상 동일한 결과를 산출하여 예측 가능성을 보장해야 합니다.
입력 매개변수
토큰 예치 컨트랙트에서 중요한 매개변수에는 투자자의 주소, 예치 기간 시작일, 총 토큰 할당량, 릴리스 일정이 포함됩니다. 이러한 매개변수는 명확하고 결정적으로 정의되어야 합니다. 예를 들어, 시작 날짜를 'POSIXTime’으로 지정하면 컨트랙트의 동작이 결정론적 블록체인 이벤트에 직접적으로 연결되므로 관련된 모든 당사자가 예측할 수 있습니다.
로직 설계
토큰 지분 증명 컨트랙트의 로직은 정확하고 완전히 결정론적이어야 합니다. 예를 들어, 투자자가 6개월 후에 토큰을 청구할 수 있고, 한 번에 전체 할당을 청구할 수 있는 시나리오를 생각해 보겠습니다. 컨트랙트의 논리를 다음과 같이 추상화할 수 있습니다:
isTokenClaimPossible :: Bool
isTokenClaimPossible =
if from claimingTime `contains` txInfoValidRange
then do
payToPubKey investor totalTokenAmount
else traceError "Tokens are locked until the vesting period ends."
상태 관리
토큰 예치 컨트랙트에서 데이터 상태 관리는 매우 중요합니다. 플루투스는 상태를 관리하고 액션을 트리거하기 위해 '데이터텀’과 '리디머’와 같은 데이터 구조를 제공합니다. 예를 들어, Datum
을 사용하여 예치 토큰과 토큰 릴리스 일정에 대한 정보를 저장할 수 있습니다. 컨트랙트의 상태 관리는 결정론적이어야 하며, Datum
에 저장된 데이터가 컨트랙트의 목적과 일치하고 일관되게 평가될 수 있도록 해야 합니다.
오류 처리
오류 처리는 예기치 않은 상황에서도 컨트랙트가 예측 가능하게 작동할 수 있도록 하는 데 필수적입니다. 투자자가 예치 기간이 끝나기 전에 토큰을 청구하려고 시도한다고 가정해 봅시다. 이 경우, 컨트랙트는 오류 처리를 구현하여 거래를 정상적으로 거부하고 토큰 릴리스 조건이 충족되지 않았음을 나타내는 결정적인 ‘False’ 결과를 반환해야 합니다.
보안
토큰 예치 컨트랙트를 계획할 때 가장 중요한 것은 보안입니다. 무단 액세스나 재입력 공격과 같은 잠재적인 취약성을 고려해야 합니다. 컨트랙트의 결정적 특성을 유지하려면 액세스 제어 검사, 입력 유효성 검사, 신중한 자금 취급 등 강력한 보안 조치를 구현해야 합니다. 잠재적인 위험을 효과적으로 완화하려면 보안 감사 및 철저한 테스트가 계획 프로세스에 포함되어야 합니다.
원본 강의(동영상 강의 포함)는 PPBL 에서 확인하시기 바랍니다.
Gimbalabs를 팔로우하여 추가 공지를 받아보세요.
* Source: Gimbalabs series: Create, Deploy, and Manage your own Plutus contracts effectively - Part 1 | Essential Cardano
* Translation: Ilhun@CryptoVeri enics_sky@naver.com
1 post - 1 participant