# 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. |