Summary
This TIP describes the global protocol parameters for the Shimmer protocol.
Motivation
Various other protocol TIPs rely on certain constants that need to be defined for an actual implementation of nodes or other applications using the protocol. This TIP serves as a single document to provide these parameters. It also serves as a historical record of protocol parameter changes.
Detailed design
Shimmer Units
The base token of the Shimmer Network is Shimmer (SMR
). SMR
token representation supports 6 decimal places, therefore the smallest possible value that may occur in the network is 10-6 SMR
= 0.000001 SMR
. This indivisible amount is called a glow
.
The concept of glow
is analogous to satoshi
for BTC
, or wei
for ETH
.
Amount in glow | Amount in SMR |
---|---|
1 glow | 0.000001 SMR |
10 glow | 0.00001 SMR |
100 glow | 0.0001 SMR |
1,000 glow | 0.001 SMR |
10,000 glow | 0.01 SMR |
100,000 glow | 0.1 SMR |
1,000,000 glow | 1 SMR |
10,000,000 glow | 10 SMR |
100,000,000 glow | 100 SMR |
1,000,000,000 glow | 1,000 SMR |
10,000,000,000 glow | 10,000 SMR |
100,000,000,000 glow | 100,000 SMR |
1,000,000,000,000 glow | 1,000,000 SMR |
On protocol level, all token amounts are recorded in glow
. Outputs
of a transaction specify the
transfer amounts in glow
. Graphical user interfaces of explorers, wallets and other tools are recommended to display
transfer amounts in SMR
denomination.
Genesis Supply
The Shimmer genesis supply is allocated according to the following figure:
IOTA Stakers - 80%
80% of the Shimmer genesis token supply has been distributed to IOTA token holders who staked their tokens to receive SMR during the Shimmer staking event:
- Start date: Tuesday, December 28, 2021 3:00 PM CET (Milestone #2102114)
- End date: Monday, March 28, 2022 8:12 PM CET (Milestone #2879714)
- Community-validated results: https://github.com/iotaledger/participation-events/blob/master/results/staking/shimmer.json
Rewards are recorded in the base unit of the Shimmer network, glow
. 1 SMR
token equals 1,000,000 glow
.
In total, 1,450,896,407,249,092 glow
(~1,450,896,407 SMR
) is allocated to IOTA Stakers in the Shimmer genesis snapshot.
Shimmer Community Treasury (DAO) - 10%
The IOTA community carried out an on-chain vote on the initial Shimmer Ecosystem Funding Proposal and its follow-up proposal.
The community-validated result of the vote allocated 10% of the new total Shimmer supply to a Shimmer Community Treasury DAO.
As a consequence, the genesis Shimmer snapshot allocates 181,362,050,906,137 glow
(~181,362,051 SMR
) to the address of the Shimmer Community Treasury:
- smr1qrmakyqt5ezm5k9c0sk39gwfavpktxkjmx0jvh9ejxjq6pr6d39egv2mvuc
Tangle Ecosystem Association (TEA) - 10%
The Tangle Ecosystem Association was set up by the IOTA Foundation to host the new structure of the Ecosystem Development Fund and other ecosystem-focused activities.
The community-validated result of the same on-chain vote on the initial Shimmer Ecosystem Funding Proposal and its follow-up proposal allocates 10% of the total Shimmer genesis supply to the Tangle Ecosystem Association.
As a consequence, the genesis Shimmer snapshot allocates 181,362,050,906,136 glow
(~181,362,051 SMR
) to the address of the Tangle Ecosystem Association:
- smr1qpjva0y6qwjmv42dspw2se2776l5qr0r5p2s5m7nrg73qhvm6a6y7uvqxn6
Global Parameters
- Dynamic parameters can be changed via fluid upgrades through Milestone Announcement.
Name | Value | Class | Type | Description |
---|---|---|---|---|
Network Name | "shimmer" | dynamic | string | Identifier string of the network. Its hash it used for the Network ID field in transactions. |
Protocol Version | 2 | dynamic | uint8 | Protocol version currently used by the network. |
Max Block Length | 32768 | dynamic | uint32 | Maximum length of a block in bytes. Limits Tangle storage size and communication costs. |
Max Parents Count | 8 | dynamic | uint32 | Maximum number of parents of a block. |
Min Parents Count | 1 | dynamic | uint32 | Maximum number of parents of a block. |
Min PoW Score | 1500 | dynamic | uint32 | Minimum PoW score for blocks to pass syntactic validation. |
Below Max Depth | 15 | dynamic | uint8 | Below Max Depth is the maximum allowed delta value between Oldest Cone Root Index (OCRI) of a given block in relation to the current Confirmed Milestone Index (CMI) before it gets lazy. |
Max Shimmer Genesis Supply | 1813620509061365 | static | uint64 | Total amount of Shimmer genesis supply denominated in glow . 1 glow = 0.000001 SMR |
Max Inputs Count | 128 | dynamic | uint32 | Maximum number of inputs in a transaction payload. |
Max Outputs Count | 128 | dynamic | uint32 | Maximum number of outputs in a transaction payload. |
Max Native Token Count | 64 | dynamic | uint32 | Maximum number of different native tokens that can be referenced in one transaction. |
Max Tag Length | 64 | dynamic | uint8 | Maximum length of a Tag field in bytes. |
Max Metadata Length | 8192 | dynamic | uint16 | Maximum length of a Metadata field in bytes. |
VByte Cost | 100 | dynamic | uint32 | Minimum amount of Shimmer (denominated in glow ) that need to be deposited per vbyte of an output. |
VByte Factor Data | 1 | dynamic | uint8 | Weight of data fields that determines the relation between actual byte size and virtual byte size. |
VByte Factor Key | 10 | dynamic | uint8 | Weight of key fields that determines the relation between actual byte size and virtual byte size. |
SLIP-44 Coin Type (decimal) | 4219 | static | uint32 | Registered coin type (decimal) for usage in level 2 of BIP44 described in chapter "Coin type". |
SLIP-44 Path Component (coin_type' ) | 0x8000107b | static | string | Registered path component for usage in level 2 of BIP44 described in chapter "Coin type". |
Bech32 Human-Readable Part | smr | static | string | HRP prefix to use for Bech32 encoded Shimmer addresses. (e.g. smr1qrhacyfwlcnzkvzteumekfkrrwks98mpdm37cj4xx3drvmjvnep6xhcazjh ) |
Bech32 Human-Readable Part (Test) | rms | static | string | HRP prefix to use for Bech32 encoded Shimmer addresses on test- or development networks. (e.g. rms1qrhacyfwlcnzkvzteumekfkrrwks98mpdm37cj4xx3drvmjvnep6xrlkcfw ) |
Rationale for parameter choices
Proof-of-work
Initially, Min PoW Score
was chosen to roughly match the difficulty of a data transaction in the legacy IOTA protocol:
- The payload length (
signatureMessageFragment
) of a legacy transaction is 2187 trytes or 1100 - 1300 bytes depending on the encoding. - With a minimum weight magnitude (trailing zero trits) of 14, this corresponds to a PoW score of about 4000.
The Stardust protocol debuts on Shimmer and as such, it is the first network capable of supporting L2 smart contract chains (ISC). One possible bottleneck of smart contract chain performance is the time it takes to compute PoW for smart contract chain anchor transactions, as these are typically bigger than the aforementioned legacy IOTA transaction size.
Accordingly, Shimmer lowers Min PoW Score
to 1500 to ease the operation of smart contract chains and facilitate the
development of the L2 smart contract ecosystem. This value was chosen based on calculations with block sizes for smallest possible blocks (46 byte -> minimum weight magnitude of 11) and typical ISC on-chain requests for chain deployment and chain deposits (~573 byte -> minimum weight magnitude of 13).
Transaction and block limits
The blocks parameters Max Block Length
and Max Parent Count
, as well as the transaction parameters Max Inputs Count
, Max Outputs Count
, Max Native Token Count
, Max Tag Length
and Max Metadata Length
govern the block and transaction validity. Their values have been chosen to ensure functionality of the protocol within constrained resource restrictions. Furthermore, choosing more conservatives values here is preferable as increasing such limits can always been done preserving backward compatibility.
Dust protection
The VByte Cost
is the core parameter of the dust protection. The reasoning behind its value is explained in TIP-19 Dust Protection.
Copyright
Copyright and related rights waived via CC0.