[Solana] Best Dev + debug practices

드림보이즈·2025년 4월 2일

2025 솔라나 해커톤

목록 보기
5/7

목표 : 프로젝트 모듈화, 에러 핸들링, 디버깅 방법을 익히자


1. 프로젝트 모듈화




날먹 좀 하겠다.
프로젝트를 모듈화하고, 항상 시각화하고, 테스트하고, 리뷰를 해야 한다.

2. 에러 핸들링

  • .anchor 디렉토리에 Tx 관련 로그가 저장된다.
  • skipPreflight: true
    const tx = await programA.methods.initialize().accounts({
      pdaAccount : pda_address,
      signer : signer.publicKey,
      systemProgram : anchor.web3.SystemProgram.programId,
      programB : programB.programId
    }).signers([signer]).rpc(skipPreflight: true);

를 하면 트랜잭션 전송 전에, 트랜잭션이 유효한지 검증할 수 있다. 오류를 뱉는다.

  • rpc() vs transaction()
  • rpc() : 즉시 트랜잭션 실행, 결과를 해시로 반환
  • transaction() : 트랜잭션 객체를 반환. 제출 안함. 따로 해줘야.

에러 코드가 발생했을 시, 해당 에러에 대한 내용은
https://docs.rs/solana-program-error/latest/solana_program_error/enum.ProgramError.html
찾을 수 있다.

  • deserilazed the account : account의 space 할당 공간 확보하기
  • rust 자체 테스트 만들어서 함수 테스트하기

3. 기타 Anchor 관련QnA

프로그램 함수 작성시 ctx 안에 모든 인자 넣으면 되는데, 굳이 따로 인자를 만드는 이유

  • ctx : 계정 정보들을 묶어줌
  • 추가 인자 : 그 외 특정한 데이터들

init().accounts() 각 공간은 왜 따로 두는거지

  • 함수 호출 인자를 위처럼 ctx = accounts 안에, init = data
profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글