Skip to content

feat(mainnet): introduce assets#465

Merged
al3mart merged 25 commits intoal3mart/refactor-mainnet-configfrom
al3mart/refactor-mainnet-assets
Feb 14, 2025
Merged

feat(mainnet): introduce assets#465
al3mart merged 25 commits intoal3mart/refactor-mainnet-configfrom
al3mart/refactor-mainnet-assets

Conversation

@al3mart
Copy link
Member

@al3mart al3mart commented Feb 5, 2025

Adds assets into mainnet runtime:

  • pallet_assets
  • pallet_nfts

Refactors ProxyType such that assets calls are taken into account.


  • Include pallet_assets in the runtime
  • Include pallet_nfts in the runtime
  • Review pallet_assets configuration
  • Review pallet_nfts configuration
  • Implement configuration unit tests for pallet_assets
  • Implement configuration unit tests for pallet_nfts
  • Include asset specific proxy types in mainnet runtime.

Relevant configuration:

  • pallet-assets
// Accounts for `Asset` max size.
pub const AssetDeposit: Balance = deposit(1, 210);
// Enough to keep the balance in state / 100.
pub const AssetAccountDeposit: Balance = deposit(1, 16) / 100;
// Accounts for the key length + 
// Value max length without name and symbol, which are accounted per byte. 
pub const MetadataDepositBase: Balance = deposit(1, 38);

Deposit costs:

Deposit Original Cost (DOT) Reduced Cost (DOT)
AssetDeposit 0.2021 Not Updated
AssetAccountDeposit 0.20016 0.0020016
AssetsApprovalDesposit 0.1 Not Updated
MetadataDepositBase 0.20038 Not Updated
PerByte 1e-05 Not Updated

The amount of funds that must be reserved for a non-provider asset account to be maintained has been reduced by a factor of 100.

  • pallet-nfts
// All features enabled.
pub NftsPalletFeatures: PalletFeatures = PalletFeatures::all_enabled();
// Accounts for `AccountBalance` max size.
// Key = 68 bytes (4+16+32+16), Value = 52 bytes (4+32+16)
pub const NftsCollectionBalanceDeposit: Balance = deposit(1, 120) / 100;
// Accounts for state from `Collection` +
// `CollectionRoleOf` +
// `CollectionConfigOf` +
// `CollectionAccount`
// Refer to `ensure_collection_deposit` test for specifics.
pub const NftsCollectionDeposit: Balance = deposit(4, 294);
// Accounts for `CollectionApprovals` max size.
// Key = 116 bytes (4+16+32+16+32+16), Value = 21 bytes (1+4+16)
pub const NftsCollectionApprovalDeposit: Balance = deposit(1, 137) / 100;
// Accounts for `Item` storage item max size.
pub const NftsItemDeposit: Balance = deposit(1, 861) / 100;
// Key = max(size_of(item_metadata_key), size_of(collection_metadata_key)) + Balance: 16 bytes
pub const NftsMetadataDepositBase: Balance = deposit(1, 56) / 100;
// Accounts for key size of `Attribute`.
pub const NftsAttributeDepositBase: Balance = deposit(1, 89) / 100;

Deposit Costs:

Deposit Original Cost (DOT) Reduced Cost (DOT)
NftsCollectionBalanceDeposit 0.2012 0.002012
NftsCollectionDeposit 0.80294 Not Updated
NftsCollectionApprovalDeposit 0.20137 0.0020137
NftsItemDeposit 0.20861 0.0020861
NftsMetadataDepositBase 0.20056 0.0020056
NftsAttributeDepositBase 0.20089 0.0020089
PerByte 1e-05 Not Updated

I've lowered certain deposits for NFTs such that the deposit cost of creating a collection remains as it has been calculated (it didn't seem high given the current pricing) but lowers the the deposit costs for the rest of actions by a factor of 100. This should easy the usage of the created assets.

I'm not that concerned about the rest of deposits myself, but happy to hear different opinions.

Relevant reference to tackle these numbers: RFC#45

[sc-2764]

