depunks
Summary: In-house Web3 NFT project on Ethereum mainnet — ERC-721 characters + ERC-1155 traits with on-chain PRNG and equip/burn, plus a shipped agent-identity layer (ERC-8004 via Adapter8004; the OpenSea “Agents list” a.k.a. opensea-erc8217).
What it is
DePunks is a fully in-house NFT project: contracts, the app, and tooling are all built and owned by the team (repo depunks). Base characters are ERC-721 “DePunks”; collectible traits are ERC-1155 “Attributes” sold in random packs and burned when equipped onto a character. On top of the collection sits an agent layer that promotes individual DePunks to on-chain AI-agent identities.
Stack / where it lives
- Repo:
~/Documents/localhost/depunks(contracts +app/+ tooling; remotegithub.com/damir5/depunks) - Chain: Ethereum mainnet
- Contracts: Solidity + Foundry, OpenZeppelin, UUPS upgradeable proxies.
contracts/README.md - App: RedwoodSDK-style worker app under
app/(agent manifest surface, admin, metadata hosting).
Contracts (from contracts/src/*.sol and contracts/README.md)
- DePunk.sol — ERC-721 upgradeable character NFT: blind mint, delayed reveal, ERC-2981 royalty enforcement (5%), dynamic metadata that updates when attributes are equipped. Also carries the new agent fields (
agentTier,applyMetadataWithSig,metadataNonce).contracts/src/DePunk.sol - Attribute.sol — ERC-1155 traits (caps, eye patches, pipes) sold in random packs, burned on equip.
contracts/README.md - Equipment system — equips attributes to a DePunk, burns the attribute, updates metadata.
contracts/README.md - DePunkBot.sol — transferable unrevealed “Bot” line minted from DePunk base burns, revealed by linking to an upgraded DePunk.
contracts/src/DePunkBot.sol - DePunkToken.sol — fixed-supply ERC-20 for the Phase 2 token launch.
contracts/src/DePunkToken.sol - DePunkClaim.sol — server-signed one-time claim contract for upgrade and base-burn claims.
contracts/src/DePunkClaim.sol - LibPRNG.sol — on-chain pseudo-random number library used for fair pack/trait distribution (with MEV considerations).
contracts/src/LibPRNG.sol,contracts/README.md
Live mainnet address
- DePunk ERC-721 proxy:
0xce7a61D155623f5Eb867a322100a5a6e2C917311— the production proxy, referenced asDEPUNK_PROXY/PRODUCTION_DEPUNK.contracts/script/UpgradeDePunkMinimal.s.sol,contracts/test/OpenSeaTransferSecurityFork.t.sol
Agent identity — ERC-8004 + Adapter8004 (SHIPPED on mainnet)
The “agent NFT” feature is built on ERC-8004 (“Trustless Agents”), not literally “ERC-8217” (that string does not appear in the repo). The public-facing / OpenSea framing of the same idea is the Agent NFT Identity Binding — see opensea-erc8217.
- Adapter8004 (interface
IERCAgentBindings) holds the ERC-8004 identity token and delegates control to whoever currently owns the bound DePunk — the DePunk never leaves the holder’s wallet; binding is permanent and follows the punk on transfer.app/plan/agents-8004.md - Adapter8004 mainnet:
0xde152AfB7db5373F34876E1499fbD893A82dD336(chain 1); Sepolia0x7621630cB63a73a194f45A3E6801B8C6A7eC2f92.app/src/app/abi/adapter8004.ts - ERC-8004 Identity Registry (mainnet)
0x8004a169fb4a3325136eb29fa0ceb6d2e539a432.app/plan/agents-8004-scoring.md - Key functions (
app/src/app/abi/adapter8004.ts):register(uint8 standard, address tokenContract, uint256 tokenId, string agentURI) → agentId— called by the current NFT holder; standard0= ERC-721; emitsAgentBound.bindingOf(agentId) → (standard, tokenContract, tokenId)— view; lets anyone verify which punk an agent is.setAgentURI/setMetadatarevert unless the caller currently owns the bound punk (NotController).
- The
agentURIpoints at/agents/:slug/registration.json, hosted by the DePunks app itself — deliberately kept as an app-level kill switch over the permanent on-chain binding.app/src/app/lib/agents/identity.ts
Status (as of repo notes, 2026-06-13)
- Binding is live on mainnet: 7 of 20 Foundation agent roles are on-chain bound + trait-inscribed (SEED #904/agentId 34421, PROOF #945, COUNCIL #7486, VAULT #951, TRADER #5345, SPEAKER #160, ARTIST #414).
app/docs/foundation-agents.md - The broader agents plan is marked SHIPPED on the
agentsbranch (Phases 0–7, fork-proven, Sepolia dress rehearsals).app/plan/agents-8004.md
OpenSea collections (slugs)
- depunks-club — main ERC-721 collection.
app/migrations/0034_backfill_depunks_opensea_slug.sql - depunks-traits — the ERC-1155 Attribute collection.
app/migrations/0035_married_nemesis.sql - depunks-bots — the Bot collection.
app/src/app/components/club/BotsBox.tsx
Decisions & lessons
- 2026-07: The team’s own naming inside the repo is ERC-8004 + Adapter8004; “ERC-8217” is the OpenSea-facing label for the binding standard, tracked separately in opensea-erc8217. Don’t conflate the two in code references.
Open questions
- Only 7/20 mainnet roles are confirmed bound; the other 13 have souls/wallets but no recorded on-chain binding.
app/docs/foundation-agents.md - Base mapping gap: a Base Adapter8004 address is mentioned in prose but NOT wired into the app config (
ADAPTER8004_ADDRESSESmaps only mainnet + Sepolia).app/src/app/abi/adapter8004.ts - Mainnet UUPS upgrade + pre-upgrade audit still pending per
app/docs/foundation-agents.md.
Sources
~/Documents/localhost/depunks/contracts/README.md,contracts/DEPLOYMENT.md,contracts/src/*.sol,contracts/script/UpgradeDePunkMinimal.s.sol~/Documents/localhost/depunks/app/plan/agents-8004.md,app/plan/agents-8004-scoring.md,app/docs/foundation-agents.md,app/docs/agents-features.md~/Documents/localhost/depunks/app/src/app/abi/adapter8004.ts,app/src/app/lib/agents/identity.ts- Related: opensea-erc8217, agents4fun