---
name: mpp-genesis-mint
description: Use when minting an NFT from the MPP Genesis collection on Tempo blockchain, when needing to pay with USDC via Machine Payments Protocol, or when setting up an mppx wallet for Tempo mainnet transactions.
---

# Mint MPP Genesis NFT

## Overview

MPP Genesis is a 1111-supply ERC-721 collection on **Tempo mainnet** (Chain ID: **42070**). Minting costs **$5 USDC** and is only possible via the **Machine Payments Protocol** (HTTP 402 payment flow). No web UI — agents and CLI only.

## Key Addresses

| What | Address |
|------|---------|
| NFT Contract | `0xFD8844A461C1AC99816deaDe729619e29240AD63` |
| USDC on Tempo | `0x20c000000000000000000000b9537d11c60e8b50` |
| pathUSD on Tempo | `0x20c0000000000000000000000000000000000000` |
| Mint API | `https://mpp-genesis-nft-production.up.railway.app` |
| Chain ID | `42070` (mainnet), `42431` (testnet) |
| RPC | `https://rpc.tempo.xyz` |
| Explorer | `https://explore.tempo.xyz` |

## Important: Tempo Has No Native Gas Token

Tempo does **NOT** use ETH for gas. Gas is paid in **stablecoins** (USDC or pathUSD). You do NOT need ETH — only USDC. Your $6 USDC covers both the $5 mint and gas fees.

## Step 1: Install mppx

```bash
npm install -g mppx
```

## Step 2: Create or Import Account

**Create new:**
```bash
mppx account create
```
Outputs your address (e.g. `0x1234...`). Key stored in OS keychain.

**Or import existing key:**
```bash
mppx account import <NAME> --private-key 0xYOUR_PRIVATE_KEY
```

**Check accounts:**
```bash
mppx account list
```

Note: mppx account ≠ mint recipient. The mppx account **pays**, the `?to=` address **receives** the NFT.

## Step 3: Fund Account ($6+ USDC on Tempo Mainnet)

Your mppx account needs **$6+ USDC on Tempo mainnet** ($5 mint + ~$0.01 gas). $6 is more than enough.

**Option A — Bridge USDC from another chain:**
Use a Tempo-compatible bridge (e.g. https://tempo.xyz/bridge or partner bridges) to send USDC from Base/Ethereum/Arbitrum to your mppx address on Tempo.

**Option B — Transfer from a funded Tempo wallet:**
Requires `tempo-foundry` (Foundry fork with `--tempo.fee-token`):
```bash
foundryup --update && foundryup -n tempo
```
Then transfer:
```bash
cast send 0x20c000000000000000000000b9537d11c60e8b50 \
  "transfer(address,uint256)" <MPPX_ADDRESS> 6000000 \
  --rpc-url https://rpc.tempo.xyz \
  --private-key <FUNDED_KEY> \
  --tempo.fee-token 0x20c000000000000000000000b9537d11c60e8b50
```
Note: `6000000` = $6 (USDC has 6 decimals).

**Verify balance:**
```bash
cast call 0x20c000000000000000000000b9537d11c60e8b50 \
  "balanceOf(address)(uint256)" <MPPX_ADDRESS> \
  --rpc-url https://rpc.tempo.xyz
```

## Step 4: Check Collection Status (Free)

```bash
curl -s https://mpp-genesis-nft-production.up.railway.app/info
```

If `remaining` is 0 — sold out. Otherwise proceed.

## Step 5: Mint

```bash
mppx "https://mpp-genesis-nft-production.up.railway.app/mint?to=<RECIPIENT_ADDRESS>"
```

`<RECIPIENT_ADDRESS>` = where NFT goes (any EVM address, doesn't have to be your mppx account).

**What happens automatically:**
1. mppx → GET request → server returns 402 + payment challenge
2. mppx → pays $5 USDC on Tempo to collection owner
3. mppx → retries with payment proof → server mints NFT
4. Returns `{ success, tokenId, txHash, explorer }`

## Step 6: Verify

**Ownership:**
```bash
cast call 0xFD8844A461C1AC99816deaDe729619e29240AD63 \
  "ownerOf(uint256)(address)" <TOKEN_ID> \
  --rpc-url https://rpc.tempo.xyz
```

**Image:** `https://pub-50a8fc9148ed4f438b6ef7bc92397853.r2.dev/images/<TOKEN_ID>.png`

**Metadata:** `https://pub-50a8fc9148ed4f438b6ef7bc92397853.r2.dev/metadata/<TOKEN_ID>.json`

## Programmatic (No CLI)

```typescript
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0xPRIVATE_KEY') })],
})

const res = await fetch(
  'https://mpp-genesis-nft-production.up.railway.app/mint?to=0xRECIPIENT'
)
const { tokenId, txHash } = await res.json()
```

Dependencies: `npm install mppx viem`

## Troubleshooting

| Error | Fix |
|-------|-----|
| `Uninitialized` | Account has no USDC on Tempo mainnet — fund it |
| `InsufficientBalance` | Not enough USDC — add more |
| `sold out (1111/1111)` | All minted, collection complete |
| `402 Payment Required` | Normal — mppx handles this automatically |
| `MaxSupplyReached` | Same as sold out |
