Source Code

;; ============================================
;; TRIGGER ACTIONS - Execution Logic
;; Clarity 4 Smart Contract
;; ============================================

(define-data-var processing-user principal tx-sender)
(define-data-var processing-balance uint u0)

(define-public (execute-trigger (user principal))
  (begin
    (asserts! (is-some (contract-call? .heartbeat-core get-status user)) (err u404))
    ;; 1. Attempt to trigger the switch (will fail if already triggered or not time)
    (try! (contract-call? .heartbeat-core try-trigger user))
    
    ;; 2. Get available balance and beneficiaries
    (let
      (
        (balance (contract-call? .vault get-balance user))
        (beneficiaries (contract-call? .beneficiary-mgr get-beneficiaries user))
      )
      ;; 3. Setup context for distribution
      (var-set processing-user user)
      (var-set processing-balance balance)
      
      ;; 4. Distribute funds
      (map distribute-one beneficiaries)
      
      (ok true)
    )
  )
)

(define-private (distribute-one (item { recipient: principal, percentage: uint }))
  (let
    (
      (amount (/ (* (var-get processing-balance) (get percentage item)) u100))
    )
    (if (> amount u0)
      (unwrap-panic (contract-call? .vault distribute-stx (var-get processing-user) (get recipient item) amount))
      true
    )
  )
)

Functions (2)

FunctionAccessArgs
execute-triggerpublicuser: principal
distribute-oneprivateitem: { recipient: principal, percentage: uint }