Source Code

;; AI Training Rewards
;; Reward contributors for model training

(define-constant contract-owner tx-sender)
(define-data-var reward-pool uint u0)

(define-map contributions
  principal
  {
    compute-hours: uint,
    rewards-earned: uint,
    last-claim: uint
  }
)

(define-read-only (get-contribution (contributor principal))
  (map-get? contributions contributor)
)

(define-public (add-contribution (compute-hours uint))
  (let ((existing (default-to { compute-hours: u0, rewards-earned: u0, last-claim: u0 } 
                               (map-get? contributions tx-sender))))
    (map-set contributions tx-sender {
      compute-hours: (+ (get compute-hours existing) compute-hours),
      rewards-earned: (get rewards-earned existing),
      last-claim: (get last-claim existing)
    })
    (ok true)
  )
)

(define-public (claim-rewards)
  (let ((contribution (unwrap! (map-get? contributions tx-sender) (err u100))))
    (let ((reward-amount (* (get compute-hours contribution) u1000)))
      (asserts! (>= (var-get reward-pool) reward-amount) (err u101))
      (try! (as-contract (stx-transfer? reward-amount tx-sender tx-sender)))
      (var-set reward-pool (- (var-get reward-pool) reward-amount))
      (map-set contributions tx-sender (merge contribution { 
        rewards-earned: (+ (get rewards-earned contribution) reward-amount),
        last-claim: block-height
      }))
      (ok reward-amount)
    )
  )
)

Functions (3)

FunctionAccessArgs
claim-rewardspublic
get-contributionread-onlycontributor: principal
add-contributionpubliccompute-hours: uint