Source Code

;; Credit Scoring System
;; On-chain credit scoring for DeFi lending

(define-constant contract-owner tx-sender)

(define-map credit-scores principal uint)
(define-map credit-history principal (list 100 uint))
(define-map payment-history principal { on-time: uint, late: uint, defaults: uint })

(define-read-only (get-credit-score (user principal))
  (default-to u300 (map-get? credit-scores user))
)

(define-read-only (get-payment-history (user principal))
  (default-to { on-time: u0, late: u0, defaults: u0 } (map-get? payment-history user))
)

(define-public (update-credit-score (user principal) (score uint))
  (begin
    (asserts! (is-eq tx-sender contract-owner) (err u100))
    (asserts! (and (>= score u300) (<= score u850)) (err u101))
    (map-set credit-scores user score)
    (ok score)
  )
)

(define-public (record-payment (user principal) (payment-type (string-ascii 16)))
  (let ((history (get-payment-history user)))
    (asserts! (is-eq tx-sender contract-owner) (err u100))
    (if (is-eq payment-type "on-time")
      (map-set payment-history user (merge history { on-time: (+ (get on-time history) u1) }))
      (if (is-eq payment-type "late")
        (map-set payment-history user (merge history { late: (+ (get late history) u1) }))
        (map-set payment-history user (merge history { defaults: (+ (get defaults history) u1) }))
      )
    )
    (ok true)
  )
)

(define-public (calculate-risk-premium (user principal))
  (let ((score (get-credit-score user)))
    (if (>= score u750)
      (ok u100)  ;; 1% premium for excellent credit
      (if (>= score u650)
        (ok u300)  ;; 3% premium for good credit
        (ok u800)  ;; 8% premium for poor credit
      )
    )
  )
)

Functions (5)

FunctionAccessArgs
get-credit-scoreread-onlyuser: principal
get-payment-historyread-onlyuser: principal
update-credit-scorepublicuser: principal, score: uint
record-paymentpublicuser: principal, payment-type: (string-ascii 16
calculate-risk-premiumpublicuser: principal