Skip to content

Commit

Permalink
[FA] no withdraw event for burn
Browse files Browse the repository at this point in the history
  • Loading branch information
lightmark committed Dec 3, 2024
1 parent 5d87d94 commit 311023e
Show file tree
Hide file tree
Showing 16 changed files with 310 additions and 91 deletions.
24 changes: 12 additions & 12 deletions aptos-move/framework/aptos-framework/doc/aptos_account.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
- [Function `register_apt`](#0x1_aptos_account_register_apt)
- [Function `fungible_transfer_only`](#0x1_aptos_account_fungible_transfer_only)
- [Function `is_fungible_balance_at_least`](#0x1_aptos_account_is_fungible_balance_at_least)
- [Function `burn_from_fungible_store`](#0x1_aptos_account_burn_from_fungible_store)
- [Function `burn_from_fungible_store_for_gas`](#0x1_aptos_account_burn_from_fungible_store_for_gas)
- [Function `ensure_primary_fungible_store_exists`](#0x1_aptos_account_ensure_primary_fungible_store_exists)
- [Function `primary_fungible_store_address`](#0x1_aptos_account_primary_fungible_store_address)
- [Specification](#@Specification_1)
Expand All @@ -47,7 +47,7 @@
- [Function `register_apt`](#@Specification_1_register_apt)
- [Function `fungible_transfer_only`](#@Specification_1_fungible_transfer_only)
- [Function `is_fungible_balance_at_least`](#@Specification_1_is_fungible_balance_at_least)
- [Function `burn_from_fungible_store`](#@Specification_1_burn_from_fungible_store)
- [Function `burn_from_fungible_store_for_gas`](#@Specification_1_burn_from_fungible_store_for_gas)


<pre><code><b>use</b> <a href="account.md#0x1_account">0x1::account</a>;
Expand Down Expand Up @@ -707,7 +707,7 @@ to transfer APT) - if we want to allow APT PFS without account itself
// <b>as</b> APT cannot be frozen or have dispatch, and PFS cannot be transfered
// (PFS could potentially be burned. regular transfer would permanently unburn the store.
// Ignoring the check here <b>has</b> the equivalent of unburning, transfers, and then burning again)
<a href="fungible_asset.md#0x1_fungible_asset_deposit_internal">fungible_asset::deposit_internal</a>(recipient_store, <a href="fungible_asset.md#0x1_fungible_asset_withdraw_internal">fungible_asset::withdraw_internal</a>(sender_store, amount));
<a href="fungible_asset.md#0x1_fungible_asset_raw_deposit">fungible_asset::raw_deposit</a>(recipient_store, <a href="fungible_asset.md#0x1_fungible_asset_unchecked_withdraw">fungible_asset::unchecked_withdraw</a>(sender_store, amount));
}
</code></pre>

Expand Down Expand Up @@ -741,14 +741,14 @@ Is balance from APT Primary FungibleStore at least the given amount

</details>

<a id="0x1_aptos_account_burn_from_fungible_store"></a>
<a id="0x1_aptos_account_burn_from_fungible_store_for_gas"></a>

## Function `burn_from_fungible_store`
## Function `burn_from_fungible_store_for_gas`

Burn from APT Primary FungibleStore
Burn gas from APT Primary FungibleStore


<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store">burn_from_fungible_store</a>(ref: &<a href="fungible_asset.md#0x1_fungible_asset_BurnRef">fungible_asset::BurnRef</a>, <a href="account.md#0x1_account">account</a>: <b>address</b>, amount: u64)
<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store_for_gas">burn_from_fungible_store_for_gas</a>(ref: &<a href="fungible_asset.md#0x1_fungible_asset_BurnRef">fungible_asset::BurnRef</a>, <a href="account.md#0x1_account">account</a>: <b>address</b>, amount: u64)
</code></pre>


Expand All @@ -757,15 +757,15 @@ Burn from APT Primary FungibleStore
<summary>Implementation</summary>


<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store">burn_from_fungible_store</a>(
<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store_for_gas">burn_from_fungible_store_for_gas</a>(
ref: &BurnRef,
<a href="account.md#0x1_account">account</a>: <b>address</b>,
amount: u64,
) {
// Skip burning <b>if</b> amount is zero. This shouldn't <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error">error</a> out <b>as</b> it's called <b>as</b> part of transaction fee burning.
<b>if</b> (amount != 0) {
<b>let</b> store_addr = <a href="aptos_account.md#0x1_aptos_account_primary_fungible_store_address">primary_fungible_store_address</a>(<a href="account.md#0x1_account">account</a>);
<a href="fungible_asset.md#0x1_fungible_asset_address_burn_from">fungible_asset::address_burn_from</a>(ref, store_addr, amount);
<a href="fungible_asset.md#0x1_fungible_asset_address_burn_from_for_gas">fungible_asset::address_burn_from_for_gas</a>(ref, store_addr, amount);
};
}
</code></pre>
Expand Down Expand Up @@ -1294,12 +1294,12 @@ Check if the AptosCoin under the address existed.



<a id="@Specification_1_burn_from_fungible_store"></a>
<a id="@Specification_1_burn_from_fungible_store_for_gas"></a>

### Function `burn_from_fungible_store`
### Function `burn_from_fungible_store_for_gas`


<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store">burn_from_fungible_store</a>(ref: &<a href="fungible_asset.md#0x1_fungible_asset_BurnRef">fungible_asset::BurnRef</a>, <a href="account.md#0x1_account">account</a>: <b>address</b>, amount: u64)
<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="aptos_account.md#0x1_aptos_account_burn_from_fungible_store_for_gas">burn_from_fungible_store_for_gas</a>(ref: &<a href="fungible_asset.md#0x1_fungible_asset_BurnRef">fungible_asset::BurnRef</a>, <a href="account.md#0x1_account">account</a>: <b>address</b>, amount: u64)
</code></pre>


Expand Down
9 changes: 6 additions & 3 deletions aptos-move/framework/aptos-framework/doc/coin.md
Original file line number Diff line number Diff line change
Expand Up @@ -2538,9 +2538,12 @@ Note: This bypasses CoinStore::frozen -- coins within a frozen CoinStore can be
<a href="coin.md#0x1_coin_burn">burn</a>(coin_to_burn, burn_cap);
};
<b>if</b> (fa_amount_to_burn &gt; 0) {
<a href="fungible_asset.md#0x1_fungible_asset_burn_from">fungible_asset::burn_from</a>(
<a href="fungible_asset.md#0x1_fungible_asset_address_burn_from_for_gas">fungible_asset::address_burn_from_for_gas</a>(
<a href="coin.md#0x1_coin_borrow_paired_burn_ref">borrow_paired_burn_ref</a>(burn_cap),
<a href="primary_fungible_store.md#0x1_primary_fungible_store_primary_store">primary_fungible_store::primary_store</a>(account_addr, <a href="../../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_destroy_some">option::destroy_some</a>(<a href="coin.md#0x1_coin_paired_metadata">paired_metadata</a>&lt;CoinType&gt;())),
<a href="primary_fungible_store.md#0x1_primary_fungible_store_primary_store_address">primary_fungible_store::primary_store_address</a>(
account_addr,
<a href="../../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_destroy_some">option::destroy_some</a>(<a href="coin.md#0x1_coin_paired_metadata">paired_metadata</a>&lt;CoinType&gt;())
),
fa_amount_to_burn
);
};
Expand Down Expand Up @@ -2670,7 +2673,7 @@ This is for internal use only and doesn't emit an DepositEvent.
<b>let</b> fa = <a href="coin.md#0x1_coin_coin_to_fungible_asset">coin_to_fungible_asset</a>(<a href="coin.md#0x1_coin">coin</a>);
<b>let</b> metadata = <a href="fungible_asset.md#0x1_fungible_asset_asset_metadata">fungible_asset::asset_metadata</a>(&fa);
<b>let</b> store = <a href="primary_fungible_store.md#0x1_primary_fungible_store_primary_store">primary_fungible_store::primary_store</a>(account_addr, metadata);
<a href="fungible_asset.md#0x1_fungible_asset_deposit_internal">fungible_asset::deposit_internal</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), fa);
<a href="fungible_asset.md#0x1_fungible_asset_deposit_to_for_gas">fungible_asset::deposit_to_for_gas</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), fa);
} <b>else</b> {
<b>abort</b> <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_not_found">error::not_found</a>(<a href="coin.md#0x1_coin_ECOIN_STORE_NOT_PUBLISHED">ECOIN_STORE_NOT_PUBLISHED</a>)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ The semantics of deposit will be governed by the function specified in DispatchF
<b>assert</b>!(amount &lt;= start_balance - end_balance, <a href="../../aptos-stdlib/../move-stdlib/doc/error.md#0x1_error_aborted">error::aborted</a>(<a href="dispatchable_fungible_asset.md#0x1_dispatchable_fungible_asset_EAMOUNT_MISMATCH">EAMOUNT_MISMATCH</a>));
fa
} <b>else</b> {
<a href="fungible_asset.md#0x1_fungible_asset_withdraw_internal">fungible_asset::withdraw_internal</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), amount)
<a href="fungible_asset.md#0x1_fungible_asset_unchecked_withdraw">fungible_asset::unchecked_withdraw</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), amount)
}
}
</code></pre>
Expand Down Expand Up @@ -283,7 +283,7 @@ The semantics of deposit will be governed by the function specified in DispatchF
func
)
} <b>else</b> {
<a href="fungible_asset.md#0x1_fungible_asset_deposit_internal">fungible_asset::deposit_internal</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), fa)
<a href="fungible_asset.md#0x1_fungible_asset_raw_deposit">fungible_asset::raw_deposit</a>(<a href="object.md#0x1_object_object_address">object::object_address</a>(&store), fa)
}
}
</code></pre>
Expand Down
Loading

0 comments on commit 311023e

Please sign in to comment.