솔라나 문서프로그램 개발하기

프로그램 배포하기

이 섹션에서는 Solana CLI를 사용하여 Solana 프로그램을 배포하는 기본 과정을 안내합니다.

CLI 명령어 참조

작업명령어
프로그램 빌드cargo build-sbf
새 프로그램 배포solana program deploy <path_to_program.so>
기존 프로그램 업데이트solana program deploy <path_to_program.so> (배포와 동일)
프로그램 정보 표시solana program show <program-id>
프로그램 권한 이전solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
프로그램을 변경 불가능하게 만들기solana program set-upgrade-authority <program-id> --final
프로그램 종료solana program close <program-id> --bypass-warning
지갑 잔액 확인solana balance
에어드롭 요청 (devnet/localhost)solana airdrop 2

주요 개념

시작하기 전에 몇 가지 용어를 명확히 해보겠습니다:

  • 프로그램 ID: 프로그램의 온체인 주소입니다. 사용자는 프로그램 ID를 참조하여 프로그램과 상호작용합니다.
  • program account: 프로그램의 메타데이터를 저장하는 온체인 계정입니다. program account의 주소가 프로그램 ID입니다. program account는 또한 programdata account의 주소를 저장합니다.
  • programdata account: 배포된 프로그램의 실행 가능한 코드를 저장하는 온체인 계정입니다.
  • 프로그램 권한: 프로그램을 업데이트하거나 종료할 수 있는 권한을 가진 계정입니다. 기본적으로 이는 CLI 지갑입니다.

사전 요구사항

지갑 설정하기

설치 후, 로컬 키페어 지갑을 생성하세요. 이 지갑의 주소는 프로그램 배포 시 기본 프로그램 권한으로 설정됩니다:

Terminal
$
solana-keygen new

이 명령은 기본적으로 ~/.config/solana/id.json 위치에 keypair를 생성합니다.

클러스터 구성

배포할 Solana 클러스터를 선택하세요. solana config get 명령어를 사용하여 현재 구성을 확인하세요:

Terminal
$
solana config get

필요에 따라 클러스터 간 전환하세요:

Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"

지갑 자금 충전

프로그램 배포를 위해 SOL이 필요합니다. 필요한 금액은 프로그램 크기에 따라 달라집니다.

devnet이나 localhost의 경우, solana airdrop 명령어를 사용하여 지갑에 자금을 충전하세요:

Terminal
$
solana airdrop 2

지갑 잔액 확인:

Terminal
$
solana balance

기본 작업

프로그램 빌드

프로그램을 빌드하려면 cargo build-sbf 명령어를 사용하세요:

Terminal
$
cargo build-sbf

예제 프로그램

다음은 프로그램 로그에 "Hello, Solana!"를 출력하는 최소한의 Solana 프로그램입니다.

src/lib.rs
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

빌드 출력

cargo build-sbf 명령어를 사용하여 프로그램을 빌드하세요:

Terminal
$
cargo build-sbf

이렇게 하면 target/deploy/ 디렉토리에 두 개의 중요한 파일이 생성됩니다:

  1. hello_world-keypair.json: 공개 키가 프로그램 ID로 사용될 keypair 파일
  2. hello_world.so: 컴파일된 프로그램 실행 파일

예제 프로그램

다음은 프로그램 로그에 "Hello, Solana!"를 출력하는 최소한의 Solana 프로그램입니다.

빌드 출력

cargo build-sbf 명령어를 사용하여 프로그램을 빌드하세요:

Terminal
$
cargo build-sbf

이렇게 하면 target/deploy/ 디렉토리에 두 개의 중요한 파일이 생성됩니다:

  1. hello_world-keypair.json: 공개 키가 프로그램 ID로 사용될 keypair 파일
  2. hello_world.so: 컴파일된 프로그램 실행 파일
lib.rs
Cargo.toml
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

프로그램 크기 및 비용 확인

프로그램을 배포하려면 프로그램 크기에 따라 프로그램 계정에 SOL을 할당해야 합니다. 프로그램이 클수록 배포에 더 많은 SOL이 필요합니다.

프로그램 크기를 확인하세요:

