Move 언어 컴파일하고 배포하는 방법 [TIL / Aptos]

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

Aptos banner

Aptos-Core 안에서만 개발해야돼?

Aptos 체인을 사용하기 위하여 처음에 이것저것 환경설정을 하고 있었다.
일단 CLI를 설치를 해야한다고 해서, CLI Binary를 brew를 통하여 설치를 받았다.

사실 이더리움 Solidity를 사용하던 입장에서
npm install -g solc만 입력을 하면 Solidity파일은 어디서든 컴파일 가능하여 편했었다.

Aptos 에서도 CLI Binary를 이용하면 aptos move compile 명령을 이용하여 Move로 작성된 코드를 컴파일 할 수 있다. 이는 앱토스 공식문서 Get Started에서도 잘 설명이 되어있다. 하지만 공식문서에서는 이미 다 만들어져 있는 예제를 컴파일 하는 것만 설명하고 있다. 그리고 그 예제는 aptos-core라는 말그대로 앱토스 코어 관련 코드들이 작성되어 있는 디렉터리 안에 같이 들어있다.

문제는 매번 aptos-core 디렉터리까지 들어와 작업을 할 것이냐는 것이다. 나는 내가 작업하는 디렉터리를 따로 가질 수 있고, 거기서 해당 작업에 필요한 Aptos 개발을 하다가 빌드하고 배포할 수 있으면 더 좋을 듯 싶었다.

문제는...

[모듈을 찾을 수 없음]

unbound module

aptos-core 밖에서 개발을 하려고 하니 컴파일 할 때 위와 같이 문제가 생겼다. Move 내에서 당연하게 사용된다 생각했던 타입들이 내장되어 사용되는게 아니었다. 이를테면 Aptos가 제공하는 별개의 라이브러리나 모듈이 있었던 것이다.
예제로 제공되는 파일들도 확인해보니 aptos-core에 종속될 수 없을만 했던게 aptos-core/aptos-move/framework 폴더에 필요한 라이브러리와 모듈을 모아놓고 있었다.

[aptos-core 디렉터리 구조]

+-- aptos-node
+-- aptos-move
	+-- move-example
    +-- framework
    	+-- aptos-stdlib
        +-- aptos-framework
        +-- aptos-token
        +-- move-stdlib

해당 모듈 가져오기

그렇다면 앞으로 작업할 디렉터리에도 위에서 확인했던 해당 모듈들만 설치해서 사용하면 해결이 가능하다 생각되었다.
그리고 이왕이면 그 방법은 Node.js로 웹개발을 할 때 잘 사용했던 npm install 같이 편하게 사용할 수 있으면 좋을 것 같았다.

마침 운이 좋았던 것이, aptos move --help를 터미널에 입력해서 어떤 명령을 쓸 수 있는지 확인해보니 딱 내가 필요한 명령이 있었다.

[모듈 설치하기 명령]

> aptos move download --account [account address] --package [package name]

위 명령어로 필요한 모듈을 가져와서 사용할 수 있었다. 앱토스에서 주요하게 제공하고 있는 모듈들은 주소값을 0x1으로 갖는다. 그리고 패키지 이름을 정확히 입력하면 별개로 만든 디렉터리에서도 Aptos의 모듈들을 설치하여 사용할 수 있다.

이번 같은 경우는 아래처럼 모듈을 설치하여 사용했다.

[모듈 설치 예시]

> aptos move download --account 0x1 --package AptosStdlib
> aptos move download --account 0x1 --package MoveStdlib

이제와서 좋은 방식을 알게되어서 적는다.
굳이 위에서 설명한 것처럼 따로 설치할 필요 없이

aptos move init 을 하면 컴파일 할 수 있는 환경을 만들어준다.

앱토스 테스트넷 띄우기

// 테스트넷 초기화 (엔터만 치면 로컬 테스트넷 초기화 및 디폴트 계정 생성)
> aptos init
// 앱토스 얻어오기(Faucet)
> aptos account fund-with-faucet --account default
// 테스트넷 실행
> aptos node run-local-testnet --with-faucet

우선 위에서 안내하는데로 테스트넷을 실행시켜 놓은 상태여야 차후에 만든 Move
파일을 컴파일하여 배포할 수 있게 된다.

컴파일

여기서부터 컴파일하고 배포하는 것은 쉽다.

우선 이번에는 다음과 같이 간단하게 코인을 민팅할 수 있는 코드를 작성해보았다.

[BasicCoin.move]

module BasicCoin::hello {
    use std::signer;
    use std::string;

    struct Coin has key {
        value: u64,
    }

    public fun mint(account: signer, value : u64) {
        move_to(&account, Coin { value })
    }
}

아래는 이번 작업물에 대한 메타데이터들이다.

[Move.toml]

[package]
name = "BasicCoin"
version = "0.0.0"

[dependencies]
MoveStdlib = { local = './MoveStdlib'}
AptosStdlib = { local = './AptosStdlib'}

아래는 컴파일을 하는 명령이다.

> aptos move compile --named-addresses BasicCoin=default

배포

다 끝났다. 여기서 다음의 명령문만 실행시켜주면 배포가 완료되어진다.

> aptos move publish --named-addresses BasicCoin=default

[배포 성공]
deploy success

배운 점

  • 어디서든 필요한 모듈들만 설치를 하여 Aptos Move 파일을 컴파일 할 수 있는 환경 구축이 가능해졌다.
profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!
post-custom-banner

0개의 댓글