Qubic 스마트 계약 작성에 대한 비공식 가이드
이 비공식 가이드는 Qubic 스마트 계약 개발에 대한 개요를 제공하며, 안정적이고 효율적인 배포를 보장하기 위한 주요 기능, 메모리 할당, 테스트 절차를 자세히 설명합니다.
Qsilver · 2024년 6월 27일.
소개
Qubic 스마트 계약(SC) 작성에 대한 비공식 가이드에 오신 것을 환영합니다. 이 가이드는 핵심 QPI 문서를 기반으로 Qubic 생태계 내에서 스마트 계약을 개발하고 구현하는 방법에 대한 명확하고 간결한 개요를 제공하는 것을 목표로 합니다.
Qubic 스마트 계약 개요
현재 SC 작성을 위한 주요 문서는 GitHub의 QPI 파일입니다. QPI는 Qubic 프로그래밍 인터페이스(Qubic Programming Interface)를 의미하며, API(애플리케이션 프로그래밍 인터페이스)에 유사하나 Qubic에 특화되어 있습니다.
QPI 파일에는 다음이 포함됩니다:
- 금지된 문자: 곱셈 또는 나눗셈 연산자, 전처리 지시문 없음.
- 핵심 코드 구조:
- 5000줄의 코드: 단일 비트부터 수백만 개의 요소를 가진 배열에 이르는 모든 유형의 변수 크기를 정의합니다.
- 1000줄의 코드: 다양한 대기열 및 관련 데이터 유형을 효율적으로 관리합니다.
- 마지막 수백 줄: Qubic 네트워크 상태에 접근할 수 있도록 합니다.
QPI의 주요 기능
다음은 QPI에서 제공하는 몇 가지 필수 기능입니다:
id arbitrator() const;
id computor(uint16 computorIndex) const; // [0..675]
uint8 day() const; // [1..31]
uint8 dayOfWeek() const; // [0..6]
uint16 epoch() const; // [0..9'999]
bit getEntity() const; // 엔티티가 발견된 경우 “true”, 그렇지 않으면 “false”를 반환
uint8 hour() const; // [0..23]
sint64 invocationReward() const;
id invocator() const; // 이 계약을 트리거한 사용자/계약의 ID를 반환; 없으면 NULL_ID 반환
template <typename T> id K12(const T& data) const;
uint16 millisecond() const; // [0..999]
uint8 minute() const; // [0..59]
uint8 month() const; // [1..12]
id nextId(const id& currentId) const;
sint64 numberOfPossessedShares() const;
id originator() const; // 전체 호출 체인을 트리거한 사용자의 ID를 반환; 없으면 NULL_ID 반환
uint8 second() const; // [0..59]
bit signatureValidity() const;
uint32 tick() const; // [0..999'999'999]
uint8 year() const; // [0..99] (0 = 2000, 1 = 2001, …, 99 = 2099)
이것은 무엇을 의미합니까?
Qubic 스마트 계약은 튜링 완전성이 있어 거의 모든 계산 논리를 구현할 수 있습니다. 그러나 특정 제한 사항은 SC가 매우 격리되고 안전한 환경에서 실행되도록 보장합니다.
메모리 할당
SC는 모든 메모리가 사전 할당되어야 하는 정적 메모리 할당 모델을 사용합니다. 이 설계는 1GB RAM 제한 내에서 데이터 구조를 효율적으로 관리하는 데 중요합니다. 이 제한은 앞으로 두 배로 늘어날 예정이지만 여전히 고정 할당으로 남아 있어 메모리 사용에 대한 신중한 계획이 필요합니다.
라이브러리 사용
현재 SC에서는 외부 라이브러리를 사용할 수 없으며 모든 필요한 코드는 소스에 직접 포함되어야 합니다. 시간이 지남에 따라 다양한 라이브러리를 포함하는 더 많은 SC가 개발됨에 따라 이것들이 다른 SC 내에서 공개적으로 사용 가능해질 수 있습니다.
트랜잭션 및 RCF 네트워크 메시지
각 SC는 공개 키에서 파생된 고유 주소를 가지며, 계약 ID는 가장 낮은 64비트입니다. SC는 이 주소로 전송된 트랜잭션을 통해 호출되며, inputData
가 작업을 지정합니다. 또한 SC의 상태는 RCF 네트워크 메시지를 사용하여 쿼리할 수 있습니다.
예제: 에어드롭 SC
에어드롭 SC는 데이터 세트를 반복하여 각 주소에 한 번의 SC 트랜잭션 당 QU 또는 토큰을 배포할 수 있습니다. 현재 최대 1024개의 트랜잭션이 한 틱 당 처리 가능하여, 틱 당 최대 5억 건의 전송이 이루어질 수 있습니다. 실제 처리량은 SC의 복잡성에 따라 다릅니다.
SC 테스트 방법
- SC 개발: 스마트 계약 코드를 작성하고 디버깅합니다.
- qubic-cli 업데이트: SC 트랜잭션과 RCF 기능이 통합되었는지 확인합니다.
- 테스트넷 코어 업데이트 생성: 테스트넷 환경에 SC를 통합합니다.
- 테스트 실행: qubic-cli를 사용하여 테스트넷 노드를 쿼리하고 SC 성능을 검증합니다.
- 스트레스 테스트: 부하 테스트 및 자동화된 테스트를 수행하여 안정성을 보장합니다.
- 승인 제출: 디버깅이 완료되면 SC를 쿼럼 승인에 제출한 후 IPO를 진행합니다.
이 단계를 따르면 Qubic 네트워크에서 스마트 계약이 견고하고 효율적이며 배포 준비가 되었음을 보장할 수 있습니다. 코딩을 즐기세요!
Qsilver의 “비공식” 시리즈 읽기
최신 업데이트를 위해 Valis Discord에 가입하고, X에서 팔로우하고, 우리 블로그를 북마크하세요.