Skip to main content
Version: master

ADR 022: Per-subspace token factory

Changelog​

  • April 28th, 2023: First draft;
  • May 8th, 2023: First review;
  • May 9th, 2023: Second review;

Status​

ACCEPTED Not Implemented

Abstract​

This ADR introduces a new feature that allows subspace admins to create, mint and burn new tokens.

Context​

Desmos is a social network protocol that allows users to create, share, and engage with content on a decentralized platform. It also provides the ability to create subspaces, which represent applications built on top of Desmos.

Currently, to post or interact with content within a subspace on Desmos, users are required to pay the gas fee using DSM (Desmos native token). This means that there is no direct financial incentive for creating a social network on Desmos itself.

By allowing subspace admins to mint custom tokens, we are going to enable the implementation of a custom tokenomic system within the subspace. This means that when users create or interact with content stored within a particular subspace, they may earn or spend these custom tokens. This will provide a new level of flexibility and incentive for users to actively participate within the subspaces.

Decision​

We will wrap the CosmWasm Token Factory module with the following modifications:

  1. Instead of using the token creator address to compose the coin denom, we will use the subspace treasury address: factory/{trasury_address}/subdenom;
  2. Only the subspace treasury will be able to perform the admin-related operations.
  3. The CreateDenom action will burn dsm instead of send them to the community pool.

Msg Service​

The messages used from this module will be the same as CosmWasm with the following modifications:

  1. Addition of a subspace_id field to all the messages, in order to identify for which subspace the operations are performed;
  2. Removal of the MsgChangeAdmin message, since the allowed admin will only be the subspace treasury account;
  3. Addition of a MsgUpdateParams message, in order to update the amount of coins that a subspace admin need to burn to execute a MsgCreateDenom.

Here is the Msg service for the MsgUpdateParams that we are going to add to the CosmWasm tokenfactory module:

service Msg {
...

// UpdateParams defines a (governance) operation for updating the module
// parameters. The authority defaults to the x/gov module account.
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
}

// MsgUpdateParams is the Msg/UpdateParams request type.
message MsgUpdateParams {
option (cosmos.msg.v1.signer) = "authority";

// authority is the address that controls the module (defaults to x/gov unless
// overwritten).
string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];

// params defines the parameters to update.
//
// NOTE: All parameters must be supplied.
Params params = 2 [ (gogoproto.nullable) = false ];
}

// MsgUpdateParamsResponse defines the response structure for executing a
// MsgUpdateParams message.
message MsgUpdateParamsResponse {}

// Params are the module parameters.
message Params {
repeated cosmos.base.v1beta1.Coin denom_creation_fee = 1 [
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
(gogoproto.moretags) = "yaml:\"denom_creation_fee\"",
(gogoproto.nullable) = false
];
}

Consequences​

Backwards Compatibility​

The solution outlined above is fully backward compatible since we are just adding a new module.

Positive​

  • Allow subspace admins to create their custom denominations enabling custom tokenomics

Negative​

(none known)

Neutral​

(none known)

References​