Warren - On-Chain NFT Deploy
by @planetai87
Deploy NFT collections permanently on MegaETH blockchain. Images stored on-chain via SSTORE2. Create and launch NFT collections with royalties, minting, and management pages.
clawhub install warren-nftπ About This Skill
name: warren-nft description: Deploy NFT collections permanently on MegaETH blockchain. Images stored on-chain via SSTORE2. Create and launch NFT collections with royalties, minting, and management pages. metadata: {"openclaw":{"emoji":"πΌοΈ","homepage":"https://megawarren.xyz","requires":{"anyBins":["node"]}}} user-invocable: true
Warren NFT - On-Chain NFT Collection Deployment
Deploy complete NFT collections with permanent on-chain image storage on MegaETH testnet. All images are stored using SSTORE2 bytecode storage in a WarrenContainer, and each collection gets its own NFT contract with minting support.
Network: MegaETH Testnet (Chain ID: 6343)
RPC: https://carrot.megaeth.com/rpc
Explorer: https://megaeth-testnet-v2.blockscout.com
How It Works
Your Images β SSTORE2 (on-chain) β WarrenContainer β WarrenLaunchedNFT
/images/1.png tokenURI renders
/images/2.png images on-chain
...
1. Each image is deployed as a Page contract (fractal tree for >15KB images)
2. All images are stored in a WarrenContainer NFT at /images/1.png, /images/2.png, etc.
3. A WarrenLaunchedNFT contract is deployed referencing the container
4. Minting is enabled and the collection is registered on megawarren.xyz
Setup (One Time)
cd {baseDir}
bash setup.sh
Get testnet ETH: https://docs.megaeth.com/faucet Genesis Key NFT auto-mints during first deployment (free on testnet).
Deploy NFT Collection
Option 1: From Image Folder
Prepare a folder with numbered images:
my-art/
βββ 1.png
βββ 2.png
βββ 3.png
βββ ...
Deploy:
cd {baseDir}
PRIVATE_KEY=0x... node deploy-nft.js \
--images-folder ./my-art/ \
--name "Cool Robots" \
--symbol "ROBOT" \
--description "100 unique robot NFTs on-chain" \
--max-supply 100
Option 2: Auto-Generate SVG Art
Generate unique SVG art programmatically:
cd {baseDir}
PRIVATE_KEY=0x... node deploy-nft.js \
--generate-svg 10 \
--name "Generative Art" \
--symbol "GART" \
--description "AI-generated on-chain art"
Full Configuration
PRIVATE_KEY=0x... node deploy-nft.js \
--images-folder ./collection/ \
--name "Cyber Punks" \
--symbol "CPUNK" \
--description "On-chain cyberpunk collection" \
--max-supply 1000 \
--whitelist-price 0.01 \
--public-price 0.02 \
--max-per-wallet 5 \
--royalty-bps 500
CLI Options
| Option | Required | Default | Description |
|--------|----------|---------|-------------|
| --images-folder | * | - | Folder with image files |
| --generate-svg | * | - | Generate random SVG art (1-256) |
| --name | Yes | - | Collection name |
| --symbol | Yes | - | Collection symbol (3-5 chars) |
| --description | No | Auto | Collection description |
| --max-supply | No | Image count | Maximum mintable NFTs |
| --whitelist-price | No | 0 | Whitelist mint price in ETH |
| --public-price | No | 0 | Public mint price in ETH |
| --max-per-wallet | No | 10 | Mint limit per wallet |
| --royalty-bps | No | 500 | Royalty (500 = 5%, max 1000 = 10%) |
\* Either --images-folder or --generate-svg is required.
Output
After deployment, you'll receive:
π NFT Collection Deployed!
============================================================
NFT Contract: 0xABC...
Container ID: 15
Image Count: 10
Max Supply: 100
Public Price: 0 ETH (Free)π Management: https://megawarren.xyz/launchpad/0xABC.../
π¨ Mint Page: https://megawarren.xyz/launchpad/0xABC.../mint
============================================================
Image Requirements
Gas Costs (Testnet)
| Component | Estimated Cost | |-----------|---------------| | Per image chunk (15KB) | ~0.002 ETH | | Container minting | ~0.001 ETH | | NFT contract deployment | ~0.003 ETH | | 10 images (small) | ~0.03 ETH | | 50 images (medium) | ~0.12 ETH | | 100 images | ~0.25 ETH |
Stress Test Workflows
Quick Test (3 SVGs)
cd {baseDir}
PRIVATE_KEY=0x... node deploy-nft.js --generate-svg 3 --name "Quick Test" --symbol "QT"
Medium Test (20 SVGs)
cd {baseDir}
PRIVATE_KEY=0x... node deploy-nft.js --generate-svg 20 --name "Art Collection" --symbol "ART" --public-price 0.001
Full Test (100 SVGs)
cd {baseDir}
PRIVATE_KEY=0x... node deploy-nft.js --generate-svg 100 --name "Century" --symbol "C100" --max-per-wallet 3
Contract Addresses (Testnet)
| Contract | Address |
|----------|---------|
| Genesis Key NFT | 0x954a7cd0e2f03041A6Abb203f4Cfd8E62D2aa692 |
| WarrenContainer | 0xabba293F4eC5811ed15549D11020Df79c7f1Fa0B |
| ContainerRenderer | 0x99D70834fdEB882297C97aD67b31B071f9c10E6D |
Troubleshooting
"No ETH" β Get testnet ETH from https://docs.megaeth.com/faucet
"GenesisKeyRequired" β Genesis Key auto-mints. If failing, check balance > 0.001 ETH
"Image exceeds 500KB" β Resize or compress images before deployment
"Too many images" β Maximum 256 images per container (TypeRegistry limit)
"TooManyFiles" β Same as above, reduce image count
DB registration warning β Non-critical. Collection still works on-chain. Management/mint pages will load from on-chain data.
π Tips & Best Practices
"No ETH" β Get testnet ETH from https://docs.megaeth.com/faucet
"GenesisKeyRequired" β Genesis Key auto-mints. If failing, check balance > 0.001 ETH
"Image exceeds 500KB" β Resize or compress images before deployment
"Too many images" β Maximum 256 images per container (TypeRegistry limit)
"TooManyFiles" β Same as above, reduce image count
DB registration warning β Non-critical. Collection still works on-chain. Management/mint pages will load from on-chain data.