@al3mart al3mart force-pushed the al3mart/refactor-mainnet-assets branch from 4327776 to 4be4a08 Compare February 5, 2025 03:46
@al3mart al3mart changed the title refactor(mainnet): include assets refactor(mainnet): assets config Feb 5, 2025
@codecov-commenter
Copy link

codecov-commenter commented Feb 5, 2025

Codecov Report

Attention: Patch coverage is 88.63049% with 44 lines in your changes missing coverage. Please review.

Project coverage is 76.07%. Comparing base (cae5b19) to head (098a035).

Files with missing lines Patch % Lines
runtime/mainnet/src/apis.rs 0.00% 44 Missing ⚠️
@@                         Coverage Diff                         @@
##           al3mart/refactor-mainnet-config     #465      +/-   ##
===================================================================
+ Coverage                            75.80%   76.07%   +0.26%     
===================================================================
  Files                                   83       84       +1     
  Lines                                17143    17514     +371     
  Branches                             17143    17514     +371     
===================================================================
+ Hits                                 12996    13323     +327     
- Misses                                3885     3928      +43     
- Partials                               262      263       +1     
Files with missing lines Coverage Δ
runtime/mainnet/src/config/assets.rs 100.00% <100.00%> (ø)
runtime/mainnet/src/lib.rs 66.23% <ø> (ø)
runtime/mainnet/src/apis.rs 0.00% <0.00%> (ø)

... and 1 file with indirect coverage changes

@al3mart al3mart force-pushed the al3mart/refactor-mainnet-config branch 3 times, most recently from c81b9d6 to 702b7f2 Compare February 7, 2025 10:32
@al3mart al3mart force-pushed the al3mart/refactor-mainnet-assets branch 2 times, most recently from bb73e34 to b7a3e9d Compare February 10, 2025 18:37
@al3mart al3mart force-pushed the al3mart/refactor-mainnet-assets branch from bdbe427 to e614927 Compare February 11, 2025 14:58
@al3mart al3mart requested review from a team, Daanvdplas and peterwht and removed request for Daanvdplas and peterwht February 11, 2025 17:34
@al3mart al3mart marked this pull request as ready for review February 11, 2025 17:34
@al3mart al3mart changed the title feat(mainnet): assets config feat(mainnet): introduce assets Feb 13, 2025
Copy link
Collaborator

@Daanvdplas Daanvdplas left a comment

Choose a reason for hiding this comment

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

Stopped reviewing while reviewing the nfts configuration. This is not audited yet and we should use the SDK's pallet nfts.

Can we change this and then I will finish the review.

use super::*;

#[test]
fn ensure_asset_approval_deposit() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why no numbers backing the amount like done for all other deposit parameters? As well as the test below.

Copy link
Member Author

Choose a reason for hiding this comment

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

Well, ExistentialDeposit is a number, and in many of the cases the "number" is calculated and then compared with the one declared above. So I didn't consider it necessary.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't understand :)

Copy link
Member Author

Choose a reason for hiding this comment

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

I did add asserts for the concrete values anyway 👍

@al3mart al3mart requested a review from Daanvdplas February 13, 2025 18:52
}

#[test]
fn ensure_collection_deposit() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

It would be nice to explain which keys and values are used for this calculation and why. Makes it much easier to review and understand when we have to come back to it.

Copy link
Member Author

Choose a reason for hiding this comment

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

Copy link
Collaborator

@Daanvdplas Daanvdplas left a comment

Choose a reason for hiding this comment

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

PR looking good, some final fixes and then good to go!

@al3mart al3mart requested a review from Daanvdplas February 14, 2025 09:00
Copy link
Collaborator

@Daanvdplas Daanvdplas left a comment

Choose a reason for hiding this comment

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

Great job on the PR and also the quick response to getting this finished!

Copy link
Collaborator

@peterwht peterwht left a comment

Choose a reason for hiding this comment

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

🚀🚀

@al3mart al3mart merged commit 0334d95 into al3mart/refactor-mainnet-config Feb 14, 2025
15 checks passed
@al3mart al3mart deleted the al3mart/refactor-mainnet-assets branch February 14, 2025 16:07
al3mart added a commit that referenced this pull request Feb 17, 2025
* refactor(mainnet): include assets

