GHOST_ROOT
How to Mint Your Terminal
You have a credential. This page walks you through using it to mint your Ghost Root terminal NFT, step by step. no technical knowledge required.
Split Your Credential
Your credential looks like this: ghost_xxx_0000||0xabc123...
The part before || is your rawCode. The part after is your signature.
Paste it below and we'll split it for you.
Your Full Credential
Paste the full credential you received. It contains two parts joined by || and this tool splits them for you automatically.
Mint via Etherscan
No code needed. Works in any browser. Takes about 2 minutes.
1
Open the contract on Etherscan
2
Connect your wallet
Click Connect to Web3 at the top of the Write Contract page. Approve the connection in your wallet (MetaMask, Coinbase Wallet, etc.).
3
Find the mint function
Scroll down until you see the mint function. It has two input fields: rawCode and signature.
4
Set the ETH amount
In the value field at the top, enter 0.0026 and set the dropdown to Ether. This is the mint price. The exact amount is required. Too much or too little will fail. Your code is not consumed if it reverts.
5
Paste rawCode and signature
Use the splitter above to get your two parts. Paste rawCode into the first field and signature into the second. Do not add spaces, quotes, or modify the text in any way.
6
Click Write and confirm
Hit Write. Your wallet will pop up asking you to confirm. Approve it. Once the transaction goes through, the terminal NFT is yours. The code is permanently burned. Nobody else can use it.
Open Contract on Etherscan →
Mint via Script
For developers who prefer the command line. Requires Node.js and the ethers library.
1
Install the ethers library
Run npm install ethers in your terminal.
2
Edit the script
Fill in your RPC_URL (from Infura, Alchemy, etc.), your PRIVATE_KEY, and your full CREDENTIAL string (the one with || in the middle).
3
Run it
Run node mint.js. The script splits the credential, submits the mint transaction, and prints the tx hash when done.
const { ethers } = require("ethers"); const RPC_URL = "https://mainnet.infura.io/v3/YOUR_KEY"; const PRIVATE_KEY = "0xYOUR_PRIVATE_KEY"; const CREDENTIAL = "ghost_xxx_0000||0x75b972..."; const CONTRACT = "0x3aD41F5055926FF40D499196fc59f34e6f4230fB"; const ABI = ["function mint(string calldata rawCode, bytes calldata signature) external payable"]; (async () => { const provider = new ethers.providers.JsonRpcProvider(RPC_URL); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const contract = new ethers.Contract(CONTRACT, ABI, wallet); const [rawCode, signature] = CREDENTIAL.split("||"); const tx = await contract.mint(rawCode, signature, { value: ethers.utils.parseEther("0.0026"), }); await tx.wait(); console.log("Minted! TX hash:", tx.hash); })();
Common Issues
Transaction failed: 'invalid signature'
Your credential was modified. Make sure you copy the entire string, including everything after ||. Even one wrong character will cause this. Use the splitter above to avoid mistakes.
Transaction failed: 'Code already used'
Someone else minted with that code before you. Codes are first-come, first-served. Look for the next one in the signal drop.
Transaction failed: 'Wrong ETH amount'
The mint price is exactly 0.0026 ETH. Not more, not less. Double-check the value field and the unit (Ether, not Wei or Gwei).
Transaction failed: 'Wallet limit reached'
Your wallet address has already reached the maximum number of mints allowed per wallet.
I don't see a Write Contract tab on Etherscan
The contract needs to be verified on Etherscan first. If you only see bytecode, check that you're on the correct network (Mainnet vs Sepolia).
What is rawCode and what is signature?
Your credential has two parts separated by ||. Everything before || is the rawCode. It identifies your specific key. Everything after || is the cryptographic signature that proves it is valid. Both are required to mint.
Contract Address
Deployed on Ethereum Mainnet.
0x3aD41F5055926FF40D499196fc59f34e6f4230fB
View on Etherscan →