7편 민팅과 소각 , 기능성 토큰 확장 실습

기능성 토큰을 공부하다 보면 자주 나오는 기능이 바로 민팅(mint)소각(burn) 입니다.
토큰을 새로 발행하거나, 반대로 없애는 기능이기 때문에 겉으로 보기에는 단순해 보일 수 있습니다.
하지만 실제로는 총발행량과 권한 관리에 직접 연결되는 중요한 구조입니다.


이번 글에서는 민팅과 소각 이 각각 무엇인지, 총발행량이 어떻게 변하는지, 어떤 서비스에서 이런 기능이 필요한지, 그리고 실무에서는 어떤 점을 조심해야 하는지를 쉽게 정리해보겠습니다.


민팅이란 무엇인가?

민팅은 새로운 토큰을 만들어 발행하는 기능입니다.
쉽게 말하면 원래 없던 토큰 수량을 새로 추가하는 것입니다.

예를 들어 총발행량이 1,000개인 토큰에서 100개를 새로 민팅하면,
총발행량은 1,100개가 됩니다.

민팅은 단순히 숫자를 늘리는 것이 아니라,
누구에게 얼마를 추가로 배정할지까지 함께 결정되는 경우가 많습니다.

즉, 민팅은
**“새 토큰을 만들어 특정 주소에 넣는 기능”**이라고 보면 됩니다.


소각이란 무엇인가?

소각은 민팅의 반대 개념입니다.
즉, 기존에 존재하던 토큰을 없애는 기능입니다.

예를 들어 총발행량이 1,100개인 상태에서 50개를 소각하면,
총발행량은 1,050개로 줄어듭니다.

소각도 단순한 표시가 아니라, 실제로 잔액과 총발행량이 함께 줄어드는 구조로 설계되어야 의미가 있습니다.

즉, 소각은
**“이미 존재하는 토큰 수량을 줄이는 기능”**입니다.


민팅과 소각 이 왜 중요할까?

토큰에서 민팅과 소각 은 단순 기능이 아니라
토큰 경제 구조와 운영 방식에 큰 영향을 주는 핵심 기능입니다.

예를 들어:

  • 보상형 서비스는 민팅 기능이 필요할 수 있습니다
  • 사용량 감소 구조를 강조하는 서비스는 소각 기능을 넣을 수 있습니다
  • 스테이킹 보상을 새로 발행하는 구조도 민팅과 연결될 수 있습니다
  • 수수료 일부를 소각하는 모델도 존재합니다

즉, 민팅과 소각은 토큰의 공급 구조를 움직이는 기능이기 때문에 신중하게 다뤄야 합니다.


총발행량은 어떻게 변할까?

민팅과 소각 을 이해할 때 가장 중요한 값이 바로 totalSupply입니다.

민팅 시

  • totalSupply 증가
  • 특정 주소 잔액 증가

소각 시

  • totalSupply 감소
  • 소각한 주소의 잔액 감소

즉, 민팅과 소각은 단순한 개인 잔액 변화가 아니라
전체 발행량 자체를 바꾸는 동작입니다.

이 점이 일반 전송과 가장 큰 차이입니다.

전송은?

  • 전체 발행량은 그대로
  • 주소끼리 잔액만 이동

민팅/소각은?

  • 전체 발행량이 직접 변함

이 차이를 정확히 구분해야 합니다.


간단한 예제로 보면 더 쉽다

아래는 학습용으로 이해하기 쉬운 간단한 예제입니다.

pragma solidity ^0.8.20;contract MintBurnToken {
address public owner;
string public name = "Mint Burn Token";
string public symbol = "MBT";
uint256 public totalSupply; mapping(address => uint256) public balanceOf; constructor(uint256 initialSupply) {
owner = msg.sender;
totalSupply = initialSupply;
balanceOf[msg.sender] = initialSupply;
} modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
} function mint(address to, uint256 amount) public onlyOwner {
totalSupply += amount;
balanceOf[to] += amount;
} function burn(uint256 amount) public {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
balanceOf[msg.sender] -= amount;
totalSupply -= amount;
}
}

이 예제는 구조를 이해하기 위한 학습용 코드입니다.

여기서 볼 핵심은 아래와 같습니다.

  • owner만 mint 가능
  • burn은 자기 잔액 안에서 가능
  • mint 시 totalSupply 증가
  • burn 시 totalSupply 감소

mint 함수는 어떤 역할을 할까?

예제의 mint 함수는 아래처럼 생겼습니다.

function mint(address to, uint256 amount) public onlyOwner {
totalSupply += amount;
balanceOf[to] += amount;
}

이 함수는 관리자만 실행할 수 있습니다.
그 이유는 민팅 권한이 매우 민감하기 때문입니다.

이 함수가 하는 일은 두 가지입니다.

  1. 총발행량 증가
  2. 지정한 주소의 잔액 증가

