Source Code

;; --- Claim tracking maps ---
(define-map claimed-a principal bool)
(define-map claimed-b principal bool)
(define-map claimed-c principal bool)
(define-map claimed-d principal bool)

;; --- Utility functions ---
(define-private (check-and-set-claimed-a (user principal))
  (match (map-get? claimed-a user)
    claimed false
    (begin
      (map-set claimed-a user true)
      true)))

(define-private (check-and-set-claimed-b (user principal))
  (match (map-get? claimed-b user)
    claimed false
    (begin
      (map-set claimed-b user true)
      true)))

(define-private (check-and-set-claimed-c (user principal))
  (match (map-get? claimed-c user)
    claimed false
    (begin
      (map-set claimed-c user true)
      true)))

(define-private (check-and-set-claimed-d (user principal))
  (match (map-get? claimed-d user)
    claimed false
    (begin
      (map-set claimed-d user true)
      true)))

;; --- Claim amount functions ---
(define-read-only (get-claim-amount-a (user principal))
  (contract-call? .gbab-v0 get-cha-at-block user u166688))

(define-read-only (get-claim-amount-b (user principal))
  (let ((amount (contract-call? .gbab-v0 get-scha-at-block user u166688)))
    (ok (/ (* u11 (unwrap-panic amount)) u10))))

(define-read-only (get-claim-amount-c (user principal))
  (contract-call? .gbab-v0 get-wcha-at-block user u166688))

(define-read-only (get-claim-amount-d (user principal))
  (let ((amount (contract-call? .gbab-v0 get-staked-scha-at-block user u166688)))
    (ok (/ (* u11 (unwrap-panic amount)) u10))))

;; --- Mint functions ---
(define-public (mint-a)
  (let (
    (user tx-sender)
    (amount (unwrap-panic (get-claim-amount-a user))))
    (if (and (> amount u0) (check-and-set-claimed-a user))
      (contract-call? 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dme000-governance-token dmg-mint amount user)
      (err u0)))) ;; Either already claimed or no balance

(define-public (mint-b)
  (let (
    (user tx-sender)
    (amount (unwrap-panic (get-claim-amount-b user))))
    (if (and (> amount u0) (check-and-set-claimed-b user))
      (contract-call? 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dme000-governance-token dmg-mint amount user)
      (err u1)))) ;; Either already claimed or no balance

(define-public (mint-c)
  (let (
    (user tx-sender)
    (amount (unwrap-panic (get-claim-amount-c user))))
    (if (and (> amount u0) (check-and-set-claimed-c user))
      (contract-call? 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dme000-governance-token dmg-mint amount user)
      (err u2)))) ;; Either already claimed or no balance

(define-public (mint-d)
  (let (
    (user tx-sender)
    (amount (unwrap-panic (get-claim-amount-d user))))
    (if (and (> amount u0) (check-and-set-claimed-d user))
      (contract-call? 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dme000-governance-token dmg-mint amount user)
      (err u3)))) ;; Either already claimed or no balance

;; --- Read-only functions ---
(define-read-only (has-claimed-a (user principal))
  (default-to false (map-get? claimed-a user)))

(define-read-only (has-claimed-b (user principal))
  (default-to false (map-get? claimed-b user)))

(define-read-only (has-claimed-c (user principal))
  (default-to false (map-get? claimed-c user)))

(define-read-only (has-claimed-d (user principal))
  (default-to false (map-get? claimed-d user)))

(define-read-only (get-all-claims (user principal))
  {
    a: (has-claimed-a user),
    b: (has-claimed-b user),
    c: (has-claimed-c user),
    d: (has-claimed-d user)
  })

Functions (17)

FunctionAccessArgs
check-and-set-claimed-aprivateuser: principal
check-and-set-claimed-bprivateuser: principal
check-and-set-claimed-cprivateuser: principal
check-and-set-claimed-dprivateuser: principal
get-claim-amount-aread-onlyuser: principal
get-claim-amount-bread-onlyuser: principal
get-claim-amount-cread-onlyuser: principal
get-claim-amount-dread-onlyuser: principal
mint-apublic
mint-bpublic
mint-cpublic
mint-dpublic
has-claimed-aread-onlyuser: principal
has-claimed-bread-onlyuser: principal
has-claimed-cread-onlyuser: principal
has-claimed-dread-onlyuser: principal
get-all-claimsread-onlyuser: principal