After studying the SMT White Paper for a few more hours, I decided to write a short post (my concept of "short" might be different from yours, but anyways) about how to deploy your own SMT - Smart Media Token on the Steem blockchain. I did my best to translate the technical terms into plain English, but I may have some glitches, so I encourage you to ask as many questions as you want in the comments, I'll try to answer all, to the extent of my knowledge, obviously.
This article is based on the pseudo-code published in the white paper, but keep in mind that this will most likely change until the public implementation. Also, some of the atomic operations described here may be grouped into more monolithic UI constructs.
SMT Creation And Distribution
An SMT is created through a distribution process. In the white paper, the distribution process is often substituted with the term "ICO", (although this may not be your usual, borderline scammy meaning of the term).
So, the moment you decide you want your own token, you have to decide also the time window. By time window I understand:
- how long people will be able to buy your token (the ICO time window)
- how much of a token you will distribute? (your ICO will have a cap? it will be a soft cap, a hard cap?)
- are there any subsequent distributions of the token? (this is defined as "inflation" in the white paper)
SMT creation is done in 3 steps:
- creating the token
- pre-setup parameters
- setup the token
These are a sequence of operations on the blockchain and, as I already said, they may be grouped together in various UI constructs in the final implementation. Let's take them one at a time.
Creating A Token
This just signals that you want to create a token on the blockchain. It's kind of a "reservation". It includes the control account
, or the account which will be responsible for it, the name of the token and the payment. The control account
can be any account that has STEEM on it, but the white paper recommends to set up a specific account for each token. As of now, the payment for issuing your own token is 1SBD, although this may change. The white paper has also a few inconsistencies, because in the copy, the fee is 1 SBD, but in the JSON examples, the fee is 1000 SBD (this was also reinforced in an interview I read yesterday by @wadepaterson). We should wait for the final version to see the exact amount, I guess.
A few considerations about the so-called "name" of the token. It's actually an id, of the form @@123456789
- two at signs, followed by a random string of 9 digits. This is the NAI
, or the Network Asset Identifier
. This is what the blockchain will use in all operations, it will be generated automatically, at the blockchain level, and, as you already see, it's not a human friendly name.
Your token human readable name (MYTOKEN, ALPHA, RUNCOIN, etc) will be made public via a separate registry, which in the white paper is called asset registry
. This setup is to deter name squatters, or so I read. Although, in real life, depending on which asset registry you use, you may end up with duplicates.
You may stop at this level, and that means you just created a NAI
and paid for it. But in order to actually have a token, you have to do the complete setup, which involves finishing the following two stages.
Pre-Setup For Your Token
In this part you set up the inflation and all the "application level parameters for your token".
The inflation part is relatively complicated and I think for the moment all you need to know is that you can set it up. You may choose a zero inflation (no more tokens will be created) or you may choose a complex scenario, in which inflation will be split in various groups, mimicking Steemit rewards pool and interest paid to vesting balances.
The "application level parameters" are tied to what you already know STEEM does:
allow vesting
(will you have your own power down?)allow voting
(will you allow your tokens to be used in voting?)cashout window
(currently one week, for Steemit)reverse auction window
(the period in which your vote power will actually be inverted for curation rewards, currently 30 minutes after a post is published - by the way, I hope you know about that, don't rush to upsteem posts immediately)vote regeneration period
(currently 24 hours)percent curation reward
(currently 25% off of the rewards pool)percent content reward
(currently 75% off of the rewards pool)author reward curve
(currently linear, or direct proportion with the voting power)curation reward curve
(currently linear)
As you can see, these parameters allow you to fine tune your token in order to create your custom Steem-on-demand, but with your own token name.
Setup
The setup part is actually the ICO part, the final distribution step. This operation implements, among other stuff, these parameters:
maximum supply
(how many tokens are you issuing),generation policy
(the unit conversions between STEEM and your token, see below),generation begin time
andgeneration end time
(when people can start contributing STEEM to the ICO and when that time window ends)announced launch time
(when the tokens will be generated)launch expiration time
(if the ICO is not launched by this time, participants will be refunded, but the symbol will remain reserved tocontrol account
. However, in order to launch he token again, a newsmt_create
operation (step 1) should be issued and the issuance fee must be paid again)
ICO is made by sending STEEM to the control_account
. The generation policy
allow syou to set up the Steem units (the units in which people will contribute) and the token units (how many token units per steem unit). This may get really complicated and these should be solved at a UI level.
This allows a certain degree of flexibility:
- the issuer can route the incoming funds to many other accounts
- the issuer may also generate automatically tokens for other accounts
- the issuer may set programmatically the amount according to certain rules
- the issuer may choose a part of contribution to go directly to vesting balances
- the issuer may choose to burn the contributions
- the issuer may choose to distribute tokens to people who are vesting a certain amount of STEEM (still not clear how this can be done)
This is the final step of the token creation. It may sound a bit more complicated than it is and probably many of these quirks will be grouped together in a more palatable UI, but that's the logic behind the process. I thought it was important to describe it as it is.
What You Can And What You Cannot Do With Your Tokens In The Steem Ecosystem
With that being said, let's see what you can and what you can't do with an SMT. First, the don'ts:
- SMT don’t influence witness voting
- SMT can’t be used in escrow operations
- SMT can’t be used for arbitrary beneficiary, only STEEM (it may be changed in the future)
- SMT don’t have price feeds (like STEEM does)
- SMT can’t be powered down to other accounts
- SMT can’t be converted (with the same process that converts SBD to STEEM, but they can be freely exchanged)
And now, the do's:
- SMT can be assigned to voting (a post may be voted with STEEM AND SMT)
- SMT can be powered up and down
- SMT can be transferred (what happens if the recipient doesn't have a wallet for that SMT? Is this done automatically by the blockchain? Not clear in the white paper yet)
- SMT can be delegated if they support vesting (the same way Steem Power can be delegated)
- SMT can be stored in savings account (as a protective measure)
All in all, I think the ability to issue SMT is a huge step forward in the Steem ecosystem, provided the implementation will at least follow the white paper guidelines.
I'm a serial entrepreneur, blogger and ultrarunner. You can find me mainly on my blog at Dragos Roua where I write about productivity, business, relationships and running. Here on Steemit you may stay updated by following me @dragosroua.
https://steemit.com/~witnesses
If you're new to Steemit, you may find these articles relevant (that's also part of my witness activity to support new members of the platform):