첫 번째 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 매개변수의 값을 저장합니다
  • 트랜잭션의 프로그램 로그에 메시지를 기록합니다
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
}

프로그램 빌드 및 배포

프로그램을 빌드하려면 터미널에서 build를 실행하기만 하면 됩니다. build 명령은 프로그램을 컴파일합니다. 프로그램 바이트코드는 배포될 때 실행 가능한 프로그램 계정에 저장됩니다.

Terminal
$
build

Solana Playground는 *rsdeclare_id!()*의 주소를 업데이트합니다. 이 주소는 프로그램의 온체인 주소(프로그램 ID)를 나타냅니다.

프로그램을 빌드한 후, 터미널에서 *shelldeploy*를 실행하여 프로그램을 네트워크에 배포하세요(기본값은 devnet). 프로그램 배포에는 프로그램을 저장하는 온체인 계정에 SOL을 할당해야 합니다.

배포하기 전에 충분한 SOL이 있는지 확인하세요. Playground 터미널에서 *shellsolana airdrop 5*를 실행하거나 웹 수도꼭지(Web Faucet)를 사용하여 devnet SOL을 얻을 수 있습니다.

Terminal
$
deploy

왼쪽 패널의 BuildDeploy 버튼을 사용할 수도 있습니다.

빌드 및 배포빌드 및 배포

프로그램을 배포한 후에는 해당 명령어를 호출할 수 있습니다.

프로그램 테스트

스타터 코드에는 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));
});
});

프로그램을 배포한 후 테스트 파일을 실행하려면 터미널에서 *shelltest*를 실행하세요.

Terminal
$
test

테스트가 성공적으로 통과되었음을 확인하는 출력을 확인하세요.

왼쪽 패널의 Test 버튼을 사용할 수도 있습니다.

테스트 실행테스트 실행

그런 다음 solana confirm -v 명령을 실행하고 테스트 출력에서 트랜잭션 해시(서명)를 지정하여 트랜잭션 로그를 볼 수 있습니다:

Terminal
$
solana confirm -v [TxHash]

예시:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

트랜잭션 서명(해시)을 검색하여 SolanaFM 또는 Solana Explorer에서 트랜잭션 세부 정보를 볼 수도 있습니다.

사용하는 Explorer의 클러스터(네트워크) 연결을 Solana Playground와 일치하도록 업데이트하는 것을 잊지 마세요. Solana Playground는 기본적으로 devnet 클러스터를 사용합니다.

프로그램 종료

마지막으로, 프로그램을 종료하면 온체인 프로그램에 할당된 SOL을 완전히 회수할 수 있습니다.

다음 명령을 실행하고 *rsdeclare_id!()*에서 찾은 프로그램 주소를 지정하여 프로그램을 종료할 수 있습니다:

Terminal
$
solana program close [ProgramID]

예시:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

축하합니다. Anchor 프레임워크를 사용하여 첫 번째 Solana 프로그램을 구축하고 배포했습니다.

Is this page helpful?

목차

페이지 편집