{"id":20841539,"url":"https://github.com/iotexproject/iotex-governance","last_synced_at":"2026-04-24T10:34:26.221Z","repository":{"id":43907689,"uuid":"184659108","full_name":"iotexproject/iotex-governance","owner":"iotexproject","description":"Governance Framework of IoTeX Blockchain Protocol","archived":false,"fork":false,"pushed_at":"2023-01-24T04:25:54.000Z","size":1081,"stargazers_count":3,"open_issues_count":11,"forks_count":0,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-02-20T17:44:50.467Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iotexproject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-02T22:13:56.000Z","updated_at":"2021-12-27T13:52:29.000Z","dependencies_parsed_at":"2023-01-26T06:01:14.880Z","dependency_job_id":null,"html_url":"https://github.com/iotexproject/iotex-governance","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotexproject%2Fiotex-governance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotexproject%2Fiotex-governance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotexproject%2Fiotex-governance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotexproject%2Fiotex-governance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iotexproject","download_url":"https://codeload.github.com/iotexproject/iotex-governance/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243197228,"owners_count":20251958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-18T01:20:36.052Z","updated_at":"2025-12-25T10:20:15.369Z","avatar_url":"https://github.com/iotexproject.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Governance Framework of IoTeX Blockchain Protocol\n\nIoTeX blockchain protocol is managed by a decentralized community of delegates and voters who hold IOTX coins, who propose and vote on upgrades to the protocol. This is the governance framework for [IoTeX](https://iotex.io) blockchain protocol which extends [EIP1202](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1202.md), and empowers community governance.\n\n# Overview\nA \"proposal\" is called an \"issue\" in this governance framework, which is composed of the four main components:\n- `OffChainIssueRegistration` serves as the \"registration desk\" of all issues that anyone can propose\n- After creation, an instance of `OffchainIssue` will be created that have all details about a proposal, i.e., the URL to the proposal, hash its content, when to start/stop, and so on. Once the issue is started, voters can vote via https://member.iotex.io/polls\n- `AdhocIssueSheet` is the storage and manager of all issues which can be approved/started/paused/ended by the committee members.\n- `RotatableWeightedVPS` records all staking information in IoTeX's nsv2 subprotocol every 25 hours, which tells an `OffchainIssue` how to count votes.\n\n![](arch.png)\n\n\n# The Life of A Proposal\n**1. Anyone can propose by invoking [`register`](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/OffChainIssueRegistration.sol#L48) which will be recorded [here](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/AdhocIssueSheet.sol).**\n\nFor example, one can use ioctl to register as below where `a.abi` is the ABI of `OffChainIssueRegistration` which can be found here [https://github.com/iotexproject/iotex-governance/blob/master/build/contracts/OffChainIssueRegistration.json#L3]:\n```\nioctl contract invoke function io17nq7vnm3wcs5a2cmhwhcnhwtwv4s6lxuv7qqj5 a.abi register --with-arguments '{\"_metaURI\":\"https://link-to-your-proposal\", \"_metaHash\":\"2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91\", \"_weighted\":true, \"_optionCount\":\"2\", \"_canRevote\":true, \"_maxNumOfChoices\":1}'\n```\n\nOne can get all issues like below:\n```\nioctl contract test function io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9 b.abi getIssues \n--with-arguments '{\"_offset\":\"0\", \"_limit\":\"10\"}'\n```\n\n**2. Once registered on the contract, please file an issue like [this](https://github.com/iotexproject/iotex-governance/issues/7) with the following meta information so member.iotex.io/polls will display your proposal.**\n\n**3. The whitelisted accounts can [accept](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/AdhocIssueSheet.sol#L49) this proposal, [start](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/AdhocIssueSheet.sol#L67), [pause](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/AdhocIssueSheet.sol#L79), [stop](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/AdhocIssueSheet.sol#L103) the proposal.**\n\nSome examples are given below where `b.abi` is the ABI of `AdhocIssueSheet` which can be found here [https://github.com/iotexproject/iotex-governance/blob/master/build/contracts/AdhocIssueSheet.json#L3]:\n```\n// Approve an issue \nioctl contract invoke function io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9 b.abi approve --with-arguments '{\"_issue\":\"0xae1443e2966539585780b9971018fa413f3c4c5e\"}'\n\n// Check if one issue is approved\nioctl contract test function io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9 b.abi approved --with-arguments '{\"_issue\":\"0xae1443e2966539585780b9971018fa413f3c4c5e\"}'\n\n// Start the issue\nioctl contract invoke function io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9 b.abi startIssue --with-arguments '{\"_issue\":\"0xae1443e2966539585780b9971018fa413f3c4c5e\"}'\n```\n\n**4. Once it is started, voters can vote via [`vote`](https://github.com/iotexproject/IOTX-EIP-1202-contracts/blob/master/contracts/OffchainIssue.sol#L119).**\n\nBehind the scene, IoTeX's stakeholders and voters information are injected into [`RotatableWeightedVPS`](https://github.com/iotexproject/iotex-governance/tree/master/contracts/VPS) every 25 hours. `RotatableWeightedVPS` - considered as a system contract - is used by [VITA claim](https://iotex.io/vita) and [poll](https://member.iotex.io).\n\n\n# Mainnet Deployment\n`RotatableWeightedVPS` - [io1476tz4nx8v8qc5xdpu3hclk0uyanus6x2laddq](https://www.iotexscan.io/address/io1476tz4nx8v8qc5xdpu3hclk0uyanus6x2laddq)\n\n`OffChainIssueRegistration` - [io17nq7vnm3wcs5a2cmhwhcnhwtwv4s6lxuv7qqj5](https://www.iotexscan.io/address/io17nq7vnm3wcs5a2cmhwhcnhwtwv4s6lxuv7qqj5)\n\n`AdhocIssueSheet` - [io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9](https://www.iotexscan.io/address/io1j05ta0krxvpwc4kv2duyjfuyxglqyxkasp3pm9)\n\n# Contract Development\n\n## Compile\n\n`truffle compile`\n\n## Test\n\n`truffle test`\n\n## Lint\n\n`npm install truffle-plugin-solhint`\n\n`truffle run solhint`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiotexproject%2Fiotex-governance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiotexproject%2Fiotex-governance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiotexproject%2Fiotex-governance/lists"}