Troubleshooting Failed NNS proposals

From Internet Computer Wiki
Revision as of 17:08, 12 July 2024 by Jamongeon (talk | contribs) (format)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Background

Occasionally, a proposal on the Network Nervous System (NNS) may be adopted but fail during execution. This usually happens due to violations of certain invariants (constraints) in the NNS Registry.

Example of a Failed Proposal

An instance of such a failure can be seen in https://dashboard.internetcomputer.org/proposal/125578.

Screenshot

A screenshot of the failed proposal as displayed on the dashboard, for future reference, of https://dashboard.internetcomputer.org/proposal/125578

Screenshot of a failed NNS proposal in the dashboard

Identifying the Cause of Failure

As of now, the specific reasons for a proposal's failure are not directly accessible on the proposal page. To find out why a proposal failed, you need to interact with the governance canister directly.

Steps to Follow

  1. Visit the governance canister page https://dashboard.internetcomputer.org/canister/rrkah-fqaaa-aaaaa-aaaaq-cai.
  2. Scroll down to the section labeled get_proposal_info
  3. Use the toggle field to input the proposal number and click "Call".
    Get info on the failed NNS proposal, on the public dashboard
  4. Once the result appears, select "JSON" to view it in Json format.
  5. The failure reason will be detailed in the output.

Example Output

Below is an example JSON output for a failed proposal. In this case, the proposal failed because an existing Node Operator record was being duplicated.

Example:

Open that toggle field, enter the proposal number, and click "Call". Once you get the result, you can click on "JSON" to get the Json format, and you can read the failure reason in the output. In this case, the same Node Operator record was already present in the registry when the proposal attempted to re-add the same record.

[
  {
    "id": [
      {
        "id": 125578
      }
    ],
    "status": 5,
    "topic": 5,
    "failure_reason": [
      {
        "error_message": "Error executing ExecuteNnsFunction proposal. Rejection message: IC0503: Canister rwlgt-iiaaa-aaaaa-aaaaa-cai trapped explicitly: Panicked at '[Registry] Verification of the mutation type failed with the following errors: [Registry Canister Error. Msg: Key already present: node_operator_record_mbnsu-w4xfc-pmdok-r2lwo-wxfr4-gigu5-4idcm-5uuuy-znvby-biiny-jqe].', rs/registry/canister/src/registry.rs:293:13",
        "error_type": 12
      }
    ],
    "ballots": [
      [
        "14315117116521128082",
        {
          "vote": 0,
          "voting_power": 196565756
        }
      ]
    ],
    "proposal_timestamp_seconds": 1699617467,
    "reward_event_round": 0,
    "deadline_timestamp_seconds": [
      1699963110
    ],
    "failed_timestamp_seconds": 1699878752,
    "reject_cost_e8s": 1000000000,
    "derived_proposal_information": [],
    "latest_tally": [
      {
        "no": 66258822305525,
        "yes": "45221535235544100",
        "total": "45541158736625569",
        "timestamp_seconds": 1699878752
      }
    ],
    "reward_status": 1,
    "decided_timestamp_seconds": 1699878752,
    "proposal": [
      {
        "url": "",
        "title": [
          "Add mbnsu as a Node Operator of Node Provider: 4jjya"
        ],
        "action": [
          {
            "ExecuteNnsFunction": {
              "nns_function": 8,
              "payload": "4449444c056c06a795f3ad04018af3a2b108029bf499bd0878bbf187b70c03dddfde9b0d02dba7aaae0d716e716e686d046c020071017901000001011d97289ec1b951d2eceb5cb1e1906a77881899da5298cb6a1c05086e13020a000000000000000001011d78c0a5ff79e51f8d11fa75ad5db01d3d7cee8fecd6658d81c6deb6a20203726731"
            }
          }
        ],
        "summary": "Node provider “MB Patrankos šūvis” is adding 10 nodes in the rg1 data center"
      }
    ],
    "proposer": [
      {
        "id": "1482125923012887388"
      }
    ],
    "executed_timestamp_seconds": 0
  }
]