Source Code

;; SCS constants
(define-constant SCS_RATIO_BASE u293758009048)
(define-constant SCS_STX_MULTIPLIER u90711607748)
(define-constant SCS_SCHA_MULTIPLIER u982604817795)

;; WCS constants
(define-constant WCS_RATIO_BASE u80489226083)
(define-constant WCS_STX_MULTIPLIER u24022473965)
(define-constant WCS_WCHA_MULTIPLIER u282617340771)

(define-read-only (calculate-ratio (value-1 uint) (value-2 uint) (value-3 uint) (ratio-base uint))
  (let
    (
      (total (+ value-1 value-2 value-3))
      (ratio (/ (* total u1000000) ratio-base))  ;; Multiply by 1000000 for precision
    )
    ratio
  )
)

(define-read-only (calculate-result (ratio uint) (multiplier uint))
  (/ (* ratio multiplier) u1000000)
)

(define-public (check-lp (user-address principal))
  (let
    (
      ;; SCS calculations
      (scs-lands-lp (contract-call? .lp-balance-checker scs-lands-lp-checker user-address))
      (scs-user-lp (contract-call? .lp-balance-checker scs-user-lp-checker user-address))
      (scs-velar-lp (contract-call? .lp-balance-checker scs-velar-lp-checker user-address))
      (scs-ratio (calculate-ratio scs-lands-lp scs-user-lp (get end scs-velar-lp) SCS_RATIO_BASE))
      (scs-stx-result (calculate-result scs-ratio SCS_STX_MULTIPLIER))
      (scs-scha-result (calculate-result scs-ratio SCS_SCHA_MULTIPLIER))
      
      ;; WCS calculations
      (wcs-lands-lp (contract-call? .lp-balance-checker wcs-lands-lp-checker user-address))
      (wcs-user-lp (contract-call? .lp-balance-checker wcs-user-lp-checker user-address))
      (wcs-velar-lp (contract-call? .lp-balance-checker wcs-velar-lp-checker user-address))
      (wcs-ratio (calculate-ratio wcs-lands-lp wcs-user-lp (get end wcs-velar-lp) WCS_RATIO_BASE))
      (wcs-stx-result (calculate-result wcs-ratio WCS_STX_MULTIPLIER))
      (wcs-wcha-result (calculate-result wcs-ratio WCS_WCHA_MULTIPLIER))
    )
    (ok {
      scs: {
        lands-lp: scs-lands-lp,
        user-lp: scs-user-lp,
        velar-lp: scs-velar-lp,
        stx: scs-stx-result,
        scha: scs-scha-result
      },
      wcs: {
        lands-lp: wcs-lands-lp,
        user-lp: wcs-user-lp,
        velar-lp: wcs-velar-lp,
        stx: wcs-stx-result,
        wcha: wcs-wcha-result
      }
    })
  )
)

Functions (3)

FunctionAccessArgs
calculate-ratioread-onlyvalue-1: uint, value-2: uint, value-3: uint, ratio-base: uint
calculate-resultread-onlyratio: uint, multiplier: uint
check-lppublicuser-address: principal