Solana에서 계정 크기를 변경하는 방법

계정은 솔라나 개발의 핵심 부분입니다. 가장 오랫동안 계정은 크기가 고정되어 있었고 크기를 변경하는 유일한 방법은 새 계정을 만드는 것이었습니다. 계정 크기를 변경할 수 없다는 사실로 전체 dApp 아키텍처가 묶여 있습니다.

이제 계정 크기를 동적으로 변경할 수 있습니다.

재할당



Realloc 기능은 슬롯 133920008 또는 2022년 5월 15일부터 활성화되었습니다.

realloc AccountInfo 구조체의 새로운 메서드로, 계정의 새 크기를 설정할 수 있습니다.
realloc 방법:

pub fn realloc(
    &self,
    new_len: usize,
    zero_init: bool
) -> Result<(), ProgramError>


  • new_len는 새 크기(바이트)로 정의됩니다
  • .
  • zero_init는 동일한 명령에서 계정 크기가 작게 조정된 다음 다시 크게 조정되는 경우 새 바이트를 0으로 만드는 데 사용됩니다.

  • 제한 사항:
  • Realloc은 프로그램 소유 계정에서만 사용할 수 있습니다
  • .
  • 호출당 바이트의 최대 증가는 10KB임

  • 재할당 사용 방법



    계정 크기를 변경할 때 계정이 여전히 임대료 면제인지 확인해야 합니다. 변경 전에 새 임대료 요구 사항을 계산하고 계정에 자금을 조달할 수 있습니다.

    let new_size = pda_account.data.borrow().len() + 32;
    let rent = Rent::get()?;
    let new_minimum_balance = rent.minimum_balance(new_size);
    
    let lamports_diff = new_minimum_balance.saturating_sub(pda_account.lamports());
    invoke(
        &system_instruction::transfer(funding_account.key, pda_account.key, lamports_diff),
        &[
            funding_account.clone(),
            pda_account.clone(),
            system_program.clone(),
        ],
    )?;
    


    계정이 새 계정 크기로 임대료 면제 상태를 달성했음을 보장하면 계정을 재할당할 수 있습니다.

    pda_account.realloc(new_size, false)?;
    


    그게 다야!

    전체 코드 예제here를 찾을 수 있습니다.

    사용 사례



    계정 크기를 동적으로 변경하면 수많은 새로운 사용 사례의 문이 열립니다.

    다음을 수행할 수 있습니다.
  • 목록 크기를 동적으로 늘립니다
  • .
  • 프로그램 업그레이드 시 계정 마이그레이션
  • 사용자가 공간에 대해 비용을 지불하도록 허용

  • 그리고 훨씬 더!

    좋은 웹페이지 즐겨찾기