즉, 새 토큰을 만들어 그 주소에 넣는 것입니다.


burn 함수는 어떤 역할을 할까?

예제의 burn 함수는 아래처럼 생겼습니다.

function burn(uint256 amount) public {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
balanceOf[msg.sender] -= amount;
totalSupply -= amount;
}

이 함수는 현재 호출한 사람이 자기 잔액 안에서만 토큰을 없앨 수 있게 합니다.

즉, 아무 토큰이나 없애는 것이 아니라
자기 지갑에 있는 토큰만 자기 책임으로 줄이는 구조입니다.

여기서 중요한 부분은 require입니다.
잔액보다 더 많은 양을 소각하려 하면 중단됩니다.


어떤 서비스에서 민팅 기능이 필요할까?

민팅 기능은 아래처럼 특정 목적이 있는 서비스에서 사용될 수 있습니다.

보상 지급형 서비스

활동 보상, 게임 보상, 스테이킹 보상처럼 새 토큰을 발행해 지급해야 하는 구조

운영 정책에 따른 추가 발행

초기 발행 후 특정 조건에서 추가 발행이 필요한 경우

단계별 분배 구조

파트너 보상, 운영 보상, 생태계 보상 등으로 나누어 추가 지급하는 구조

즉, 민팅은 “무조건 나쁜 기능”이 아니라
필요한 서비스에서는 실제로 쓰이는 기능입니다.
다만 권한과 한도가 중요합니다.


어떤 서비스에서 소각 기능이 필요할까?

소각 기능도 여러 서비스에서 쓰일 수 있습니다.

사용량 감소 모델

토큰을 사용할 때 일부를 소각하는 구조

수수료 일부 소각

거래나 서비스 이용 과정에서 일부 수량을 없애는 방식

사용자 선택 소각

사용자가 원할 때 자기 토큰을 줄이는 구조

공급 조절 목적

운영 정책상 공급량을 줄이는 구조

즉, 소각도 목적에 따라 충분히 활용될 수 있습니다.


실무에서 가장 조심해야 할 점은 무엇일까?

민팅과 소각 기능은 넣는 것보다
어떻게 제한하느냐가 더 중요합니다.

1) 민팅 권한이 너무 강한 경우

관리자가 언제든 무제한으로 발행할 수 있으면 신뢰 문제가 생길 수 있습니다.

2) 설명과 실제 코드가 다른 경우

“민팅은 제한적”이라고 말하지만 실제 코드상 제한이 없으면 위험합니다.

3) 소각 구조가 불분명한 경우

누가 누구의 토큰을 소각할 수 있는지 명확해야 합니다.

4) 총발행량 반영이 빠진 경우

잔액만 줄이고 totalSupply를 안 줄이면 제대로 된 소각이 아닙니다.

5) 테스트 없이 배포하는 경우

민팅·소각은 수량 구조를 직접 건드리기 때문에 테스트가 특히 중요합니다.

즉, 실무에서는 기능 유무보다
권한, 조건, 수량 반영, 테스트를 더 중요하게 봐야 합니다.


초보자가 자주 헷갈리는 부분

민팅은 전송과 같은가?

아닙니다.
전송은 기존 토큰을 옮기는 것이고, 민팅은 새로 만드는 것입니다.

소각은 그냥 보내기와 같은가?

아닙니다.
소각은 totalSupply까지 줄어야 의미가 있습니다.

burn 기능이 있으면 무조건 좋은가?

그렇지 않습니다.
누가 어떤 방식으로 소각하는지 봐야 합니다.

민팅이 있으면 무조건 위험한가?

그것도 아닙니다.
서비스 구조상 필요할 수 있습니다.
중요한 것은 권한과 한도입니다.


정리

이번 글에서는 기능성 토큰의 확장 기능인 민팅과 소각을 정리했습니다.

핵심만 다시 보면 다음과 같습니다.

  • mint는 새 토큰을 발행하는 기능
  • burn은 기존 토큰을 없애는 기능
  • mint 시 totalSupply가 증가함
  • burn 시 totalSupply가 감소함
  • 전송과 달리 민팅·소각은 전체 공급량을 직접 바꿈
  • 민팅은 보상형 서비스 등에서 활용될 수 있음
  • 소각은 공급 조절이나 수수료 구조에 활용될 수 있음
  • 실무에서는 권한 관리와 테스트가 특히 중요함

이 개념을 이해하면 다음 단계인 Remix 배포 실습도 훨씬 쉽게 따라갈 수 있습니다.

8편 리믹스로 기능성 토큰 배포


다음 글 예고

다음 글에서는 리믹스로 기능성 토큰을 배포하는 방법, 그리고 Remix VM과 지갑 연결 방식의 차이, 테스트 환경에서 무엇을 확인해야 하는지 초보자 관점에서 쉽게 정리해보겠습니다.