Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 항목은 예정된 AMM v4 프로그램 업데이트를 다룹니다. 배포 전에 로컬 릴리스 브랜치에 대해 검증되었습니다. 새로운 명령어에 의존하기 전에 배포된 프로그램을 확인하세요.
두 가지 관련 없는 사항이 한 번의 재구축으로 함께 제공됩니다. 첫 번째는 유지보수입니다. AMM v4는 2.1 업그레이드 이후 solana-program =2.1.0에 고정되어 있었으며, 이 고정이 차단되고 있었습니다. 시스템 프로그램 헬퍼는 Solana 3.0에서 자체 solana-system-interface 크레이트로 이동했고, spl-token은 9.0에 도달했으며, spl-associated-token-account는 8.0에 도달했습니다. 이 릴리스는 세 가지 모두를 포함합니다. 두 번째는 프로토콜이 받아야 할 자금입니다. SIMD-0437은 렌트 면제 최소값을 5단계에 걸쳐 90% 감소시키고 있으며, 1단계는 2026년 9월 3일 메인넷에 도착했습니다. AMM v4가 그 이전에 생성한 모든 계정(수백 개의 풀 볼트, LP 민트, AmmInfoTargetOrders 계정)은 이제 과잉 자금이 조성되어 있으며, 프로그램 소유 계정의 lamports는 해당 프로그램에서만 이동할 수 있습니다. 따라서 새로운 명령어가 필요합니다.

통합자를 위한 요약

  • 트레이더나 LP가 호출하는 것은 변경되지 않았습니다. Initialize2, Deposit, Withdraw, SwapBaseIn, SwapBaseOut, SwapBaseInV2, SwapBaseOutV2, WithdrawPnlSetParams는 계정 목록, 인수 레이아웃 및 수학을 유지합니다. 계정 레이아웃이 변경되지 않았습니다. 기존 오류 코드가 이동하지 않았습니다.
  • 하나의 명령어가 추가됩니다: WithdrawExcessLamports, 태그 18. 관리자 전용, 인수 없음, 가변 계정 목록. AMM v4 제어 계정에서 렌트 면제 최소값 이상의 lamports를 반환하고 다른 것은 건드리지 않습니다. products/amm-v4/instructions를 참조하세요.
  • 하나의 오류 코드가 추가됩니다: 60 LamportsCalculateError. AmmError는 Anchor 번호가 아닙니다 — 0부터 시작합니다 — 따라서 이는 custom program error: 0x3c입니다. 코드 059는 변경되지 않습니다.
  • CreateConfigAccount(태그 14)는 더 이상 렌트 sysvar를 읽지 않습니다 그리고 이제 4개 계정 명령어로 문서화됩니다. 이 릴리스에서는 아무것도 손상되지 않습니다. 이것이 포함됩니다: 계정이 목록의 마지막이었고 핸들러는 길이 확인 없이 위치적으로 읽으므로, 여전히 이를 전달하는 관리자 도구는 계속 작동합니다.
  • IDL 새로고침이 필요합니다 클라이언트를 생성하는 경우. 하나의 새로운 명령어, 하나의 새로운 오류 변형, 하나의 변경된 계정 목록.

WithdrawExcessLamports

명령어는 수집 lamports 지갑을 유일한 서명자 및 대상으로, AMM v4 권한 PDA, SPL Token 프로그램, 그리고 임의의 수의 소스 계정을 사용합니다. 각 소스 계정의 소유자에 따라 디스패치합니다: wSOL 분기가 흥미로운 부분입니다. 래핑된 SOL 계정의 lamport 잔액 토큰 잔액이므로, 토큰 프로그램은 이에 대해 WithdrawExcessLamports를 완전히 거부합니다. SyncNative를 통한 왕복과 델타 크기의 UnwrapLamports는 기증된 초과분만 추출하고 래핑된 잔액을 정확히 시작한 위치에 남깁니다 — 이는 나중에 확인되며, 산술이 일치하지 않으면 LamportsCalculateError가 발생합니다. 따라서 SOL 측 풀 볼트는 스윕을 통해 전체 유동성을 유지하며, LP는 스윕 전후로 가격 변화를 보지 않습니다. 서명자는 클러스터당 전용 키이며, 기존 AMM 소유자 및 풀 생성 수수료 주소와 동일한 config_feature 모듈 아래에 하드코딩됩니다. CPMM 및 LaunchLab과 달리, AMM v4는 오직 해당 지갑만 수락합니다 — 관리자 폴백이 없습니다. 주소는 reference/program-addresses에 있습니다.

