첫 번째 Solana 프로그램 배포하기
Anchor 프레임워크를 사용하여 첫 번째 프로그램을 Solana 블록체인에 빌드, 배포 및 테스트해 보세요. 이 가이드는 Solana Playground에 더 익숙해지고 Program Derived Address(PDA) 및 Cross Program Invocation(CPI)을 사용할 준비를 하는 데 도움이 됩니다.
Anchor 프로젝트 생성하기
- 웹 브라우저에서 Solana Playground를 엽니다
- 왼쪽 패널에서 + Create a new project를 클릭합니다
- Project name을 입력합니다
- 프레임워크로 **Anchor (Rust)**를 선택합니다
- Create를 클릭합니다
새 프로젝트
src/lib.rs
소스 파일이 열립니다. 이 파일에는 Initialize
라는 하나의 구조체가
포함되어 있으며, 다음과 같은 작업을 수행합니다:
- *rs
data: u64
*라는 필수 매개변수를 받습니다 - 새 계정을 생성합니다
data: u64
값을 새 계정에 저장합니다- 트랜잭션의 프로그램 로그에 메시지를 추가합니다
use anchor_lang::prelude::*;// This is your program's public key and it will update// automatically when you build the project.declare_id!("11111111111111111111111111111111");#[program]mod hello_anchor {use super::*;pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {ctx.accounts.new_account.data = data;msg!("Changed data to: {}!", data); // Message will show up in the tx logsOk(())}}#[derive(Accounts)]pub struct Initialize<'info> {// We must specify the space in order to initialize an account.// First 8 bytes are default account discriminator,// next 8 bytes come from NewAccount.data being type u64.// (u64 = 64 bits unsigned integer = 8 bytes)#[account(init,payer = signer,space = 8 + 8)]pub new_account: Account<'info, NewAccount>,#[account(mut)]pub signer: Signer<'info>,pub system_program: Program<'info, System>,}#[account]pub struct NewAccount {data: u64}
프로그램 빌드 및 배포하기
- 프로그램 코드 컴파일하기
$build
_rsdeclare_id!()
_에 정의된 프로그램
ID가 이제 업데이트됩니다.
- 지갑에 SOL 추가하기 (선택 사항)
프로그램을 배포하려면 프로그램의 온체인 계정에 SOL이 필요합니다. 필요한 경우, 3단계로 진행하기 전에 지갑에 SOL 추가하기를 수행하세요.
- 네트워크에 프로그램 배포하기
$deploy
배포되면 프로그램의 바이트코드는 실행 가능한 program account에 저장됩니다.
참고: 원하는 경우, 아래 스크린샷과 같이 왼쪽 패널의 Build 및 Deploy 버튼을 사용할 수 있습니다.
빌드 및 배포
프로그램 테스트하기
tests/anchor.test.ts
테스트 파일을 엽니다. 이 파일은 클라이언트에서 프로그램의initialize
구조체를 호출하는 방법을 보여줍니다.
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst data = new BN(42);const txHash = await pg.program.methods.initialize(data).accounts({newAccount: newAccountKp.publicKey,signer: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId}).signers([newAccountKp]).rpc();console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);// Confirm transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst newAccount = await pg.program.account.newAccount.fetch(newAccountKp.publicKey);console.log("On-chain data is:", newAccount.data.toString());// Check whether the data on-chain is equal to local 'data'assert(data.eq(newAccount.data));});});
- 테스트 파일 실행하기
$test
- 출력에 포함된 트랜잭션 해시(
TxHash
)를 저장하세요
(위 예시에서 트랜잭션 해시는
3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
입니다.)
참고: 원하는 경우 왼쪽 패널의 Test
버튼을 사용할 수 있습니다.
테스트 실행
solana confirm -v [TxHash]
를 실행하여 트랜잭션 로그 보기
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
- 트랜잭션 세부 정보 보기
SolanaFM 또는 Solana Explorer를 열고 트랜잭션 해시를 검색하세요.
Solana Explorer: 네트워크 클러스터를 Solana Playground와 일치하도록
devnet
로 설정하세요.
프로그램 종료하기
온체인 프로그램에 할당된 SOL을 회수하기 위해 프로그램을 종료하세요.
declare_id!()
매크로에 저장된 프로그램 주소를 사용하여
solana program close [ProgramID]
를 실행하세요.
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
프로그램은 업그레이드 권한이 있는 계정에 의해서만 종료되거나 업데이트될 수 있습니다. 프로그램이 배포될 때 Playground 지갑이 자동으로 각 프로그램의 업그레이드 권한을 갖게 됩니다. 업그레이드 권한이 취소되면 프로그램은 변경 불가능하게 됩니다.
축하합니다! Anchor를 사용하여 첫 번째 Solana 프로그램을 빌드하고 배포했습니다.
다음 단계
이제 첫 번째 프로그램을 배포했으니, 프로그램 파생 주소와 크로스 프로그램 호출을 탐색할 준비가 되었습니다.
Is this page helpful?