Module과 Script [TIL / Move Book]

알락·2023년 1월 22일
0
post-thumbnail

Module(모듈)

구조체 타입에 대해서 사용할 함수와 함께 구조체타입을 정의할 수 있는 라이브러리다.
구조체 타입은 Moves의 전역 스토리지의 스키마를 정의하고, 모듈 함수들로 스토리지를 업데이트하는 규칙들을 정의한다. 모듈 자체적으로도 전역 스토리지에 저장할 수 있다.

Script(스크립트)

기존 언어들의 main 함수처럼 실행가능한 진입지점(entrypoints)이다. 스크립트는 전역 스토리지의 업데이트를 수행하는 배포된 모듈의 함수를 실행한다. 스크립트는 전역 스토리지에 배포되지 않은 일시적인 코드 스니펫이다.

문법

Script

[형식]

script {
	<use>
    <constants>
    fun <identifier><[type parameters: constraint]*>([identifier: type]*) <function_body>
}

스크립트는 friends나, 구조체 타입을 선언할 수 없고, 전역 스토리지에 접근할 수 없다. 그저 모듈 함수만 실행시키는 목적으로 쓰인다.

Modules

[형식]

module <address>::<identifier> {
	(<use> | <frient> | <type> | <function> | <constant>)*
}

\<address>는 유효한 이름이거나 리터럴 address 형식이다.

module 0x42::test라고 명시한다면, 해당 모듈 test는 전역 스토리지의 0x42 게정 주소로 배포되어진다.

모듈은 또한 명명된 address를 이용하여 선언되어질 수 있다. (ex) module test_addr::test)

명명된 address는 컴파일 단계에서 소스 언어 수준에서만 존재하기 때문에, 명명된 address는 바이트코드 수준에서 값이 완전히 대체되어진다. 밑의 코드로 my_addr0xCOFFEE를 설정해줄 수 있다.

[script 코드]

script {
	fun example() {
    	my_addr::m::foo(@my_addr);
    }
}

하지만 source level 에서는, 저런 식으로 작동하지 않는다. m::foo 함수는 무조건 my_addr이라는 명명된 address로 접근이되어져하지, 숫자로 표현되어 있는 할당된 주소값을 통해서 접근하지 않는다.

모듈 이름은 알파벳 대소문자, 밑줄(_) 그리고 숫자로 구성되어진다.

배운 점

  • 스크립트는 최초 모듈을 실행시키기 위해서 사용하는 코드
  • 모듈의 주소를 지정하는 방식은 실제 주소를 지정하는 방시과, 소스 레벨에서 사용 가능한 네이밍을 사용하는 방식이 있다.
profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN