litemint-auction-contract

Auction smart contract for the Litemint marketplace, implementing timed auctions with support for sealed bids, ascending and descending price mechanisms

4 releases

0.1.7 Feb 7, 2024
0.1.5 Dec 26, 2023
0.1.4 Dec 19, 2023
0.1.3 Dec 19, 2023

Custom license

57KB
995 lines

MIT License Twitter

litemint-auction-contract

Build Status litemint-auction-contract version

Litemint auction smart contract powering the Litemint marketplace.

Licensed under MIT. This software is provided "AS IS", no liability assumed. More details.

Introduction

Since 2021, the Litemint marketplace has utilized the Stellar DEX for time-based auctions, leveraging time-bound, pre-auth transactions details in our blog. While these auctions offer security and interoperability, they lack flexibilities, such as anti-snipe mechanisms and varied bidding strategies like descending auctions.

The Litemint Auction Contract on Soroban (Stellar's Rust-based smart contracts platform), addresses these limitations. The smart contract enhances the Litemint marketplace while co-existing with our SDEX-based method, offering users a comprehensive and versatile auction experience.

Feature List

  • Time-based auctions with decentralized resolution.
  • Sealed bid auctions.
  • Descending price auctions (see behavior_descending_price.rs) supporting linear or compound discount, and customizable frequency/rate.
  • Ascending price auctions (see behavior_ascending_price.rs) with "buy now" option.
  • Support for reserve price and ask price.
  • Anti-snipe mechanism. Auction sniping automatically increases the auction duration (time configurable by admin) and prevents the sniper to either cancel or submit a new bid.
  • Configurable marketplace commission rate.
  • Extendable auction duration by seller.
  • Support for concurrent and cancellable bids.
  • Strategy design pattern for easily adding new auction behaviors.

Dependencies

soroban-kit

soroban-kit provides fast, lightweight functions and macros with lean, targeted functionality for Soroban smart contract development: https://github.com/FredericRezeau/soroban-kit.

The Litemint auction contract uses the following features from soroban-kit:

  • commitment-scheme to implement sealed bid auctions.
  • state-machine to manage auction phases.
  • storage for type safety with storage operations.

Getting Started

From the workspace root:

  1. Cloning the repository:
    git clone https://github.com/Litemint/litemint-soroban-contracts.git
    
  2. Building the contracts:
    soroban contract build
    
  3. Running Tests:
    cargo test -- --nocapture
    
  4. Deploying to testnet:
    soroban contract deploy --wasm target/wasm32-unknown-unknown/release/litemint_auction_contract.wasm --source ACCOUNT --rpc-url https://soroban-testnet.stellar.org:443 --network-passphrase "Test SDF Network ; September 2015"
    
    output > CONTRACT_ID
    
  5. Initialize admin:
    soroban contract invoke --id CONTRACT_ID --source ACCOUNT --rpc-url https://soroban-testnet.stellar.org:443 --network-passphrase "Test SDF Network ; September 2015" -- initialize --admin ACCOUNT --anti_snipe_time 60 --commission_rate 5 --extendable_auctions true
    

Contributing

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/feature)
  3. Commit your Changes (git commit -m 'Add some feature')
  4. Push to the Branch (git push origin feature/feature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Contact

LitemintHQ on X - @LitemintHQ

Litemint Marketplace: https://litemint.com

Join our discord server: https://litemint.gg

Dependencies

~12–16MB
~345K SLoC