기능
Asset 소각
Last updated September 3, 2026
이 가이드는 Metaplex Core SDK를 사용하여 Solana에서 Core Asset을 소각하는 방법을 보여줍니다. Asset을 영구적으로 파괴하고 렌트 보증금의 대부분을 회수합니다.
학습 내용
- Asset을 소각하고 렌트 회수
- Collection 내 Asset의 소각 처리
- Burn Delegate 권한 이해
- 소각 후 계정에 무슨 일이 일어나는지 알기
- 소각 전에 Asset Signer PDA를 비우기
소각 전에 Asset Signer 잔액을 인출하세요
Core Asset을 소각하면 execute가 실패합니다. Asset Signer PDA에 남아 있는 SOL, 토큰, 기타 자산은 회수 경로 없이 묶입니다. 먼저 전송하세요.
요약
Core Asset을 소각하여 영구적으로 파괴하고 렌트를 회수합니다. 소유자(또는 Burn Delegate)만 Asset을 소각할 수 있습니다.
burn(umi, { asset })을 호출하여 Asset 파괴- 계정의 렌트는 소각 트랜잭션의 지불자에게 반환됨
- 소액(~0.0009 SOL)이 계정 재사용 방지를 위해 남음
- 소각은 영구적이며 되돌릴 수 없음
- 먼저 Asset Signer PDA를 비우세요 — 소각 후에는
execute로 해당 자금을 이동할 수 없습니다
범위 외
Token Metadata 소각(mpl-token-metadata 사용), 압축 NFT 소각(Bubblegum 사용), Collection 소각(Collection은 자체 소각 프로세스가 있음).
빠른 시작
바로가기: Asset 소각 · Collection 내 소각
- 설치:
npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi - Asset을 가져와서 소유권 확인
- Asset Signer PDA에 자금이 있으면
execute로 전송 - 소유자로서
burn(umi, { asset })호출 - 렌트가 자동으로 지갑에 반환됨
전제 조건
- Asset을 소유한(또는 Burn Delegate인) 서명자로 구성된 Umi
- 소각할 Asset의 Asset 주소
- Collection 주소 (Asset이 Collection 내에 있는 경우) Asset은
burn명령어를 사용하여 소각할 수 있습니다. 이렇게 하면 Asset 계정의 렌트 예치금이 트랜잭션 지불자에게 반환됩니다. 계정이 다시 열리는 것을 방지하기 위해 1바이트 렌트 면제 최소 금액(0.00089784 SOL)만 계정에 남으며, 그 이상의 lamports도 계정에 그대로 남습니다.
렌트만 환불됩니다
burn은 계정 데이터 크기에 대한 렌트 면제 잔액에서 1바이트 하한을 뺀 금액을 지불자에게 환불합니다. 주소 재오픈 공격을 방지하기 위해 계정은 삭제되지 않고 1바이트 초기화되지 않은 계정으로 크기가 조정됩니다. 아직 회수되지 않은 프로토콜 수수료 등 렌트를 초과하는 lamports는 Metaplex 수수료 수집기가 회수할 때까지 해당 1바이트 초기화되지 않은 계정에 남아 있습니다.
코드 예제
SDK를 사용하여 Core asset을 소각하는 방법입니다. 이 스니펫은 당신이 자산의 소유자라고 가정합니다.
1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { burn } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { publicKey } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
7const assetAddress = publicKey('AssetAddressHere...')
8
9// Permanently destroy/burn an NFT asset
10const result = await burn(umi, {
11 asset: assetAddress,
12}).sendAndConfirm(umi)
13
14console.log('Asset burned successfully')
Collection에 속한 Asset 소각
컬렉션의 일부인 Core asset을 소각하기 위한 SDK 사용 방법입니다. 이 스니펫은 당신이 자산의 소유자라고 가정합니다.
Collection에 속한 Asset 소각
import { publicKey } from '@metaplex-foundation/umi'
import {
burn,
fetchAsset,
collectionAddress,
fetchCollection,
} from '@metaplex-foundation/mpl-core'
const assetId = publicKey('11111111111111111111111111111111')
const asset = await fetchAsset(umi, assetId)
const collectionId = collectionAddress(asset)
let collection = undefined
if (collectionId) {
collection = await fetchCollection(umi, collectionId)
}
await burn(umi, {
asset,
collection,
}).sendAndConfirm(umi)
일반적인 오류
Authority mismatch
Asset의 소유자나 Burn Delegate가 아닙니다. 소유권을 확인하세요:
const asset = await fetchAsset(umi, assetAddress)
console.log(asset.owner) // 서명자와 일치해야 함
Asset is frozen
Asset에 Freeze Delegate 플러그인이 있고 현재 동결되어 있습니다. 소각하기 전에 동결 권한자가 해제해야 합니다.
Missing collection parameter
Collection 내 Asset의 경우 collection 주소를 전달해야 합니다. 먼저 Asset을 가져와서 컬렉션을 확인하세요:
const asset = await fetchAsset(umi, assetAddress)
const collectionId = collectionAddress(asset)
참고사항
- 소각은 영구적이며 되돌릴 수 없음 - Asset을 복구할 수 없음
- 렌트는 지불자에게 반환됨 (금액은 자산 크기와 플러그인에 따라 다름)
- 렌트만 환불됨. 렌트 면제 최소 금액을 초과하는 lamports는 소유자에게 반환되지 않음
- 남은 SOL은 계정 주소의 재사용을 방지함
- Burn Delegate는 소유자를 대신하여 소각 가능 (Burn Delegate 플러그인을 통해)
- 동결된 Asset은 소각 전에 해제해야 함
- 소각 전에 Asset Signer PDA를 비우세요 — 이후
execute는 실패하고 남은 잔액은 묶입니다
빠른 참조
소각 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
asset | 예 | Asset 주소 또는 가져온 객체 |
collection | 컬렉션 내인 경우 | Collection 주소 |
authority | 아니요 | 기본값은 서명자 (위임자용) |
누가 소각할 수 있나요?
| 권한 | 소각 가능? |
|---|---|
| Asset 소유자 | 예 |
| Burn Delegate | 예 |
| Transfer Delegate | 아니요 |
| Update Authority | 아니요 |
렌트 회수
| 항목 | 금액 |
|---|---|
| 지불자에게 반환 | 기본 + 플러그인 스토리지 렌트 |
| 계정에 남음 | ~0.0009 SOL |
| 렌트 초과 lamports | 환불되지 않음 |
FAQ
계정에 남아있는 ~0.0009 SOL을 회수할 수 있나요?
아니요. 이 소액은 계정을 "소각됨"으로 표시하고 해당 주소가 새 Asset에 재사용되는 것을 방지하기 위해 의도적으로 남겨집니다.
소각 후 Asset의 메타데이터는 어떻게 되나요?
온체인 계정이 지워집니다(0으로 초기화). 오프체인 메타데이터는 원래 URI를 통해 접근 가능하지만, 이를 연결하는 온체인 기록은 없습니다.
Burn Delegate가 소유자의 승인 없이 소각할 수 있나요?
예. 소유자가 플러그인을 통해 Burn Delegate를 할당하면 위임자는 언제든지 Asset을 소각할 수 있습니다. 소유자는 신뢰할 수 있는 주소만 Burn Delegate로 할당해야 합니다.
소각이 Collection의 카운트에 영향을 미치나요?
예. Asset이 소각되면 Collection의 currentSize가 감소합니다. numMinted 카운터는 변경되지 않습니다 (지금까지 민팅된 총 수를 추적함).
여러 Asset을 한 번에 소각할 수 있나요?
단일 명령어로는 불가능합니다. 하나의 트랜잭션에 여러 소각 명령어를 배치할 수 있습니다 (트랜잭션 크기 제한 내에서).
소각하면 Asset Signer PDA의 SOL과 토큰은 어떻게 되나요?
소각하면 execute가 비활성화됩니다. 먼저 Asset Signer PDA를 비우지 않으면 해당 잔액은 회수 경로 없이 묶입니다.
용어집
| 용어 | 정의 |
|---|---|
| 소각 | Asset을 영구적으로 파괴하고 렌트를 회수 |
| Burn Delegate | 소유자를 대신하여 소각할 권한이 있는 계정 |
| 렌트 | Solana에서 계정을 유지하기 위해 예치하는 SOL |
| 동결 | 소각과 전송이 차단되는 Asset 상태 |
| Collection | Asset이 속할 수 있는 그룹 계정 |
| Asset Signer PDA | execute를 통해 서명하는 Asset에 연결된 지갑. 소각하면 남은 잔액이 묶입니다. |
