Git Product home page Git Product logo

Comments (5)

h4x3rotab avatar h4x3rotab commented on September 12, 2024 1

Given there's already a reverse index available in uniques, I suggest to just keep using the upstream's. Very clever design: there's no Vec<>, and therefore the performance problem was walked around.

from rmrk-substrate.

HashWarlock avatar HashWarlock commented on September 12, 2024

Currently NftsByOwner is a StorageMap with a key of AccountId mapped to Vec<CollectionId, NftId>. We could use a StorageNMap similar to how uniques pallet handles their assets owned by an account:
Account

#[pallet::storage]
/// The assets held by any given account; set out this way so that assets owned by a single
/// account can be enumerated.
pub(super) type Account<T: Config<I>, I: 'static = ()> = StorageNMap<
	_,
	(
		NMapKey<Blake2_128Concat, T::AccountId>, // owner
		NMapKey<Blake2_128Concat, T::ClassId>,
		NMapKey<Blake2_128Concat, T::InstanceId>,
	),
	(),
	OptionQuery,
>;

remove & insert from the StorageNMap

Account::<T, I>::remove((&details.owner, &class, &instance));
Account::<T, I>::insert((&dest, &class, &instance), ());

owned

/// Returns an iterator of the asset instances of all classes owned by `who`.
///
/// NOTE: iterating this list invokes a storage read per item.
fn owned(who: &T::AccountId) -> Box<dyn Iterator<Item = (Self::ClassId, Self::InstanceId)>> {
	Box::new(Account::<T, I>::iter_key_prefix((who,)))
}

owned_in_class

/// Returns an iterator of the asset instances of `class` owned by `who`.
///
/// NOTE: iterating this list invokes a storage read per item.
fn owned_in_class(
	class: &Self::ClassId,
	who: &T::AccountId,
) -> Box<dyn Iterator<Item = Self::InstanceId>> {
	Box::new(Account::<T, I>::iter_key_prefix((who, class)))
}

from rmrk-substrate.

bmacer avatar bmacer commented on September 12, 2024

@h4x3rotab what is this reverse indexing available in uniques?

from rmrk-substrate.

h4x3rotab avatar h4x3rotab commented on September 12, 2024

@h4x3rotab what is this reverse indexing available in uniques?

This one. You can go through all the NFTs root-owned by its owner:

https://github.com/paritytech/substrate/blob/57bf92e42c2ca7f3444567b5ce50d2744fe90b4d/frame/uniques/src/lib.rs#L136

from rmrk-substrate.

bmacer avatar bmacer commented on September 12, 2024

NFtsByOwner removed in #91

from rmrk-substrate.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.