Skip to content

MultiOwnable — Shared Control

One-line pitch: MultiOwnable lets a contract have many owners instead of just one. Every owner has equal admin power. This is the pattern every token in Dysnomia inherits.

What this is

Standard OpenZeppelin Ownable has one owner. MultiOwnable flips that to a set of authorized addresses. The onlyOwners modifier gates any privileged function; any address in _owners passes.

This isn't just a convenience — the whole Dysnomia system depends on contracts being able to add each other as owners. That's how LAU gives VOID permission to mint for it, how WAR gets permission to mint H2O, and so on.

If you've played a web3 game before

  • Closest analogy: a joint bank account — any signer can transact.
  • Or: OpenZeppelin's AccessControl (a role-based extension with multiple admins).
  • Or: a Safe with 1-of-N threshold — any owner can solo-sign.
Dysnomia term What it maps to
MultiOwnable Base class for "set of owners"
_owners The mapping address → bool
onlyOwners Modifier — reverts unless caller is in _owners
OwnershipUpdate Event fired when owners are added/removed

What you actually do with it

  • Understand it's there — every token you interact with is MultiOwnable.
  • Don't give ownership to random addresses — an owner has total power over that token.
  • Normal actions (transfer, approve, Purchase/Redeem) don't require ownership; only admin-level operations do.

Rewards / costs

  • Cost: none directly.
  • Reward: none — it's infrastructure.

Requirements & gating

  • To add/remove an owner, you must already be an owner.

Where it connects

Inherited by every token in the system — DYSNOMIA, DYSNOMIA V2, and through them, everything else.

Quick FAQ

Q: Why not just use Ownable? A: Because game contracts need to call privileged functions on each other. If there's only one owner, you can't do that without an EOA in the middle.

Q: Can I become a co-owner of a public token? A: Only if an existing owner adds you. In practice, ownership is set up at deployment and rarely modified.

Q: What if all owners are removed? A: The contract becomes un-admin'd. Most contracts in Dysnomia maintain at least one owner specifically to avoid this bricking scenario.


Want the Solidity? The contract reference lives at technical/docs/lib/MULTIOWNABLE.md.