Skip to main content

Module sui::kiosk

Kiosk is a primitive for building safe, decentralized and trustless trading experiences. It allows storing and trading any types of assets as long as the creator of these assets implements a TransferPolicy for them.

Principles and philosophy:

  • Kiosk provides guarantees of "true ownership"; - just like single owner objects, assets stored in the Kiosk can only be managed by the Kiosk owner. Only the owner can place, take, list, perform any other actions on assets in the Kiosk.

  • Kiosk aims to be generic - allowing for a small set of default behaviors and not imposing any restrictions on how the assets can be traded. The only default scenario is a list + purchase flow; any other trading logic can be implemented on top using the list_with_purchase_cap (and a matching purchase_with_cap) flow.

  • For every transaction happening with a third party a TransferRequest is created - this way creators are fully in control of the trading experience.

Asset states in the Kiosk:

  • placed - An asset is placed into the Kiosk and can be taken out by the Kiosk owner; it's freely tradable and modifiable via the borrow_mut and borrow_val functions.

  • locked - Similar to placed except that take is disabled and the only way to move the asset out of the Kiosk is to list it or list_with_purchase_cap therefore performing a trade (issuing a TransferRequest). The check on the lock function makes sure that the TransferPolicy exists to not lock the item in a Kiosk forever.

  • listed - A placed or a locked item can be listed for a fixed price allowing anyone to purchase it from the Kiosk. While listed, an item can not be taken or modified. However, an immutable borrow via borrow call is still available. The delist function returns the asset to the previous state.

  • listed_exclusively - An item is listed via the list_with_purchase_cap function (and a PurchaseCap is created). While listed this way, an item can not be delist-ed unless a PurchaseCap is returned. All actions available at this item state require a PurchaseCap:

  1. purchase_with_cap - to purchase the item for a price equal or higher than the min_price set in the PurchaseCap.
  2. return_purchase_cap - to return the PurchaseCap and return the asset into the previous state.

When an item is listed exclusively it cannot be modified nor taken and losing a PurchaseCap would lock the item in the Kiosk forever. Therefore, it is recommended to only use PurchaseCap functionality in trusted applications and not use it for direct trading (eg sending to another account).

<a style='scroll-margin-top:80px' id="@Using_multiple_Transfer_Policies_for_different_"tracks":_2">

Using multiple Transfer Policies for different "tracks":

Every purchase or purchase_with_purchase_cap creates a TransferRequest hot potato which must be resolved in a matching TransferPolicy for the transaction to pass. While the default scenario implies that there should be a single TransferPolicy<T> for T; it is possible to have multiple, each one having its own set of rules.

Examples:

  • I create one TransferPolicy with "Royalty Rule" for everyone
  • I create a special TransferPolicy for bearers of a "Club Membership" object so they don't have to pay anything
  • I create and wrap a TransferPolicy so that players of my game can transfer items between Kiosks in game without any charge (and maybe not even paying the price with a 0 SUI PurchaseCap)