CreateConfigAccount는 더 이상 렌트 sysvar를 읽지 않습니다

Solana 3.0은 Rent::get()을 렌트 매개변수를 읽는 자연스러운 방법으로 만드는 것이므로, 릴리스는 프로그램의 모든 네 개의 Rent::from_account_info(...) 호출을 대체했습니다. 세 개의 호출에서 — 풀의 토큰 계정, LP 민트 및 Initialize2 중 PDA 계정을 생성하는 헬퍼 — sysvar 계정은 여전히 전달되고 토큰 프로그램 CPI로 여전히 전달되므로, 해당 계정 목록에 대해 아무것도 변경되지 않습니다. CreateConfigAccount에서 sysvar는 다른 목적이 없었고 목록의 마지막 계정이었으므로, 문서화된 목록에서 제거되었습니다: 이전의 5개 계정 목록을 보내는 것은 여전히 작동합니다. 제거된 계정은 마지막이었고, process_create_config는 총 개수를 확인하는 것이 없는 next_account_info를 통해 위치적으로 4개 계정을 읽으므로, 후행 렌트 계정은 절대 조회되지 않습니다. 관리자 도구는 명확성을 위해 업데이트되어야 하지만, 긴급하지는 않습니다. 사용자 대면 빌더는 이 명령어를 전혀 구성하지 않습니다. Initialize2는 과도하게 읽지 않을 경우입니다: 또한 Rent::from_account_info 호출을 중단했지만, 렌트 계정은 위치 3에 유지되며 여전히 실제로 사용됩니다 — 프로그램은 풀의 볼트와 LP 민트를 생성하는 spl_token::initialize_accountinitialize_mint CPI로 이를 전달합니다. 해당 계정 목록에서 이를 제거하면 풀 생성이 손상됩니다.

의존성 변경

프로그램이 사용하는 시스템 프로그램 조각 — system_instruction::create_account, transfer, allocate, assign, 및 프로그램 ID 자체 — 이제 solana_program::system_programsolana_program::system_instruction이 아닌 solana-system-interface에서 옵니다. 프로그램 ID는 바이트 동일하므로, 이는 체인상 결과가 없는 컴파일 타임 이동이며, 이에 대해 비교하는 InvalidSysProgramAddress 확인도 포함됩니다. 두 개의 죽은 모듈도 삭제되었습니다: srm_tokenmsrm_token, OpenBook 제거에서 남겨진 Serum/MSRM 민트 선언. 아무것도 이들을 참조하지 않았습니다.

변경되지 않은 것

  • 모든 계정 레이아웃. AmmInfo, StateData, TargetOrders, AmmConfig — 동일한 크기, 동일한 필드 오프셋. 인덱서나 디코더 변경 없음.
  • 오류 코드 059. LamportsCalculateError60에 추가되므로 아무것도 이동하지 않습니다.
  • AMM 권한 PDA. 여전히 전체 프로그램에 대한 하나의 PDA, 시드 ["amm authority"], nonce 254.
  • 수수료, PnL 회계 및 곡선. 건드리지 않음. WithdrawExcessLamports는 어떤 풀의 준비금에도 포함되지 않은 lamports를 이동합니다.
  • Token-2022. 여전히 지원되지 않음. 새로운 명령어는 레거시 SPL Token 프로그램에만 말합니다.
  • 프로그램 ID. 변경되지 않음 — reference/program-addresses를 참조하세요.

업데이트된 페이지

  • products/amm-v4/instructionsWithdrawExcessLamports가 계정 목록 및 소유자별 디스패치 테이블과 함께 추가됨; 렌트 sysvar 제거를 다루는 새로운 CreateConfigAccount / UpdateConfigAccount 섹션; 인벤토리 테이블 및 상태 변경 매트릭스 행 추가.
  • products/amm-v4/overview — 릴리스 배너.
  • reference/error-codes — 새로운 “AMM v4: AmmError는 Anchor 번호가 아님” 섹션으로 코드 600 기반 번호 매기기 문서화.
  • reference/program-addresses — 새로운 “초과 lamports 수집 지갑” 섹션.
  • solana-fundamentals/rent-and-reclaimable-rent — 새로운 “Raydium 프로그램이 자체 측에서 스윕하는 것” 섹션; 래핑된 SOL 노트가 두 토큰 프로그램 모두 UnwrapLamports를 노출한다고 말하도록 수정됨.
  • solana-fundamentals/toolchain — Agave 3.1.10, release.anza.xyz, Rust 1.91.0.