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 개발을 하다가 빌드하고 배포할 수 있으면 더 좋을 듯 싶었다.
[모듈을 찾을 수 없음]
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
[배포 성공]