Solana의 WithdrawExcessLamports: SPL Token 및 Token-2022 가이드
가격 및 기능 근거 확인 완료 2026년 9월 3일.
WithdrawExcessLamports 는 Token Program 명령어 38입니다. 이는 한정된 문제를 해결합니다. 민트, 토큰 계정 또는 다중 서명이 임대료 면제에 필요한 것보다 많은 램포트를 보유할 수 있지만, 해당 램포트는 일반 토큰 전송으로 이동할 수 없습니다.
WithdrawExcessLamports는 어떤 작업을 하나요?
WithdrawExcessLamports 는 Token Program 계정의 실시간 임대료 면제 최저액을 초과하는 SOL만 이전합니다. 소스는 열린 상태로 유지되며 토큰 또는 민트 데이터는 변경되지 않습니다. 필수 서명자는 소스가 토큰 계정인지, 민트인지, 토큰 다중 서명인지에 따라 달라집니다.
이 명령어는 기존 SPL Token Program과 Token-2022 모두에서 사용할 수 있습니다. 2026 임대료 제안 이전에는 토큰 소유 계정으로 실수로 전송된 램포트를 회수하는 데 유용했습니다. 임대료 최저액이 낮아지면 활용 범위가 넓어집니다. 기존 계정은 원래 잔액을 유지하면서 더 적은 준비금만 필요로 할 수 있습니다.
공식 동작과 최신 클라이언트 예시는 다음에서 확인할 수 있습니다. Solana의 Withdraw Excess Lamports 문서. 프로세서 구현도 Token Program 저장소에 공개되어 있습니다..
이 명령어에는 어떤 계정이 필요한가요?
| 계정 | 쓰기 가능? | 서명자? | 목적 |
|---|---|---|---|
source | 예 | 경우에 따라 다름 | 잉여 램포트를 보유한 토큰 계정, 민트 또는 다중 서명 |
destination | 예 | 아니요 | 출금된 램포트 수령 |
authority | 아니요 | 소스 유형에 따라 다름 | 출금 권한 증명 |
multiSigners | 아니요 | 사용 시 예 | 구성된 토큰 다중 서명 임계값 충족 |
프로세서는 소스의 데이터 길이와 현재 임대료 설정을 읽고 최저 잔액을 계산한 후 차액을 이전합니다. 오래되었거나 조작될 수 있는 호출자 제공 준비금은 받지 않습니다.
각 소스 유형에는 누가 서명해야 하나요?
| 소스 | 필수 권한자 |
|---|---|
| 지갑 소유자가 있는 토큰 계정 | 토큰 계정 소유자 |
| 토큰 다중 서명이 소유한 토큰 계정 | 필수 M-of-N 다중 서명 구성원 |
| 활성 발행 권한이 있는 민트 | 현재 발행 권한자 |
| 발행 권한이 없는 민트 | 소스 민트 계정 자체 |
| 다중 서명 소스 계정 | 구성된 M-of-N 구성원 |
발행 권한이 폐기된 민트 사례는 특히 주의해야 합니다. 소스 민트가 온커브 키페어로 생성되었다면 원래 키페어가 서명해야 합니다. 오프커브라면 제어 프로그램이 올바른 PDA 서명자 시드로 Token Program을 호출해야 합니다. 토큰 보유자나 이전 발행 권한자는 소스 서명을 대신할 수 없습니다.
Solana 클라이언트로 명령어를 빌드하는 방법
현재 공식 예시에서는 다음을 사용합니다. @solana-program/token 구성된 다음 항목과 함께 @solana/kit 클라이언트:
import { getWithdrawExcessLamportsInstruction } from "@solana-program/token";
const instruction = getWithdrawExcessLamportsInstruction({
source,
destination,
authority,
});
await client.sendTransaction([instruction]);
여기서 authority 는 TransactionSigner 소스에 적합한 권한자를 사용하세요. 다중 서명 권한자의 경우 다음을 통해 공동 서명자를 포함하세요. multiSigners. 프로덕션에서는 패키지 버전을 고정하고 사용하는 정확한 클라이언트 릴리스를 기준으로 컴파일하세요. 온체인 계정 계약이 변경되지 않더라도 클라이언트 유형은 변경될 수 있습니다.
하드코딩하지 마세요. 0.00203928 SOL 를 준비금으로 사용합니다. 이는 표준 165바이트 토큰 계정에 적용되던 기존 최저액일 뿐, 현재 모든 계정에 적용되는 값은 아닙니다. 트랜잭션을 빌드하거나 미리보기 직전에 소스의 실제 데이터 길이에 따른 현재 최저액을 조회하세요.
여기서 SPL Token과 Token-2022은(는) 어떻게 다른가요?
명령어의 핵심 효과는 같지만, Token-2022에서는 데이터 길이에 대한 가정이 특히 위험합니다. 민트와 계정 확장 기능은 직렬화된 크기를 늘리므로 필요한 준비금도 증가합니다. 모든 소스에 표준 82바이트 또는 165바이트 크기를 적용하는 통합은 초과분을 실제보다 크게 산정할 수 있습니다.
Token-2022의 CPI Guard는 래퍼의 또 다른 실질적인 차이점입니다. 가드가 잠겨 있으면 지갑이 유효한 권한자이더라도 크로스 프로그램 호출이 거부될 수 있습니다. Sol Incinerator은(는) 실패가 확실한 작업 하나를 대규모 정리 트랜잭션에 포함시키는 대신 해당 소스를 건너뜁니다.
네이티브 래핑된 SOL 토큰 계정은 다음 오류와 함께 거부됩니다. NativeNotSupported. 네이티브 SOL 래핑 해제는 별도의 계정 닫기 경로를 따르며 초과 램포트 출금이 아닙니다.
Sol Incinerator API은(는) 명령어를 어떻게 래핑하나요?
Sol Incinerator의 v2 API은(는) Assetcinerator를 통해 Token Program 호출을 빌드하여 프로토콜 수수료와 선택적 파트너 수수료가 온체인에서 적용되도록 합니다. 이 래퍼는 제품 계층이며, 원시 Token Program 명령어 자체에는 Sol Incinerator의 수수료가 부과되지 않습니다.
사용자에게 서명을 요청하기 전에 인증된 미리보기를 사용하세요.
curl -X POST https://v2.api.sol-incinerator.com/withdraw-excess-lamports/preview \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"userPublicKey": "DESTINATION_WALLET",
"sourceAccount": "TOKEN_ACCOUNT_MINT_OR_MULTISIG"
}'
관련 트랜잭션 및 명령어 경로는 다음과 같습니다.
POST /withdraw-excess-lamportsPOST /withdraw-excess-lamports-instructions
userPublicKey 는 대상 지갑이자 기본 권한자입니다. 다음을 제공하세요. authorityPublicKey 다른 민트, 소스 또는 다중 서명 권한자가 서명해야 하는 경우입니다. 최대 11개를 제공하세요. multisigSignerPublicKeys 토큰 다중 서명 절차를 빌드할 때 사용합니다. 모든 개인 키는 로컬에 유지되며, API은(는) 필수 서명자가 승인할 자료를 반환합니다.
기본 프로토콜 수수료는 200 bps. 직접 통합하는 개발자는 다음을 추가할 수 있습니다. partnerFeeAccount 및 partnerFeeBps, 반면 일반 Solana 트랜잭션 수수료는 별도로 부과됩니다. 반환된 feeLamports 그리고 캐시된 비율 계산을 재사용하는 대신 회수 필드를 사용하세요.
통합에서 어떤 실패를 처리해야 하나요?
- 잉여분 없음: 소스 잔액이 이미 현재 준비금과 같습니다.
- 잘못된 계정 소유자 또는 레이아웃: 소스가 지원되는 Token Program 계정이 아닙니다.
- 유효하지 않은 권한자: 제공된 서명자가 디코딩된 소스 상태와 일치하지 않습니다.
- 불완전한 다중 서명: 구성된 유효한 서명자가 충분히 제공되지 않았습니다.
- 네이티브 계정: 래핑된 SOL은(는) 다른 작업을 사용합니다.
- 잠긴 CPI Guard: Token-2022이(가) 래퍼 CPI을(를) 거부합니다.
- 상태 변경: 미리보기 후 잔액, 권한 또는 임대료 설정이 변경되었습니다.
- 트랜잭션 비용이 가치보다 큼: 출금액이 매우 적으면 네트워크 수수료를 고려할 때 경제적이지 않을 수 있습니다.
상태가 변경되었을 가능성이 있으면 다시 미리 확인하고, 소스 선택의 멱등성을 유지하며, 부적격임이 확인된 소스를 다른 유효한 작업과 함께 일괄 처리하지 마세요.
관련 글
자주 묻는 질문
Solana에서 WithdrawExcessLamports는 어떤 작업을 하나요?
WithdrawExcessLamports는 Token Program 계정의 현재 임대료 면제 최저액을 초과하는 램포트를 대상 지갑으로 이전합니다. 소스는 토큰 계정, 민트 또는 다중 서명일 수 있습니다. 토큰 수량, 민트 공급량, 권한, 확장 기능 및 직렬화된 기타 모든 계정 데이터는 변경되지 않습니다.
WithdrawExcessLamports에는 어떤 권한자가 서명하나요?
토큰 계정은 소유자 또는 구성된 다중 서명자를 사용합니다. 활성 발행 권한이 있는 민트는 해당 권한자를 사용합니다. 발행 권한이 없는 민트는 소스 계정 자체로 서명해야 하며, 해당 키페어 또는 오프커브 민트를 제어하는 프로그램의 CPI 서명 경로를 사용해야 합니다.
WithdrawExcessLamports는 Token-2022을(를) 지원하나요?
예. 이 명령어는 기존 SPL Token 및 Token-2022 계정, 민트, 다중 서명에 사용할 수 있습니다. Token-2022 확장 기능으로 계정이 더 커질 수 있으므로 통합에서는 소스의 실제 데이터 길이를 기준으로 임대료를 계산해야 하며, 잠긴 CPI Guard는 래퍼 기반 실행을 차단할 수 있습니다.
WithdrawExcessLamports가 토큰 계정 잔액을 임대료 면제 기준 미만으로 줄일 수 있나요?
아니요. Token Program은 소스에 필요한 최저 잔액을 계산하고 이를 초과하는 차액만 이전합니다. 네이티브 래핑된 SOL 토큰 계정은 거부됩니다. 제출 전에 계정 잔액, 데이터 길이, 임대료 설정 및 사용 가능한 권한이 변경될 수 있으므로 애플리케이션은 실시간 상태를 미리 확인해야 합니다.
