Learning project: On-chain sealed-bid auctions for license renewal rights — feedback welcome

Hi everyone,

I’ve been learning Daml/Canton by extending the cn-quickstart app. I added a sealed-bid auction mechanism for renewing software licenses, entirely on-chain. I’d love feedback from the community.

Instead of direct license renewal, a provider can auction a RenewalRight. The flow is:

  1. Provider creates a RenewalRightAuction
  2. Registered users get a BidSlot and submit sealed bids (each bid is a separate RenewalRightBid contract implementing AllocationRequest)
  3. The provider determines the winner in a new contract with no observers
  4. Settlement executes payment and creates a new RenewalRight that must be used to renew the license.

Design choices:

  • One contract per bid to avoid write collisions between competing bidders.
  • Privacy: losing bidders only see their own bid, not the other bids or the auction result.

I searched a bit for projects involving auctions in canton but didn’t find a lot. I saw that in the HKMA’s Project Evergreen, they kept the bookbuilding off-chain and only used DLT for settlement. Are there technical reasons that would favor keeping auction logic off-chain on Canton?