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

[Assets] Implement pallet-assets-holder #4530

Open
wants to merge 89 commits into
base: master
Choose a base branch
from

Conversation

pandres95
Copy link
Contributor

@pandres95 pandres95 commented May 21, 2024

Closes #4315

@pandres95 pandres95 requested a review from a team as a code owner May 21, 2024 05:43
@pandres95 pandres95 marked this pull request as draft May 21, 2024 05:43
…th the tokens' _balance components_ model.

On the most recent documentation about tokens (both _fungible_ and _fungibles_ (sets)), the model for calculating the different balance components is explained. The prior implementation of `pallet-assets` featured a weird definition of how to handle them that was not in line with the expected (see <https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/fungible/index.html#holds-and-freezes>) definition of tokens.

This commit changes this implementation for methods `reducible_balance` and `can_decrease` to introduce the calculation of `spendable` balance, and the consequences derived of decreasing a balance that may include both `frozen` and `held` balances.
@pandres95 pandres95 marked this pull request as ready for review July 11, 2024 09:45
@pandres95 pandres95 requested review from athei and a team as code owners July 11, 2024 09:45
@bkchr
Copy link
Member

bkchr commented Jul 24, 2024

@joepetrowski @muharem can you please take a look at this and if we need this?

Copy link
Contributor

@muharem muharem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pandres95 I do not really understand the plan. I see only first step in the issue. also are you sure we need this new trait? can we do the same with fungibles traits? I see that we have a similar FrozenBalance trait, but it probably was introduced before the fungibles was. can we bring the hold implementation with a single PR? it would make it more clear and we get it faster. this PR wont bring anything useful, only breaking changes.

@pandres95
Copy link
Contributor Author

pandres95 commented Jul 25, 2024

Sure! Can complete the second step in the same PR.

The reason behind this trait is that in some prior meeting Gav advised against exhaustively modifying some core pallets like pallet-assets and instead recommended extending them. That is, precisely the reasoning for having created pallet-assets-freezer.

@muharem
Copy link
Contributor

muharem commented Jul 25, 2024

@pandres95 yes, it should be done as an extension. there is also a died hook, the new trait make sense to me now.
so I would only advise to have a single PR, since HeldBalance along does not bring anything, and only breaking changes.
if introduced and merged separately, it is possible to get the HeldBalance and the holder pallet in different release versions. Two separate audits would be required. also I think we can review it better in a single PR.

@pandres95 pandres95 changed the title [Assets] Define HeldBalance [Assets] Implement pallet-assets-holder Jul 29, 2024
@paritytech-review-bot paritytech-review-bot bot requested a review from a team August 1, 2024 02:28
@pandres95
Copy link
Contributor Author

@muharem the pallet implementation is done and ready to review

@pandres95 pandres95 requested a review from muharem August 1, 2024 02:33
…alance on hold, but frozen value is zero, as the account would need to exist
… to reflect the changes in the balance model, so a first reader can understand the differences between _free_ balance, _reducible_ balance and balance _on hold_.
prdoc/pr_4530.prdoc Show resolved Hide resolved
substrate/frame/assets-holder/src/lib.rs Show resolved Hide resolved
substrate/frame/assets/src/tests.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/types.rs Outdated Show resolved Hide resolved
@gui1117 gui1117 self-requested a review November 4, 2024 06:04
@gui1117
Copy link
Contributor

gui1117 commented Nov 4, 2024

Looks good, some last changes

Copy link
Contributor Author

@pandres95 pandres95 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change this (thanks @ggwpez)

substrate/frame/assets-holder/src/lib.rs Outdated Show resolved Hide resolved
…rency::unreserve` that are followed by a potential failure of `dead_account`.

This would prevent cases where `refund` is called externally by another pallet, and not as a part of a direct extrinsic call within the pallet.
@pandres95 pandres95 requested a review from ggwpez November 6, 2024 16:31
@pandres95
Copy link
Contributor Author

pandres95 commented Nov 12, 2024

@gui1117 AFAIK, I've already addressed the changes you requested on your review. Let me know if there's something additional you need from my end. 😁

substrate/frame/assets/src/types.rs Outdated Show resolved Hide resolved
substrate/frame/assets/src/functions.rs Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Define and implement Hold for Assets
9 participants