Using the less than function for comparisons in Clarity smart contracts.
The less than function (<) in Clarity compares two values and returns true if the first value is less than the second. It's a fundamental comparison operation used in many smart contract conditions and logic flows.
Let's implement a simple auction contract that uses the less than function to enforce a maximum bid amount:
;; Define constants(define-constant MAX_BID u1000000000) ;; 1000 STX(define-constant AUCTION_END_HEIGHT u100);; Define data variables(define-data-var currentHighestBid uint u0)(define-data-var highestBidder (optional principal) none);; Function to place a bid(define-public (place-bid (bid uint)) (let ( (current-block-height block-height) ) ;; Check if the auction is still open (asserts! (< current-block-height AUCTION_END_HEIGHT) (err u1)) ;; Check if the bid is less than the maximum allowed bid (asserts! (< bid MAX_BID) (err u2)) ;; Check if the bid is higher than the current highest bid (asserts! (> bid (var-get currentHighestBid)) (err u3)) ;; Place the bid (try! (stx-transfer? bid tx-sender (as-contract tx-sender))) (var-set currentHighestBid bid) (var-set highestBidder (some tx-sender)) (ok bid) ));; Function to check current highest bid(define-read-only (get-highest-bid) (ok (var-get currentHighestBid)));; Function to check if auction has ended(define-read-only (auction-ended) (>= block-height AUCTION_END_HEIGHT))
This example demonstrates:
Using < to check if the current block height is less than the auction end height.
Using < to ensure the bid is less than the maximum allowed bid.
Combining the less than check with other contract logic for an auction system.
The less than function is a fundamental tool for implementing comparison logic in Clarity smart contracts. By understanding its behavior with different types and potential edge cases, developers can create robust conditional logic and enforce important thresholds in their contracts.