솔라나 개발을 위한 개발환경 구성 3 (hello_solana 배포하기)
로컬환경에서 Rust 로 온체인 프로그램 (스마트컨트랙트) 를 작성해보고 빌드 및 배포를 진행합니다.
1. 먼저 솔라나 CLI를 활용해서 로컬호스트의 validator를 실행하고, 새로운 터미널을 엽니다. (이전 게시글에서 그대로 오셨다면 이미 validator가 실행 중입니다)
solana-test-validator
2. cargo 패키지를 통해서 라이브러리 hello_solana를 생성합니다.
컴파일된 솔라나 프로그램은 BPF(Berkeley Packet Filter) 바이트코드로 .so 형식으로 저장됩니다.
cargo init hello_solana --lib
cd hello_world
3. solana-program crate 를 추가합니다.
crate는 여러 Rust소스코드파일들을 묶어서 하나의 바이너리로 컴파일하는 단위 입니다.
cargo add solana-program
4. Cargo.toml 파일을 열어서 Rust 라이브러리 환경설정을 아래와 같이 추가 합니다.
[lib]
name = "hello_world"
crate-type = ["cdylib", "lib"]
5. src/lib.rs 파일을 열고 기존에 있는 내용은 삭제하고 아래와 같이 rust 기반의 솔라나 예제 샘플 프로그래밍을 코딩 합니다.
use solana_program::{
account_info::AccountInfo,
entrypoint,
entrypoint::ProgramResult,
pubkey::Pubkey,
msg,
};
// declare and export the program's entrypoint
entrypoint!(process_instruction);
// program entrypoint's implementation
pub fn process_instruction(
program_id: &Pubkey,
accounts: &[AccountInfo],
instruction_data: &[u8]
) -> ProgramResult {
// log a message to the blockchain
msg!("Hello, world!");
// gracefully exit the program
Ok(())
}
뜬금없는 이야기 이지만... 윈도우 로컬 PC에 이것저것 많이 깔려서 인지.. 메모리 16GB로는 어림도 없습니다. 개발환경 구성시에 로컬PC오 32GB 정도는 되는걸 추천합니다.
6. cargo 를 사용해서 온체인 프로그램을 빌드를 합니다.
cargo build-bpf
** 빌드시 에러가 발생한 경우
저는 빌드 중에 에러가 발생했습니다. error: package 'solana-program v1.18.11' cannot be built ....
crate로 추가한 solana-program 의 버전이 문제입니다.
추후에는 버전이 맞아서 에러가 없을 것 같기는 합니다. 혹시나 이런 메시지가 발생하면 solana-program 의 버전을 udowngrade 합니다.
validator 는 중지 시키고 아래와 같이 명령어를 수행합니다.
cargo update -p solana-program@1.18.11 --precise 1.17.31
Cargo.toml 파일을 다시 열어 solana-program 의 버전도 1.17.31로 변경합니다.
그리고 solana-test-validator 명령어를 수행해서 validator를 실행하고, 새로운 창에서 build 명령어를 다시 입력합니다.
7. 빌드가 완성이되면 .so 포맷의 바이너리가 생기게 되고, 바이너리를 솔라나 로컬 체인에 배포를 합니다.
배포가 완료되면 program ID가 출력이 됩니다. SOL토큰을 조회해 보면 배포를 위해서 토큰이 0.28...개가 사용된 것을 확인할 수 있습니다.
solana program deploy ./target/deploy/hello_solana.so
solana balance
이제 로컬환경 셋업을 완료했습니다.
솔라나 개발환경 구성을 마무리 하겠습니다