crates/sui-framework/docs/sui_system/stake_subsidy.md
StakeSubsidycreateadvance_epochcurrent_epoch_subsidy_amountget_distribution_counter<a name="sui_system_stake_subsidy_StakeSubsidy"></a>
StakeSubsidy<a name="@Constants_0"></a>
<a name="sui_system_stake_subsidy_ESubsidyDecreaseRateTooLarge"></a>
<pre><code><b>const</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_ESubsidyDecreaseRateTooLarge">ESubsidyDecreaseRateTooLarge</a>: u64 = 0; </code></pre><a name="sui_system_stake_subsidy_BASIS_POINT_DENOMINATOR"></a>
<pre><code><b>const</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_BASIS_POINT_DENOMINATOR">BASIS_POINT_DENOMINATOR</a>: u128 = 10000; </code></pre><a name="sui_system_stake_subsidy_create"></a>
create<a name="sui_system_stake_subsidy_advance_epoch"></a>
advance_epochAdvance the epoch counter and draw down the subsidy for the epoch.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_advance_epoch">advance_epoch</a>(self: &<b>mut</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">sui_system::stake_subsidy::StakeSubsidy</a>): <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_advance_epoch">advance_epoch</a>(self: &<b>mut</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">StakeSubsidy</a>): Balance<SUI> { // Take the minimum of the reward amount and the remaining balance in // order to ensure we don't overdraft the remaining stake subsidy // balance <b>let</b> to_withdraw = self.current_distribution_amount.min(self.balance.value()); // Drawn down the subsidy <b>for</b> this epoch. <b>let</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy">stake_subsidy</a> = self.balance.split(to_withdraw); self.distribution_counter = self.distribution_counter + 1; // Decrease the subsidy amount only when the current period ends. <b>if</b> (self.distribution_counter % self.stake_subsidy_period_length == 0) { <b>let</b> decrease_amount = self.current_distribution_amount <b>as</b> u128 * (self.stake_subsidy_decrease_rate <b>as</b> u128) / <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_BASIS_POINT_DENOMINATOR">BASIS_POINT_DENOMINATOR</a>; self.current_distribution_amount = self.current_distribution_amount - (decrease_amount <b>as</b> u64) }; <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy">stake_subsidy</a> } </code></pre> </details><a name="sui_system_stake_subsidy_current_epoch_subsidy_amount"></a>
current_epoch_subsidy_amountReturns the amount of stake subsidy to be added at the end of the current epoch.
<pre><code><b>public</b> <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_current_epoch_subsidy_amount">current_epoch_subsidy_amount</a>(self: &<a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">sui_system::stake_subsidy::StakeSubsidy</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_current_epoch_subsidy_amount">current_epoch_subsidy_amount</a>(self: &<a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">StakeSubsidy</a>): u64 { self.current_distribution_amount.min(self.balance.value()) } </code></pre> </details><a name="sui_system_stake_subsidy_get_distribution_counter"></a>
get_distribution_counterReturns the number of distributions that have occurred.
<pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_get_distribution_counter">get_distribution_counter</a>(self: &<a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">sui_system::stake_subsidy::StakeSubsidy</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_get_distribution_counter">get_distribution_counter</a>(self: &<a href="../sui_system/stake_subsidy.md#sui_system_stake_subsidy_StakeSubsidy">StakeSubsidy</a>): u64 { self.distribution_counter } </code></pre> </details>