Mobile application for creating, transferring, minting and verifying phygitals.
Due to the tight schedule, I wasn't able to upload the app to the App Store nor App Store Connect. But even if I were able to upload the app, it wouldn't make a lot of sense downloading it as you wouldn't be able to do more than just log in as you would need the Phygital NFC Tags to play around with it. Because of this reason I have created a bunch of videos of all the possible scenarios that may come up during its usage.
- Flutter
- App has been developed and tested on an iOS mobile (iPhone 13 mini), but should theoretically work on Android aswell
- Attention: Due to time restrictions I have neglected to test it on Android and any other screen resolutions.
- Android Studio
- XCode
- Open the Frontend
- Press the LOGIN WITH UNIVERSAL PROFILE button
- Select a Universal Profile
- Press the SET PERMISSIONS button (if not done before)
- Confirm the transaction to set the necessary permissions for the controller key used by the Backend
- Wait until the transaction is completed
- Press the CREATE APP LOGIN QR CODE button
- Press the Log in button in the UP extension to confirm the login (sends request to the Backend which returns a Json Web Token that is valid for 24 hours)
- App Login QR Code is shown (contains universal profile address, chain id and json web token for authentication)
- Open the Phygital-App
- Press the Login with Universal Profile button
- Scan the App Login QR Code
- App checks if the login code is valid.
- YES: App logs you in
- NO: Error message appears
- App checks if the login code is valid.
- Flash an arbitrary amount of Phygital NFC Tags with the provided Phygital Firmware
- On the first boot an asymmetric secp256k1 key-pair is generated, identifying the phygital in a unique way and allowing it to sign messages to verify the ownership (e.g. for minting and transferring)
- Open the Phygital-App
- Login if necessary (see Login - Workflow)
- Press the Menu button
- Press the Create button
- App opens Create Collection screen
- Input the Name, Symbol and Metadata (images, descriptions, links etc.) for the collection using the given form
- For each flashed Phygital NFC Tag:
- Press the Add button in the Phygitals section
- Scan the Phygital NFC Tag
- Reads the public key from the Phygital NFC Tag
- Input the Name, Symbol and Metadata (images, descriptions, links etc.) for the phygital using the given form
- Press the Create button and wait until the deployment steps are completed:
- App creates LSP4 metadata for collection and phygitals
- App uploads LSP4 metadata to IPFS
- App uploads images for collection and phygitals to IPFS
- App uploads the list of phygital addresses (collection) to IPFS
- App sends needed data to Backend
- Backend deploys Phygital Asset contract instance with controller key
- App opens Assign Collection screen
- For each flashed Phygital NFC Tag
- Press the Assign button in the Left Phygitals section
- Scan the Phygital NFC Tag
- Writes the address of the deployed contract to the NFC tag (bidirectional binding)
- Once all Phygital NFC Tags have been assigned the collection
- App opens the Phygital Collection screen
- Phygital Asset Creation done
- Open the Phygital-App
- Login if necessary (see Login - Workflow)
- Press the Menu button
- Press the Mint button
- App prompts you to scan the Phygital NFC Tag
- Scan the Phygital NFC Tag
- App reads phygital data and checks if it is valid
- NOT MINTED: App opens Phygital screen with Mint button
- MINTED/UNASSIGNED/INVALID: Error message appears
- App reads phygital data and checks if it is valid
- Press the Mint button
- App prompts you to scan the same Phygital NFC Tag to start minting
- Wait until the minting steps are completed:
- Phygital NFC Tag signs Universal Profile Address concatenated with the Nonce 0 with internal private key and returns the signature
- App sends needed data to Backend
- Backend calls mint contract function with controller key
- App opens the Phygital screen
- Phygital Asset Minting done
- Open the Phygital-App
- Login if necessary (see Login - Workflow)
- Press the Menu button
- Press the Transfer button
- App prompts you to scan the Phygital NFC Tag
- Scan the Phygital NFC Tag
- App reads phygital data and checks if it is valid
- LOGGED IN UP IS OWNER, MINTED AND VERIFIED OWNERSHIP: App opens Phygital screen with Transfer button
- UNMINTED/UNVERIFIED OWNERSHIP/NOT OWNER/UNASSIGNED/INVALID: Error message appears
- App reads phygital data and checks if it is valid
- Press the Transfer button
- App prompts you to scan the QR code of the recipient's universal profile address
- VALID UP ADDRESS: App opens To Universal Profile screen with Confirm button
- INVALID UP ADDRESS: Error message appears
- Press Confirm button
- App prompts you to scan the same Phygital NFC Tag to start the transfer
- Wait until the transfer steps are completed:
- Phygital NFC Tag signs To Universal Profile Address concatenated with the current Nonce retrieved from the collection's smart contract with internal private key and returns the signature
- App sends needed data to Backend
- Backend calls transfer contract function with controller key
- App opens the Phygital screen
- Phygital Asset Transfer done
- Open the Phygital-App
- Login if necessary (see Login - Workflow)
- Press the Menu button
- Press the Verify Ownership After Transfer button
- App prompts you to scan the Phygital NFC Tag
- Scan the Phygital NFC Tag
- App reads phygital data and checks if it is valid
- LOGGED IN UP IS OWNER, MINTED AND UNVERIFIED OWNERSHIP: App opens Phygital screen with Verify Ownership button
- UNMINTED/VERIFIED OWNERSHIP/NOT OWNER/UNASSIGNED/INVALID: Error message appears
- App reads phygital data and checks if it is valid
- Press the Verify Ownership button
- App prompts you to scan the same Phygital NFC Tag to start verifying the ownership
- Wait until the verification steps are completed:
- Phygital NFC Tag signs Universal Profile Address concatenated with the current Nonce retrieved from the collection's smart contract with internal private key and returns the signature
- App sends needed data to Backend
- Backend calls verifyOwnershipAfterTransfer contract function with controller key
- App opens the Phygital screen
- Phygital Asset Ownership Verification after Transfer done