# Acala governance
## 当前Acala的权限
1. Democray 当前的公投执行时,权限都为 Root 权限
2. Authority 供 council 构造 Root 权限, 以及dispatch as Treasury, Homa, Honzon等模块账户(目前的治理很少用到, 一般都走Democray的公投来操作模块账户)
Acala 的 council:
+ GeneralCouncil: 6 members
+ FinancialCouncil: 3 members
+ HomaCouncil: 2 members
+ TechnicalCommittee: 3 members
| pallet | authority type | current allowed origin | adjust after OpenGov | description |
| --- | --- | --- | --- | --- |
| CollatorSelection | UpdateOrigin | Root, 1/2 GeneralCouncil | | |
| Treasury | ApproveOrigin | Root, 1/2 GeneralCouncil | | |
| Treasury | RejectOrigin | Root, 1/2 GeneralCouncil | | |
| Treasury | SpendOrigin | NONE | | OpenGov 可以配置不同资金级别的Origin来使用Treasury资金 |
| Democracy | ExternalOrigin | Root, 1/2 GeneralCouncil | | |
| Democracy | ExternalMajorityOrigin | Root, 1/2 GeneralCouncil | | |
| Democracy | ExternalDefaultOrigin | Root, 1/1 GeneralCouncil | | |
| Democracy | FastTrackOrigin | Root, 2/3 TechnicalCommittee | | |
| Democracy | InstantOrigin | Root, 1/1 TechnicalCommittee | | |
| Democracy | CancellationOrigin | Root, 2/3 GeneralCounci | | |
| Democracy | VetoOrigin | any TechnicalCommittee member | | |
| Authority | 构造AuthoritysOriginId::Root | Root, 3/4 GeneralCounci 发起 delay 1天 | | AuthoritysOriginId::Root 相当于发起 Root 权限 |
| Authority | 构造AuthoritysOriginId::Treasury | Root, 1/2 GeneralCounci 发起 delay 1天 | | AuthoritysOriginId::Treasury相当于dispatch as Treasury pallet account |
| Authority | 构造AuthoritysOriginId::HonzonTreasury | Root, 1/2 FinancialCouncil 发起 delay 1天 | | AuthoritysOriginId::HonzonTreasury相当于dispatch as Honzon pallet account |
| Authority | 构造AuthoritysOriginId::HomaTreasury | Root, 1/2 HomaCouncil 发起 delay 1天 | | AuthoritysOriginId::HomaTreasury相当于dispatch as Homa pallet account |
| Authority | 构造AuthoritysOriginId::TreasuryReserve | Root | | AuthoritysOriginId::TreasuryReserve相当于dispatch as TreasuryReserve account(目前交易手续费收到该账户) |
| Authority | 加速Authority构造的scheduler | Root, 2/3 TechnicalCommittee 加速到12小时以内, 1/3 TechnicalCommittee 只能加速到 12小时以上 | | |
| Prices | LockOrigin | Root, 2/3 GeneralCouncil | | |
| Currencies | SweepOrigin | Root, any GeneralCouncil member | | |
| Vesting | VestedTransferOrigin | Acala Foundation Account | | |
| Scheduler | ScheduleOrigin | Root | | |
| Preimage | ManagerOrigin | Root | | |
| CdpEngine | UpdateOrigin | Root, 1/2 FinancialCouncil | | |
| CdpEngine | LiquidationContractsUpdateOrigin | Root, 1/2 GeneralCouncil | | |
| EmergencyShutdown | ShutdownOrigin | Root | | |
| Dex | ListingOrigin | Root, 1/2 GeneralCouncil | | |
| AggregatedDex | GovernanceOrigin | Root, 1/2 GeneralCouncil | | |
| DexOracle | UpdateOrigin | Root, 1/2 GeneralCouncil | | |
| CdpTreasury | UpdateOrigin | Root, 1/2 FinancialCouncil | | |
| TransactionPause | UpdateOrigin | Root, 2/3 FinancialCouncil | | |
| TransactionPayment | UpdateOrigin | Root, 1/2 GeneralCouncil | | |
| AssetRegistry | RegisterOrigin | Root, 1/2 GeneralCouncil | | |
| Incentives | UpdateOrigin | Root, 3/4 GeneralCouncil | | |
| EVM | NetworkContractOrigin | Root, 3/4 GeneralCouncil | | |
| EVM | FreePublicationOrigin | Root, 1/2 GeneralCouncil | | |
| Homa | GovernanceOrigin | Root, 1/2 GeneralCouncil | | |
| XcmInterface | UpdateOrigin | Root, 1/2 GeneralCouncil | | |
| Xcm | SovereignOrigin | Root, 3/4 GeneralCouncil | | |
| StableAsset | ListingOrigin | Root, 1/2 GeneralCouncil | | |
| LiquidCrowdloan | GovernanceOrigin | Root, 3/4 GeneralCouncil | | |
| Parameters | AdminOrigin | Root, 3/4 GeneralCouncil | | |
| OperatorMembership | 多个配置member的Origin | Root, 2/3 GeneralCouncil | | OperatorMembership的member为 Oracle 的 feeder |
## OpenGov Config
TBD:
1. 看需要配置哪些 Custom Origin , OpenGov参数怎么配, 以及可以用于行使什么权限?
2. 新增了一些pallet, 关键参数需要确定一下.
3. 原先一些council可以操作的权限, 可以review下哪些安全级别需要提高,哪些门槛需要调低一些.
4. 原先哪一些权限,在允许Custom Origin后, 需要拿掉 council 的权限?
4. pallet-tips 模块好像没有用到, polkadot早就移除掉了, Acala也拿掉?
### Custom Origins 配置
例子:
```
// moonbeam 配置
pub enum Origin {
/// Origin able to dispatch a whitelisted call.
WhitelistedCaller,
/// General admin
GeneralAdmin,
/// Origin able to cancel referenda.
ReferendumCanceller,
/// Origin able to kill referenda.
ReferendumKiller,
}
// referenda 对于 Custom Origins 的治理配置:
[
(
0,
pallet_referenda::TrackInfo {
// Name of this track.
name: "root",
// A limit for the number of referenda on this track that can be being decided at once.
// For Root origin this should generally be just one.
max_deciding: 5,
// Amount that must be placed on deposit before a decision can be made.
decision_deposit: 20 * KILOGLMR * SUPPLY_FACTOR,
// Amount of time this must be submitted for before a decision can be made.
prepare_period: 1 * DAYS,
// Amount of time that a decision may take to be approved prior to cancellation.
decision_period: 14 * DAYS,
// Amount of time that the approval criteria must hold before it can be approved.
confirm_period: 1 * DAYS,
// Minimum amount of time that an approved proposal must be in the dispatch queue.
min_enactment_period: 1 * DAYS,
// Minimum aye votes as percentage of overall conviction-weighted votes needed for
// approval as a function of time into decision period.
min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)),
// Minimum pre-conviction aye-votes ("support") as percentage of overall population that
// is needed for approval as a function of time into decision period.
min_support: Curve::make_linear(14, 14, permill(5), percent(25)),
},
),
(
1,
pallet_referenda::TrackInfo {
name: "whitelisted_caller",
max_deciding: 100,
decision_deposit: 2 * KILOGLMR * SUPPLY_FACTOR,
prepare_period: 10 * MINUTES,
decision_period: 14 * DAYS,
confirm_period: 10 * MINUTES,
min_enactment_period: 30 * MINUTES,
min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)),
min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)),
},
),
(
2,
pallet_referenda::TrackInfo {
name: "general_admin",
max_deciding: 10,
decision_deposit: 100 * GLMR * SUPPLY_FACTOR,
prepare_period: 1 * HOURS,
decision_period: 14 * DAYS,
confirm_period: 1 * DAYS,
min_enactment_period: 1 * DAYS,
min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)),
min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)),
},
),
(
3,
pallet_referenda::TrackInfo {
name: "referendum_canceller",
max_deciding: 20,
decision_deposit: 2 * KILOGLMR * SUPPLY_FACTOR,
prepare_period: 1 * HOURS,
decision_period: 14 * DAYS,
confirm_period: 3 * HOURS,
min_enactment_period: 10 * MINUTES,
min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)),
min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)),
},
),
(
4,
pallet_referenda::TrackInfo {
name: "referendum_killer",
max_deciding: 100,
decision_deposit: 4 * KILOGLMR * SUPPLY_FACTOR,
prepare_period: 1 * HOURS,
decision_period: 14 * DAYS,
confirm_period: 3 * HOURS,
min_enactment_period: 10 * MINUTES,
min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)),
min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)),
},
),
]
```
### 引入OpenGov 后, 新增的模块
+ pallet\_conviction\_voting: for managing actual voting in polls.
+ pallet\_whitelist: The purpose of this pallet is to queue calls to be dispatched as by root later => the Dispatch
+ pallet\_referenda: A pallet for executing referenda. No voting logic is present here, and the `Polling` and `PollStatus` traits are used to allow the voting logic (likely in a pallet) to be utilized.
important parameters:
| pallet | parameters | config | description |
| --- | --- | --- | --- |
| pallet\_conviction\_voting | MaxVotes | | Maximum number of concurrent votes an account may have |
| pallet\_conviction\_voting | VoteLockingPeriod | | Minimum period of vote locking |
| pallet\_whitelist | WhitelistOrigin | | Required origin for whitelisting a call |
| pallet\_whitelist | DispatchWhitelistedOrigin | | Required origin for dispatching whitelisted call with root origin |
| pallet\_referenda | CancelOrigin | | Origin from which any vote may be cancelled |
| pallet\_referenda | KillOrigin | | Origin from which any vote may be killed |
| pallet\_referenda | SubmissionDeposit | | The minimum amount to be used as a deposit for a public referendum proposal |
| pallet\_referenda | MaxQueued | | Maximum size of the referendum queue for a single track |
| pallet\_referenda | UndecidingTimeout | | The number of blocks after submission that a referendum must begin being decided by. Once this passes, then anyone may cancel the referendum |
| pallet\_referenda | AlarmInterval | | Quantization level for the referendum wakeup scheduler. A higher number will result in fewer storage reads/writes needed for smaller voters, but also result in delays to the automatic referendum status changes. Explicit servicing instructions are unaffected. |