Kiosk -> (Item, TransferRequest)
... TransferRequest ------> Common Transfer Policy
... TransferRequest ------> In-game Wrapped Transfer Policy
... TransferRequest ------> Club Membership Transfer Policy
```move

See <a href="../sui/transfer_policy#sui_transfer_policy">transfer_policy</a> module for more details on how they function.


- [Principles and philosophy:](#@Principles_and_philosophy:_0)
- [Asset states in the Kiosk:](#@Asset_states_in_the_Kiosk:_1)
- [Using multiple Transfer Policies for different "tracks":](#@Using_multiple_Transfer_Policies_for_different_"tracks":_2)
- [Examples:](#@Examples:_3)
- [Struct `Kiosk`](#sui_kiosk_Kiosk)
- [Struct `KioskOwnerCap`](#sui_kiosk_KioskOwnerCap)
- [Struct `PurchaseCap`](#sui_kiosk_PurchaseCap)
- [Struct `Borrow`](#sui_kiosk_Borrow)
- [Struct `Item`](#sui_kiosk_Item)
- [Struct `Listing`](#sui_kiosk_Listing)
- [Struct `Lock`](#sui_kiosk_Lock)
- [Struct `ItemListed`](#sui_kiosk_ItemListed)
- [Struct `ItemPurchased`](#sui_kiosk_ItemPurchased)
- [Struct `ItemDelisted`](#sui_kiosk_ItemDelisted)
- [Constants](#@Constants_4)
- [Function `default`](#sui_kiosk_default)
- [Function `new`](#sui_kiosk_new)
- [Function `close_and_withdraw`](#sui_kiosk_close_and_withdraw)
- [Function `set_owner`](#sui_kiosk_set_owner)
- [Function `set_owner_custom`](#sui_kiosk_set_owner_custom)
- [Function `place`](#sui_kiosk_place)
- [Function `lock`](#sui_kiosk_lock)
- [Function `take`](#sui_kiosk_take)
- [Function `list`](#sui_kiosk_list)
- [Function `place_and_list`](#sui_kiosk_place_and_list)
- [Function `delist`](#sui_kiosk_delist)
- [Function `purchase`](#sui_kiosk_purchase)
- [Function `list_with_purchase_cap`](#sui_kiosk_list_with_purchase_cap)
- [Function `purchase_with_cap`](#sui_kiosk_purchase_with_cap)
- [Function `return_purchase_cap`](#sui_kiosk_return_purchase_cap)
- [Function `withdraw`](#sui_kiosk_withdraw)
- [Function `lock_internal`](#sui_kiosk_lock_internal)
- [Function `place_internal`](#sui_kiosk_place_internal)
- [Function `uid_mut_internal`](#sui_kiosk_uid_mut_internal)
- [Function `has_item`](#sui_kiosk_has_item)
- [Function `has_item_with_type`](#sui_kiosk_has_item_with_type)
- [Function `is_locked`](#sui_kiosk_is_locked)
- [Function `is_listed`](#sui_kiosk_is_listed)
- [Function `is_listed_exclusively`](#sui_kiosk_is_listed_exclusively)
- [Function `has_access`](#sui_kiosk_has_access)
- [Function `uid_mut_as_owner`](#sui_kiosk_uid_mut_as_owner)
- [Function `set_allow_extensions`](#sui_kiosk_set_allow_extensions)
- [Function `uid`](#sui_kiosk_uid)
- [Function `uid_mut`](#sui_kiosk_uid_mut)
- [Function `owner`](#sui_kiosk_owner)
- [Function `item_count`](#sui_kiosk_item_count)
- [Function `profits_amount`](#sui_kiosk_profits_amount)
- [Function `profits_mut`](#sui_kiosk_profits_mut)
- [Function `borrow`](#sui_kiosk_borrow)
- [Function `borrow_mut`](#sui_kiosk_borrow_mut)
- [Function `borrow_val`](#sui_kiosk_borrow_val)
- [Function `return_val`](#sui_kiosk_return_val)
- [Function `kiosk_owner_cap_for`](#sui_kiosk_kiosk_owner_cap_for)
- [Function `purchase_cap_kiosk`](#sui_kiosk_purchase_cap_kiosk)
- [Function `purchase_cap_item`](#sui_kiosk_purchase_cap_item)
- [Function `purchase_cap_min_price`](#sui_kiosk_purchase_cap_min_price)


<pre><code><b>use</b> <a href="../std/address#std_address">std::address</a>;
<b>use</b> <a href="../std/ascii#std_ascii">std::ascii</a>;
<b>use</b> <a href="../std/bcs#std_bcs">std::bcs</a>;
<b>use</b> <a href="../std/option#std_option">std::option</a>;
<b>use</b> <a href="../std/string#std_string">std::string</a>;
<b>use</b> <a href="../std/type_name#std_type_name">std::type_name</a>;
<b>use</b> <a href="../std/vector#std_vector">std::vector</a>;
<b>use</b> <a href="../sui/accumulator#sui_accumulator">sui::accumulator</a>;
<b>use</b> <a href="../sui/address#sui_address">sui::address</a>;
<b>use</b> <a href="../sui/bag#sui_bag">sui::bag</a>;
<b>use</b> <a href="../sui/balance#sui_balance">sui::balance</a>;
<b>use</b> <a href="../sui/coin#sui_coin">sui::coin</a>;
<b>use</b> <a href="../sui/config#sui_config">sui::config</a>;
<b>use</b> <a href="../sui/deny_list#sui_deny_list">sui::deny_list</a>;
<b>use</b> <a href="../sui/dynamic_field#sui_dynamic_field">sui::dynamic_field</a>;
<b>use</b> <a href="../sui/dynamic_object_field#sui_dynamic_object_field">sui::dynamic_object_field</a>;
<b>use</b> <a href="../sui/event#sui_event">sui::event</a>;
<b>use</b> <a href="../sui/hex#sui_hex">sui::hex</a>;
<b>use</b> <a href="../sui/object#sui_object">sui::object</a>;
<b>use</b> <a href="../sui/package#sui_package">sui::package</a>;
<b>use</b> <a href="../sui/party#sui_party">sui::party</a>;
<b>use</b> <a href="../sui/sui#sui_sui">sui::sui</a>;
<b>use</b> <a href="../sui/table#sui_table">sui::table</a>;
<b>use</b> <a href="../sui/transfer#sui_transfer">sui::transfer</a>;
<b>use</b> <a href="../sui/transfer_policy#sui_transfer_policy">sui::transfer_policy</a>;
<b>use</b> <a href="../sui/tx_context#sui_tx_context">sui::tx_context</a>;
<b>use</b> <a href="../sui/types#sui_types">sui::types</a>;
<b>use</b> <a href="../sui/url#sui_url">sui::url</a>;
<b>use</b> <a href="../sui/vec_map#sui_vec_map">sui::vec_map</a>;
<b>use</b> <a href="../sui/vec_set#sui_vec_set">sui::vec_set</a>;
</code></pre>



## Struct `Kiosk` \{#sui_kiosk_Kiosk}

An object which allows selling collectibles within "kiosk" ecosystem.
By default gives the functionality to list an item openly - for anyone
to purchase providing the guarantees for creators that every transfer
needs to be approved via the TransferPolicy.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> <b>has</b> key, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</dt>
<dd>
</dd>
<dt>
profits: <a href="../sui/balance#sui_balance_Balance">sui::balance::Balance</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;
</dt>
<dd>
Balance of the Kiosk - all profits from sales go here.
</dd>
<dt>
<a href="../sui/kiosk#sui_kiosk_owner">owner</a>: <b>address</b>
</dt>
<dd>
Always point to sender of the transaction.
Can be changed by calling <a href="../sui/kiosk#sui_kiosk_set_owner">set_owner</a> with Cap.
</dd>
<dt>
<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>: u32
</dt>
<dd>
Number of items stored in a Kiosk. Used to allow unpacking
an empty Kiosk if it was wrapped or has a single owner.
</dd>
<dt>
allow_extensions: bool
</dt>
<dd>
[DEPRECATED] Please, don't use the allow_extensions and the matching
<a href="../sui/kiosk#sui_kiosk_set_allow_extensions">set_allow_extensions</a> function - it is a legacy feature that is being
replaced by the <a href="../sui/kiosk_extension#sui_kiosk_extension">kiosk_extension</a> module and its Extensions API.
Exposes <a href="../sui/kiosk#sui_kiosk_uid_mut">uid_mut</a> publicly when set to <b>true</b>, set to <b>false</b> by default.
</dd>
</dl>


</details>

## Struct `KioskOwnerCap` \{#sui_kiosk_KioskOwnerCap}

A Capability granting the bearer a right to <a href="../sui/kiosk#sui_kiosk_place">place</a> and <a href="../sui/kiosk#sui_kiosk_take">take</a> items
from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> as well as to <a href="../sui/kiosk#sui_kiosk_list">list</a> them and <a href="../sui/kiosk#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a>.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> <b>has</b> key, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</dt>
<dd>
</dd>
<dt>
<b>for</b>: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `PurchaseCap` \{#sui_kiosk_PurchaseCap}

A capability which locks an item and gives a permission to
purchase it from a <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> for any price no less than min_price.

Allows exclusive listing: only bearer of the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> can
purchase the asset. However, the capability should be used
carefully as losing it would lock the asset in the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.

The main application for the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> is building extensions
on top of the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;<b>phantom</b> T: key, store&gt; <b>has</b> key, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</dt>
<dd>
</dd>
<dt>
kiosk_id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
ID of the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> the cap belongs to.
</dd>
<dt>
item_id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
ID of the listed item.
</dd>
<dt>
min_price: u64
</dt>
<dd>
Minimum price for which the item can be purchased.
</dd>
</dl>


</details>

## Struct `Borrow` \{#sui_kiosk_Borrow}

Hot potato to ensure an item was returned after being taken using
the <a href="../sui/kiosk#sui_kiosk_borrow_val">borrow_val</a> call.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a>
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
kiosk_id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
item_id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `Item` \{#sui_kiosk_Item}

Dynamic field key for an item placed into the kiosk.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_Item">Item</a> <b>has</b> <b>copy</b>, drop, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `Listing` \{#sui_kiosk_Listing}

Dynamic field key for an active offer to purchase the T. If an
item is listed without a <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>, exclusive is set to <b>false</b>.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> <b>has</b> <b>copy</b>, drop, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
is_exclusive: bool
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `Lock` \{#sui_kiosk_Lock}

Dynamic field key which marks that an item is locked in the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> and
can't be <a href="../sui/kiosk#sui_kiosk_take">take</a>n. The item then can only be listed / sold via the PurchaseCap.
Lock is released on <a href="../sui/kiosk#sui_kiosk_purchase">purchase</a>.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> <b>has</b> <b>copy</b>, drop, store
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `ItemListed` \{#sui_kiosk_ItemListed}

Emitted when an item was listed by the safe owner. Can be used
to track available offers anywhere on the network; the event is
type-indexed which allows for searching for offers of a specific T


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_ItemListed">ItemListed</a>&lt;<b>phantom</b> T: key, store&gt; <b>has</b> <b>copy</b>, drop
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
<a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
price: u64
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `ItemPurchased` \{#sui_kiosk_ItemPurchased}

Emitted when an item was purchased from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>. Can be used
to track finalized sales across the network. The event is emitted
in both cases: when an item is purchased via the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> or
when it's purchased directly (via <a href="../sui/kiosk#sui_kiosk_list">list</a> + <a href="../sui/kiosk#sui_kiosk_purchase">purchase</a>).

The price is also emitted and might differ from the price set
in the <a href="../sui/kiosk#sui_kiosk_ItemListed">ItemListed</a> event. This is because the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> only
sets a minimum price for the item, and the actual price is defined
by the trading module / extension.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_ItemPurchased">ItemPurchased</a>&lt;<b>phantom</b> T: key, store&gt; <b>has</b> <b>copy</b>, drop
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
<a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
price: u64
</dt>
<dd>
</dd>
</dl>


</details>

## Struct `ItemDelisted` \{#sui_kiosk_ItemDelisted}

Emitted when an item was delisted by the safe owner. Can be used
to close tracked offers.


<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk#sui_kiosk_ItemDelisted">ItemDelisted</a>&lt;<b>phantom</b> T: key, store&gt; <b>has</b> <b>copy</b>, drop
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
<a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
<dt>
id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</dt>
<dd>
</dd>
</dl>


</details>

<a style='scroll-margin-top:80px' id="@Constants_4"></a>

## Constants


<a style='scroll-margin-top:80px' id="sui_kiosk_ENotOwner"></a>

Trying to withdraw profits and sender is not owner.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>: u64 = 0;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EIncorrectAmount"></a>

Coin paid does not match the offer price.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>: u64 = 1;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_ENotEnough"></a>

Trying to withdraw higher amount than stored.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_ENotEnough">ENotEnough</a>: u64 = 2;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_ENotEmpty"></a>

Trying to close a Kiosk and it has items in it.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_ENotEmpty">ENotEmpty</a>: u64 = 3;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EListedExclusively"></a>

Attempt to take an item that has a <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> issued.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EListedExclusively">EListedExclusively</a>: u64 = 4;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EWrongKiosk"></a>

<a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> does not match the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EWrongKiosk">EWrongKiosk</a>: u64 = 5;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EAlreadyListed"></a>

Trying to exclusively list an already listed item.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EAlreadyListed">EAlreadyListed</a>: u64 = 6;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EUidAccessNotAllowed"></a>

Trying to call <a href="../sui/kiosk#sui_kiosk_uid_mut">uid_mut</a> when allow_extensions set to false.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EUidAccessNotAllowed">EUidAccessNotAllowed</a>: u64 = 7;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EItemLocked"></a>

Attempt to <a href="../sui/kiosk#sui_kiosk_take">take</a> an item that is locked.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EItemLocked">EItemLocked</a>: u64 = 8;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EItemIsListed"></a>

Taking or mutably borrowing an item that is listed.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EItemIsListed">EItemIsListed</a>: u64 = 9;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EItemMismatch"></a>

Item does not match <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a> in <a href="../sui/kiosk#sui_kiosk_return_val">return_val</a>.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EItemMismatch">EItemMismatch</a>: u64 = 10;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_EItemNotFound"></a>

An is not found while trying to borrow.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>: u64 = 11;
</code></pre>



<a style='scroll-margin-top:80px' id="sui_kiosk_ENotListed"></a>

Delisting an item that is not listed.


<pre><code><b>const</b> <a href="../sui/kiosk#sui_kiosk_ENotListed">ENotListed</a>: u64 = 12;
</code></pre>



## Function `default` \{#sui_kiosk_default}

Creates a new Kiosk in a default configuration: sender receives the
<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> and becomes the Owner, the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> is shared.


<pre><code><b>entry</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_default">default</a>(ctx: &<b>mut</b> <a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>entry</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_default">default</a>(ctx: &<b>mut</b> TxContext) {
<b>let</b> (<a href="../sui/kiosk#sui_kiosk">kiosk</a>, cap) = <a href="../sui/kiosk#sui_kiosk_new">new</a>(ctx);
<a href="../sui/transfer#sui_transfer_transfer">sui::transfer::transfer</a>(cap, ctx.sender());
<a href="../sui/transfer#sui_transfer_share_object">sui::transfer::share_object</a>(<a href="../sui/kiosk#sui_kiosk">kiosk</a>);
}
</code></pre>



</details>

## Function `new` \{#sui_kiosk_new}

Creates a new <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> with a matching <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_new">new</a>(ctx: &<b>mut</b> <a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): (<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_new">new</a>(ctx: &<b>mut</b> TxContext): (<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>) {
<b>let</b> <a href="../sui/kiosk#sui_kiosk">kiosk</a> = <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> {
id: <a href="../sui/object#sui_object_new">object::new</a>(ctx),
profits: <a href="../sui/balance#sui_balance_zero">balance::zero</a>(),
<a href="../sui/kiosk#sui_kiosk_owner">owner</a>: ctx.sender(),
<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>: 0,
allow_extensions: <b>false</b>,
};
<b>let</b> cap = <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> {
id: <a href="../sui/object#sui_object_new">object::new</a>(ctx),
`<b>for</b>`: <a href="../sui/object#sui_object_id">object::id</a>(&<a href="../sui/kiosk#sui_kiosk">kiosk</a>),
};
(<a href="../sui/kiosk#sui_kiosk">kiosk</a>, cap)
}
</code></pre>



</details>

## Function `close_and_withdraw` \{#sui_kiosk_close_and_withdraw}

Unpacks and destroys a Kiosk returning the profits (even if "0").
Can only be performed by the bearer of the <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> in the
case where there's no items inside and a <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> is not shared.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_close_and_withdraw">close_and_withdraw</a>(self: <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, ctx: &<b>mut</b> <a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/coin#sui_coin_Coin">sui::coin::Coin</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_close_and_withdraw">close_and_withdraw</a>(self: <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, ctx: &<b>mut</b> TxContext): Coin&lt;SUI&gt; {
<b>let</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> { id, profits, <a href="../sui/kiosk#sui_kiosk_owner">owner</a>: _, <a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>, allow_extensions: _ } = self;
<b>let</b> <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> { id: cap_id, `<b>for</b>` } = cap;
<b>assert</b>!(id.to_inner() == `<b>for</b>`, <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> == 0, <a href="../sui/kiosk#sui_kiosk_ENotEmpty">ENotEmpty</a>);
cap_id.delete();
id.delete();
profits.into_coin(ctx)
}
</code></pre>



</details>

## Function `set_owner` \{#sui_kiosk_set_owner}

Change the <a href="../sui/kiosk#sui_kiosk_owner">owner</a> field to the transaction sender.
The change is purely cosmetical and does not affect any of the
basic kiosk functions unless some logic for this is implemented
in a third party module.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_owner">set_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, ctx: &<a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_owner">set_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, ctx: &TxContext) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
self.<a href="../sui/kiosk#sui_kiosk_owner">owner</a> = ctx.sender();
}
</code></pre>



</details>

## Function `set_owner_custom` \{#sui_kiosk_set_owner_custom}

Update the <a href="../sui/kiosk#sui_kiosk_owner">owner</a> field with a custom address. Can be used for
implementing a custom logic that relies on the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> owner.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_owner_custom">set_owner_custom</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, <a href="../sui/kiosk#sui_kiosk_owner">owner</a>: <b>address</b>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_owner_custom">set_owner_custom</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, <a href="../sui/kiosk#sui_kiosk_owner">owner</a>: <b>address</b>) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
self.<a href="../sui/kiosk#sui_kiosk_owner">owner</a> = <a href="../sui/kiosk#sui_kiosk_owner">owner</a>
}
</code></pre>



</details>

## Function `place` \{#sui_kiosk_place}

Place any object into a Kiosk.
Performs an authorization check to make sure only owner can do that.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place">place</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, item: T)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place">place</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, item: T) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
self.<a href="../sui/kiosk#sui_kiosk_place_internal">place_internal</a>(item)
}
</code></pre>



</details>

## Function `lock` \{#sui_kiosk_lock}

Place an item to the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> and issue a <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> for it. Once placed this
way, an item can only be listed either with a <a href="../sui/kiosk#sui_kiosk_list">list</a> function or with a
<a href="../sui/kiosk#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a>.

Requires policy for T to make sure that there's an issued TransferPolicy
and the item can be sold, otherwise the asset might be locked forever.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_lock">lock</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, _policy: &<a href="../sui/transfer_policy#sui_transfer_policy_TransferPolicy">sui::transfer_policy::TransferPolicy</a>&lt;T&gt;, item: T)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_lock">lock</a>&lt;T: key + store&gt;(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>,
_policy: &TransferPolicy&lt;T&gt;,
item: T,
) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
self.<a href="../sui/kiosk#sui_kiosk_lock_internal">lock_internal</a>(item)
}
</code></pre>



</details>

## Function `take` \{#sui_kiosk_take}

Take any object from the Kiosk.
Performs an authorization check to make sure only owner can do that.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_take">take</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): T
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_take">take</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): T {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_locked">is_locked</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemLocked">EItemLocked</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk#sui_kiosk_EListedExclusively">EListedExclusively</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> - 1;
df::remove_if_exists&lt;<a href="../sui/kiosk#sui_kiosk_Listing">Listing</a>, u64&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> });
dof::remove(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id })
}
</code></pre>



</details>

## Function `list` \{#sui_kiosk_list}

List the item by setting a price and making it available for purchase.
Performs an authorization check to make sure only owner can sell.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_list">list</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>, price: u64)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_list">list</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID, price: u64) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item_with_type">has_item_with_type</a>&lt;T&gt;(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk#sui_kiosk_EListedExclusively">EListedExclusively</a>);
df::add(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }, price);
<a href="../sui/event#sui_event_emit">event::emit</a>(<a href="../sui/kiosk#sui_kiosk_ItemListed">ItemListed</a>&lt;T&gt; { <a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_id">object::id</a>(self), id, price })
}
</code></pre>



</details>

## Function `place_and_list` \{#sui_kiosk_place_and_list}

Calls <a href="../sui/kiosk#sui_kiosk_place">place</a> and <a href="../sui/kiosk#sui_kiosk_list">list</a> together - simplifies the flow.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place_and_list">place_and_list</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, item: T, price: u64)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place_and_list">place_and_list</a>&lt;T: key + store&gt;(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>,
item: T,
price: u64,
) {
<b>let</b> id = <a href="../sui/object#sui_object_id">object::id</a>(&item);
self.<a href="../sui/kiosk#sui_kiosk_place">place</a>(cap, item);
self.<a href="../sui/kiosk#sui_kiosk_list">list</a>&lt;T&gt;(cap, id, price)
}
</code></pre>



</details>

## Function `delist` \{#sui_kiosk_delist}

Remove an existing listing from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> and keep the item in the
user Kiosk. Can only be performed by the owner of the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_delist">delist</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_delist">delist</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item_with_type">has_item_with_type</a>&lt;T&gt;(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk#sui_kiosk_EListedExclusively">EListedExclusively</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk#sui_kiosk_ENotListed">ENotListed</a>);
df::remove&lt;<a href="../sui/kiosk#sui_kiosk_Listing">Listing</a>, u64&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> });
<a href="../sui/event#sui_event_emit">event::emit</a>(<a href="../sui/kiosk#sui_kiosk_ItemDelisted">ItemDelisted</a>&lt;T&gt; { <a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_id">object::id</a>(self), id })
}
</code></pre>



</details>

## Function `purchase` \{#sui_kiosk_purchase}

Make a trade: pay the owner of the item and request a Transfer to the target
kiosk (to prevent item being taken by the approving party).

Received TransferRequest needs to be handled by the publisher of the T,
if they have a method implemented that allows a trade, it is possible to
request their approval (by calling some function) so that the trade can be
finalized.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase">purchase</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>, payment: <a href="../sui/coin#sui_coin_Coin">sui::coin::Coin</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;): (T, <a href="../sui/transfer_policy#sui_transfer_policy_TransferRequest">sui::transfer_policy::TransferRequest</a>&lt;T&gt;)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase">purchase</a>&lt;T: key + store&gt;(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
id: ID,
payment: Coin&lt;SUI&gt;,
): (T, TransferRequest&lt;T&gt;) {
<b>let</b> price = df::remove&lt;<a href="../sui/kiosk#sui_kiosk_Listing">Listing</a>, u64&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> });
<b>let</b> inner = dof::remove&lt;<a href="../sui/kiosk#sui_kiosk_Item">Item</a>, T&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id });
self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> - 1;
<b>assert</b>!(price == payment.value(), <a href="../sui/kiosk#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>);
df::remove_if_exists&lt;<a href="../sui/kiosk#sui_kiosk_Lock">Lock</a>, bool&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> { id });
<a href="../sui/coin#sui_coin_put">coin::put</a>(&<b>mut</b> self.profits, payment);
<a href="../sui/event#sui_event_emit">event::emit</a>(<a href="../sui/kiosk#sui_kiosk_ItemPurchased">ItemPurchased</a>&lt;T&gt; { <a href="../sui/kiosk#sui_kiosk">kiosk</a>: <a href="../sui/object#sui_object_id">object::id</a>(self), id, price });
(inner, <a href="../sui/transfer_policy#sui_transfer_policy_new_request">transfer_policy::new_request</a>(id, price, <a href="../sui/object#sui_object_id">object::id</a>(self)))
}
</code></pre>



</details>

## Function `list_with_purchase_cap` \{#sui_kiosk_list_with_purchase_cap}

Creates a <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> which gives the right to purchase an item
for any price equal or higher than the min_price.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>, min_price: u64, ctx: &<b>mut</b> <a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a>&lt;T: key + store&gt;(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>,
id: ID,
min_price: u64,
ctx: &<b>mut</b> TxContext,
): <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt; {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item_with_type">has_item_with_type</a>&lt;T&gt;(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk#sui_kiosk_EAlreadyListed">EAlreadyListed</a>);
df::add(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> }, min_price);
<a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt; {
min_price,
item_id: id,
id: <a href="../sui/object#sui_object_new">object::new</a>(ctx),
kiosk_id: <a href="../sui/object#sui_object_id">object::id</a>(self),
}
}
</code></pre>



</details>

## Function `purchase_with_cap` \{#sui_kiosk_purchase_with_cap}

Unpack the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> and call <a href="../sui/kiosk#sui_kiosk_purchase">purchase</a>. Sets the payment amount
as the price for the listing making sure it's no less than min_amount.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_with_cap">purchase_with_cap</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, purchase_cap: <a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;, payment: <a href="../sui/coin#sui_coin_Coin">sui::coin::Coin</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;): (T, <a href="../sui/transfer_policy#sui_transfer_policy_TransferRequest">sui::transfer_policy::TransferRequest</a>&lt;T&gt;)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_with_cap">purchase_with_cap</a>&lt;T: key + store&gt;(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
purchase_cap: <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt;,
payment: Coin&lt;SUI&gt;,
): (T, TransferRequest&lt;T&gt;) {
<b>let</b> <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> { id, item_id, kiosk_id, min_price } = purchase_cap;
id.delete();
<b>let</b> id = item_id;
<b>let</b> paid = payment.value();
<b>assert</b>!(paid &gt;= min_price, <a href="../sui/kiosk#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>);
<b>assert</b>!(<a href="../sui/object#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk#sui_kiosk_EWrongKiosk">EWrongKiosk</a>);
df::remove&lt;<a href="../sui/kiosk#sui_kiosk_Listing">Listing</a>, u64&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> });
<a href="../sui/coin#sui_coin_put">coin::put</a>(&<b>mut</b> self.profits, payment);
self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> - 1;
df::remove_if_exists&lt;<a href="../sui/kiosk#sui_kiosk_Lock">Lock</a>, bool&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> { id });
<b>let</b> item = dof::remove&lt;<a href="../sui/kiosk#sui_kiosk_Item">Item</a>, T&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id });
(item, <a href="../sui/transfer_policy#sui_transfer_policy_new_request">transfer_policy::new_request</a>(id, paid, <a href="../sui/object#sui_object_id">object::id</a>(self)))
}
</code></pre>



</details>

## Function `return_purchase_cap` \{#sui_kiosk_return_purchase_cap}

Return the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> without making a purchase; remove an active offer and
allow the item for taking. Can only be returned to its <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, aborts otherwise.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_return_purchase_cap">return_purchase_cap</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, purchase_cap: <a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_return_purchase_cap">return_purchase_cap</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, purchase_cap: <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt;) {
<b>let</b> <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> { id, item_id, kiosk_id, min_price: _ } = purchase_cap;
<b>assert</b>!(<a href="../sui/object#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk#sui_kiosk_EWrongKiosk">EWrongKiosk</a>);
df::remove&lt;<a href="../sui/kiosk#sui_kiosk_Listing">Listing</a>, u64&gt;(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id: item_id, is_exclusive: <b>true</b> });
id.delete()
}
</code></pre>



</details>

## Function `withdraw` \{#sui_kiosk_withdraw}

Withdraw profits from the Kiosk.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_withdraw">withdraw</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, amount: <a href="../std/option#std_option_Option">std::option::Option</a>&lt;u64&gt;, ctx: &<b>mut</b> <a href="../sui/tx_context#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/coin#sui_coin_Coin">sui::coin::Coin</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_withdraw">withdraw</a>(
self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>,
cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>,
amount: Option&lt;u64&gt;,
ctx: &<b>mut</b> TxContext,
): Coin&lt;SUI&gt; {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>let</b> amount = <b>if</b> (amount.is_some()) {
<b>let</b> amt = amount.destroy_some();
<b>assert</b>!(amt &lt;= self.profits.value(), <a href="../sui/kiosk#sui_kiosk_ENotEnough">ENotEnough</a>);
amt
} <b>else</b> {
self.profits.value()
};
<a href="../sui/coin#sui_coin_take">coin::take</a>(&<b>mut</b> self.profits, amount, ctx)
}
</code></pre>



</details>

## Function `lock_internal` \{#sui_kiosk_lock_internal}

Internal: "lock" an item disabling the <a href="../sui/kiosk#sui_kiosk_take">take</a> action.


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_lock_internal">lock_internal</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_lock_internal">lock_internal</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, item: T) {
df::add(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> { id: <a href="../sui/object#sui_object_id">object::id</a>(&item) }, <b>true</b>);
self.<a href="../sui/kiosk#sui_kiosk_place_internal">place_internal</a>(item)
}
</code></pre>



</details>

## Function `place_internal` \{#sui_kiosk_place_internal}

Internal: "place" an item to the Kiosk and increment the item count.


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place_internal">place_internal</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_place_internal">place_internal</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, item: T) {
self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a> + 1;
dof::add(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id: <a href="../sui/object#sui_object_id">object::id</a>(&item) }, item)
}
</code></pre>



</details>

## Function `uid_mut_internal` \{#sui_kiosk_uid_mut_internal}

Internal: get a mutable access to the UID.


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut_internal">uid_mut_internal</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<b>mut</b> <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b>(<a href="../sui/package#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut_internal">uid_mut_internal</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): &<b>mut</b> UID {
&<b>mut</b> self.id
}
</code></pre>



</details>

## Function `has_item` \{#sui_kiosk_has_item}

Check whether the item is present in the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool {
dof::exists_(&self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id })
}
</code></pre>



</details>

## Function `has_item_with_type` \{#sui_kiosk_has_item_with_type}

Check whether the item is present in the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> and has type T.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_item_with_type">has_item_with_type</a>&lt;T: key, store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_item_with_type">has_item_with_type</a>&lt;T: key + store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool {
dof::exists_with_type&lt;<a href="../sui/kiosk#sui_kiosk_Item">Item</a>, T&gt;(&self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id })
}
</code></pre>



</details>

## Function `is_locked` \{#sui_kiosk_is_locked}

Check whether an item with the id is locked in the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>. Meaning
that the only two actions that can be performed on it are <a href="../sui/kiosk#sui_kiosk_list">list</a> and
<a href="../sui/kiosk#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a>, it cannot be <a href="../sui/kiosk#sui_kiosk_take">take</a>n out of the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_locked">is_locked</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_locked">is_locked</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool {
df::exists_(&self.id, <a href="../sui/kiosk#sui_kiosk_Lock">Lock</a> { id })
}
</code></pre>



</details>

## Function `is_listed` \{#sui_kiosk_is_listed}

Check whether an item is listed (exclusively or non exclusively).


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool {
df::exists_(&self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> })
|| self.<a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id)
}
</code></pre>



</details>

## Function `is_listed_exclusively` \{#sui_kiosk_is_listed_exclusively}

Check whether there's a <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a> issued for an item.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool {
df::exists_(&self.id, <a href="../sui/kiosk#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> })
}
</code></pre>



</details>

## Function `has_access` \{#sui_kiosk_has_access}

Check whether the <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> matches the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): bool {
<a href="../sui/object#sui_object_id">object::id</a>(self) == cap.`<b>for</b>`
}
</code></pre>



</details>

## Function `uid_mut_as_owner` \{#sui_kiosk_uid_mut_as_owner}

Access the UID using the <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut_as_owner">uid_mut_as_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): &<b>mut</b> <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut_as_owner">uid_mut_as_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): &<b>mut</b> UID {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
&<b>mut</b> self.id
}
</code></pre>



</details>

## Function `set_allow_extensions` \{#sui_kiosk_set_allow_extensions}

[DEPRECATED]
Allow or disallow <a href="../sui/kiosk#sui_kiosk_uid">uid</a> and <a href="../sui/kiosk#sui_kiosk_uid_mut">uid_mut</a> access via the allow_extensions
setting.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_allow_extensions">set_allow_extensions</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, allow_extensions: bool)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_set_allow_extensions">set_allow_extensions</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, allow_extensions: bool) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
self.allow_extensions = allow_extensions;
}
</code></pre>



</details>

## Function `uid` \{#sui_kiosk_uid}

Get the immutable UID for dynamic field access.
Always enabled.

Given the &UID can be used for reading keys and authorization,
its access


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid">uid</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<a href="../sui/object#sui_object_UID">sui::object::UID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid">uid</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): &UID {
&self.id
}
</code></pre>



</details>

## Function `uid_mut` \{#sui_kiosk_uid_mut}

Get the mutable UID for dynamic field access and extensions.
Aborts if allow_extensions set to <b>false</b>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut">uid_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<b>mut</b> <a href="../sui/object#sui_object_UID">sui::object::UID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_uid_mut">uid_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): &<b>mut</b> UID {
<b>assert</b>!(self.allow_extensions, <a href="../sui/kiosk#sui_kiosk_EUidAccessNotAllowed">EUidAccessNotAllowed</a>);
&<b>mut</b> self.id
}
</code></pre>



</details>

## Function `owner` \{#sui_kiosk_owner}

Get the owner of the Kiosk.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_owner">owner</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): <b>address</b>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_owner">owner</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): <b>address</b> {
self.<a href="../sui/kiosk#sui_kiosk_owner">owner</a>
}
</code></pre>



</details>

## Function `item_count` \{#sui_kiosk_item_count}

Get the number of items stored in a Kiosk.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): u32
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): u32 {
self.<a href="../sui/kiosk#sui_kiosk_item_count">item_count</a>
}
</code></pre>



</details>

## Function `profits_amount` \{#sui_kiosk_profits_amount}

Get the amount of profits collected by selling items.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_profits_amount">profits_amount</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): u64
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_profits_amount">profits_amount</a>(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>): u64 {
self.profits.value()
}
</code></pre>



</details>

## Function `profits_mut` \{#sui_kiosk_profits_mut}

Get mutable access to profits - owner only action.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_profits_mut">profits_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): &<b>mut</b> <a href="../sui/balance#sui_balance_Balance">sui::balance::Balance</a>&lt;<a href="../sui/sui#sui_sui_SUI">sui::sui::SUI</a>&gt;
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_profits_mut">profits_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): &<b>mut</b> Balance&lt;SUI&gt; {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
&<b>mut</b> self.profits
}
</code></pre>



</details>

## Function `borrow` \{#sui_kiosk_borrow}

Immutably borrow an item from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>. Any item can be <a href="../sui/borrow#sui_borrow">borrow</a>ed
at any time.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/borrow#sui_borrow">borrow</a>&lt;T: key, store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): &T
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/borrow#sui_borrow">borrow</a>&lt;T: key + store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): &T {
<b>assert</b>!(<a href="../sui/object#sui_object_id">object::id</a>(self) == cap.`<b>for</b>`, <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
dof::borrow(&self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id })
}
</code></pre>



</details>

## Function `borrow_mut` \{#sui_kiosk_borrow_mut}

Mutably borrow an item from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>.
Item can be <a href="../sui/kiosk#sui_kiosk_borrow_mut">borrow_mut</a>ed only if it's not <a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_borrow_mut">borrow_mut</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): &<b>mut</b> T
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_borrow_mut">borrow_mut</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): &<b>mut</b> T {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemIsListed">EItemIsListed</a>);
dof::borrow_mut(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id })
}
</code></pre>



</details>

## Function `borrow_val` \{#sui_kiosk_borrow_val}

Take the item from the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a> with a guarantee that it will be returned.
Item can be <a href="../sui/kiosk#sui_kiosk_borrow_val">borrow_val</a>-ed only if it's not <a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_borrow_val">borrow_val</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object#sui_object_ID">sui::object::ID</a>): (T, <a href="../sui/kiosk#sui_kiosk_Borrow">sui::kiosk::Borrow</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_borrow_val">borrow_val</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): (T, <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a>) {
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk#sui_kiosk_ENotOwner">ENotOwner</a>);
<b>assert</b>!(self.<a href="../sui/kiosk#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemNotFound">EItemNotFound</a>);
<b>assert</b>!(!self.<a href="../sui/kiosk#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk#sui_kiosk_EItemIsListed">EItemIsListed</a>);
(dof::remove(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id }), <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a> { kiosk_id: <a href="../sui/object#sui_object_id">object::id</a>(self), item_id: id })
}
</code></pre>



</details>

## Function `return_val` \{#sui_kiosk_return_val}

Return the borrowed item to the <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>. This method cannot be avoided
if <a href="../sui/kiosk#sui_kiosk_borrow_val">borrow_val</a> is used.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_return_val">return_val</a>&lt;T: key, store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T, <a href="../sui/borrow#sui_borrow">borrow</a>: <a href="../sui/kiosk#sui_kiosk_Borrow">sui::kiosk::Borrow</a>)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_return_val">return_val</a>&lt;T: key + store&gt;(self: &<b>mut</b> <a href="../sui/kiosk#sui_kiosk_Kiosk">Kiosk</a>, item: T, <a href="../sui/borrow#sui_borrow">borrow</a>: <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a>) {
<b>let</b> <a href="../sui/kiosk#sui_kiosk_Borrow">Borrow</a> { kiosk_id, item_id } = <a href="../sui/borrow#sui_borrow">borrow</a>;
<b>assert</b>!(<a href="../sui/object#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk#sui_kiosk_EWrongKiosk">EWrongKiosk</a>);
<b>assert</b>!(<a href="../sui/object#sui_object_id">object::id</a>(&item) == item_id, <a href="../sui/kiosk#sui_kiosk_EItemMismatch">EItemMismatch</a>);
dof::add(&<b>mut</b> self.id, <a href="../sui/kiosk#sui_kiosk_Item">Item</a> { id: item_id }, item);
}
</code></pre>



</details>

## Function `kiosk_owner_cap_for` \{#sui_kiosk_kiosk_owner_cap_for}

Get the <b>for</b> field of the <a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_kiosk_owner_cap_for">kiosk_owner_cap_for</a>(cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_kiosk_owner_cap_for">kiosk_owner_cap_for</a>(cap: &<a href="../sui/kiosk#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): ID {
cap.`<b>for</b>`
}
</code></pre>



</details>

## Function `purchase_cap_kiosk` \{#sui_kiosk_purchase_cap_kiosk}

Get the kiosk_id from the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_kiosk">purchase_cap_kiosk</a>&lt;T: key, store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;): <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_kiosk">purchase_cap_kiosk</a>&lt;T: key + store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt;): ID {
self.kiosk_id
}
</code></pre>



</details>

## Function `purchase_cap_item` \{#sui_kiosk_purchase_cap_item}

Get the Item_id from the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_item">purchase_cap_item</a>&lt;T: key, store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;): <a href="../sui/object#sui_object_ID">sui::object::ID</a>
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_item">purchase_cap_item</a>&lt;T: key + store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt;): ID {
self.item_id
}
</code></pre>



</details>

## Function `purchase_cap_min_price` \{#sui_kiosk_purchase_cap_min_price}

Get the min_price from the <a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>.


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_min_price">purchase_cap_min_price</a>&lt;T: key, store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a>&lt;T&gt;): u64
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk#sui_kiosk_purchase_cap_min_price">purchase_cap_min_price</a>&lt;T: key + store&gt;(self: &<a href="../sui/kiosk#sui_kiosk_PurchaseCap">PurchaseCap</a>&lt;T&gt;): u64 {
self.min_price
}
</code></pre>



</details>