Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove zero Balance or empty NFTGallery #28

Merged
merged 5 commits into from
May 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/StarcoinFramework/BuildInfo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ compiled_package_info:
? address: "0x00000000000000000000000000000001"
name: YieldFarmingV2
: StarcoinFramework
source_digest: 54034AEB5CDBFFF340E2E96579A13CF5046A4E3EDF6512B45ADD5B82AC29F11B
source_digest: BC0B86D823E4E24673E4F21BDAA7F7A974D00890881DEB43A67C5F3773263496
build_flags:
dev_mode: false
test_mode: false
Expand Down
Binary file not shown.
Binary file not shown.
Binary file modified build/StarcoinFramework/bytecode_modules/Account.mv
Binary file not shown.
Binary file modified build/StarcoinFramework/bytecode_modules/AccountScripts.mv
Binary file not shown.
Binary file modified build/StarcoinFramework/bytecode_modules/NFTGallery.mv
Binary file not shown.
Binary file modified build/StarcoinFramework/bytecode_modules/NFTGalleryScripts.mv
Binary file not shown.
42 changes: 42 additions & 0 deletions build/StarcoinFramework/docs/Account.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ The module for the account resource that governs every account
- [Function `txn_prologue`](#0x1_Account_txn_prologue)
- [Function `txn_epilogue`](#0x1_Account_txn_epilogue)
- [Function `txn_epilogue_v2`](#0x1_Account_txn_epilogue_v2)
- [Function `remove_zero_balance`](#0x1_Account_remove_zero_balance)
- [Module Specification](#@Module_Specification_1)


Expand Down Expand Up @@ -2965,6 +2966,47 @@ It collects gas and bumps the sequence number



</details>

<a name="0x1_Account_remove_zero_balance"></a>

## Function `remove_zero_balance`

Remove zero Balance


<pre><code><b>public</b> <b>fun</b> <a href="Account.md#0x1_Account_remove_zero_balance">remove_zero_balance</a>&lt;TokenType: store&gt;(account: &signer)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="Account.md#0x1_Account_remove_zero_balance">remove_zero_balance</a>&lt;TokenType: store&gt;(account: &signer) <b>acquires</b> <a href="Account.md#0x1_Account_Balance">Balance</a> {
<b>let</b> addr: <b>address</b> = <a href="Signer.md#0x1_Signer_address_of">Signer::address_of</a>(account);
<b>let</b> <a href="Account.md#0x1_Account_Balance">Balance</a>&lt;TokenType&gt; { token } = <b>move_from</b>&lt;<a href="Account.md#0x1_Account_Balance">Balance</a>&lt;TokenType&gt;&gt;(addr);
<a href="Token.md#0x1_Token_destroy_zero">Token::destroy_zero</a>&lt;TokenType&gt;(token);
}
</code></pre>



</details>

<details>
<summary>Specification</summary>



<pre><code><b>let</b> addr = <a href="Signer.md#0x1_Signer_address_of">Signer::address_of</a>(account);
<b>aborts_if</b> !<b>exists</b>&lt;<a href="Account.md#0x1_Account_Balance">Balance</a>&lt;TokenType&gt;&gt;(addr);
<b>ensures</b> !<b>exists</b>&lt;<a href="Account.md#0x1_Account_Balance">Balance</a>&lt;TokenType&gt;&gt;(addr);
</code></pre>



</details>

<a name="@Module_Specification_1"></a>
Expand Down
26 changes: 26 additions & 0 deletions build/StarcoinFramework/docs/AccountScripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

- [Function `enable_auto_accept_token`](#0x1_AccountScripts_enable_auto_accept_token)
- [Function `disable_auto_accept_token`](#0x1_AccountScripts_disable_auto_accept_token)
- [Function `remove_zero_balance`](#0x1_AccountScripts_remove_zero_balance)


<pre><code><b>use</b> <a href="Account.md#0x1_Account">0x1::Account</a>;
Expand Down Expand Up @@ -64,4 +65,29 @@ The script function is reenterable.



</details>

<a name="0x1_AccountScripts_remove_zero_balance"></a>

## Function `remove_zero_balance`

Remove zero Balance


<pre><code><b>public</b>(<b>script</b>) <b>fun</b> <a href="AccountScripts.md#0x1_AccountScripts_remove_zero_balance">remove_zero_balance</a>&lt;TokenType: store&gt;(account: signer)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<b>script</b>) <b>fun</b> <a href="AccountScripts.md#0x1_AccountScripts_remove_zero_balance">remove_zero_balance</a>&lt;TokenType: store&gt;(account: signer) {
<a href="Account.md#0x1_Account_remove_zero_balance">Account::remove_zero_balance</a>&lt;TokenType&gt;(&account);
}
</code></pre>



</details>
26 changes: 26 additions & 0 deletions build/StarcoinFramework/docs/NFT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

- [Function `accept`](#0x1_NFTGalleryScripts_accept)
- [Function `transfer`](#0x1_NFTGalleryScripts_transfer)
- [Function `remove_empty_gallery`](#0x1_NFTGalleryScripts_remove_empty_gallery)
- [Module Specification](#@Module_Specification_0)


Expand Down Expand Up @@ -66,6 +67,31 @@ Transfer NFT<NFTMeta, NFTBody> with <code>id</code> from <code>sender</code> to



</details>

<a name="0x1_NFTGalleryScripts_remove_empty_gallery"></a>

## Function `remove_empty_gallery`

Remove empty NFTGallery<Meta,Body>.


<pre><code><b>public</b>(<b>script</b>) <b>fun</b> <a href="NFT.md#0x1_NFTGalleryScripts_remove_empty_gallery">remove_empty_gallery</a>&lt;NFTMeta: <b>copy</b>, drop, store, NFTBody: store&gt;(sender: signer)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<b>script</b>) <b>fun</b> <a href="NFT.md#0x1_NFTGalleryScripts_remove_empty_gallery">remove_empty_gallery</a>&lt;NFTMeta: <b>copy</b> + store + drop, NFTBody: store&gt;(sender: signer) {
<a href="NFT.md#0x1_NFTGallery_remove_empty_gallery">NFTGallery::remove_empty_gallery</a>&lt;NFTMeta, NFTBody&gt;(&sender);
}
</code></pre>



</details>

<a name="@Module_Specification_0"></a>
Expand Down
Binary file modified build/StarcoinFramework/source_maps/Account.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/AccountScripts.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/IdentifierNFT.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/IdentifierNFTScripts.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/NFT.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/NFTGallery.mvsm
Binary file not shown.
Binary file modified build/StarcoinFramework/source_maps/NFTGalleryScripts.mvsm
Binary file not shown.
27 changes: 27 additions & 0 deletions integration-tests/account/remove_zero_balance.exp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
processed 4 tasks

task 2 'run'. lines 5-17:
{
"gas_used": 92550,
"status": {
"Keep": "Executed"
}
}

task 3 'run'. lines 19-30:
{
"gas_used": 146733,
"status": {
"Keep": {
"MoveAbort": [
{
"Module": {
"address": "0x00000000000000000000000000000001",
"name": "Token"
}
},
4097
]
}
}
}
30 changes: 30 additions & 0 deletions integration-tests/account/remove_zero_balance.move
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//# init -n dev

//# faucet --addr alice

//# run --signers alice
script {
use StarcoinFramework::DummyToken::DummyToken;
use StarcoinFramework::Account;
use StarcoinFramework::Token;

fun main(account: signer) {
let coin = Token::zero<DummyToken>();
Account::deposit_to_self<DummyToken>(&account, coin);
Account::remove_zero_balance<DummyToken>(&account);
}
}
// check: EXECUTED

//# run --signers alice
script {
use StarcoinFramework::DummyToken::{Self, DummyToken};
use StarcoinFramework::Account;

fun main(account: signer) {
let coin = DummyToken::mint(&account, 10000);
Account::deposit_to_self<DummyToken>(&account, coin);
Account::remove_zero_balance<DummyToken>(&account);
}
}
// check: ABORTED
34 changes: 21 additions & 13 deletions integration-tests/nft/test_gallery.exp
Original file line number Diff line number Diff line change
@@ -1,97 +1,105 @@
processed 16 tasks
processed 18 tasks

task 4 'run'. lines 70-78:
task 5 'run'. lines 71-79:
{
"gas_used": 210684,
"status": {
"Keep": "Executed"
}
}

task 5 'run'. lines 80-88:
task 6 'run'. lines 81-89:
{
"gas_used": 85929,
"status": {
"Keep": "Executed"
}
}

task 6 'run'. lines 91-105:
task 7 'run'. lines 92-106:
{
"gas_used": 56773,
"status": {
"Keep": "Executed"
}
}

task 7 'run'. lines 107-115:
task 8 'run'. lines 108-116:
{
"gas_used": 108590,
"status": {
"Keep": "Executed"
}
}

task 8 'run'. lines 117-133:
task 9 'run'. lines 118-134:
{
"gas_used": 112663,
"status": {
"Keep": "Executed"
}
}

task 9 'run'. lines 135-143:
task 10 'run'. lines 136-144:
{
"gas_used": 18640403,
"status": {
"Keep": "Executed"
}
}

task 10 'run'. lines 147-160:
task 11 'run'. lines 148-161:
{
"gas_used": 3113987,
"status": {
"Keep": "Executed"
}
}

task 11 'run'. lines 163-184:
task 12 'run'. lines 164-185:
{
"gas_used": 28324758,
"status": {
"Keep": "Executed"
}
}

task 12 'run'. lines 186-205:
task 13 'run'. lines 187-206:
{
"gas_used": 2262261,
"status": {
"Keep": "Executed"
}
}

task 13 'run'. lines 207-219:
task 14 'run'. lines 208-220:
{
"gas_used": 19223,
"status": {
"Keep": "Executed"
}
}

task 14 'run'. lines 223-233:
task 15 'run'. lines 224-234:
{
"gas_used": 145028,
"status": {
"Keep": "Executed"
}
}

task 15 'run'. lines 236-250:
task 16 'run'. lines 237-251:
{
"gas_used": 2060975,
"status": {
"Keep": "Executed"
}
}

task 17 'run'. lines 253-267:
{
"gas_used": 328171,
"status": {
"Keep": "Executed"
}
}
19 changes: 18 additions & 1 deletion integration-tests/nft/test_gallery.move
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

//# faucet --addr bob

//# faucet --addr alice

//# publish
module creator::AnyNFT {
Expand Down Expand Up @@ -247,4 +248,20 @@ fun main(sender: signer) {
}
}

// check: EXECUTED
// check: EXECUTED

//# run --signers alice
script {
use creator::AnyNFT::{Self, AnyNFT, AnyNFTBody};
use StarcoinFramework::NFTGallery;

fun main(sender: signer) {
AnyNFT::do_accept(&sender);
AnyNFT::mint(&sender);
let nft = NFTGallery::withdraw_one<AnyNFT, AnyNFTBody>(&sender);
AnyNFT::burn(nft);
NFTGallery::remove_empty_gallery<AnyNFT, AnyNFTBody>(&sender);
pause125 marked this conversation as resolved.
Show resolved Hide resolved
}
}

// check: EXECUTED
13 changes: 13 additions & 0 deletions sources/Account.move
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,19 @@ module Account {
aborts_if txn_gas_price * (txn_max_gas_units - gas_units_remaining) > 0 &&
global<TransactionFee::TransactionFee<TokenType>>(CoreAddresses::GENESIS_ADDRESS()).fee.value + txn_gas_price * (txn_max_gas_units - gas_units_remaining) > max_u128();
}

/// Remove zero Balance
public fun remove_zero_balance<TokenType: store>(account: &signer) acquires Balance {
let addr: address = Signer::address_of(account);
let Balance<TokenType> { token } = move_from<Balance<TokenType>>(addr);
Token::destroy_zero<TokenType>(token);
}

spec remove_zero_balance {
let addr = Signer::address_of(account);
aborts_if !exists<Balance<TokenType>>(addr);
ensures !exists<Balance<TokenType>>(addr);
}
}

}
5 changes: 5 additions & 0 deletions sources/AccountScripts.move
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,10 @@ module AccountScripts {
public(script) fun disable_auto_accept_token(account: signer) {
Account::set_auto_accept_token(&account, false);
}

/// Remove zero Balance
public(script) fun remove_zero_balance<TokenType: store>(account: signer) {
Account::remove_zero_balance<TokenType>(&account);
}
}
}
Loading