스마트 컨트랙트 - 인코드 클럽 Sui 시리즈 #2

6개의 교육 동영상 중 두 번째 동영상에서는 Sui 네트워크에서 스마트 컨트랙트를 작성하는 방법을 알아보세요.

스마트 컨트랙트 - 인코드 클럽 Sui 시리즈 #2

인코드 클럽의 Sui 시리즈 두 번째 시간에는 Sui 네트워크에서 스마트 컨트랙트를 작성하는 과정을 살펴봅니다.

Sui 재단은 Encode Club과 제휴하여 6개의 개발자 중심 동영상 시리즈를 제공합니다. 이 시리즈는 Sui 의 기본 사항부터 Sui 의 스마트 컨트랙트 구축 및 객체 작업에 대한 튜토리얼까지 다양합니다.

학습 하이라이트

Encode Club에서 주최하는 스마트 컨트랙트 작성 강의를 통해 Sui 에서 구축을 시작할 수 있습니다. 코딩 환경 준비부터 시작하여 객체 기능을 빠르게 살펴봅니다. "자동차" 객체의 예를 통해 객체 속성, 특히 소유권에 대해 배웁니다.

설치 Sui

Sui 바이너리와 필요한 사전 요구 사항을 설치하는 가장 쉬운 방법은 Sui 빌드에 설치하기 문서를 참조하는 것입니다. 여기에서 단계별 지침과 모든 다운로드 링크를 찾을 수 있습니다. 이제 막 시작하는 경우 이 페이지를 방문하면 Sui 설명서를 숙지하는 데 도움이 됩니다.

Sui 패키지 레이아웃 및 매니페스트 구문

바이너리를 다운로드하면 다음 명령을 사용할 수 있습니다. sui 새 [패키지 이름] 이동 를 실행하여 현재 경로 디렉터리에 새 Move 패키지를 만듭니다. 이 명령을 실행하면 작업 공간의 루트 디렉터리에 다음 두 항목이 생성됩니다. Move.toml 파일과 출처. Move 코드를 컴파일하려면 Move.toml 패키지 매니페스트 파일과 출처 하위 디렉토리에 저장합니다. 기타 선택적 하위 디렉터리에는 다음이 포함됩니다: 예제, 스크립트테스트.

Move 코드 구성(및 배포)의 기본 단위는 패키지입니다. 패키지는 별도의 파일에 정의된 모듈 집합과 .move 확장자를 사용합니다. 이러한 파일에는 Move 함수 및 유형 정의가 포함됩니다. 패키지에는 반드시 Move.toml 패키지 메타데이터 또는 패키지 종속성과 같은 패키지 구성을 설명하는 매니페스트 파일입니다.

개체

다른 많은 블록체인이 계정을 중심으로 저장하고 각 계정에 키-값 저장소를 포함하는 것과 달리 Sui 의 기본 저장 단위는 오브젝트입니다. 오브젝트는 Sui 에서 프로그래밍의 구성 요소이며, 다음과 같은 두 가지 속성을 갖는 것이 특징입니다:

  • 모든 개체에는 키가 있습니다. 키워드를 사용합니다.
  • 모든 객체에는 id: UID 를 첫 번째 필드로 지정합니다.

struct Car has key {
	id: UID,
	speed: u8,
	acceleration: u8,
	handling: u8
}

Sui 의 이 간단한 선언은 객체의 이름을 "Car"로 지정합니다.

객체 소유권은 다음 네 가지 방법을 사용하여 분류할 수 있습니다:

주소 소유: Move 코드에서 Move 개체를 생성하면 주소로 전송할 수 있습니다. 전송 후에는 주소가 해당 객체를 소유하게 됩니다. 주소가 소유한 객체는 해당 소유자 주소가 서명한 트랜잭션에서만 사용(즉, Move 호출 매개변수로 전달)할 수 있습니다. 소유한 객체는 다음 세 가지 형식 중 하나로 Move 호출 매개변수로 전달할 수 있습니다: 읽기 전용 참조(&T), 변경 가능한 참조(&mut T), 값별(T).

다른 객체에 의해 소유됨: 객체가 다른 객체에 의해 소유된 경우 객체는 래핑되지 않습니다. 자식 객체는 여전히 최상위 객체로 독립적으로 존재하며 Sui 저장소에서 직접 액세스할 수 있습니다. 이에 대해서는 네 번째 세션에서 동적 필드에 대해 논의할 때 더 자세히 다루겠습니다.

불변: 불변 객체는 변경할 수 없으며, 불변 객체에는 독점 소유자가 없습니다. 누구나 Move 호출에서 불변 객체를 사용할 수 있습니다. 모든 Move 패키지는 불변 객체이므로 Move 패키지를 게시한 후에는 변경할 수 없습니다. Move 객체를 불변 객체로 변환하려면 freeze_object 연산이 필요합니다. Move 호출에서는 읽기 전용 참조로만 불변 객체를 전달할 수 있습니다(&T).

공유: 공유: 개체를 공유할 수 있으며, 이는 누구나 이 개체를 읽거나 쓸 수 있음을 의미합니다. 단일 작성자인 변경 가능한 소유 오브젝트와 달리, 공유 오브젝트는 읽기 및 쓰기 순서를 정하기 위해 합의가 필요합니다. 다른 블록체인에서는 모든 객체가 공유됩니다. 하지만 Sui 프로그래머는 종종 공유 오브젝트, 소유 오브젝트 또는 이 둘의 조합을 사용하여 특정 사용 사례를 구현할 수 있습니다. 이러한 선택은 성능, 보안, 구현 복잡성에 영향을 미칠 수 있습니다.

기능

여러 가시성 수정자는 Move 기능에 대한 액세스를 제한하거나 차단합니다. 공개 함수를 사용하면 다른 모듈에서 특정 함수를 가져올 수 있습니다. 공개(친구) 함수는 특정 함수를 가져올 수 있는 명시적 권한을 부여받은 모듈을 허용합니다. 엔트리 함수를 사용하면 트랜잭션에서와 같이 함수를 직접 호출할 수 있습니다. 특수 함수인 init 는 관련 모듈이 게시될 때 한 번만 실행됩니다. 항상 동일한 서명과 하나의 인자만 갖습니다: ctx: &mut TxContext.

기능

기능은 특정 기능에 대한 액세스를 제한하는 Move 의 특수 패턴입니다. 기능은 다음과 함께 사용할 수 있습니다. init 함수를 사용하여 하나의 기능만 존재하도록 하고 모듈 게시자에게 전송되도록 합니다.

struct AdminCapability has key { 
	id: UID 
}

fun init(ctx: &mut TxContext) {
	transfer::transfer(AdminCapability {
		id: object::new(ctx),
	}, tx_context::sender(ctx))
}

관리자 기능 객체가 인스턴스화되어 모듈 게시자의 주소로 전송됩니다. 이렇게 하면 관리자 기능 개체가 하나만 존재하게 됩니다.

전체 시리즈 보기

  1. Sui?
  2. 스마트 계약
  3. 오브젝트 및 NFT 생성
  4. 동적 필드 및 컬렉션
  5. RPG 빌드 기본 사항
  6. 블록체인에 게임 배포