fmt

refactor(collator): not necessary import

* test(assets): add nfts config unit tests

* refactor(proxy): Add assets & smart contract proxy type

* refactor(assets): implement nfts runtime api

* fix(pallet-nfts-api): workspace linters are not defined

* docs(assets): clarify deposits

* chore(proxy): improve usage of references

* docs(assets): update src reference

* chore(assets): update MetadataDepositBase

* docs(assets): remove TODOs

* refactor(proxy): revert SmartContract ProxyType

* revert: e614927

* style(Cargo): revert format changes on dep comments

* chore(assets): apply feedback to tests

* chore(assets): removed unused type

* revert: fb92342

This reverts commit fb92342.

* docs(assets): better comments

* chore(assets): lower nfts deposit costs

* chore(assets): reduced deposit cost for AssetAccountDeposit

* chore(assets): use SDK's pallet_nfts

* chore(assets): better deposits & fmt Cargo

* chore(assets): better comments

* chore(assets): more explicit comments for deposits

* chore(assets): provide src for NftsCollectionDeposit deposit

* chore(assets): apply feedback
al3mart added a commit that referenced this pull request Feb 17, 2025
* refactor(mainnet): add governance & pallet_sudo tests (#443)

* refactor(mainnet): add governance & pallet_sudo tests

* refactor(sudo): sudo account defined in governance & unit test

fix(governance): make governance mod public & better sudo declaration

* refactor(mainnet): utility config (#438)

* refactor(mainnet): add pallet_multisig to utility

* test(mainnet): add pallet_multisig tests

* refactor(mainnet): add pallet_utility to utility

* test(mainnet): add pallet_utility tests

* refactor(mainnet): add pallet_preimage to utility

* test(mainnet): add pallet_preimage tests

* refactor(mainnet): add pallet_scheduler to utility

* test(mainnet): add pallet_scheduler tests

* refactor(mainnet): pallet_proxy config & tests (#441)

* refactor(mainnet): pallet_proxy config & tests

* style(proxy): tests follow config order

* refactor(proxy): remove asset related ProxyTypes

* refactor(proxy): update ProxyDepositBase price

* refactor(proxy): revert d3bfc6c and redefine ProxyType for mainnet

typo

* fix(proxy): amend proxy_has_deposit_base test

* docs(proxy): Clarify new ProxyType definition

* docs(proxy): add is_superset comments

* test(proxy): clarify deposit byte size lenght

* refactor(mainnet): system config (#442)

* refactor(mainnet): add frame_system to system

* test(mainnet): add pallet_system test

* fix(mainnet): rebase fixes

* fix(system): bring missing types in scope

* refactor(system): add cumulus_parachain_system to system config module

* test(system): add cumulus_parachain_system tests

* refactor(system): add parachain_info into system config module

* refactor(system): add pallet_timestamp into system config module

* style(system): add ConsensusHook comment

* refactor(system): separate tests by module

* docs(system): document public config modules

* fix(system): allow unused_imports to remove Executive warning

* refactor(system): reintroduce FilteredCalls

* style(system): get rid of test prefixes

* style(system): relocate max_block_weigth comment

* test(system): check for Hash type config

* docs(system): amend outdated comments

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

---------

Co-authored-by: Daan van der Plas <[email protected]>

* refactor(mainnet): monetary config (#440)

* refactor(mainnet): pallet_balances & fee constants

* test(mainnet): add pallet_balances tests

* refactor(mainnet): add pallet_transaction_payment to monetary config

* test(mainnet): add transaction_payment tests

* fix(mainnet): rebase fixes

* fix(monetary): don't burn dust

* refactor(monetary): use treasury account instead of sudo

remove extra clone

* refactor(monetary): use existential_deposit instead of UNIT in dust test

* refactor(monetary): Don't use DOLLARS & CENTS is defined in terms of UNITS

* fix(monetary): missing doc for fn deposit

* docs(monetary): remove src from docs

* docs(monetary): update TransactionByteFee comments

* refactor(monetary): reorg tests into modules

* style(monetary): remove confussing comment

* style(monetar): remove prefixes from tests

changes after rebase

more changes after reabse

* refactor(mainnet): collation config (#439)

* refactor(mainnet): add pallet_authorship to collation

* test(mainnet): add pallet_auhtorship test

* refactor(mainnet): add pallet_aura to collation

* test(mainnet): add pallet_aura tests

* refactor(mainnet): add collator_selection to collation

* test(mainnet): add collator_selection tests

* refactor(mainnet): add pallet_session & aura_ext to collation

* test(mainnet): add pallet_session tests

* chore(aura): MaxAuthorities matches max possible blocks produced

* remove unnused imports

* style(collation): order tests following pallet config

* style(collation): remove unnecessary qualifications

* style(collation): max_authorities_is_3600

* style(collation): reorg definition in session_keys_provided_by_aura test

* style(collation): better Period  comment

* style(collation): clarify session::SessionHandler comment

* refactor(collation): separate tests in modules by pallet

* style(collation): Explain SessionHandler config

fixes after rebase

* style(collation): remove prefixes from tests

* style(collation): Period comment was not helpful

changes after rebase

* style(utility): better test structure

style(utility): fmt

rebase

fmt

fmt

* refactor(mainnet): xcm config (#455)

* refactor(mainnet): rebase changes

* chore(mainnet): update Cargo.lock

* refactor(mainnet): utility config (#438)

* refactor(mainnet): add pallet_multisig to utility

* test(mainnet): add pallet_multisig tests

* refactor(mainnet): add pallet_utility to utility

* test(mainnet): add pallet_utility tests

* refactor(mainnet): add pallet_preimage to utility

* test(mainnet): add pallet_preimage tests

* refactor(mainnet): add pallet_scheduler to utility

* test(mainnet): add pallet_scheduler tests

* refactor(mainnet): system config (#442)

* refactor(mainnet): add frame_system to system

* test(mainnet): add pallet_system test

* fix(mainnet): rebase fixes

* fix(system): bring missing types in scope

* refactor(system): add cumulus_parachain_system to system config module

* test(system): add cumulus_parachain_system tests

* refactor(system): add parachain_info into system config module

* refactor(system): add pallet_timestamp into system config module

* style(system): add ConsensusHook comment

* refactor(system): separate tests by module

* docs(system): document public config modules

* fix(system): allow unused_imports to remove Executive warning

* refactor(system): reintroduce FilteredCalls

* style(system): get rid of test prefixes

* style(system): relocate max_block_weigth comment

* test(system): check for Hash type config

* docs(system): amend outdated comments

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/mod.rs

Co-authored-by: Daan van der Plas <[email protected]>

---------

Co-authored-by: Daan van der Plas <[email protected]>

* refactor(mainnet): collation config (#439)

* refactor(mainnet): add pallet_authorship to collation

* test(mainnet): add pallet_auhtorship test

* refactor(mainnet): add pallet_aura to collation

* test(mainnet): add pallet_aura tests

* refactor(mainnet): add collator_selection to collation

* test(mainnet): add collator_selection tests

* refactor(mainnet): add pallet_session & aura_ext to collation

* test(mainnet): add pallet_session tests

* chore(aura): MaxAuthorities matches max possible blocks produced

* remove unnused imports

* style(collation): order tests following pallet config

* style(collation): remove unnecessary qualifications

* style(collation): max_authorities_is_3600

* style(collation): reorg definition in session_keys_provided_by_aura test

* style(collation): better Period  comment

* style(collation): clarify session::SessionHandler comment

* refactor(collation): separate tests in modules by pallet

* style(collation): Explain SessionHandler config

fixes after rebase

* style(collation): remove prefixes from tests

* style(collation): Period comment was not helpful

changes after rebase

* refactor(xcm): add pallet_message_queue into xcm config module

* test(xcm): add message_queue tests

* test(xcm): test location, transactor and barrier type definitions

* refactor(xcm): include pallet_xcmp_queue into xcm config module

* test(xcm): add pallet_xcmp_queue configuration tests

* test(xcm): add xcm_executor configuration tests

* test(xcm): adding pallet_xcm config tests

* fix(xcm): typo

fix(xcm): XcmReserveTransferFilter is Everything

* refactor(xcm): use unitype for MaxRemoteLockConsumers

* style(xcm): tests separated in modules

* style(xcm): better naming for XcmTeleportFilter test

* style(xcm): test naming and order

* docs(xcm): clarifying comments for specific xcmp_queueu types

* style(xcm): typo

* style(xcm): better name for reserves tests

* refactor(xcm): Use `NativeAssetFrom<T>` as `XcmReserveTransferFilter` (#459)

* refactor(xcm): Use NativeAssetFrom<T> as XcmReserveTransferFilter

style:fmt

* fix(xcm): NativeAssetFrom<AssetHub> filters everything but DOT from AH

* fix(xcm): XcmReserveTransferFilter filters only by asset

fix

changes after rebase

fmt

* fix(xcm): remove waived locations (#456)

* fix(xcm): no locations are waived

* test(xcm): improved waived_location test

changes after rebase

* style(xcm): clarify that we are not waiving fees for any location

* fix(xcm): charge delivery fees (#457)

* resolve rebase conflicts

* fix(xcm): reserve_transfer_native_asset_from_para_to_system_para accounts for delivery fees

* fix(integration-tests): handle delivery_fees only with mainnet feature on

fmt after rebase

fmt

changes after rebase

fmt

fmt

* test(xcm): address feedback from #459

typos

AssetFilter

* style(xcm): locate reserve tests within executor

lint

* fix(integration-test): improve tests & remove feature gated compilation

unnecessary Fungibles

* refactor: integration tests mainnet xcm (#466)

* refactor: integration tests mainnet xcm

* fix: remove unused ED

rebase

fmt

fmt

* Update runtime/mainnet/src/config/xcm.rs

Co-authored-by: Daan van der Plas <[email protected]>

* refactor(xcm): use TreasuryAccount from monetary

* chore(xcm): unused imports

* chore(xcm): amend test modules

* chore(integration-tests): amend reserve_transfer_native_asset_from_para_to_system

* chore(xcm): divive reserve filter test in two

* chore(xcm): fmt

* style(integration-tests): fix unwanted indentation

* test(xcm): more focused unit tests

* Update runtime/mainnet/src/config/xcm.rs

Co-authored-by: Daan van der Plas <[email protected]>

* Update runtime/mainnet/src/config/xcm.rs

Co-authored-by: Daan van der Plas <[email protected]>

* fix(test): amend suggestions

---------

Co-authored-by: Daan van der Plas <[email protected]>

* feat(mainnet): introduce assets (#465)

* refactor(mainnet): include assets

fmt

refactor(collator): not necessary import

* test(assets): add nfts config unit tests

* refactor(proxy): Add assets & smart contract proxy type

* refactor(assets): implement nfts runtime api

* fix(pallet-nfts-api): workspace linters are not defined

* docs(assets): clarify deposits

* chore(proxy): improve usage of references

* docs(assets): update src reference

* chore(assets): update MetadataDepositBase

* docs(assets): remove TODOs

* refactor(proxy): revert SmartContract ProxyType

* revert: e614927

* style(Cargo): revert format changes on dep comments

* chore(assets): apply feedback to tests

* chore(assets): removed unused type

* revert: fb92342

This reverts commit fb92342.

* docs(assets): better comments

* chore(assets): lower nfts deposit costs

* chore(assets): reduced deposit cost for AssetAccountDeposit

* chore(assets): use SDK's pallet_nfts

* chore(assets): better deposits & fmt Cargo

* chore(assets): better comments

* chore(assets): more explicit comments for deposits

* chore(assets): provide src for NftsCollectionDeposit deposit

* chore(assets): apply feedback

* chore(monetary): clean unnecessary comments

* chore(utility): make deposit calc explicit. (#469)

chore(utility): explicit deposit justification

rebase fixes

* chore(proxy): reintroduce Asset related proxy types

* syle(proxy): Clarify proxy test comments

---------

Co-authored-by: Daan van der Plas <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants