프로그램 배포하기
이 섹션에서는 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 지갑입니다.
사전 요구사항
Solana CLI 설치하기
먼저, Solana CLI를 설치하세요.
지갑 설정하기
설치 후, 로컬 키페어 지갑을 생성하세요. 이 지갑의 주소는 프로그램 배포 시 기본 프로그램 권한으로 설정됩니다:
$solana-keygen new
이 명령은 기본적으로 ~/.config/solana/id.json
위치에 keypair를 생성합니다.
클러스터 구성
배포할 Solana 클러스터를 선택하세요. solana config get
명령어를 사용하여 현재
구성을 확인하세요:
$solana config get
필요에 따라 클러스터 간 전환하세요:
$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
명령어를 사용하여 지갑에 자금을
충전하세요:
$solana airdrop 2
지갑 잔액 확인:
$solana balance
기본 작업
프로그램 빌드
프로그램을 빌드하려면 cargo build-sbf
명령어를 사용하세요:
$cargo build-sbf
예제 프로그램
다음은 프로그램 로그에 "Hello, Solana!"를 출력하는 최소한의 Solana 프로그램입니다.
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
명령어를 사용하여 프로그램을 빌드하세요:
$cargo build-sbf
이렇게 하면 target/deploy/
디렉토리에 두 개의 중요한 파일이 생성됩니다:
hello_world-keypair.json
: 공개 키가 프로그램 ID로 사용될 keypair 파일hello_world.so
: 컴파일된 프로그램 실행 파일
프로그램 크기 및 비용 확인
프로그램을 배포하려면 프로그램 크기에 따라 프로그램 계정에 SOL을 할당해야 합니다. 프로그램이 클수록 배포에 더 많은 SOL이 필요합니다.
프로그램 크기를 확인하세요:
$wc -c < ./target/deploy/hello_world.so
이 크기(바이트)에 필요한 SOL을 계산하세요:
$solana rent 18504
배포 트랜잭션 수수료를 충당하기 위해 표시된 것보다 약간 더 많은 SOL이 필요합니다.
프로그램 배포
solana program deploy
명령어를 사용하여 프로그램을 배포하세요:
$solana program deploy ./target/deploy/hello_world.so
표시된 프로그램 ID는 네트워크에서 프로그램의 영구 주소입니다.
자동 생성된 ID 대신 특정 프로그램 ID로 배포하려면 다음을 사용하세요:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
solana-keygen
명령어를 사용하여 새 keypair를 생성할 수 있습니다:
$solana-keygen new -o ./custom-keypair.json
프로그램 업데이트
동일한 solana program deploy
명령을 사용하여 프로그램을 업데이트하세요:
- 프로그램 코드를 변경하세요
- 프로그램을 다시 빌드하세요:
cargo build-sbf
- 업데이트를 배포하세요:
$solana program deploy ./target/deploy/hello_world.so
업데이트된 프로그램이 현재 할당된 것보다 더 많은 공간(바이트)을 필요로 하는 경우, 배포 과정에서 자동으로 program account를 확장합니다. 이는 새 프로그램이 이전 버전보다 클 때 발생합니다. program account는 새 프로그램을 저장하기 위해 추가 바이트가 필요합니다. CLI는 필요한 SOL을 계산하여 자동으로 지갑에서 차감합니다.
더 많은 바이트를 할당하기 위해 수동으로 프로그램을 확장할 수도 있습니다:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
프로그램 관리
프로그램이 배포되면 program account를 관리하기 위한 몇 가지 일반적인 명령어가 있습니다.
프로그램 메타데이터 보기
프로그램 메타데이터를 확인하려면 solana program show
명령어를 사용하세요:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
출력 예시:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
프로그램 Authority 이전하기
프로그램 authority를 다른 계정으로 이전하려면
solana program set-upgrade-authority
명령어를 사용하세요:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
프로그램 authority를 이전한 후에는 새로운 authority keypair에 접근할 수 있는 경우가 아니면 더 이상 프로그램을 업데이트할 수 없습니다.
프로그램을 변경 불가능하게 만들기
프로그램을 변경 불가능하게 만들려면 solana program set-upgrade-authority
명령어와 함께 --final
플래그를 사용하여 프로그램 authority를 제거하세요:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
프로그램이 변경 불가능하게 되면 절대로 업데이트하거나 종료할 수 없습니다.
프로그램 종료하기
프로그램을 종료하고 프로그램 계정에 할당된 SOL을 회수하려면
solana program close
명령어를 사용하세요:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
종료된 후에는 Program ID를 재사용할 수 없습니다. 동일한 주소에 새 프로그램을 배포할 수 없습니다.
유틸리티 명령어
모든 프로그램 나열하기
현재 지갑이 authority인 모든 프로그램 보기:
$solana program show --programs
출력 예시:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
배포된 프로그램 다운로드하기
배포된 프로그램을 다운로드하려면 solana program dump
명령어를 사용하세요:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
고급 옵션
배포 플래그
Solana 네트워크가 혼잡할 때, 프로그램 배포에 도움이 되는 플래그들을 사용하세요.
사용 예시:
$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?