Hey MUD and Redstone user,
Welcome to the new MUD and Redstone newsletter! We decided to switch over to Substack to give our readers more ways to discover us — email is great, but we want to be able to link to our posts as well across Discord and X. Nothing else has changed, and we’ve imported in our past posts for reference.
Also a quick important note: we’ve decided to build out a dedicated X profile for MUD specifically. This profile will allow us to communicate about updates to MUD and the community building on it, so give it a follow
Enough housekeeping, let’s get into it! Time for some world-building.
-The MUD and Redstone team
Ecosystem
Two weeks ago, we held our first MUD Community Demos of the year, where we heard from Small Brain Games, Mississippi, Sky Strife, and DF Archon. You can find a recording and roundup thread for the call here. Our next call will be our MUD Core Devs call on Thursday, February 8th at 9:30am ET / 2:30pm BT. Join us on Discord to hear the call and ask the MUD Devs questions!
We also released a sizzle reel of current and upcoming MUD and Redstone projects, featuring submissions from Tenet, Primodium, Moving Castles, Sky Strife, Geoweb, Small Brain Games, Aether Sands, Gaul, Imminent Solace, DF Archon, Trade or Bust, and MOCS. Check it out below, and see the attached thread here! We’re especially excited to see projects that are bringing us beyond transacting on Ethereum — there are entirely new modes of interaction to experience now.
Several of these projects, including Sky Strife, Aether Sands, Gaul, and DF Archon have also launched their latest versions on Redstone, our Plasma-inspired L2 built to support MUD apps and other ambitious applications. In recent Seasons, Sky Strife and DF Archon have handled 250k and 200k transactions respectively, in a period of under two weeks. This is a massive accomplishment, seeing as Redstone is still a testnet! We’re excited to see Redstone Holesky grow as we get ready to ship Redstone mainnet later this year.
MUD Updates
We have several updates to MUD and our documentation, much of which you can find in our most recent changelog. For quick highlights, see below (we suggest reading the changelog for a more in-depth overview):
feat(world): remove system name from function signatures/selectors [M-05] (#2160): World function signatures for namespaced systems have changed from
{namespace}_{systemName}_{functionName}
to{namespace}__{functionName}
(double underscore, no system name). This is more ergonomic and is more consistent with namespaced resources in other parts of the codebase (e.g. MUD config types, table names in the schemaful indexer).Note: we have also updated this new namespacing paradigm in our documentation — see here.
chore: add module addresses changeset (#2172): Refactored
InstalledModules
to key modules by addresses instead of pre-defined names. Previously, modules could report arbitrary names, meaning misconfigured modules could be installed under a name intended for another module.feat(world): require namespace to exist before registering systems/tables in it [C-01] (#2007): Previously
registerSystem
andregisterTable
had a side effect of registering namespaces if the system or table's namespace didn't exist yet. This caused a possible frontrunning issue, where an attacker could detect aregisterSystem
/registerTable
transaction in the mempool, insert aregisterNamespace
transaction before it, grant themselves access to the namespace, transfer ownership of the namespace to the victim, so that theregisterSystem
/registerTable
transactions still went through successfully. To mitigate this issue, the side effect of registering a namespace inregisterSystem
andregisterTable
has been removed. Calls to these functions now expect the respective namespace to exist and the caller to own the namespace, otherwise they revert.refactor(cli,world,world-modules): split and separately deploy core systems (#2128)(opens in a new tab): Separated core systems deployment from
CoreModule
, and added the systems as arguments toCoreModule
refactor(cli,world,world-modules): split and separately deploy core systems (#2128):
Split
CoreSystem
intoAccessManagementSystem
,BalanceTransferSystem
,BatchCallSystem
,CoreRegistrationSystem
Changed
CoreModule
to receive the addresses of these systems as arguments, instead of deploying themReplaced
CORE_SYSTEM_ID
constant withACCESS_MANAGEMENT_SYSTEM_ID
,BALANCE_TRANSFER_SYSTEM_ID
,BATCH_CALL_SYSTEM_ID
,CORE_REGISTRATION_SYSTEM_ID
, for each respective system
feat(world): prevent invalid namespace strings [M-05] (#2169): Namespaces are not allowed to contain double underscores ("__") anymore, as this sequence of characters is used to separate the namespace and function selector(opens in a new tab) in namespaced systems. This is to prevent signature clashes of functions in different namespaces.
fix(cli): mud set-version --link shouldn't fetch versions (#2000): Postgres storage adapter now uses snake case for decoded table names and column names. This allows for better SQL ergonomics when querying these tables. To avoid naming conflicts for now, schemas are still case-sensitive and need to be queried with double quotes. We may change this in the future with namespace validation(opens in a new tab).