crates/sui-framework/docs/sui/kiosk.md
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 <code>TransferPolicy</code> for them.
<a name="@Principles_and_philosophy:_0"></a>
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 <code><a href="../sui/kiosk.md#sui_kiosk_place">place</a></code>, <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code>, <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code>, 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 <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> + <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code> flow; any other trading logic can be implemented on top using the <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code> (and a matching <code><a href="../sui/kiosk.md#sui_kiosk_purchase_with_cap">purchase_with_cap</a></code>) flow.
For every transaction happening with a third party a <code>TransferRequest</code> is created - this way creators are fully in control of the trading experience.
<a name="@Asset_states_in_the_Kiosk:_1"></a>
<code>placed</code> - An asset is <code><a href="../sui/kiosk.md#sui_kiosk_place">place</a></code>d into the Kiosk and can be <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code>n out by the Kiosk owner; it's freely tradable and modifiable via the <code><a href="../sui/kiosk.md#sui_kiosk_borrow_mut">borrow_mut</a></code> and <code><a href="../sui/kiosk.md#sui_kiosk_borrow_val">borrow_val</a></code> functions.
<code>locked</code> - Similar to <code>placed</code> except that <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code> is disabled and the only way to move the asset out of the Kiosk is to <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> it or <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code> therefore performing a trade (issuing a <code>TransferRequest</code>). The check on the <code><a href="../sui/kiosk.md#sui_kiosk_lock">lock</a></code> function makes sure that the <code>TransferPolicy</code> exists to not lock the item in a <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> forever.
<code>listed</code> - A <code><a href="../sui/kiosk.md#sui_kiosk_place">place</a></code>d or a <code><a href="../sui/kiosk.md#sui_kiosk_lock">lock</a></code>ed item can be <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code>ed for a fixed price allowing anyone to <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code> it from the Kiosk. While listed, an item can not be taken or modified. However, an immutable borrow via <code><a href="../sui/borrow.md#sui_borrow">borrow</a></code> call is still available. The <code><a href="../sui/kiosk.md#sui_kiosk_delist">delist</a></code> function returns the asset to the previous state.
<code>listed_exclusively</code> - An item is listed via the <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code> function (and a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> is created). While listed this way, an item can not be <code><a href="../sui/kiosk.md#sui_kiosk_delist">delist</a></code>-ed unless a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> is returned. All actions available at this item state require a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code>:
When an item is listed exclusively it cannot be modified nor taken and losing a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> would lock the item in the Kiosk forever. Therefore, it is recommended to only use <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> functionality in trusted applications and not use it for direct trading (eg sending to another account).
<a name="@Using_multiple_Transfer_Policies_for_different_"tracks":_2"></a>
Every <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code> or <code>purchase_with_purchase_cap</code> creates a <code>TransferRequest</code> hot potato which must be resolved in a matching <code>TransferPolicy</code> for the transaction to pass. While the default scenario implies that there should be a single <code>TransferPolicy<T></code> for <code>T</code>; it is possible to have multiple, each one having its own set of rules.
<a name="@Examples:_3"></a>
Kiosk -> (Item, TransferRequest)
... TransferRequest ------> Common Transfer Policy
... TransferRequest ------> In-game Wrapped Transfer Policy
... TransferRequest ------> Club Membership Transfer Policy
See <code><a href="../sui/transfer_policy.md#sui_transfer_policy">transfer_policy</a></code> 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)
KioskKioskOwnerCapPurchaseCapBorrowItemListingLockItemListedItemPurchasedItemDelisteddefaultnewclose_and_withdrawset_ownerset_owner_customplacelocktakelistplace_and_listdelistpurchaselist_with_purchase_cappurchase_with_capreturn_purchase_capwithdrawlock_internalplace_internaluid_mut_internalhas_itemhas_item_with_typeis_lockedis_listedis_listed_exclusivelyhas_accessuid_mut_as_ownerset_allow_extensionsuiduid_mutowneritem_countprofits_amountprofits_mutborrowborrow_mutborrow_valreturn_valkiosk_owner_cap_forpurchase_cap_kioskpurchase_cap_itempurchase_cap_min_price<a name="sui_kiosk_Kiosk"></a>
KioskAn 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 <code>TransferPolicy</code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a> <b>has</b> key, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_UID">sui::object::UID</a></code> </dt> <dd> </dd> <dt> <code>profits: <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>></code> </dt> <dd> Balance of the Kiosk - all profits from sales go here. </dd> <dt> <code><a href="../sui/kiosk.md#sui_kiosk_owner">owner</a>: <b>address</b></code> </dt> <dd> Always point to <code>sender</code> of the transaction. Can be changed by calling <code><a href="../sui/kiosk.md#sui_kiosk_set_owner">set_owner</a></code> with Cap. </dd> <dt> <code><a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a>: u32</code> </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> <code>allow_extensions: bool</code> </dt> <dd> [DEPRECATED] Please, don't use the <code>allow_extensions</code> and the matching <code><a href="../sui/kiosk.md#sui_kiosk_set_allow_extensions">set_allow_extensions</a></code> function - it is a legacy feature that is being replaced by the <code><a href="../sui/kiosk_extension.md#sui_kiosk_extension">kiosk_extension</a></code> module and its Extensions API. Exposes <code><a href="../sui/kiosk.md#sui_kiosk_uid_mut">uid_mut</a></code> publicly when set to <code><b>true</b></code>, set to <code><b>false</b></code> by default. </dd> </dl> </details><a name="sui_kiosk_KioskOwnerCap"></a>
KioskOwnerCapA Capability granting the bearer a right to <code><a href="../sui/kiosk.md#sui_kiosk_place">place</a></code> and <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code> items from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> as well as to <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> them and <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> <b>has</b> key, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_UID">sui::object::UID</a></code> </dt> <dd> </dd> <dt> <code><b>for</b>: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_PurchaseCap"></a>
PurchaseCapA capability which locks an item and gives a permission to purchase it from a <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> for any price no less than <code>min_price</code>.
Allows exclusive listing: only bearer of the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> can purchase the asset. However, the capability should be used carefully as losing it would lock the asset in the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
The main application for the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> is building extensions on top of the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><<b>phantom</b> T: key, store> <b>has</b> key, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_UID">sui::object::UID</a></code> </dt> <dd> </dd> <dt> <code>kiosk_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> ID of the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> the cap belongs to. </dd> <dt> <code>item_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> ID of the listed item. </dd> <dt> <code>min_price: u64</code> </dt> <dd> Minimum price for which the item can be purchased. </dd> </dl> </details><a name="sui_kiosk_Borrow"></a>
BorrowHot potato to ensure an item was returned after being taken using the <code><a href="../sui/kiosk.md#sui_kiosk_borrow_val">borrow_val</a></code> call.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a> </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>kiosk_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>item_id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_Item"></a>
ItemDynamic field key for an item placed into the kiosk.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> <b>has</b> <b>copy</b>, drop, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_Listing"></a>
ListingDynamic field key for an active offer to purchase the T. If an item is listed without a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code>, exclusive is set to <code><b>false</b></code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> <b>has</b> <b>copy</b>, drop, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>is_exclusive: bool</code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_Lock"></a>
LockDynamic field key which marks that an item is locked in the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> and can't be <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code>n. The item then can only be listed / sold via the PurchaseCap. Lock is released on <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a> <b>has</b> <b>copy</b>, drop, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_ItemListed"></a>
ItemListedEmitted 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 <code>T</code>
<pre><code><b>public</b> <b>struct</b> <a href="../sui/kiosk.md#sui_kiosk_ItemListed">ItemListed</a><<b>phantom</b> T: key, store> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>price: u64</code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_ItemPurchased"></a>
ItemPurchasedEmitted when an item was purchased from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>. Can be used to track finalized sales across the network. The event is emitted in both cases: when an item is purchased via the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> or when it's purchased directly (via <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> + <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code>).
The <code>price</code> is also emitted and might differ from the <code>price</code> set in the <code><a href="../sui/kiosk.md#sui_kiosk_ItemListed">ItemListed</a></code> event. This is because the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> 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.md#sui_kiosk_ItemPurchased">ItemPurchased</a><<b>phantom</b> T: key, store> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>price: u64</code> </dt> <dd> </dd> </dl> </details><a name="sui_kiosk_ItemDelisted"></a>
ItemDelistedEmitted 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.md#sui_kiosk_ItemDelisted">ItemDelisted</a><<b>phantom</b> T: key, store> <b>has</b> <b>copy</b>, drop </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code><a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> <dt> <code>id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a></code> </dt> <dd> </dd> </dl> </details><a name="@Constants_4"></a>
<a name="sui_kiosk_ENotOwner"></a>
Trying to withdraw profits and sender is not owner.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>: u64 = 0; </code></pre><a name="sui_kiosk_EIncorrectAmount"></a>
Coin paid does not match the offer price.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>: u64 = 1; </code></pre><a name="sui_kiosk_ENotEnough"></a>
Trying to withdraw higher amount than stored.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_ENotEnough">ENotEnough</a>: u64 = 2; </code></pre><a name="sui_kiosk_ENotEmpty"></a>
Trying to close a Kiosk and it has items in it.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_ENotEmpty">ENotEmpty</a>: u64 = 3; </code></pre><a name="sui_kiosk_EListedExclusively"></a>
Attempt to take an item that has a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> issued.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EListedExclusively">EListedExclusively</a>: u64 = 4; </code></pre><a name="sui_kiosk_EWrongKiosk"></a>
<code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> does not match the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EWrongKiosk">EWrongKiosk</a>: u64 = 5; </code></pre><a name="sui_kiosk_EAlreadyListed"></a>
Trying to exclusively list an already listed item.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EAlreadyListed">EAlreadyListed</a>: u64 = 6; </code></pre><a name="sui_kiosk_EUidAccessNotAllowed"></a>
Trying to call <code><a href="../sui/kiosk.md#sui_kiosk_uid_mut">uid_mut</a></code> when <code>allow_extensions</code> set to false.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EUidAccessNotAllowed">EUidAccessNotAllowed</a>: u64 = 7; </code></pre><a name="sui_kiosk_EItemLocked"></a>
Attempt to <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code> an item that is locked.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EItemLocked">EItemLocked</a>: u64 = 8; </code></pre><a name="sui_kiosk_EItemIsListed"></a>
Taking or mutably borrowing an item that is listed.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EItemIsListed">EItemIsListed</a>: u64 = 9; </code></pre><a name="sui_kiosk_EItemMismatch"></a>
Item does not match <code><a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a></code> in <code><a href="../sui/kiosk.md#sui_kiosk_return_val">return_val</a></code>.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EItemMismatch">EItemMismatch</a>: u64 = 10; </code></pre><a name="sui_kiosk_EItemNotFound"></a>
An is not found while trying to borrow.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>: u64 = 11; </code></pre><a name="sui_kiosk_ENotListed"></a>
Delisting an item that is not listed.
<pre><code><b>const</b> <a href="../sui/kiosk.md#sui_kiosk_ENotListed">ENotListed</a>: u64 = 12; </code></pre><a name="sui_kiosk_default"></a>
defaultCreates a new Kiosk in a default configuration: sender receives the <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code> and becomes the Owner, the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> is shared.
<pre><code><b>entry</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_default">default</a>(ctx: &<b>mut</b> <a href="../sui/tx_context.md#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.md#sui_kiosk_default">default</a>(ctx: &<b>mut</b> TxContext) { <b>let</b> (<a href="../sui/kiosk.md#sui_kiosk">kiosk</a>, cap) = <a href="../sui/kiosk.md#sui_kiosk_new">new</a>(ctx); <a href="../sui/transfer.md#sui_transfer_transfer">sui::transfer::transfer</a>(cap, ctx.sender()); <a href="../sui/transfer.md#sui_transfer_share_object">sui::transfer::share_object</a>(<a href="../sui/kiosk.md#sui_kiosk">kiosk</a>); } </code></pre> </details><a name="sui_kiosk_new"></a>
newCreates a new <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> with a matching <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_new">new</a>(ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): (<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, <a href="../sui/kiosk.md#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.md#sui_kiosk_new">new</a>(ctx: &<b>mut</b> TxContext): (<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, <a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>) { <b>let</b> <a href="../sui/kiosk.md#sui_kiosk">kiosk</a> = <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a> { id: <a href="../sui/object.md#sui_object_new">object::new</a>(ctx), profits: <a href="../sui/balance.md#sui_balance_zero">balance::zero</a>(), <a href="../sui/kiosk.md#sui_kiosk_owner">owner</a>: ctx.sender(), <a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a>: 0, allow_extensions: <b>false</b>, }; <b>let</b> cap = <a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a> { id: <a href="../sui/object.md#sui_object_new">object::new</a>(ctx), `<b>for</b>`: <a href="../sui/object.md#sui_object_id">object::id</a>(&<a href="../sui/kiosk.md#sui_kiosk">kiosk</a>), }; (<a href="../sui/kiosk.md#sui_kiosk">kiosk</a>, cap) } </code></pre> </details><a name="sui_kiosk_close_and_withdraw"></a>
close_and_withdrawUnpacks and destroys a Kiosk returning the profits (even if "0"). Can only be performed by the bearer of the <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code> in the case where there's no items inside and a <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> is not shared.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_close_and_withdraw">close_and_withdraw</a>(self: <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: <a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_close_and_withdraw">close_and_withdraw</a>(self: <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: <a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, ctx: &<b>mut</b> TxContext): Coin<SUI> { <b>let</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a> { id, profits, <a href="../sui/kiosk.md#sui_kiosk_owner">owner</a>: _, <a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a>, allow_extensions: _ } = self; <b>let</b> <a href="../sui/kiosk.md#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.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> == 0, <a href="../sui/kiosk.md#sui_kiosk_ENotEmpty">ENotEmpty</a>); cap_id.delete(); id.delete(); profits.into_coin(ctx) } </code></pre> </details><a name="sui_kiosk_set_owner"></a>
set_ownerChange the <code><a href="../sui/kiosk.md#sui_kiosk_owner">owner</a></code> 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.md#sui_kiosk_set_owner">set_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, ctx: &<a href="../sui/tx_context.md#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.md#sui_kiosk_set_owner">set_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, ctx: &TxContext) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); self.<a href="../sui/kiosk.md#sui_kiosk_owner">owner</a> = ctx.sender(); } </code></pre> </details><a name="sui_kiosk_set_owner_custom"></a>
set_owner_customUpdate the <code><a href="../sui/kiosk.md#sui_kiosk_owner">owner</a></code> field with a custom address. Can be used for implementing a custom logic that relies on the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> owner.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_set_owner_custom">set_owner_custom</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, <a href="../sui/kiosk.md#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.md#sui_kiosk_set_owner_custom">set_owner_custom</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, <a href="../sui/kiosk.md#sui_kiosk_owner">owner</a>: <b>address</b>) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); self.<a href="../sui/kiosk.md#sui_kiosk_owner">owner</a> = <a href="../sui/kiosk.md#sui_kiosk_owner">owner</a> } </code></pre> </details><a name="sui_kiosk_place"></a>
placePlace 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.md#sui_kiosk_place">place</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#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.md#sui_kiosk_place">place</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, item: T) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); self.<a href="../sui/kiosk.md#sui_kiosk_place_internal">place_internal</a>(item) } </code></pre> </details><a name="sui_kiosk_lock"></a>
lockPlace an item to the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> and issue a <code><a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a></code> for it. Once placed this way, an item can only be listed either with a <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> function or with a <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code>.
Requires policy for <code>T</code> to make sure that there's an issued <code>TransferPolicy</code> 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.md#sui_kiosk_lock">lock</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, _policy: &<a href="../sui/transfer_policy.md#sui_transfer_policy_TransferPolicy">sui::transfer_policy::TransferPolicy</a><T>, item: T) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_lock">lock</a><T: key + store>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, _policy: &TransferPolicy<T>, item: T, ) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); self.<a href="../sui/kiosk.md#sui_kiosk_lock_internal">lock_internal</a>(item) } </code></pre> </details><a name="sui_kiosk_take"></a>
takeTake 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.md#sui_kiosk_take">take</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_take">take</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): T { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_locked">is_locked</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemLocked">EItemLocked</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EListedExclusively">EListedExclusively</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> - 1; df::remove_if_exists<<a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a>, u64>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }); dof::remove(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }) } </code></pre> </details><a name="sui_kiosk_list"></a>
listList 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.md#sui_kiosk_list">list</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_list">list</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID, price: u64) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item_with_type">has_item_with_type</a><T>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EListedExclusively">EListedExclusively</a>); df::add(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }, price); <a href="../sui/event.md#sui_event_emit">event::emit</a>(<a href="../sui/kiosk.md#sui_kiosk_ItemListed">ItemListed</a><T> { <a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_id">object::id</a>(self), id, price }) } </code></pre> </details><a name="sui_kiosk_place_and_list"></a>
place_and_listCalls <code><a href="../sui/kiosk.md#sui_kiosk_place">place</a></code> and <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> together - simplifies the flow.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_place_and_list">place_and_list</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#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.md#sui_kiosk_place_and_list">place_and_list</a><T: key + store>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, item: T, price: u64, ) { <b>let</b> id = <a href="../sui/object.md#sui_object_id">object::id</a>(&item); self.<a href="../sui/kiosk.md#sui_kiosk_place">place</a>(cap, item); self.<a href="../sui/kiosk.md#sui_kiosk_list">list</a><T>(cap, id, price) } </code></pre> </details><a name="sui_kiosk_delist"></a>
delistRemove an existing listing from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> and keep the item in the user Kiosk. Can only be performed by the owner of the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_delist">delist</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_delist">delist</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item_with_type">has_item_with_type</a><T>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EListedExclusively">EListedExclusively</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk.md#sui_kiosk_ENotListed">ENotListed</a>); df::remove<<a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a>, u64>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }); <a href="../sui/event.md#sui_event_emit">event::emit</a>(<a href="../sui/kiosk.md#sui_kiosk_ItemDelisted">ItemDelisted</a><T> { <a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_id">object::id</a>(self), id }) } </code></pre> </details><a name="sui_kiosk_purchase"></a>
purchaseMake a trade: pay the owner of the item and request a Transfer to the <code>target</code> kiosk (to prevent item being taken by the approving party).
Received <code>TransferRequest</code> 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.md#sui_kiosk_purchase">purchase</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a>, payment: <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>>): (T, <a href="../sui/transfer_policy.md#sui_transfer_policy_TransferRequest">sui::transfer_policy::TransferRequest</a><T>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a><T: key + store>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID, payment: Coin<SUI>, ): (T, TransferRequest<T>) { <b>let</b> price = df::remove<<a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a>, u64>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }); <b>let</b> inner = dof::remove<<a href="../sui/kiosk.md#sui_kiosk_Item">Item</a>, T>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }); self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> - 1; <b>assert</b>!(price == payment.value(), <a href="../sui/kiosk.md#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>); df::remove_if_exists<<a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a>, bool>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a> { id }); <a href="../sui/coin.md#sui_coin_put">coin::put</a>(&<b>mut</b> self.profits, payment); <a href="../sui/event.md#sui_event_emit">event::emit</a>(<a href="../sui/kiosk.md#sui_kiosk_ItemPurchased">ItemPurchased</a><T> { <a href="../sui/kiosk.md#sui_kiosk">kiosk</a>: <a href="../sui/object.md#sui_object_id">object::id</a>(self), id, price }); (inner, <a href="../sui/transfer_policy.md#sui_transfer_policy_new_request">transfer_policy::new_request</a>(id, price, <a href="../sui/object.md#sui_object_id">object::id</a>(self))) } </code></pre> </details><a name="sui_kiosk_list_with_purchase_cap"></a>
list_with_purchase_capCreates a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> which gives the right to purchase an item for any price equal or higher than the <code>min_price</code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a>, min_price: u64, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a><T: key + store>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID, min_price: u64, ctx: &<b>mut</b> TxContext, ): <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T> { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item_with_type">has_item_with_type</a><T>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EAlreadyListed">EAlreadyListed</a>); df::add(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> }, min_price); <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T> { min_price, item_id: id, id: <a href="../sui/object.md#sui_object_new">object::new</a>(ctx), kiosk_id: <a href="../sui/object.md#sui_object_id">object::id</a>(self), } } </code></pre> </details><a name="sui_kiosk_purchase_with_cap"></a>
purchase_with_capUnpack the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> and call <code><a href="../sui/kiosk.md#sui_kiosk_purchase">purchase</a></code>. Sets the payment amount as the price for the listing making sure it's no less than <code>min_amount</code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_with_cap">purchase_with_cap</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, purchase_cap: <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T>, payment: <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>>): (T, <a href="../sui/transfer_policy.md#sui_transfer_policy_TransferRequest">sui::transfer_policy::TransferRequest</a><T>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_with_cap">purchase_with_cap</a><T: key + store>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, purchase_cap: <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T>, payment: Coin<SUI>, ): (T, TransferRequest<T>) { <b>let</b> <a href="../sui/kiosk.md#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 >= min_price, <a href="../sui/kiosk.md#sui_kiosk_EIncorrectAmount">EIncorrectAmount</a>); <b>assert</b>!(<a href="../sui/object.md#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk.md#sui_kiosk_EWrongKiosk">EWrongKiosk</a>); df::remove<<a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a>, u64>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> }); <a href="../sui/coin.md#sui_coin_put">coin::put</a>(&<b>mut</b> self.profits, payment); self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> - 1; df::remove_if_exists<<a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a>, bool>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a> { id }); <b>let</b> item = dof::remove<<a href="../sui/kiosk.md#sui_kiosk_Item">Item</a>, T>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }); (item, <a href="../sui/transfer_policy.md#sui_transfer_policy_new_request">transfer_policy::new_request</a>(id, paid, <a href="../sui/object.md#sui_object_id">object::id</a>(self))) } </code></pre> </details><a name="sui_kiosk_return_purchase_cap"></a>
return_purchase_capReturn the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> without making a purchase; remove an active offer and allow the item for taking. Can only be returned to its <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>, aborts otherwise.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_return_purchase_cap">return_purchase_cap</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, purchase_cap: <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_return_purchase_cap">return_purchase_cap</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, purchase_cap: <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T>) { <b>let</b> <a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a> { id, item_id, kiosk_id, min_price: _ } = purchase_cap; <b>assert</b>!(<a href="../sui/object.md#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk.md#sui_kiosk_EWrongKiosk">EWrongKiosk</a>); df::remove<<a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a>, u64>(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id: item_id, is_exclusive: <b>true</b> }); id.delete() } </code></pre> </details><a name="sui_kiosk_withdraw"></a>
withdrawWithdraw profits from the Kiosk.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_withdraw">withdraw</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, amount: <a href="../std/option.md#std_option_Option">std::option::Option</a><u64>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_withdraw">withdraw</a>( self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, amount: Option<u64>, ctx: &<b>mut</b> TxContext, ): Coin<SUI> { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#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 <= self.profits.value(), <a href="../sui/kiosk.md#sui_kiosk_ENotEnough">ENotEnough</a>); amt } <b>else</b> { self.profits.value() }; <a href="../sui/coin.md#sui_coin_take">coin::take</a>(&<b>mut</b> self.profits, amount, ctx) } </code></pre> </details><a name="sui_kiosk_lock_internal"></a>
lock_internalInternal: "lock" an item disabling the <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code> action.
<pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_lock_internal">lock_internal</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_lock_internal">lock_internal</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, item: T) { df::add(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a> { id: <a href="../sui/object.md#sui_object_id">object::id</a>(&item) }, <b>true</b>); self.<a href="../sui/kiosk.md#sui_kiosk_place_internal">place_internal</a>(item) } </code></pre> </details><a name="sui_kiosk_place_internal"></a>
place_internalInternal: "place" an item to the Kiosk and increment the item count.
<pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_place_internal">place_internal</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_place_internal">place_internal</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, item: T) { self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> = self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> + 1; dof::add(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id: <a href="../sui/object.md#sui_object_id">object::id</a>(&item) }, item) } </code></pre> </details><a name="sui_kiosk_uid_mut_internal"></a>
uid_mut_internalInternal: get a mutable access to the UID.
<pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_uid_mut_internal">uid_mut_internal</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<b>mut</b> <a href="../sui/object.md#sui_object_UID">sui::object::UID</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_uid_mut_internal">uid_mut_internal</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): &<b>mut</b> UID { &<b>mut</b> self.id } </code></pre> </details><a name="sui_kiosk_has_item"></a>
has_itemCheck whether the <code>item</code> is present in the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_has_item">has_item</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_has_item">has_item</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool { dof::exists_(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }) } </code></pre> </details><a name="sui_kiosk_has_item_with_type"></a>
has_item_with_typeCheck whether the <code>item</code> is present in the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> and has type T.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_has_item_with_type">has_item_with_type</a><T: key, store>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_has_item_with_type">has_item_with_type</a><T: key + store>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool { dof::exists_with_type<<a href="../sui/kiosk.md#sui_kiosk_Item">Item</a>, T>(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }) } </code></pre> </details><a name="sui_kiosk_is_locked"></a>
is_lockedCheck whether an item with the <code>id</code> is locked in the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>. Meaning that the only two actions that can be performed on it are <code><a href="../sui/kiosk.md#sui_kiosk_list">list</a></code> and <code><a href="../sui/kiosk.md#sui_kiosk_list_with_purchase_cap">list_with_purchase_cap</a></code>, it cannot be <code><a href="../sui/kiosk.md#sui_kiosk_take">take</a></code>n out of the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_is_locked">is_locked</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_is_locked">is_locked</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool { df::exists_(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Lock">Lock</a> { id }) } </code></pre> </details><a name="sui_kiosk_is_listed"></a>
is_listedCheck whether an <code>item</code> is listed (exclusively or non exclusively).
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_is_listed">is_listed</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool { df::exists_(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>false</b> }) || self.<a href="../sui/kiosk.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(id) } </code></pre> </details><a name="sui_kiosk_is_listed_exclusively"></a>
is_listed_exclusivelyCheck whether there's a <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code> issued for an item.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_is_listed_exclusively">is_listed_exclusively</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, id: ID): bool { df::exists_(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Listing">Listing</a> { id, is_exclusive: <b>true</b> }) } </code></pre> </details><a name="sui_kiosk_has_access"></a>
has_accessCheck whether the <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code> matches the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#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.md#sui_kiosk_has_access">has_access</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): bool { <a href="../sui/object.md#sui_object_id">object::id</a>(self) == cap.`<b>for</b>` } </code></pre> </details><a name="sui_kiosk_uid_mut_as_owner"></a>
uid_mut_as_ownerAccess the <code>UID</code> using the <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_uid_mut_as_owner">uid_mut_as_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): &<b>mut</b> <a href="../sui/object.md#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.md#sui_kiosk_uid_mut_as_owner">uid_mut_as_owner</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): &<b>mut</b> UID { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); &<b>mut</b> self.id } </code></pre> </details><a name="sui_kiosk_set_allow_extensions"></a>
set_allow_extensions[DEPRECATED] Allow or disallow <code><a href="../sui/kiosk.md#sui_kiosk_uid">uid</a></code> and <code><a href="../sui/kiosk.md#sui_kiosk_uid_mut">uid_mut</a></code> access via the <code>allow_extensions</code> setting.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_set_allow_extensions">set_allow_extensions</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#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.md#sui_kiosk_set_allow_extensions">set_allow_extensions</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, allow_extensions: bool) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); self.allow_extensions = allow_extensions; } </code></pre> </details><a name="sui_kiosk_uid"></a>
uidGet the immutable <code>UID</code> 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.md#sui_kiosk_uid">uid</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<a href="../sui/object.md#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.md#sui_kiosk_uid">uid</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): &UID { &self.id } </code></pre> </details><a name="sui_kiosk_uid_mut"></a>
uid_mutGet the mutable <code>UID</code> for dynamic field access and extensions. Aborts if <code>allow_extensions</code> set to <code><b>false</b></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_uid_mut">uid_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>): &<b>mut</b> <a href="../sui/object.md#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.md#sui_kiosk_uid_mut">uid_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): &<b>mut</b> UID { <b>assert</b>!(self.allow_extensions, <a href="../sui/kiosk.md#sui_kiosk_EUidAccessNotAllowed">EUidAccessNotAllowed</a>); &<b>mut</b> self.id } </code></pre> </details><a name="sui_kiosk_owner"></a>
ownerGet the owner of the Kiosk.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_owner">owner</a>(self: &<a href="../sui/kiosk.md#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.md#sui_kiosk_owner">owner</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): <b>address</b> { self.<a href="../sui/kiosk.md#sui_kiosk_owner">owner</a> } </code></pre> </details><a name="sui_kiosk_item_count"></a>
item_countGet the number of items stored in a Kiosk.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a>(self: &<a href="../sui/kiosk.md#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.md#sui_kiosk_item_count">item_count</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): u32 { self.<a href="../sui/kiosk.md#sui_kiosk_item_count">item_count</a> } </code></pre> </details><a name="sui_kiosk_profits_amount"></a>
profits_amountGet the amount of profits collected by selling items.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_profits_amount">profits_amount</a>(self: &<a href="../sui/kiosk.md#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.md#sui_kiosk_profits_amount">profits_amount</a>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>): u64 { self.profits.value() } </code></pre> </details><a name="sui_kiosk_profits_mut"></a>
profits_mutGet mutable access to <code>profits</code> - owner only action.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_profits_mut">profits_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): &<b>mut</b> <a href="../sui/balance.md#sui_balance_Balance">sui::balance::Balance</a><<a href="../sui/sui.md#sui_sui_SUI">sui::sui::SUI</a>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_profits_mut">profits_mut</a>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): &<b>mut</b> Balance<SUI> { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); &<b>mut</b> self.profits } </code></pre> </details><a name="sui_kiosk_borrow"></a>
borrowImmutably borrow an item from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>. Any item can be <code><a href="../sui/borrow.md#sui_borrow">borrow</a></code>ed at any time.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/borrow.md#sui_borrow">borrow</a><T: key, store>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#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.md#sui_borrow">borrow</a><T: key + store>(self: &<a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): &T { <b>assert</b>!(<a href="../sui/object.md#sui_object_id">object::id</a>(self) == cap.`<b>for</b>`, <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); dof::borrow(&self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }) } </code></pre> </details><a name="sui_kiosk_borrow_mut"></a>
borrow_mutMutably borrow an item from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>. Item can be <code><a href="../sui/kiosk.md#sui_kiosk_borrow_mut">borrow_mut</a></code>ed only if it's not <code><a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_borrow_mut">borrow_mut</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#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.md#sui_kiosk_borrow_mut">borrow_mut</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): &<b>mut</b> T { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemIsListed">EItemIsListed</a>); dof::borrow_mut(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }) } </code></pre> </details><a name="sui_kiosk_borrow_val"></a>
borrow_valTake the item from the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code> with a guarantee that it will be returned. Item can be <code><a href="../sui/kiosk.md#sui_kiosk_borrow_val">borrow_val</a></code>-ed only if it's not <code><a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_borrow_val">borrow_val</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>, id: <a href="../sui/object.md#sui_object_ID">sui::object::ID</a>): (T, <a href="../sui/kiosk.md#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.md#sui_kiosk_borrow_val">borrow_val</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>, id: ID): (T, <a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a>) { <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_access">has_access</a>(cap), <a href="../sui/kiosk.md#sui_kiosk_ENotOwner">ENotOwner</a>); <b>assert</b>!(self.<a href="../sui/kiosk.md#sui_kiosk_has_item">has_item</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemNotFound">EItemNotFound</a>); <b>assert</b>!(!self.<a href="../sui/kiosk.md#sui_kiosk_is_listed">is_listed</a>(id), <a href="../sui/kiosk.md#sui_kiosk_EItemIsListed">EItemIsListed</a>); (dof::remove(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id }), <a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a> { kiosk_id: <a href="../sui/object.md#sui_object_id">object::id</a>(self), item_id: id }) } </code></pre> </details><a name="sui_kiosk_return_val"></a>
return_valReturn the borrowed item to the <code><a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a></code>. This method cannot be avoided if <code><a href="../sui/kiosk.md#sui_kiosk_borrow_val">borrow_val</a></code> is used.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_return_val">return_val</a><T: key, store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">sui::kiosk::Kiosk</a>, item: T, <a href="../sui/borrow.md#sui_borrow">borrow</a>: <a href="../sui/kiosk.md#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.md#sui_kiosk_return_val">return_val</a><T: key + store>(self: &<b>mut</b> <a href="../sui/kiosk.md#sui_kiosk_Kiosk">Kiosk</a>, item: T, <a href="../sui/borrow.md#sui_borrow">borrow</a>: <a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a>) { <b>let</b> <a href="../sui/kiosk.md#sui_kiosk_Borrow">Borrow</a> { kiosk_id, item_id } = <a href="../sui/borrow.md#sui_borrow">borrow</a>; <b>assert</b>!(<a href="../sui/object.md#sui_object_id">object::id</a>(self) == kiosk_id, <a href="../sui/kiosk.md#sui_kiosk_EWrongKiosk">EWrongKiosk</a>); <b>assert</b>!(<a href="../sui/object.md#sui_object_id">object::id</a>(&item) == item_id, <a href="../sui/kiosk.md#sui_kiosk_EItemMismatch">EItemMismatch</a>); dof::add(&<b>mut</b> self.id, <a href="../sui/kiosk.md#sui_kiosk_Item">Item</a> { id: item_id }, item); } </code></pre> </details><a name="sui_kiosk_kiosk_owner_cap_for"></a>
kiosk_owner_cap_forGet the <code><b>for</b></code> field of the <code><a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_kiosk_owner_cap_for">kiosk_owner_cap_for</a>(cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">sui::kiosk::KioskOwnerCap</a>): <a href="../sui/object.md#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.md#sui_kiosk_kiosk_owner_cap_for">kiosk_owner_cap_for</a>(cap: &<a href="../sui/kiosk.md#sui_kiosk_KioskOwnerCap">KioskOwnerCap</a>): ID { cap.`<b>for</b>` } </code></pre> </details><a name="sui_kiosk_purchase_cap_kiosk"></a>
purchase_cap_kioskGet the <code>kiosk_id</code> from the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_cap_kiosk">purchase_cap_kiosk</a><T: key, store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T>): <a href="../sui/object.md#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.md#sui_kiosk_purchase_cap_kiosk">purchase_cap_kiosk</a><T: key + store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T>): ID { self.kiosk_id } </code></pre> </details><a name="sui_kiosk_purchase_cap_item"></a>
purchase_cap_itemGet the <code>Item_id</code> from the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_cap_item">purchase_cap_item</a><T: key, store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T>): <a href="../sui/object.md#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.md#sui_kiosk_purchase_cap_item">purchase_cap_item</a><T: key + store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T>): ID { self.item_id } </code></pre> </details><a name="sui_kiosk_purchase_cap_min_price"></a>
purchase_cap_min_priceGet the <code>min_price</code> from the <code><a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_cap_min_price">purchase_cap_min_price</a><T: key, store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">sui::kiosk::PurchaseCap</a><T>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/kiosk.md#sui_kiosk_purchase_cap_min_price">purchase_cap_min_price</a><T: key + store>(self: &<a href="../sui/kiosk.md#sui_kiosk_PurchaseCap">PurchaseCap</a><T>): u64 { self.min_price } </code></pre> </details>