On-Tangle Tracking of Ballots and Staking Events

TL;DR:
The latest Hornet release version adds a Participation plugin, which enables node owners to track and verify on-Tangle ballots and staking events. This plugin is the main building block for the upcoming ”Build vs. Burn” vote and the IOTA staking event for Assembly and Shimmer token rewards.

With the genesis of the IOTA Chrysalis network, the IOTA community was empowered to make an official governance decision on how unclaimed tokens from previous migration periods should be utilized. As a result, until a governance vote on this matter is held, the tokens in question are locked in the treasury.

To perform such an important governance decision in a decentralized way, the IOTA community worked closely together with the IOTA Foundation. Over the past six months, regular Community Governance Meetings were held to discuss this topic in detail and work on a solution for on-Tangle votes. Based on an initial idea by Max Hase, Senior Software Engineer at the IOTA Foundation, IOTA community member Werner (Werner#2923) created a first draft for a Request For Comments (RFC), which was then improved and implemented by Hornet community developer Alexander Sporn (alexsporn#6593). The final result of this cooperation is the new Hornet Participation plugin, added to the latest Hornet release version.

After enabling the plugin in the node software, so-called “participation events” can be added by the node operator. These events can either be a ballot or a staking event. Ballots are used to carry out decentralized votes by IOTA token holders on predefined questions and answers. Staking events can be utilized to determine a fair token distribution for new projects and networks, like for the upcoming Shimmer or Assembly networks.

Node operators can add existing participation events or create their own events, which can be tracked “on-Tangle” and thus verified in a decentralized way. Once an event configuration is added to a node, every confirmed value transaction is inspected for a specific participation payload (a piece of information attached to the value transaction). If such a payload is found and matches one of the configured events, nodes running the Participation plugin count the transaction as a valid participation. The weight of this participation is calculated based on two different metrics. First, it is based on the amount of IOTA tokens that were sent in this transaction. This token amount is then multiplied by the amount of milestones the newly created unspent transaction output (UTXO) remains untouched. Multiple participations can be included in a single transaction.

The participation payloads in the transactions will be created by Firefly if the user decides to take part in such an event. In effect, users send a transaction to themselves using Firefly, to which the information “I vote X on the issue Y” is attached, and the transaction is registered by all nodes in the IOTA network running the participation plugin. After the participation event has ended, the results can be easily verified across different nodes by querying an API endpoint and comparing a simple hash.

With the help of this plugin, the IOTA node software is technically ready for the upcoming Shimmer and Assembly staking events, as well as the planned “Build vs. Burn” vote.

An important message to the node operators: Following the spirit of distributed ledger technology, we invite our community to track and verify the outcome of the official participation events. Don’t miss the upcoming events and follow the official IOTA Twitter account.

How to add a ballot or staking event as a node operator?

First, you need to update your Hornet node to the latest release version v1.1.3. Make sure to enable the Participation plugin by adding “Participation” to “enablePlugins” in the config.json file of your node.

 "node": {
   "alias": "HORNET mainnet node",
   "profile": "auto",
   "disablePlugins": [],
   "enablePlugins": [
     "Spammer",
     "Participation"
   ]
 },

Add event via node dashboard

After starting your node, you can open the node dashboard and navigate to “Settings” -> “Plugins”. If the Participation plugin has been successfully enabled, you should see a new option called “Participation”.

Click on the three dots next to “Participation” to enter the plugin settings.

In the top right corner, click “Add Event”. Now you can either paste the link to the event configuration or enter the JSON configuration of the event itself.

After clicking “OK”, the new event is shown (if everything was entered correctly).

Your node is now ready to track the specific participation event. You can view the current status of the event by clicking on “More details”.

Add event via REST API

Instead of using the dashboard, you can also add an existing participation event or create your own by sending a POST request to the /api/plugins/participation/admin/event endpoint.

After starting your node, send the following request to the node:

#!/bin/bash
ADDR=http://localhost:14265
TOKEN="MY_SECRET_JWT_TOKEN"
 
curl $ADDR/api/plugins/participation/admin/events \
 --http1.1 \
 -X POST \
 -H 'Content-Type: application/json' \
 -H "Authorization: Bearer ${TOKEN}" \
 -d '{
   "name": "All 4 HORNET",
   "milestoneIndexCommence": 1920656,
   "milestoneIndexStart": 1920666,
   "milestoneIndexEnd": 1930656,
   "payload": {
     "type": 0,
     "questions": [
       {
         "text": "Give all the funds to the HORNET developers?",
         "answers": [
           {
             "value": 1,
             "text": "YES",
             "additionalInfo": "Go team!"
           },
           {
             "value": 2,
             "text": "Doh! Of course!",
             "additionalInfo": "There is no other option"
           }
         ],
         "additionalInfo": "This would fund the development of HORNET indefinitely"
       }
     ]
   },
   "additionalInfo": "The biggest governance decision in the history of IOTA"
}'

If the participation event has been successfully added, the returned API response will contain the ID of your event, which is later used to identify the correct participation in the transaction payload. For a detailed description of the different fields in the request, please refer to the RFC.

Important note: The configuration for the upcoming staking event for Shimmer and Assembly, as well as the community vote on “Build vs. Burn” will be shared before the event starts through the official IOTA channels. You can reach the GitHub repository here.


Follow us on our official channels and get the latest news!
Discord | Twitter | LinkedIn | Instagram | YouTube



Follow us on our official channels for the latest updates:
Discord | Twitter | LinkedIn | Instagram | YouTube |

Tags

IOTA Foundation

Official posts from the IOTA Foundation, and migrated posts from old platforms.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.