Inspiration
This project idea to create a unified auctioning framework was born at a company called www.drife.one of which I'm the CTO and a cofounder. At Drife, we're trying to build a decentralised ride-hailing platform with a whole new economic model to incentivise all the value creators fairly and to curb the existent central intermediaries. I was trying to replace the surge based dynamic pricing models that are used currently across most centralised ride-hailing platforms with an auction-based mechanism running on a blockchain. However, with a bit of research, I realised that no unified framework exists for conducting customizable auctions which ultimately led to the conception of this project.
What it does
TezAuction is a marketplace for NFTs or non-fungible tokens powered by a unified flexible framework for conducting different formats of auctions with customisable auctioning attributes. It is basically an auction-driven marketplace for rare, unique, precious and collectable items. These include both, real-world antiques, artworks, and other high-priced things as well as digital non-fungible assets like kitties and other virtual characters, collectable and tradable cards, and in-game assets.
How I built it
Tezos smart contracts written in SmartPy (a Python Library), compiled down to Michelson (a stack-based assembly like language) and designed in a mediator proxy and factory design patterns have been used to create and manage auctions. An Auction contract acting as a proxy contract (containing master data and functionalities) is created along with factory contracts for the various auctioning models like English, Dutch, Sealed Bid, and Vickrey. This Master/Proxy Auction contract receives auctioning requests from users desiring to sell their assets through an auctioning process, registering the asset if not already registered, initiates the auction, and instantiates a customisable auctioning contract instance from the respective factory. Based on the requirements of the auctioneer/seller, the parameters of the auctioning contract instance are configured by the seller/auctioneer. The Auction contract represents each asset with a unique asset_id as different transferable non-fungible tokens (NFTs). Once the auction is over, the auctioned assets and the final settlement amount held by the auction instance contract will eventually be released to the respective parties in an atomic swap.
Challenges I ran into
When the auction ends, if the auctioned asset is just a digital non-fungible asset, the asset and the settlement amount will be released to the respective parties in an atomic swap immediately. However, if the asset is a real-world asset that needs to be shipped to the buyer (winner of the auction), how do we ensure the due shipping and delivery of the asset and also that the seller doesn't double-spend the physical asset itself. This is where the ChainLink oracle comes in and it uses the FedEx and UPS shipment tracking APIs to track and report the status. Only when the asset is delivered to the buyer are the final settlement funds released to the seller.
Accomplishments that I'm proud of
TezAuction (formerly DexAuction) won the first prize in the Coinlist Tezos hackathon in the DeFi category. NOTE Requesting the judges to judge based on the latest feature of shipment tracking added via the ChainLink Oracle and not the entire app.
What I learned
Integrating ChainLink oracles with Tezos smart contracts written in SmartPy to call external APIs.
What's next for TezAuction
Built With
- css
- html
- javascript
- mysql
- node.js
- smartpy
- taquito
- tezos

Log in or sign up for Devpost to join the conversation.