소각?
소각 기능은 토큰의 totalSupply를 줄여 가치를 유지하거나 높이는 데 도움이 되는 방법 중 하나이다.
OpenZeppelin의 ERC20Burnable 컨트랙트 소개
ERC20Burnable 컨트랙트는 OpenZeppelin Contracts 라이브러리의 일부로 ERC20 토큰에 대한 burn 기능을 구현한다. 이 컨트랙트는 Context와 ERC20 컨트랙트를 상속하여 기본적인 ERC20 토큰 기능을 확장한다.
주요 함수
burn(uint256 amount) 함수는 호출자가 소유한 토큰을 소각할 수 있게 한다. 이 함수는 내부적으로 _burn 함수를 호출하여 토큰을 소각하며 호출자의 잔고에서 amount 만큼의 토큰이 차감된다. burnFrom(address account, uint256 amount) 함수는 호출자가 특정 계정(account)의 토큰을 소각할 수 있게 한다. 단, 호출자는 해당 계정의 토큰에 대한 소각 권한을 갖고 있어야 한다. 즉, 호출자는 account의 토큰에 대해 최소한 amount만큼의 허용량을 갖고 있어야 한다. 이 함수는 내부적으로 _spendAllowance와 _burn 함수를 호출하여 토큰을 소각한다.
예시(MyToken.sol)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
contract MyToken is ERC20, ERC20Burnable {
constructor(uint256 initialSupply) ERC20("My Token", "MT") {
_mint(msg.sender, initialSupply);
}
}
`MyToken` 컨트랙트는 ERC20 토큰 기능과 함께 소각 기능을 갖게 된다. 호출자는 `burn` 및 `burnFrom` 함수를 사용하여 소유한 토큰이나 허용된 토큰을 소각할 수 있다.
결론
이 글에서는 ERC20 토큰의 소각 기능을 구현하는 방법을 살펴보았다. OpenZeppelin Contracts 라이브러리의 `ERC20Burnable` 컨트랙트를 사용하여 소각 기능을 쉽게 구현할 수 있다. 이 컨트랙트를 사용하면 토큰 소유자나 그 허용량을 갖는 사용자가 토큰을 소각할 수 있으며 이를 통해 토큰의 가치를 유지하거나 높일 수 있다. 이 컨트랙트는 이벤트 분석을 통해 오프체인에서 토큰 소각을 인식할 수 있는 기능을 제공한다. 이 기능을 사용하여 토큰 프로젝트의 유연성과 가치를 높일 수 있습니다.
'Develop > Solidity' 카테고리의 다른 글
[Solidity] OpenZeppelin ERC20.sol의 mint 함수 이해하기 (0) | 2023.05.08 |
---|---|
[Solidity] OpenZeppelin Ownable.sol로 스마트 컨트랙트의 소유권 관리하기 (0) | 2023.05.04 |
[Solidity] OpenZeppelin ERC20.sol의 approve와 allowance 함수 이해하기 (0) | 2023.05.03 |
[Solidity] OpenZeppelin의 Context.sol 이해하기 (0) | 2023.04.10 |
[Hardhat] Solidity 스마트 컨트랙트 배포를 위한 Hardhat + TypeScript 프로젝트 파일트리 (0) | 2023.02.21 |