Appendix B: Asset States in Kiosk
An asset in Kiosk can be in one of the following states:
- Placed
- Locked (special case of Placed)
- Listed
- Listed Exclusively
Placed
Asset is put into the Kiosk by the Kiosk Owner using the kiosk::place function. An owner can perform any available action on an item in this state.
Available actions
- take
- list - change state to Listed
- list with PurchaseCap - change state to Listed Exclusively
- borrow
- borrow_mut
- borrow_val
Check state
To check that asset is in the right state, the caller can use is_placed function, however, to make sure that the asset is not locked, we need to check !is_locked.
let is_placed = kiosk::is_placed<T>(&Kiosk, ItemID) && !kiosk::is_locked<T>(&Kiosk, ItemID);
Locked
Asset can also be placed and locked in a Kiosk using the kiosk::lock function. Unlike place, locking mechanic disables taking.
Available actions
- list - change state to Listed
- list with PurchaseCap - change state to Listed Exclusively
- borrow
- borrow_mut
- borrow_val
Check state
Kiosk has a built in is_locked function to check if the item is locked.
let is_locked = kiosk::is_locked<T>(&Kiosk, ItemID);
Listed
A placed or a locked item can be listed using the list function. The asset then becomes publicly available for purchase.
While listed, an asset can not be modified.
Available actions
- purchase - move the asset out of the Kiosk
- delist - return to the previous state: Placed or Locked
- borrow
Check state
To check if the item is listed, use is_listed function.
let is_listed = kiosk::is_listed<T>(&Kiosk, ItemID)
Listed Exclusively
When an asset is listed using the list_with_purchase_cap, it gets “listed exclusively” state. While in this state, an asset is available for purchase to the owner of the PurchaseCap, and cannot be delisted unless the PurchaseCap is returned.
While listed exclusively, an asset can not be modified.
Available actions
- purchase with PurchaseCap - move the asset out of the Kiosk
- return PurchaseCap - return to the previous state: Placed or Locked
- borrow
Check state
To check if an asset is listed exclusively, use is_listed_exclusively function.
let is_listed_exclusively = kiosk::is_listed_exclusively<T>(&Kiosk, ItemID);