How-To: Create an NNS motion proposal

From Internet Computer Wiki
Jump to: navigation, search

This article explains one way to submit NNS motion proposals by using a few command line tools and a self-custody neuron.

Background

To properly follow what is going on, there are a few high-level points worth highlighting:

Only Neurons can submit NNS proposals

Neurons with at least 1 ICP and 6 months of dissolve delay can submit NNS proposals. So the first step is to create such a neuron.

The NNS Governance Canister accepts motion proposals

The Governance Canister is just a canister like any other, so it has a Candid file, it accepts messages, etc... This article describes a way where you can have your local computer send a message to the governance canister (signed on behalf of a neuron) that contains a motion proposal.

One-time setup

Install Tools

1. Install dfx

  • dfx is the canister SDK and it will be used to send messages from your machine to NNS
  • smartcontracts.org
$ dfx [OPTIONS] <SUBCOMMAND>

2. Install keysmith

  • keysmith will be used to generate a privat/public key pair for the IC
  • https://github.com/dfinity/keysmith
  • this article will assume that you execute quill on your local machine by running
$ keysmith [OPTIONS] <SUBCOMMAND>

3. Install quill

  • quill is a minimalist "governance toolkit". It is wrapper for crafting & sending messages to the NNS and manage one's neuron.
  • https://github.com/dfinity/quill
  • this article will assume that you execute quill on your local machine by running
$ target/release/quill [OPTIONS] <SUBCOMMAND>

Create a neuron via command-line tools

1. Create a private.pem (private/public keypair) and Ledger account id

Before one starts, they need a private/public keypair.

// Create seed phrase
$ keysmith generate -o seed.txt

//Create private.pem
$ keysmith private-key -o private.pem

//Derive Ledger account from private key
$ keysmith account -i 0

2. Link this private/public keypair to dfx so you can use it as an "Identity"

In this case, the new identity is called "proposals"

$ dfx identity import proposals private.pem
  • If you see “creating identity: proposals” in the terminal, this means it worked*
  • further reading on dfx identities: dfx identity

3. Send ICP to the account ID generated in step 1

4. Now that the account has the required ICP, spawn a neuron

Note: This section assumes you have Quill installed

4.1 Craft and send a message to spawn a neuron from the account
$ target/release/quill --pem-file private.pem neuron-stake --name $NAME --amount $AMOUNT > message.json

$ target/release/quill send message.json
  • You should see a message with a neuron ID spawned

5. Increase neuron dissolve to at least 6 months

  • Time is measured in milliseconds in the NNS
  • One year: 31557600 milliseconds
5.1 Craft message to send the neuron
$ target/release/quill --pem-file private.pem neuron-manage 148885932052941245 --additional-dissolve-delay-seconds 31557600 > message.json
5.2 Send just-created message to the Governance canister
$ target/release/quill send message.json

How to send a proposal

Craft a proposal in markdown

Send proposal via dfx

Check dashboard to see proposal was successful