첫 번째 Solana 프로그램 배포하기

Anchor 프레임워크를 사용하여 첫 번째 프로그램을 Solana 블록체인에 빌드, 배포 및 테스트해 보세요. 이 가이드는 Solana Playground에 더 익숙해지고 Program Derived Address(PDA) 및 Cross Program Invocation(CPI)을 사용할 준비를 하는 데 도움이 됩니다.

Anchor 프로젝트 생성하기

  1. 웹 브라우저에서 Solana Playground를 엽니다
  2. 왼쪽 패널에서 + Create a new project를 클릭합니다
  3. Project name을 입력합니다
  4. 프레임워크로 **Anchor (Rust)**를 선택합니다
  5. Create를 클릭합니다

새 프로젝트새 프로젝트

src/lib.rs 소스 파일이 열립니다. 이 파일에는 Initialize라는 하나의 구조체가 포함되어 있으며, 다음과 같은 작업을 수행합니다:

  • *rsdata: u64*라는 필수 매개변수를 받습니다
  • 새 계정을 생성합니다
  • data: u64 값을 새 계정에 저장합니다
  • 트랜잭션의 프로그램 로그에 메시지를 추가합니다
lib.rs
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 logs
Ok(())
}
}
#[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
}

프로그램 빌드 및 배포하기

  1. 프로그램 코드 컴파일하기
Terminal
$
build

_rsdeclare_id!()_에 정의된 프로그램 ID가 이제 업데이트됩니다.

  1. 지갑에 SOL 추가하기 (선택 사항)

프로그램을 배포하려면 프로그램의 온체인 계정에 SOL이 필요합니다. 필요한 경우, 3단계로 진행하기 전에 지갑에 SOL 추가하기를 수행하세요.

  1. 네트워크에 프로그램 배포하기
Terminal
$
deploy

배포되면 프로그램의 바이트코드는 실행 가능한 program account에 저장됩니다.

참고: 원하는 경우, 아래 스크린샷과 같이 왼쪽 패널의 BuildDeploy 버튼을 사용할 수 있습니다.

빌드 및 배포빌드 및 배포

프로그램 테스트하기

  1. tests/anchor.test.ts 테스트 파일을 엽니다. 이 파일은 클라이언트에서 프로그램의 initialize 구조체를 호출하는 방법을 보여줍니다.
anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const 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 transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const 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));
});
});
  1. 테스트 파일 실행하기
Terminal
$
test
  1. 출력에 포함된 트랜잭션 해시(TxHash)를 저장하세요

(위 예시에서 트랜잭션 해시는 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc입니다.)

참고: 원하는 경우 왼쪽 패널의 Test 버튼을 사용할 수 있습니다.

테스트 실행테스트 실행

  1. solana confirm -v [TxHash]를 실행하여 트랜잭션 로그 보기
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. 트랜잭션 세부 정보 보기

SolanaFM 또는 Solana Explorer를 열고 트랜잭션 해시를 검색하세요.

Solana Explorer: 네트워크 클러스터를 Solana Playground와 일치하도록 devnet로 설정하세요.

프로그램 종료하기

온체인 프로그램에 할당된 SOL을 회수하기 위해 프로그램을 종료하세요. declare_id!() 매크로에 저장된 프로그램 주소를 사용하여 solana program close [ProgramID]를 실행하세요.

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

프로그램은 업그레이드 권한이 있는 계정에 의해서만 종료되거나 업데이트될 수 있습니다. 프로그램이 배포될 때 Playground 지갑이 자동으로 각 프로그램의 업그레이드 권한을 갖게 됩니다. 업그레이드 권한이 취소되면 프로그램은 변경 불가능하게 됩니다.

축하합니다! Anchor를 사용하여 첫 번째 Solana 프로그램을 빌드하고 배포했습니다.

다음 단계

이제 첫 번째 프로그램을 배포했으니, 프로그램 파생 주소크로스 프로그램 호출을 탐색할 준비가 되었습니다.

Is this page helpful?

목차

페이지 편집