Terminal
$
wc -c < ./target/deploy/hello_world.so

이 크기(바이트)에 필요한 SOL을 계산하세요:

Terminal
$
solana rent 18504

배포 트랜잭션 수수료를 충당하기 위해 표시된 것보다 약간 더 많은 SOL이 필요합니다.

프로그램 배포

solana program deploy 명령어를 사용하여 프로그램을 배포하세요:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

표시된 프로그램 ID는 네트워크에서 프로그램의 영구 주소입니다.

자동 생성된 ID 대신 특정 프로그램 ID로 배포하려면 다음을 사용하세요:

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

solana-keygen 명령어를 사용하여 새 keypair를 생성할 수 있습니다:

Terminal
$
solana-keygen new -o ./custom-keypair.json

프로그램 업데이트

동일한 solana program deploy 명령을 사용하여 프로그램을 업데이트하세요:

  1. 프로그램 코드를 변경하세요
  2. 프로그램을 다시 빌드하세요: cargo build-sbf
  3. 업데이트를 배포하세요:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

업데이트된 프로그램이 현재 할당된 것보다 더 많은 공간(바이트)을 필요로 하는 경우, 배포 과정에서 자동으로 program account를 확장합니다. 이는 새 프로그램이 이전 버전보다 클 때 발생합니다. program account는 새 프로그램을 저장하기 위해 추가 바이트가 필요합니다. CLI는 필요한 SOL을 계산하여 자동으로 지갑에서 차감합니다.

더 많은 바이트를 할당하기 위해 수동으로 프로그램을 확장할 수도 있습니다:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000

프로그램 관리

프로그램이 배포되면 program account를 관리하기 위한 몇 가지 일반적인 명령어가 있습니다.

프로그램 메타데이터 보기

프로그램 메타데이터를 확인하려면 solana program show 명령어를 사용하세요:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

출력 예시:

$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL

프로그램 Authority 이전하기

프로그램 authority를 다른 계정으로 이전하려면 solana program set-upgrade-authority 명령어를 사용하세요:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

프로그램 authority를 이전한 후에는 새로운 authority keypair에 접근할 수 있는 경우가 아니면 더 이상 프로그램을 업데이트할 수 없습니다.

프로그램을 변경 불가능하게 만들기

프로그램을 변경 불가능하게 만들려면 solana program set-upgrade-authority 명령어와 함께 --final 플래그를 사용하여 프로그램 authority를 제거하세요:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final

프로그램이 변경 불가능하게 되면 절대로 업데이트하거나 종료할 수 없습니다.

프로그램 종료하기

프로그램을 종료하고 프로그램 계정에 할당된 SOL을 회수하려면 solana program close 명령어를 사용하세요:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning

종료된 후에는 Program ID를 재사용할 수 없습니다. 동일한 주소에 새 프로그램을 배포할 수 없습니다.

유틸리티 명령어

모든 프로그램 나열하기

현재 지갑이 authority인 모든 프로그램 보기:

Terminal
$
solana program show --programs

출력 예시:

Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328

배포된 프로그램 다운로드하기

배포된 프로그램을 다운로드하려면 solana program dump 명령어를 사용하세요:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

고급 옵션

배포 플래그

Solana 네트워크가 혼잡할 때, 프로그램 배포에 도움이 되는 플래그들을 사용하세요.

사용 예시:

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc

옵션 설명:

  • --with-compute-unit-price: 컴퓨트 유닛당 마이크로-램포트(0.000001 SOL) 단위로 우선순위 수수료를 설정합니다. 현재 요율은 Helius 우선순위 수수료 API에서 확인하세요. 우선순위 수수료는 트랜잭션의 우선순위를 높이기 위해 현재 리더에게 지불하는 추가 수수료입니다.
  • --max-sign-attempts: 트랜잭션이 만료될 경우 새로운 블록해시로 재시도할 횟수입니다. (기본값: 5)
  • --use-rpc: 구성된 RPC로 트랜잭션을 전송합니다. 이 플래그는 Triton 또는 Helius와 같은 제공업체의 스테이크 가중치 RPC 연결이 필요합니다.

Is this page helpful?