첫 번째 Solana 프로그램 배포하기
이 섹션에서는 Anchor 프레임워크를 사용하여 간단한 Solana 프로그램(스마트 컨트랙트)을 빌드, 배포 및 테스트합니다. 마지막에는 Solana 블록체인에 첫 번째 프로그램을 배포하게 될 것입니다.
이 섹션의 목적은 Solana Playground에 익숙해지는 데 중점을 둡니다. 이 가이드는 Program Derived Address (PDA) 및 Cross-Program Invocation (CPI) 섹션에서 더 자세한 예제를 다룹니다. 자세한 내용은 Solana의 프로그램 페이지를 참조하세요.
Anchor 프로젝트 생성하기
먼저, 새 브라우저 탭에서 https://beta.solpg.io를 엽니다.
-
왼쪽 패널에서 "Create a new project" 버튼을 클릭합니다.
-
프로젝트 이름을 입력하고, 프레임워크로 Anchor를 선택한 다음 "Create" 버튼을 클릭합니다.
새 프로젝트
src/lib.rs
파일에 프로그램 코드가 포함된 새 프로젝트가 생성된 것을 볼 수
있습니다.
이 기본 Solana 프로그램은 새 계정을 생성하고 그 안에 숫자를 저장합니다. 이
프로그램에는 하나의 명령어(initialize
)가 포함되어 있으며:
- 입력으로
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
를 실행하기만 하면 됩니다. build
명령은 프로그램을 컴파일합니다. 프로그램 바이트코드는 배포될 때 실행 가능한
프로그램 계정에 저장됩니다.
$build
Solana Playground는 *rsdeclare_id!()
*의 주소를 업데이트합니다. 이 주소는
프로그램의 온체인 주소(프로그램 ID)를 나타냅니다.
프로그램을 빌드한 후, 터미널에서 *shelldeploy
*를 실행하여 프로그램을
네트워크에 배포하세요(기본값은 devnet). 프로그램 배포에는 프로그램을 저장하는
온체인 계정에 SOL을 할당해야 합니다.
배포하기 전에 충분한 SOL이 있는지 확인하세요. Playground 터미널에서
*shellsolana airdrop 5
*를 실행하거나
웹 수도꼭지(Web Faucet)를 사용하여 devnet SOL을
얻을 수 있습니다.
$deploy
왼쪽 패널의 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));});});
프로그램을 배포한 후 테스트 파일을 실행하려면 터미널에서 *shelltest
*를
실행하세요.
$test
테스트가 성공적으로 통과되었음을 확인하는 출력을 확인하세요.
왼쪽 패널의 Test
버튼을 사용할 수도 있습니다.
테스트 실행
그런 다음 solana confirm -v
명령을 실행하고 테스트 출력에서 트랜잭션
해시(서명)를 지정하여 트랜잭션 로그를 볼 수 있습니다:
$solana confirm -v [TxHash]
예시:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
트랜잭션 서명(해시)을 검색하여 SolanaFM 또는 Solana Explorer에서 트랜잭션 세부 정보를 볼 수도 있습니다.
사용하는 Explorer의 클러스터(네트워크) 연결을 Solana Playground와 일치하도록 업데이트하는 것을 잊지 마세요. Solana Playground는 기본적으로 devnet 클러스터를 사용합니다.
프로그램 종료
마지막으로, 프로그램을 종료하면 온체인 프로그램에 할당된 SOL을 완전히 회수할 수 있습니다.
다음 명령을 실행하고 *rsdeclare_id!()
*에서 찾은 프로그램 주소를 지정하여
프로그램을 종료할 수 있습니다:
$solana program close [ProgramID]
예시:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
축하합니다. Anchor 프레임워크를 사용하여 첫 번째 Solana 프로그램을 구축하고 배포했습니다.
Is this page helpful?