Each utility is composed of steps. You can understand steps as breakpoints where you as the developer or the user has to perform an action. This can be connecting the wallet or selecting and confirming the NFT to be used for the utility. Important to understand is, that each utility type has different steps due to the fact that they require different actions during the user journey.

NFT Validation Utility (table scrollable)

Integer valueStep Name (Constant)DescriptionNext stepsAvailable Data
0Uninitialized
(NftValidationUtility.STEP_UNINITIALIZED)
The zero step, before the utility is initializedInitialize utility. This is done automatically. No action required.None
1Initialized
(NftValidationUtility.STEP_INITIALIZED)
The utility is now initialized and ready to use. All configuration is fetched and wallet provider is initialized.Now that everything is initialized, users can connect their wallet.
await utility.connectWallet()
Configuration: utility.details
2Wallet connected
(NftValidationUtility.STEP_WALLET_CONNECTED)
The user connected it's wallet. Now you have access to it's wallet address.In the background, all relevant NFTs are loaded and validated.
Wait for the next Event (NftValidationUtility.STEP_NFTS_FETCHED) or wait till the promise of utility.connectWallet() resolves.
Configuration: utility.details
Wallet address: utility.wallet.address
3NFTs fetched
(NftValidationUtility.STEP_NFTS_FETCHED)
All wallet NFTs out of the utility collection (Smart Contract) are now fetched and validated.Display the NFTs to the users and let them choose the token they want to use. To connect the selected NFT to the utility simply call utility.tokenId = tokenId.Configuration: utility.details
Wallet address: utility.wallet.address
NFTs: utility.nfts
4Token selected
(NftValidationUtility.STEP_TOKEN_SELECTED)
You have set the NFT that is used to claim the utility.Now it depends on you if you implement a utility that needs reservation (maybe there is a limited stock and you want the user to insert their shipping address as the next step), call await utility.reserveEngagement(). If you don't need this feature, finish the process with await utility.storeEngagement(OPTIONAL-METADATA).Configuration: utility.details
Wallet address: utility.wallet.address
NFTs: utility.nfts
Selected Token ID: ùtility.tokenId`
5Utility slot reserved
(NftValidationUtility.STEP_RESERVED)
This step will be skipped if you store the engagement directly. Generally, this step means that a slot from the quota has been reserved for the user.Finish the process by calling await utility.storeEngagement(OPTIONAL-METADATA)Configuration: utility.details
Wallet address: utility.wallet.address
NFTs: utility.nfts
Selected Token ID: ùtility.tokenIdReservation object:utility.reservation`
6Utility claimed
(STEP_CLAIMED)
The user claimed the utility. The flow ends here.Depends on you. Most developers display a success message on this step.Configuration: utility.details
Wallet address: utility.wallet.address
NFTs: utility.nfts
Selected Token ID: ùtility.tokenIdEngagement object:utility.engagement`