With the original SPL token program, there was no option to close Mint Accounts owned by the Token Program and reclaim the SOL allocated to these accounts.
The MintCloseAuthority
extension introduces a solution to this limitation by
allowing a designated Close Authority to close a Mint Account if the supply of
the mint is 0. This feature provides a mechanism to recover SOL allocated to
Mint Accounts that are no longer in use.
In this guide, we'll walk through an example of using Solana Playground. Here is the final script.
Getting Started
Start by opening this Solana Playground link with the following starter code.
If it is your first time using Solana Playground, you'll first need to create a Playground Wallet and fund the wallet with devnet SOL.
If you do not have a Playground wallet, you may see a type error within the
editor on all declarations of pg.wallet.publicKey
. This type error will clear
after you create a Playground wallet.
To get devnet SOL, run the solana airdrop
command in the Playground's
terminal, or visit this devnet faucet.
Once you've created and funded the Playground wallet, click the "Run" button to run the starter code.
Add Dependencies
Let's start by setting up our script. We'll be using the @solana/web3.js
and
@solana/spl-token
libraries.
Replace the starter code with the following:
Mint Setup
First, let's define the properties of the Mint Account we'll be creating in the following step.
Next, let's determine the size of the new Mint Account and calculate the minimum lamports needed for rent exemption.
With Token Extensions, the size of the Mint Account will vary based on the extensions enabled.
Build Instructions
Next, let's build the set of instructions to:
- Create a new account
- Initialize the
MintCloseAuthority
extension - Initialize the remaining Mint Account data
First, build the instruction to invoke the System Program to create an account and assign ownership to the Token Extensions Program.
Next, build the instruction to initialize the MintCloseAuthority
extension for
the Mint Account.
Lastly, build the instruction to initialize the rest of the Mint Account data. This is the same as with the original Token Program.
Send Transaction
Next, let's add the instructions to a new transaction and send it to the
network. This will create a Mint Account with the MintCloseAuthority
extension
enabled.
Run the script by clicking the Run
button. You can then inspect the
transaction details on SolanaFM.
Close Mint Account
With the MintCloseAuthority
extension enabled, the Close Authority can close
the Mint Account to reclaim the lamports from the account.
Run the script by clicking the Run
button. You can then inspect the
transaction details on the SolanaFM.
Conclusion
The MintCloseAuthority
extension enables developers to reclaim SOL that
otherwise would have been permanently locked in a Mint Account. This feature is
particularly useful for applications or games involving single-use NFTs that are
meant to be burned. It ensures that the SOL allocated to Mint Accounts which are
no longer used can be reclaimed and reused.