A dedicated discussion forum within your Discord server, specifically designed to facilitate thoughtful and constructive conversations around ongoing proposals. This interactive platform empowers members to openly share their insights, perspectives, and opinions on each referendum prior to the submission of an official vote by the designated proxy account on behalf of the collective or DAO.
The primary objective of this forum is to foster an environment of collaboration and informed decision-making, ensuring that every voice within the community is acknowledged and taken into consideration. By harnessing the collective wisdom of your community, you can make well-informed decisions that truly represent the best interests of the entire group.
We encourage everyone to actively participate in these discussions, as your input and feedback are invaluable in shaping the direction and outcomes of your collectives endeavors. Together, we can forge a stronger, more unified community that thrives on the principles of transparency, cooperation, and shared vision.
- First, you'll need to create a new application on the Discord Developer Portal. If you don't already have an account, you'll need to sign up for one.
- Once you're logged in to the Discord Developer Portal, click on the "New Application" button in the top right corner. Give your application a name and click "Create".
- Next, click on the "Bot" section in the left-hand menu and then click "Add Bot". Give your bot a username and profile picture, and click "Save Changes".
- Enable Server Members Intent (This is used when MIN_PARTICIPATION in the .env config is set to a number > 0. It is used to fetch the total amount of users in a particular role to calculate the participation)
- Under the "Token" section, click the "Copy" button to copy the API key. This key is what you'll use to authenticate your bot and allow it to interact with the Discord API.
- Under Oauth2 -> URL Generator select
bot
and then select:
NOTE: Manage Roles
is only needed initially to create the [SYMBOL]-GOV role to notify members to vote. You can either create the role yourself or remove Manage Roles
permission once the role is created to limit any attack surface. The created role has no inherent permission and is only used for tagging.
7. Be sure to keep your API key secret! Don't share it with anyone or include it in any public code repositories.
- Open Discord and click on the gear icon next to your username in the bottom left corner of your screen.
- Under App Settings, click Advanced and enable Developer Mode
- Right-click on your server and copy Server ID. The same step is repeated for the forum channel.
###### [ Discord Settings ] ########################
DISCORD_API_KEY='Bot API key'
DISCORD_SERVER_ID='0'
DISCORD_FORUM_CHANNEL_ID='0'
# These settings create a thread in a separate channel with the
# results of the internal vote for users to summarise the decision.
# OPTIONAL: (Leave as '0' if you don't want to use this feature)
DISCORD_SUMMARIZER_CHANNEL_ID='0'
DISCORD_SUMMARY_ROLE=''
# This role can participate in internal voting.
# If nothing is set, anyone can vote.
DISCORD_VOTER_ROLE=''
# This role can perform administrative commands.
DISCORD_ADMIN_ROLE='admin'
# These settings dictate the max title/body length.
# It is recommended to leave the default values.
DISCORD_TITLE_MAX_LENGTH=95
DISCORD_BODY_MAX_LENGTH=2000
# This role notifies when a new proposal is on the network.
DISCORD_NOTIFY_ROLE='KSM-GOV'
# This role notifies when a vote has been cast onchain.
DISCORD_EXTRINSIC_ROLE='The role you want to use to notify when a vote has been cast onchain'
###### [ Network Settings ] ########################
NETWORK_NAME='kusama'
SYMBOL='KSM'
# Polkadot: 1e10 (10 decimals)
# Kusama: 1e12 (12 decimals)
TOKEN_DECIMAL=1e12
# RPC address (IBP favoured for stability)
SUBSTRATE_WSS=wss://rpc.ibp.network/kusama
###### [ Wallet Settings ] ########################
# when solo mode is set to True, automatic voting is disabled.
SOLO_MODE=False
PROXIED_ADDRESS='Address that the gov proxy controls'
PROXY_ADDRESS='Gov proxy address'
MNEMONIC='Mnemonic to the governance proxy address'
# This option can be set to Locked1,2,3,4,5,6x
CONVICTION='Locked4x'
# This allows you to receive a wallet balance alert to a specific channel
# and at what balance to issue an alert at.
DISCORD_PROXY_BALANCE_ALERT='0'
PROXY_BALANCE_ALERT=0.015
# This setting allows you to set minimum participation percentage
# internally. If 90 people have DISCORD_VOTER_ROLE and only 6 people
# vote, then the default decision will be abstain.
# OPTIONAL: (Set to 0 to turn off minimum participation)
MIN_PARTICIPATION=12.8
pip3 install -r requirements
npm install pm2 -g
pm2 start main.py --name ksmgov2 --interpreter python3
pm2 save
When the bot votes is dictated by /data/vote_periods
. Each origin of a proposal has its own setting on when the first vote should be made & second. A second vote will only be made if the result differs from the first vote. If the first vote is AYE and it remains AYE on the second period then no vote will be made on the network.
Polkadot vote periods
Kusama vote periods
Role | Decision Period (days) | Internal Vote Period (days) | Revote Period (days) |
---|---|---|---|
Root | 14 | 5 | 10 |
WhitelistedCaller | 14 | 3 | 10 |
StakingAdmin | 14 | 5 | 10 |
Treasurer | 14 | 5 | 10 |
LeaseAdmin | 14 | 5 | 10 |
FellowshipAdmin | 14 | 5 | 10 |
GeneralAdmin | 14 | 5 | 10 |
AuctionAdmin | 14 | 5 | 10 |
ReferendumCanceller | 7 | 2 | 4 |
ReferendumKiller | 14 | 2 | 10 |
SmallTipper | 7 | 1 | 4 |
BigTipper | 7 | 1 | 4 |
SmallSpender | 14 | 5 | 10 |
MediumSpender | 14 | 5 | 10 |
BigSpender | 14 | 5 | 10 |
Example:
A proposal is submitted with its origin designated as 'Treasurer'. Following a period of five days after its on-chain introduction, a vote is conducted in accordance with the predetermined internal outcome. Should there be a shift in the voting stance from 'AYE' to 'NAY', a subsequent vote will be executed on the tenth day of the proposal's on-chain presence. In instances where the initial decision remains unaltered and the proposal has aged ten days or more, no further on-chain voting action will be undertaken.
Role | Decision Period (days) | Internal Vote Period (days) | Revote Period (days) |
---|---|---|---|
Root | 28 | 7 | 20 |
WhitelistedCaller | 28 | 2 | 20 |
StakingAdmin | 28 | 7 | 20 |
Treasurer | 28 | 7 | 20 |
LeaseAdmin | 28 | 7 | 20 |
FellowshipAdmin | 28 | 7 | 20 |
GeneralAdmin | 28 | 7 | 20 |
AuctionAdmin | 28 | 7 | 20 |
ReferendumCanceller | 7 | 2 | 4 |
ReferendumKiller | 28 | 4 | 20 |
SmallTipper | 7 | 2 | 4 |
BigTipper | 7 | 2 | 4 |
SmallSpender | 28 | 7 | 20 |
MediumSpender | 28 | 7 | 20 |
BigSpender | 28 | 7 | 20 |
Example:
A proposal is submitted with its origin designated as 'AuctionAdmin'. Following a period of seven days after its on-chain introduction, a vote is conducted in accordance with the predetermined internal outcome. Should there be a shift in the voting stance from 'AYE' to 'NAY', a subsequent vote will be executed on the twentieth day of the proposal's on-chain presence. In instances where the initial decision remains unaltered and the proposal has aged ten days or more, no further on-chain voting action will be undertaken.
For assistance or inquiries, please refer to the following official channels of communication:
Platform | User | UID/URL |
---|---|---|
Discord | n4dro | 185365893499322368 |
n4dro | https://twitter.com/N4DRO | |
Telegram | n4droj | https://t.me/n4droj |
Discord | https://discord.gg/fGJe2AWkGe |