55
66
77
8+ - [ Struct ` WithdrawStakingRewardEvent ` ] ( #0x1_governed_gas_pool_WithdrawStakingRewardEvent )
89- [ Resource ` GovernedGasPool ` ] ( #0x1_governed_gas_pool_GovernedGasPool )
10+ - [ Resource ` GovernedGasPoolExtension ` ] ( #0x1_governed_gas_pool_GovernedGasPoolExtension )
911- [ Constants] ( #@Constants_0 )
1012- [ Function ` primary_fungible_store_address ` ] ( #0x1_governed_gas_pool_primary_fungible_store_address )
1113- [ Function ` create_resource_account_seed ` ] ( #0x1_governed_gas_pool_create_resource_account_seed )
1214- [ Function ` initialize ` ] ( #0x1_governed_gas_pool_initialize )
15+ - [ Function ` initialize_governed_gas_pool_extension ` ] ( #0x1_governed_gas_pool_initialize_governed_gas_pool_extension )
1316- [ Function ` init_module ` ] ( #0x1_governed_gas_pool_init_module )
1417- [ Function ` governed_gas_signer ` ] ( #0x1_governed_gas_pool_governed_gas_signer )
1518- [ Function ` governed_gas_pool_address ` ] ( #0x1_governed_gas_pool_governed_gas_pool_address )
19+ - [ Function ` get_treasury_deposited ` ] ( #0x1_governed_gas_pool_get_treasury_deposited )
1620- [ Function ` fund ` ] ( #0x1_governed_gas_pool_fund )
1721- [ Function ` deposit ` ] ( #0x1_governed_gas_pool_deposit )
1822- [ Function ` deposit_from ` ] ( #0x1_governed_gas_pool_deposit_from )
1923- [ Function ` deposit_from_fungible_store ` ] ( #0x1_governed_gas_pool_deposit_from_fungible_store )
2024- [ Function ` deposit_gas_fee ` ] ( #0x1_governed_gas_pool_deposit_gas_fee )
2125- [ Function ` deposit_gas_fee_v2 ` ] ( #0x1_governed_gas_pool_deposit_gas_fee_v2 )
26+ - [ Function ` deposit_treasury ` ] ( #0x1_governed_gas_pool_deposit_treasury )
2227- [ Function ` get_balance ` ] ( #0x1_governed_gas_pool_get_balance )
28+ - [ Function ` withdraw_staking_reward ` ] ( #0x1_governed_gas_pool_withdraw_staking_reward )
29+ - [ Function ` register_coin ` ] ( #0x1_governed_gas_pool_register_coin )
2330- [ Specification] ( #@Specification_1 )
2431 - [ Function ` initialize ` ] ( #@Specification_1_initialize )
2532 - [ Function ` fund ` ] ( #@Specification_1_fund )
3138<b >use</b > <a href =" aptos_account.md#0x1_aptos_account " >0x1::aptos_account</a >;
3239<b >use</b > <a href =" aptos_coin.md#0x1_aptos_coin " >0x1::aptos_coin</a >;
3340<b >use</b > <a href =" coin.md#0x1_coin " >0x1::coin</a >;
41+ <b >use</b > <a href =" ../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error " >0x1::error</a >;
42+ <b >use</b > <a href =" event.md#0x1_event " >0x1::event</a >;
3443<b >use</b > <a href =" ../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features " >0x1::features</a >;
3544<b >use</b > <a href =" fungible_asset.md#0x1_fungible_asset " >0x1::fungible_asset</a >;
3645<b >use</b > <a href =" object.md#0x1_object " >0x1::object</a >;
4150
4251
4352
53+ <a id =" 0x1_governed_gas_pool_WithdrawStakingRewardEvent " ></a >
54+
55+ ## Struct ` WithdrawStakingRewardEvent `
56+
57+ Event emitted when token are withdraw from the pool
58+
59+
60+ <pre ><code ><b >struct</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_WithdrawStakingRewardEvent " >WithdrawStakingRewardEvent</a > <b >has</b > drop, store
61+ </code ></pre >
62+
63+
64+
65+ <details >
66+ <summary >Fields</summary >
67+
68+
69+ <dl >
70+ <dt >
71+ <code >amount: u64</code >
72+ </dt >
73+ <dd >
74+
75+ </dd >
76+ </dl >
77+
78+
79+ </details >
80+
4481<a id =" 0x1_governed_gas_pool_GovernedGasPool " ></a >
4582
4683## Resource ` GovernedGasPool `
@@ -68,13 +105,57 @@ Internally, this is a simply wrapper around a resource account.
68105</dl >
69106
70107
108+ </details >
109+
110+ <a id =" 0x1_governed_gas_pool_GovernedGasPoolExtension " ></a >
111+
112+ ## Resource ` GovernedGasPoolExtension `
113+
114+ Contains added variable needed for the GovernedGasPool staking reward update.
115+
116+
117+ <pre ><code ><b >struct</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a > <b >has</b > key
118+ </code ></pre >
119+
120+
121+
122+ <details >
123+ <summary >Fields</summary >
124+
125+
126+ <dl >
127+ <dt >
128+ <code >deposited_treasury_counter: u64</code >
129+ </dt >
130+ <dd >
131+
132+ </dd >
133+ <dt >
134+ <code >withdraw_staking_reward_events: <a href =" event.md#0x1_event_EventHandle " >event::EventHandle</a >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_WithdrawStakingRewardEvent " >governed_gas_pool::WithdrawStakingRewardEvent</a >> ; </code >
135+ </dt >
136+ <dd >
137+
138+ </dd >
139+ </dl >
140+
141+
71142</details >
72143
73144<a id =" @Constants_0 " ></a >
74145
75146## Constants
76147
77148
149+ <a id =" 0x1_governed_gas_pool_ENO_LONGER_SUPPORTED " ></a >
150+
151+ No longer supported.
152+
153+
154+ <pre ><code ><b >const</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_ENO_LONGER_SUPPORTED " >ENO_LONGER_SUPPORTED</a >: u64 = 4;
155+ </code ></pre >
156+
157+
158+
78159<a id =" 0x1_governed_gas_pool_MODULE_SALT " ></a >
79160
80161
@@ -181,6 +262,49 @@ Initializes the governed gas pool around a resource account creation seed.
181262 <b >move_to</b >(aptos_framework, <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a >{
182263 signer_capability: governed_gas_pool_signer_cap,
183264 });
265+
266+ <b >move_to</b >(aptos_framework, <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >{
267+ deposited_treasury_counter: 0,
268+ withdraw_staking_reward_events: <a href =" account.md#0x1_account_new_event_handle " >account::new_event_handle</a >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_WithdrawStakingRewardEvent " >WithdrawStakingRewardEvent</a >> ; (aptos_framework),
269+ });
270+ }
271+ </code ></pre >
272+
273+
274+
275+ </details >
276+
277+ <a id =" 0x1_governed_gas_pool_initialize_governed_gas_pool_extension " ></a >
278+
279+ ## Function ` initialize_governed_gas_pool_extension `
280+
281+ Initializes the governed gas pool extension alone.
282+ @param aptos_framework The signer of the aptos_framework module.
283+
284+
285+ <pre ><code ><b >public</b > entry <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_initialize_governed_gas_pool_extension " >initialize_governed_gas_pool_extension</a >(aptos_framework: &<a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer " >signer</a >)
286+ </code ></pre >
287+
288+
289+
290+ <details >
291+ <summary >Implementation</summary >
292+
293+
294+ <pre ><code ><b >public</b > entry <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_initialize_governed_gas_pool_extension " >initialize_governed_gas_pool_extension</a >(
295+ aptos_framework: &<a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer " >signer</a >,
296+ ) {
297+ <a href =" system_addresses.md#0x1_system_addresses_assert_aptos_framework " >system_addresses::assert_aptos_framework</a >(aptos_framework);
298+
299+ // <b >return</b > <b >if</b > the governed gas extension <b >has</b > already been initialized
300+ <b >if</b > (<b >exists</b >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >> ; (<a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer_address_of " >signer::address_of</a >(aptos_framework))) {
301+ <b >return</b >
302+ };
303+
304+ <b >move_to</b >(aptos_framework, <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >{
305+ deposited_treasury_counter: 0,
306+ withdraw_staking_reward_events: <a href =" account.md#0x1_account_new_event_handle " >account::new_event_handle</a >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_WithdrawStakingRewardEvent " >WithdrawStakingRewardEvent</a >> ; (aptos_framework),
307+ });
184308}
185309</code ></pre >
186310
@@ -268,6 +392,32 @@ Gets the address of the governed gas pool.
268392
269393
270394
395+ </details >
396+
397+ <a id =" 0x1_governed_gas_pool_get_treasury_deposited " ></a >
398+
399+ ## Function ` get_treasury_deposited `
400+
401+ Return the amount of treasury deposited.
402+
403+
404+ <pre ><code >#[view]
405+ <b >public</b > <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_get_treasury_deposited " >get_treasury_deposited</a >(): u64
406+ </code ></pre >
407+
408+
409+
410+ <details >
411+ <summary >Implementation</summary >
412+
413+
414+ <pre ><code ><b >public</b > <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_get_treasury_deposited " >get_treasury_deposited</a >(): u64 <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a > {
415+ <b >borrow_global</b >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >> ; (@aptos_framework).deposited_treasury_counter
416+ }
417+ </code ></pre >
418+
419+
420+
271421</details >
272422
273423<a id =" 0x1_governed_gas_pool_fund " ></a >
@@ -416,9 +566,8 @@ Deposits gas fees into the governed gas pool.
416566<summary >Implementation</summary >
417567
418568
419- <pre ><code ><b >public</b > <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_gas_fee " >deposit_gas_fee</a >(_gas_payer: <b >address</b >, _gas_fee: u64) <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a > {
420- // get the sender <b >to</b > preserve the signature but do nothing
421- <a href =" governed_gas_pool.md#0x1_governed_gas_pool_governed_gas_pool_address " >governed_gas_pool_address</a >();
569+ <pre ><code ><b >public</b > <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_gas_fee " >deposit_gas_fee</a >(_gas_payer: <b >address</b >, _gas_fee: u64) {
570+ <b >abort</b > <a href =" ../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_not_implemented " >error::not_implemented</a >(<a href =" governed_gas_pool.md#0x1_governed_gas_pool_ENO_LONGER_SUPPORTED " >ENO_LONGER_SUPPORTED</a >)
422571}
423572</code ></pre >
424573
@@ -445,7 +594,7 @@ Deposits gas fees into the governed gas pool.
445594
446595
447596<pre ><code ><b >public</b >(<b >friend</b >) <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_gas_fee_v2 " >deposit_gas_fee_v2</a >(gas_payer: <b >address</b >, gas_fee: u64) <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a > {
448- <b >if</b > (<a href =" ../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features_operations_default_to_fa_apt_store_enabled " >features::operations_default_to_fa_apt_store_enabled</a >()) {
597+ <b >if</b > (<a href =" ../../aptos-stdlib/../move-stdlib/doc/features.md#0x1_features_operations_default_to_fa_apt_store_enabled " >features::operations_default_to_fa_apt_store_enabled</a >()) {
449598 <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_from_fungible_store " >deposit_from_fungible_store</a >(gas_payer, gas_fee);
450599 } <b >else</b > {
451600 <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_from " >deposit_from</a >< ; AptosCoin> ; (gas_payer, gas_fee);
@@ -455,6 +604,37 @@ Deposits gas fees into the governed gas pool.
455604
456605
457606
607+ </details >
608+
609+ <a id =" 0x1_governed_gas_pool_deposit_treasury " ></a >
610+
611+ ## Function ` deposit_treasury `
612+
613+ Deposits from the treasury account. Treasury deposit are recorded.
614+ @param treasury_account The address of the account that paid the treasury.
615+ @param amount The amount of treasury to be deposited.
616+
617+
618+ <pre ><code ><b >public</b > entry <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_treasury " >deposit_treasury</a >(treasury_account: &<a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer " >signer</a >, amount: u64)
619+ </code ></pre >
620+
621+
622+
623+ <details >
624+ <summary >Implementation</summary >
625+
626+
627+ <pre ><code ><b >public</b > entry <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_treasury " >deposit_treasury</a >(treasury_account: &<a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer " >signer</a >, amount: u64) <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a >, <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a > {
628+ <b >let</b > treasury_account_address = <a href =" ../../aptos-stdlib/../move-stdlib/doc/signer.md#0x1_signer_address_of " >signer::address_of</a >(treasury_account);
629+ <a href =" governed_gas_pool.md#0x1_governed_gas_pool_deposit_from " >deposit_from</a >< ; AptosCoin> ; (treasury_account_address, amount);
630+
631+ <b >let</b > ggp = <b >borrow_global_mut</b >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >> ; (@aptos_framework);
632+ ggp.deposited_treasury_counter = ggp.deposited_treasury_counter + amount;
633+ }
634+ </code ></pre >
635+
636+
637+
458638</details >
459639
460640<a id =" 0x1_governed_gas_pool_get_balance " ></a >
@@ -483,6 +663,78 @@ Gets the balance of a specified coin type in the governed gas pool.
483663
484664
485665
666+ </details >
667+
668+ <a id =" 0x1_governed_gas_pool_withdraw_staking_reward " ></a >
669+
670+ ## Function ` withdraw_staking_reward `
671+
672+ Withdraws coins from the governed gas pool.
673+
674+ This function allows friend modules to withdraw a specified amount of a given
675+ <code >CoinType</code > from the governed gas pool. It uses the internal signer of the
676+ governed gas pool to authorize the withdrawal.
677+
678+ @param amount The amount of coins to withdraw from the pool.
679+ @return A <code >Coin< ; CoinType> ; </code > resource containing the withdrawn amount.
680+
681+
682+ <pre ><code ><b >public</b >(<b >friend</b >) <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_withdraw_staking_reward " >withdraw_staking_reward</a >< ; CoinType> ; (amount: u64): <a href =" coin.md#0x1_coin_Coin " >coin::Coin</a >< ; CoinType> ;
683+ </code ></pre >
684+
685+
686+
687+ <details >
688+ <summary >Implementation</summary >
689+
690+
691+ <pre ><code ><b >public</b >(<b >friend</b >) <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_withdraw_staking_reward " >withdraw_staking_reward</a >< ; CoinType> ; (
692+ amount: u64
693+ ): Coin< ; CoinType> ; <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a >, <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a > {
694+ <b >let</b > balance = <a href =" governed_gas_pool.md#0x1_governed_gas_pool_get_balance " >get_balance</a >< ; CoinType> ; ();
695+ <b >assert</b >!(balance > ; = amount, 0); // insufficient balance
696+ <b >let</b > ggpv2 = <b >borrow_global_mut</b >< ; <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPoolExtension " >GovernedGasPoolExtension</a >> ; (@aptos_framework);
697+
698+ <a href =" event.md#0x1_event_emit_event " >event::emit_event</a >(
699+ &<b >mut</b > ggpv2.withdraw_staking_reward_events,
700+ <a href =" governed_gas_pool.md#0x1_governed_gas_pool_WithdrawStakingRewardEvent " >WithdrawStakingRewardEvent</a > {
701+ amount,
702+ },
703+ );
704+
705+ // Withdraw reward <a href =" coin.md#0x1_coin " >coin</a >.
706+ <a href =" coin.md#0x1_coin_withdraw " >coin::withdraw</a >< ; CoinType> ; (&<a href =" governed_gas_pool.md#0x1_governed_gas_pool_governed_gas_signer " >governed_gas_signer</a >(), amount)
707+ }
708+ </code ></pre >
709+
710+
711+
712+ </details >
713+
714+ <a id =" 0x1_governed_gas_pool_register_coin " ></a >
715+
716+ ## Function ` register_coin `
717+
718+ Register Aptos coin with Governed gas signer.
719+
720+
721+ <pre ><code ><b >public</b >(<b >friend</b >) <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_register_coin " >register_coin</a >< ; CoinType> ; ()
722+ </code ></pre >
723+
724+
725+
726+ <details >
727+ <summary >Implementation</summary >
728+
729+
730+ <pre ><code ><b >public</b >(<b >friend</b >) <b >fun</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_register_coin " >register_coin</a >< ; CoinType> ; () <b >acquires</b > <a href =" governed_gas_pool.md#0x1_governed_gas_pool_GovernedGasPool " >GovernedGasPool</a > {
731+ <b >let</b > s = <a href =" governed_gas_pool.md#0x1_governed_gas_pool_governed_gas_signer " >governed_gas_signer</a >();
732+ <a href =" coin.md#0x1_coin_register " >coin::register</a >< ; CoinType> ; (&s);
733+ }
734+ </code ></pre >
735+
736+
737+
486738</details >
487739
488740<a id =" @Specification_1 " ></a >
0 commit comments