https://github.com/doom-protocol/doom-nft-program
https://github.com/doom-protocol/doom-nft-program
Last synced: 27 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/doom-protocol/doom-nft-program
- Owner: doom-protocol
- Created: 2025-11-22T21:29:33.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-03-10T19:49:50.000Z (3 months ago)
- Last Synced: 2026-03-11T01:22:41.248Z (3 months ago)
- Language: Shell
- Size: 187 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Doom NFT Program
This repository contains the Solana program for minting DOOM INDEX artworks as NFTs. It is built with Anchor and currently targets a Metaplex Core based mint flow with deterministic metadata URIs.
## Features
- **Collection setup**: Initialize the DOOM INDEX collection on Metaplex Core
- **Token reservation**: Reserve a sequential `tokenId` before minting
- **NFT minting**: Mint a DOOM INDEX NFT from a valid reservation
- **Admin controls**: Manage base metadata URL, pause state, admin authority, and upgrade authority
- **Contract tests**: Run Rust integration tests against the real Core CPI path
## Tech Stack
- **Blockchain**: Solana
- **Framework**: Anchor
- **Language**: Rust
- **NFT Standard**: Metaplex Core
- **Testing**: Rust `solana-program-test`, Bun
- **Package Manager**: Bun
## Prerequisites
- [Rust](https://rustup.rs/)
- [Solana CLI](https://docs.anza.xyz/cli/install)
- [Anchor](https://www.anchor-lang.com/)
- [Bun](https://bun.sh/)
## Installation
```bash
# Clone the repository
git clone https://github.com/doom-protocol/doom-nft-program.git
cd doom-nft-program
# Install dependencies
bun install
# Install git hooks
bun run prepare
# Optional: point Solana CLI at devnet
solana config set --url https://api.devnet.solana.com
# Optional: create a local keypair if you do not have one yet
solana-keygen new
```
## Build
```bash
# Build the Rust workspace
cargo build --workspace
# Build the contract test SBF dependency artifact
bun run build:sbf:test
```
## Test
```bash
# Run Rust unit tests plus contract tests
bun run test
# Run only the contract test suite
bun run test:contract
# Run the full local quality gate
bun run check
```
## Development Scripts
### Program-Driven Devnet Flow
```bash
# Initialize global config on devnet
bun run devnet:init
# Reserve the next token id on devnet
bun run devnet:reserve
# Mint a DOOM INDEX NFT on devnet
bun run devnet:mint
```
These scripts call the Anchor program in this repository and keep the deterministic `tokenId -> {base_metadata_url}/{tokenId}.json` flow intact.
### Direct Metaplex Core Scripts
These scripts follow the official Metaplex NFT/Core client flow and are useful when you want to create, inspect, or manage Core assets directly from a wallet without going through the DOOM program instructions.
```bash
# Create a Core collection
COLLECTION_NAME="DOOM TEST" \
COLLECTION_URI="https://example.com/collection.json" \
bun run metaplex:create:collection
# Create or mint a Core asset
NFT_NAME="DOOM INDEX #1" \
NFT_URI="https://example.com/1.json" \
bun run metaplex:create
# Alias for create
NFT_NAME="DOOM INDEX #1" \
NFT_URI="https://example.com/1.json" \
bun run metaplex:mint
# Fetch an asset or collection
TARGET_KIND=asset \
TARGET_ADDRESS= \
bun run metaplex:fetch
# Update asset metadata or update authority
ASSET_ADDRESS= \
NFT_URI="https://example.com/1-updated.json" \
bun run metaplex:update
# Transfer an asset
ASSET_ADDRESS= \
NEW_OWNER= \
bun run metaplex:transfer
# Burn an asset
ASSET_ADDRESS= \
bun run metaplex:burn
```
Common env vars for the Metaplex scripts:
- `SOLANA_RPC_URL`: RPC endpoint override. Falls back to `ANCHOR_PROVIDER_URL`, then devnet.
- `KEYPAIR_PATH`: Wallet keypair override. Falls back to `ANCHOR_WALLET`, then `Anchor.toml`, then `~/.config/solana/id.json`.
- `OUTPUT_PATH`: Custom JSON output path. Default is `target/devnet/metaplex/.json`.
- `AUTHORITY_KEYPAIR_PATH`: Optional authority signer for collection-authority, update-authority, owner, or delegate operations.
- `COLLECTION_ADDRESS`: Optional collection address when creating an asset inside a collection.
- `ASSET_KEYPAIR_PATH` / `COLLECTION_KEYPAIR_PATH`: Optional persisted signer path for the new asset or collection account.
## Repository Structure
```text
programs/doom-nft-program/
├── src/
│ ├── instructions/ # Instruction handlers
│ ├── state/ # On-chain account state
│ ├── constants.rs # Program constants
│ ├── error.rs # Custom errors
│ ├── events.rs # Program events
│ ├── lib.rs # Program entrypoint
│ └── utils.rs # Shared helpers
├── Cargo.toml
└── Xargo.toml
tests/src/
├── instructions/ # Source-aligned contract tests
├── lib.rs # Test module entrypoint
└── test_context.rs # Shared test fixtures and helpers
scripts/
├── build-test-sbf.sh # Copies the pinned Core test fixture into target/test-sbf
├── test-contract-v1.sh # Runs the contract suite
└── devnet/ # Devnet helper scripts
```
## Contributing
1. Fork the repository.
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Commit your changes: `git commit -m 'Add amazing feature'`
4. Push the branch: `git push origin feature/amazing-feature`
5. Open a pull request.
## License
This project is released under the MIT License.
## Notes
- The program is still under active development.
- The contract test flow avoids a local SBF build of this program and runs it as a host builtin, while loading the pinned official Metaplex Core `release/core@0.9.10` fixture for the Core CPI path.
- Devnet deployment may still depend on Solana faucet availability.