# Best practice for app discovery of shared objects?

**URL:** <https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689>\
**Category:** General\
**Created:** [June 4, 2024, 10:13pm UTC](https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689 "2024-06-04T22:13:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mdengler](https://dub1.discourse-cdn.com/sui/user_avatar/forums.sui.io/mdengler/32/30816_2.png) [@mdengler](https://forums.sui.io/u/mdengler)\
**Post date:** [June 4, 2024, 10:13pm UTC](https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689/1 "2024-06-04T22:13:54Z")

</div>

Hi,

I have a general question: what are some of the best ways to discover / look up shared objects?

For example, say I’m developing an app using the [Deepbook contract](h ttps://docs.sui.io/deepbook-design) and I (as the app developer) want to create `Pool<..>` objects for use by other users of my app (and possibly even of Deepbook).

After I create such `Pool<..>` s:

1. It would appear there is no easy way an instance of my app – running, say, on a user’s phone – to discover the `objectId` s of the created `Pool<..>` s; my app would have to hard code those `objectId` s, or perhaps my app would touch a REST endpoint to fetch the latest list of `objectID` s. Is there a better way? A GraphQL query of all `Pool<..>` objects now shared that were created by my Move package?

2. Management of new, retired, in-use `Pool<..>` s seems cumbersome; have any solutions become popular or even supported by Sui primitives? For example, an `AccountCap` can be obsoleted – revoked, effectively – just by creating a new one; it’s not clear what approach would be best for new shared objects like `Pool<..>` s. Any good approaches out there?

As further example, it should be clear why, given a Move function that does:

```auto
[...]
        let (pool, pool_owner_cap) = create_pool_with_return_<BaseAsset, QuoteAsset>(
          [...]
        );

        transfer::public_transfer(pool_owner_cap, tx_context::sender(ctx));
        transfer::share_object(pool);
    }

```

…this python `[pysui/suix_GetOwnedObjects](https://docs.sui.io/sui-api-ref#suix_getownedobjects)`-using code will fail to discover the `Pool<..>`:

```python
def find_objects(client, sui_type, address_owner=None, ordered_by_type_version=True):
    find_results = client.get_objects(address=address_owner) # uses h ttps://docs.sui.io/sui-api-ref#suix_getownedobjects
[...]

```

---

<div class="post-metadata">

**Author:** ![mdengler](https://dub1.discourse-cdn.com/sui/user_avatar/forums.sui.io/mdengler/32/30816_2.png) [@mdengler](https://forums.sui.io/u/mdengler)\
**Post date:** [June 4, 2024, 10:14pm UTC](https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689/2 "2024-06-04T22:14:28Z")

</div>

(Sorry for the broken links but the forum won’t let me include links 😕 )

---

<div class="post-metadata">

**Author:** ![kevink](https://dub1.discourse-cdn.com/sui/user_avatar/forums.sui.io/kevink/32/31553_2.png) [@kevink](https://forums.sui.io/u/kevink)\
**Post date:** [July 29, 2025, 2:49pm UTC](https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689/5 "2025-07-29T14:49:28Z")

</div>

Did you find a good practice?

---

<div class="post-metadata">

**Author:** ![mdengler](https://dub1.discourse-cdn.com/sui/user_avatar/forums.sui.io/mdengler/32/30816_2.png) [@mdengler](https://forums.sui.io/u/mdengler)\
**Post date:** [May 1, 2026, 6:44pm UTC](https://forums.sui.io/t/best-practice-for-app-discovery-of-shared-objects/45689/6 "2026-05-01T18:44:19Z")

</div>

No – and I don’t understand why the question remains :). I think there are “indexer”-like solutions people are using, or there are hardcoded suinames/addresses handled by tooling, but that just feels really awkward.
