Generally the idea is to represent a physical asset (car, real estate, art) as an NFT. By attaching documents stored on ipfs to this Token, these tokens can then be used to verify various different asset properties such as ownership / maintenance history, registrations, inspections / certifications and much more. As an extra layer of verification the smart contract calls an oracle upon minting a token to verify the provided asset id and load some asset-data from an external source. The currently implemented version is based on the use case of vehicles / cars which can be uniquely identified using their Vehicle Identification Number (VIN). For this use case the workflow is as follows: 1. The user mints an NFT by providing his Vehicle Identification Number (VIN) and a picture of the vehicle. 2. The Picture will be saved on IPFS using the api and the CID is attached to the respective token 3. A Chainlink oracle is used to query the Vehicle API of the US Department of Transportation, decode the VIN and save some of the resulting metadata on chain. (Manufacturer, Model, Year) 4. The owner of a Token can attach documents to it, which will also be saved on IPFS 5. Any user can query the App using a VIN to view the Vehicles metadata as well as all the attached documents. 6. The ERC-721 compliant vehicle tokens could be used anywhere in the NFT ecosystem.

NFTrail showcase

How it's made

The Frontend / GUI is implemented using Vue.js and connects to the Smart contracts via ethers.js. The smart contracts in this application implement an ERC-721 Token. Beyond that, it contains functions to attach IPFS hosted documents to the token and calls an external oracle to verify the provided token Id (in this case a Vehicle Identification Number - VIN). I used to store various types of files on IPFS, Chainlink to call an Off-Chain API vor verification of a provided VIN, Covalent to query the transaction history of a given token and Polygon to host all contracts on Layer 2.

Technologies used