The onchain payment, identity, and minting layer that connects AUTEUR's cinematic MCP server to the Ethereum ecosystem.
0xAUTEUR makes AUTEUR's validated ShotSpec output: payable, mintable, and agent-hireable.
AUTEUR validates creative decisions through its enforcement gate (sanitise_and_submit) and produces ShotSpec — a verifiable data structure carrying every creative choice from intent to generation. 0xAUTEUR takes that output onchain.
| Language | Files | Code | Comment |
|---|---|---|---|
| Solidity | 5 | 283 | 12 |
| Python | 5 | 738 | 226 |
| Markdown | 5 | — | 617 |
| Total | 18 | 1074 | 858 |
| Contract | Address | Description |
|---|---|---|
| auteur (0xAUTEUR) | 0x4473350125F66FC17988589A9a948514866bfdE3 |
Payment + receipting. deposit(), spend(), getLog() |
| auteuragent (ERC-8183) | 0xc7cAF559a5cF8a3C85cA9acEE4A0010e666871B3 |
Agentic commerce. createJob(), fundJob(), submitWork(), completeJob() |
| 0xAUTEUR Shot (Rare Protocol ERC-721) | 0x24D258b4249051Dbfa06b1526Bf847062562f126 |
Minted via Rare Protocol CLI with IPFS metadata |
| RareProtocolMock | 0xA530eb2F308BC6D7810eF73d8103ff9123630Cb4 |
Standalone mock for testing (deployed, not factory) |
| Rare Auction | 0x1f0c946f0ee87acb268d50ede6c9b4d010af65d2 |
Auction contract for bid-responsive recomposition |
| Action | TX Hash |
|---|---|
| Deploy 0xAUTEUR.sol | 0xb43b8a6333963d007f1eaa1afd37fe75f2512f2fec63501a4dcd0c6d9d158531 |
| Deposit 0.005 ETH | 0x7f4ce12ffe17e68c7cb4416b7149232bfafba107b151780cd9e9cd19eef819fa |
| Deploy AuteurAgent (ERC-8183) | 0xd2f61da069c1fe8f14368731264807ca417d2d1f3767dfa29459d85b4087ca59 |
| Deploy ShotNFT (legacy, replaced by Rare) | 0x7178771e0d6b6aa57a049e358987f87f0f96fecd90c2deea216be2fe312f0c55 |
| Rare Protocol: Deploy 0xAUTEUR Shot | 0xabcb70f51642204176d79eb51c4fbf1064dc9bbd1f1f02548a69fc305b7cc9ce |
| Rare Protocol: Auction create | 0xadc2100fa274949300ea422cc8baf9367cf748578d242e9cdc90d1f4f9bc56e8 |
| Deploy RareProtocolMock | 0x... (TX hash from edfc4ab) |
| Synthesis Registration | 0xba9f8cc02c561d19d875e31bdb2a0d790f5aecf8466a20e245cece0996344ed1 |
AUTEUR MCP enforces HTTP 402 payment on every request when X402_ENABLED=true. 0xAUTEUR.sol is the settlement layer.
Client discovers (402 response with amount, asset, chain, address)
|
Client signs EIP-712 Payment proof (or personal_sign fallback)
|
Client retries with X-Payment header (base64 JSON)
|
Server verifies: chain, asset, recipient, amount, expiry, nonce, signature
|
After generation → spend() on auteur.sol → SpendReceipt event onchain
Payment verification: auteur/x402_verify.py in the AUTEUR repo.
Onchain settlement: auteur/x402_settle.py calls spend(address agentId, string taskId, uint256 amount, string cid).
All NFT mints and IPFS pinning go through the official Rare Protocol CLI (@rareprotocol/rare-cli). The CLI handles image upload, metadata generation, IPFS pinning to SuperRare's Filebase gateway, and onchain minting via the Rare factory contract.
The ShotNFT (0x24D258...f126) is registered with Rare Protocol via rare import erc721 on Base Sepolia. On Base Sepolia, only wallet+search+status+import+mint are supported (no factory deploy — collections are deployed separately via Foundry and imported).
Verified mint via CLI: TX 0xcd926b9a989042ef4bcba11b32e86a20f30f6db313e6988506b8248c72d83456 (Token ID #3).
NFT #1 — Beat 1 (Original Composition)
| Field | Value |
|---|---|
| Token ID | 1 |
| Brief | A woman pressing her palm flat against cold glass, not looking at the man behind it |
| Tension | 0.5 |
| Image CID | QmNsWukwJCwDfYntuCA51qCxQAJU99JepopK9kg1FgXFGY |
| Metadata CID | QmNSGwVhRnbBuTuYpb7GxNvmZ3PkMJpMMwRwVH5f6Y7YdY |
| Mint TX | 0x105b69a889b4cd732dad7971c3ac45c6956428b741c28ec17e8c58d4f99ce863 |
| SpendReceipt TX | 0x4274b1e2603e5d2b09220f65fe5fd7584c9b5eb0718b19230bbb15e0dc639579 |
NFT #2 — Beat 2 (Bid-Responsive Recomposition)
| Field | Value |
|---|---|
| Token ID | 2 |
| Brief | Bid-triggered recomposition. Tension 0.50 → 0.65 after 2.5x reserve bid |
| Tension | 0.65 |
| Image CID | QmThGsXnTNHrjfcwKWDF5xo1fn5BREPH9AX5vUWMXB2ghR |
| Metadata CID | QmUoh6f57Ssm8vHPhck4uZEp6epkxqKLLtUivm3dezapKL |
| Mint TX | 0xf5e702a253d4fc90e1792f1897bef4d65b44dc36b1dd4d32d784637c72b97c1d |
| SpendReceipt TX | 0xcfd5c6a61a2ccda06e2c2088213acd982a8d7862cf818b284b8076b82d8cba08 |
Complete lifecycle via the AuteurAgent contract:
| Step | TX Hash |
|---|---|
| createJob (requestService) | 0xdf4bcc236ebffb93c5f59c41b6a21bc36ba63e66c5dda330ad87e3d00e89eb1a |
| fundJob (0.0005 ETH escrow) | 0x2788e3e3b30fd403ed260a44dcb309808d345866c2d5f6d52d86f84181da7380 |
| submitWork (deliverable CID) | 0xb7ef7e0c1497402a9a74eadd7942397b3b289f7be3b667320942c79c47740c72 |
| completeJob (evaluator attestation) | 0x4356756a19fc0c71122b8ac304c241b22d1788479d237ef2239012f4a0c5f2e6 |
| Track | Component | Proof |
|---|---|---|
| Base | 0xAUTEUR.sol + spend() |
SpendReceipt events with CID fields onchain |
| SuperRare | Rare Protocol ERC-721 + IPFS metadata | Mint TX + tokenURI with public gateway URLs |
| Virtuals | ERC-8183 AuteurAgent | createJob → fundJob → submitWork → completeJob |
| Open Track | All of the above | Combined |
- 0xAUTEUR.sol on Base Sepolia: explorer
- SpendReceipt with CID: TX 0x4274...9579
- IPFS CID resolves to valid metadata: QmNSGw...YdY
- Rare Protocol mint with image + metadata: TX 0x105b...e863
- Bid-triggered recomposition: tension 0.50 → 0.65, new mint TX 0xf5e7...7c1d
- ERC-8183 agent-to-agent: createJob TX 0xdf4b...eb1a
The AUTEUR MCP server is publicly deployed and reachable for any MCP-compatible client:
- Endpoint:
https://auteur-mcp-production.up.railway.app/mcp - Transport: Streamable HTTP
- Railway Project:
auteur-mcp(107fcd42)
| Role | Model | Env Var |
|---|---|---|
| Main Image | Nano Banana 2 | KIE_IMAGE_MODEL_MAIN |
| Main Video | Kling 3.0 | KIE_VIDEO_MODEL_MAIN |
| Judge Image | Qwen Image 2.0 | KIE_IMAGE_MODEL_JUDGE |
| Judge Video | Seedance 1.5 Pro | KIE_VIDEO_MODEL_JUDGE |
Brief → AUTEUR MCP (Railway) → ShotSpec → sanitise_and_submit → PromptComposer → Provider
│ │
validation video URL / image
│ │
x402 settle ──→ spend() │
│ Rare CLI mint
SpendReceipt onchain │
│ IPFS pin (Filebase)
│ │
└──→ ERC-721 NFT on Base Sepolia
Bid listener → tension adjustment → recompose → new mint
ERC-8183: requestService → fundJob → submitWork → completeJob
src/
auteur.sol # 0xAUTEUR — payment + receipting (86 LOC)
auteuragent.sol # AuteurAgent — ERC-8183 agentic commerce (233 LOC)
shotnft.sol # ShotNFT — legacy ERC-721, replaced by Rare Protocol (36 LOC)
RareProtocolMock.sol # Standalone mock for testing (44 LOC)
ipfs.py # IPFS pin layer (kubo daemon)
mint.py # NFT minting integration (legacy, now using Rare CLI)
listener.py # Bid-responsive recomposition
mcp_bridge.py # Full pipeline orchestrator
script/
DeployMock.s.sol # Foundry deploy script for RareProtocolMock
scripts/
test_e2e.py # End-to-end demo script (nonce-safe)
docs/
prd-build-guide.md # Product requirements document
mission-brief.md # Synthesis hackathon mission brief
synthesis-builder-guide.md # Synthesis builder guide reference
foundry.toml # Foundry config (Base Sepolia RPC)
remappings.txt # OpenZeppelin + forge-std
# Install Rare Protocol CLI
npm install -g @rareprotocol/rare-cli
# Configure
rare configure --chain base-sepolia --private-key $PK --rpc-url https://sepolia.base.org
# Mint via Rare Protocol (handles IPFS natively)
rare mint --contract 0x24D258b4249051Dbfa06b1526Bf847062562f126 \
--image shot.png --name "My Shot" --description "..." \
--attribute "Tension Level=0.7" --chain base-sepolia
# Create auction
rare auction create --contract <addr> --token-id 1 --starting-price 0.01 --duration 86400
# Run E2E demo
source .env && python3 scripts/test_e2e.pyMIT