Source Code

;; Energy Overload
;;
;; This contract manages energy storage functionality for the Charisma ecosystem.
;; It determines whether energy should be stored or burned based on user upgrades,
;; such as Memobot ownership. The energy preservation amount is configurable and
;; stacks with multiple Memobots.

(use-trait sip10-trait .dao-traits-v6.sip010-ft-trait)

;; Constants
(define-constant ERR_UNAUTHORIZED (err u401))

;; Data Variables
(define-data-var energy-per-memobot uint u10000000) ;; Default: 10 energy per Memobot

;; Authorization check
(define-private (is-authorized)
    (or (is-eq tx-sender 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dungeon-master) 
        (contract-call? 'SP2D5BGGJ956A635JG7CJQ59FTRFRB0893514EZPJ.dungeon-master is-extension contract-caller))
)

;; Public functions
(define-public (handle-overflow)
    (let
        (
            (energy-balance (get-energy-balance tx-sender))
            (preservable-energy (get-preservable-energy tx-sender))
        )
        (if (>= preservable-energy energy-balance)
            (ok true)  ;; All energy can be preserved
            (contract-call? .energy burn (- energy-balance preservable-energy) tx-sender)
        )
    )
)

;; Read-only functions
(define-read-only (get-preservable-energy (user principal))
    (let
        (
            (memobot-count (unwrap-panic (contract-call? .memobots-guardians-of-the-gigaverse get-balance user)))
        )
        (* memobot-count (var-get energy-per-memobot))
    )
)

(define-read-only (get-energy-per-memobot)
    (ok (var-get energy-per-memobot))
)

;; Private functions
(define-private (get-energy-balance (user principal))
    (unwrap-panic (contract-call? .energy get-balance user))
)

;; Admin functions
(define-public (set-energy-per-memobot (new-amount uint))
    (begin
        (asserts! (is-authorized) ERR_UNAUTHORIZED)
        (ok (var-set energy-per-memobot new-amount))
    )
)

Functions (6)

FunctionAccessArgs
set-energy-per-memobotpublicnew-amount: uint
is-authorizedprivate
handle-overflowpublic
get-preservable-energyread-onlyuser: principal
get-energy-per-memobotread-only
get-energy-balanceprivateuser: principal