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개의 댓글