Source Code

;;  Stakra - Enhanced Reputation Protocol Smart Contract
;; A comprehensive system for managing participant reputation with staking and governance

;; Error Definitions
;; Governance and access control errors (1xx range)
(define-constant ERR-ACCESS-DENIED (err u100))
(define-constant ERR-GOVERNANCE-DISABLED (err u101))
(define-constant ERR-PROPOSAL-EXISTS (err u102))

;; Validation and bounds errors (2xx range)
(define-constant ERR-VALIDATION-FAILED (err u200))
(define-constant ERR-BOUNDS-VIOLATION (err u201))
(define-constant ERR-THRESHOLD-UNMET (err u202))

;; Entity state errors (3xx range)
(define-constant ERR-ENTITY-NOT-FOUND (err u300))
(define-constant ERR-ENTITY-EXISTS (err u301))
(define-constant ERR-INVALID-STATE (err u302))

;; Economic constraints errors (4xx range)
(define-constant ERR-INSUFFICIENT-FUNDS (err u400))
(define-constant ERR-ECONOMIC-CONSTRAINT (err u401))

;; Protocol Constants
;; Reputation bounds
(define-constant REPUTATION-MINIMUM u0)
(define-constant REPUTATION-MAXIMUM u100)

;; Time-based constants
(define-constant EPOCH-LENGTH u144)  ;; Approximately 1 day in blocks
(define-constant DECAY-INTERVAL u10000)
(define-constant DECAY-RATE u5)

;; Governance parameters
(define-constant PROPOSAL-THRESHOLD u75)
(define-constant VOTING-PERIOD u1008)  ;; ~1 week in blocks



;; Economic parameters
(define-constant MINIMUM-COLLATERAL-REQUIREMENT u1000)
(define-constant COLLATERAL-MULTIPLIER u2)
(define-constant PENALTY-RATE u10)


;; Protocol State Variables
;; Administrative state
(define-data-var protocol-administrator principal tx-sender)
(define-data-var governance-enabled bool true)
(define-data-var protocol-parameters
    {
        min-reputation: uint,
        max-reputation: uint,
        collateral-requirement: uint,
        epoch-length: uint
    }
    {
        min-reputation: REPUTATION-MINIMUM,
        max-reputation: REPUTATION-MAXIMUM,
        collateral-requirement: MINIMUM-COLLATERAL-REQUIREMENT,
        epoch-length: EPOCH-LENGTH
    }
)

;; Protocol metrics
(define-data-var global-statistics
    {
        participant-count: uint,
        total-collateral: uint,
        total-evaluations: uint,
        current-epoch: uint
    }
    {
        participant-count: u0,
        total-collateral: u0,
        total-evaluations: u0,
        current-epoch: u0
    }
)

;; Data Maps
;; Participant core data
(define-map participant-registry
    principal
    {
        reputation-score: uint,
        last-active-epoch: uint,
        evaluation-count: uint,
        collateral-balance: uint,
        status: (string-ascii 20)  ;; "ACTIVE", "SUSPENDED", "PROBATION"
    }
)

;; Evaluation and history tracking
(define-map evaluation-ledger
    { participant: principal, epoch: uint }
    {
        base-score: uint,
        weighted-score: uint,
        evaluator: principal,
        timestamp: uint,
        metadata: (optional (string-utf8 100))
    }
)

;; Evaluator authorization and reputation
(define-map evaluator-credentials
    principal
    {
        authorization-status: bool,
        evaluation-count: uint,
        accuracy-score: uint,
        last-evaluation: uint
    }
)

;; Governance proposals and voting
(define-map governance-proposals
    uint  ;; proposal-id
    {
        proposer: principal,
        description: (string-utf8 500),
        start-block: uint,
        end-block: uint,
        status: (string-ascii 10),  ;; "ACTIVE", "PASSED", "FAILED", "EXECUTED"
        votes-for: uint,
        votes-against: uint,
        execution-payload: (optional (buff 1024))
    }
)



(define-private (validate-participant-data (participant-data {
        reputation-score: uint,
        last-active-epoch: uint,
        evaluation-count: uint,
        collateral-balance: uint,
        status: (string-ascii 20)
    }))
    (if (and
        (validate-reputation-bounds (get reputation-score participant-data))
        (>= (get collateral-balance participant-data) MINIMUM-COLLATERAL-REQUIREMENT)
        (or 
            (is-eq (get status participant-data) "ACTIVE")
            (is-eq (get status participant-data) "SUSPENDED")
            (is-eq (get status participant-data) "PROBATION")
        )
    )
    (ok participant-data)  ;; Return validated data instead of just true
    ERR-VALIDATION-FAILED)
)

(define-private (validate-metadata (metadata (optional (string-utf8 100))))
    (match metadata
        meta (if (< (len meta) u100)
            (ok metadata)  ;; Return validated metadata
            ERR-VALIDATION-FAILED)
        (ok none)  ;; None is always valid
    )
)

(define-private (calculate-weighted-reputation 
    (current-score uint) 
    (new-score uint) 
    (evaluation-count uint)
    (evaluator-accuracy uint)
    )
    (let
        (
            (base-weight (/ (* current-score evaluation-count) (+ evaluation-count u1)))
            (new-weight (/ (* new-score evaluator-accuracy) (* u100 (+ evaluation-count u1))))
        )
        (+ base-weight new-weight)
    )
)

;; Private Functions
;; Validation functions
(define-private (validate-reputation-bounds (score uint))
    (let
        (
            (params (var-get protocol-parameters))
        )
        (and 
            (>= score (get min-reputation params))
            (<= score (get max-reputation params))
        )
    )
)



Functions (2)

FunctionAccessArgs
validate-metadataprivatemetadata: (optional (string-utf8 100
validate-reputation-boundsprivatescore: uint