language/diem-framework/releases/artifacts/release-1.4.0-rc0/docs/modules/DiemConsensusConfig.md
<a name="0x1_DiemConsensusConfig"></a>
0x1::DiemConsensusConfigMaintains the consensus config for the Diem blockchain. The config is stored in a DiemConfig, and may be updated by Diem root.
<pre><code><b>use</b> <a href="DiemConfig.md#0x1_DiemConfig">0x1::DiemConfig</a>; <b>use</b> <a href="DiemTimestamp.md#0x1_DiemTimestamp">0x1::DiemTimestamp</a>; <b>use</b> <a href="Roles.md#0x1_Roles">0x1::Roles</a>; <b>use</b> <a href="../../../../../../move-stdlib/docs/Vector.md#0x1_Vector">0x1::Vector</a>; </code></pre><a name="0x1_DiemConsensusConfig_DiemConsensusConfig"></a>
DiemConsensusConfig<a name="0x1_DiemConsensusConfig_initialize"></a>
initializePublishes the DiemConsensusConfig config.
<pre><code><b>public</b> <b>fun</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_initialize">initialize</a>(dr_account: &signer) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_initialize">initialize</a>(dr_account: &signer) { <a href="Roles.md#0x1_Roles_assert_diem_root">Roles::assert_diem_root</a>(dr_account); <a href="DiemConfig.md#0x1_DiemConfig_publish_new_config">DiemConfig::publish_new_config</a>(dr_account, <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a> { config: <a href="../../../../../../move-stdlib/docs/Vector.md#0x1_Vector_empty">Vector::empty</a>() }); } </code></pre> </details> <details> <summary>Specification</summary>Must abort if the signer does not have the DiemRoot role [H12].
<pre><code><b>include</b> <a href="Roles.md#0x1_Roles_AbortsIfNotDiemRoot">Roles::AbortsIfNotDiemRoot</a>{account: dr_account}; <b>include</b> <a href="DiemConfig.md#0x1_DiemConfig_PublishNewConfigAbortsIf">DiemConfig::PublishNewConfigAbortsIf</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>; <b>include</b> <a href="DiemConfig.md#0x1_DiemConfig_PublishNewConfigEnsures">DiemConfig::PublishNewConfigEnsures</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>{ payload: <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a> { config: <a href="../../../../../../move-stdlib/docs/Vector.md#0x1_Vector_empty">Vector::empty</a>() } }; </code></pre> </details><a name="0x1_DiemConsensusConfig_set"></a>
setAllows Diem root to update the config.
<pre><code><b>public</b> <b>fun</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_set">set</a>(dr_account: &signer, config: vector<u8>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_set">set</a>(dr_account: &signer, config: vector<u8>) { <a href="DiemTimestamp.md#0x1_DiemTimestamp_assert_operating">DiemTimestamp::assert_operating</a>(); <a href="Roles.md#0x1_Roles_assert_diem_root">Roles::assert_diem_root</a>(dr_account); <a href="DiemConfig.md#0x1_DiemConfig_set">DiemConfig::set</a>( dr_account, <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a> { config } ); } </code></pre> </details> <details> <summary>Specification</summary>Must abort if the signer does not have the DiemRoot role [H12].
<pre><code><b>include</b> <a href="Roles.md#0x1_Roles_AbortsIfNotDiemRoot">Roles::AbortsIfNotDiemRoot</a>{account: dr_account}; <b>include</b> <a href="DiemTimestamp.md#0x1_DiemTimestamp_AbortsIfNotOperating">DiemTimestamp::AbortsIfNotOperating</a>; <b>include</b> <a href="DiemConfig.md#0x1_DiemConfig_SetAbortsIf">DiemConfig::SetAbortsIf</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>{account: dr_account}; <b>include</b> <a href="DiemConfig.md#0x1_DiemConfig_SetEnsures">DiemConfig::SetEnsures</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>{payload: <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a> { config }}; </code></pre> </details><a name="@Module_Specification_0"></a>
<a name="@Access_Control_1"></a>
Only "set" can modify the DiemConsensusConfig config [H12]
<a name="0x1_DiemConsensusConfig_DiemConsensusConfigRemainsSame"></a>
<pre><code><b>schema</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_DiemConsensusConfigRemainsSame">DiemConsensusConfigRemainsSame</a> { <b>ensures</b> <b>old</b>(<a href="DiemConfig.md#0x1_DiemConfig_spec_is_published">DiemConfig::spec_is_published</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>()) ==> <b>global</b><<a href="DiemConfig.md#0x1_DiemConfig">DiemConfig</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>>(@DiemRoot) == <b>old</b>(<b>global</b><<a href="DiemConfig.md#0x1_DiemConfig">DiemConfig</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>>(@DiemRoot)); } </code></pre> <pre><code><b>apply</b> <a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig_DiemConsensusConfigRemainsSame">DiemConsensusConfigRemainsSame</a> <b>to</b> * <b>except</b> set; </code></pre>The permission "UpdateDiemConsensusConfig" is granted to DiemRoot [H12].
<pre><code><b>invariant</b> [<b>global</b>, isolated] <b>forall</b> addr: address <b>where</b> <b>exists</b><<a href="DiemConfig.md#0x1_DiemConfig">DiemConfig</a><<a href="DiemConsensusConfig.md#0x1_DiemConsensusConfig">DiemConsensusConfig</a>>>(addr): addr == @DiemRoot; </code></pre>