Build on Solana - Superteam Korea
solana-developers/program-examples
git clone https://github.com/solana-developers/program-examples.gitaccount-data
CreateAddressInfoAccounts 구조체와 인스트럭션 함수
#[derive(Accounts)] // 어노테이션은 Anchor가 인스트럭션 실행 전 계정 검증 코드를 자동으로 생성하게 해준다.
pub struct CreateAddressInfo<'info> {
#[account(mut)] // mut이니 변경 가능
payer: Signer<'info>,
#[account(
init,
payer = payer,
space = ANCHOR_DESCRIMINATOR_SIZE + AddressInfo::INIT_SPACE,
)]
address_info: Account<'info, AddressInfo>,
system_program: Program<'info, System>, // 시스템 프로그램 계정
}
pub fn create_address_info(
ctx: Context<CreateAddressInfo>, // 인스트럭션 실행에 필요한 모든 계정 정보를 담고 있는 컨텍스트
name: String,
house_number: u8,
street: String,
city: String,
) -> Result<()> {
*ctx.accounts.address_info = AddressInfo {
name,
house_number,
street,
city,
};
Ok(()) // 종료 시 호출
}
// instructions/create.rsAccountInfo온체인 데이터 구조체
#[account] // 해당 구조체가 온체인에 저장되는 계정 데이터임을 명시
#[derive(InitSpace)] // Anchor가 컴파일 시 구조체의 각 필드 크기를 기반으로 필요한 메모리 공간을 자동 계산해주는 매크로
pub struct AddressInfo {
#[max_len(50)] // 문자열 최대 길이 제한 (50자)
pub name: String, // 저장: 4바이트 (길이) + 최대 50바이트 (내용)
pub house_number: u8, // 1바이트
#[max_len(50)]
pub street: String, // 4바이트 + 최대 50바이트
#[max_len(50)]
pub city: String, // 4바이트 + 최대 50바이트
}
// state/address_info.rs- 프로그램 모듈과 인스트럭션 연결
declare_id!("GpVcgWdgVErgLqsn8VYUch6EqDerMgNqoLSmGyKrd6MR"); // 고유 ID를 선언
// Anchor 프레임워크에서 이 모듈 내부에 정의된 함수들은 인스트럭션(프로그램의 엔트리 포인트)으로 간주
// 여기서는 create_address_info 인스트럭션을 정의하며, 이는 내부의 create 모듈에 있는 실제 로직 함수(create::create_address_info)를 호출
#[program]
pub mod anchor_program_example {
use super::*;
pub fn create_address_info(
ctx: Context<CreateAddressInfo>,
name: String,
house_number: u8,
street: String,
city: String,
) -> Result<()> {
create::create_address_info(ctx, name, house_number, street, city)
}
}
// libs.rs- Setup Project
anchor build
pnpm install- Execute Solana Local Cluster
solana-test-validator- Deploy Program
solana program deploy target/deploy/create_token.so- 실행 결과
gasFee 부족으로 인한 배포 실패로, test만 우선 진행 (로컬 클러스터에 붙이는 방법 학습 필요)
================================================================================
Recover the intermediate account's ephemeral keypair file with
`solana-keygen recover` and the following 12-word seed phrase:
================================================================================
junior rebuild escape ... absent
================================================================================
To resume a deploy, pass the recovered keypair as the
[BUFFER_SIGNER] to `solana program deploy` or `solana program write-buffer'.
Or to recover the account's lamports, pass it as the
[BUFFER_ACCOUNT_ADDRESS] argument to `solana program close`.
================================================================================
Error: Account 66jUaTanz4TUXB7sfi86xJK41t7nt1G1f3nrFhLjfgrk has insufficient funds for spend (1.59287256 SOL) + fee (0.00115 SOL)
- 잔액 조회
solana balance 66jUaTanz4TUXB7sfi86xJK41t7nt1G1f3nrFhLjfgrk- Airdrop to {Address}
solana airdrop 2 66jUaTanz4TUXB7sfi86xJK41t7nt1G1f3nrFhLjfgrk