Source Code

;;NOT Punk Collab Vault

(define-constant ERR-NOT-AUTHORIZED u404)
(define-constant ERR-INVALID-PERCENTAGE u405)
(define-data-var collab-address-1 principal 'SP1C2K603TGWJGKPT2Z3WWHA0ARM66D352385TTWH)
(define-data-var collab-address-2 principal 'SM776ZBWZXXJRH8GV0PPRMSM550D553B334A1VKN)
(define-data-var perc-address-1 uint u50)
(define-data-var perc-address-2 uint u50)
(define-data-var new-percentage-approval (tuple (perc-1 uint) (perc-2 uint) (caller principal)) {perc-1: u0, perc-2: u0, caller: tx-sender})

(define-read-only (get-balance) (stx-get-balance (as-contract tx-sender)))

(define-public (withdraw) 
    (let (
        (address-1 (var-get collab-address-1))
        (address-2 (var-get collab-address-2))
        (perc-1 (var-get perc-address-1))
        (perc-2 (var-get perc-address-2))
        (balance (get-balance))
        (amount-1 (/ (* balance (* perc-1 u100)) u10000))
        (amount-2 (/ (* balance (* perc-2 u100)) u10000))
        ) 
        (asserts! (or (is-eq tx-sender address-1) (is-eq tx-sender address-2)) (err ERR-NOT-AUTHORIZED))
        (try! (as-contract (stx-transfer? amount-1 (as-contract tx-sender) address-1)))
        (try! (as-contract (stx-transfer? amount-2 (as-contract tx-sender) address-2)))
        (ok true)))

(define-public (change-address-1 (new-address principal)) 
    (begin  
        (asserts! (is-eq tx-sender (var-get collab-address-1)) (err ERR-NOT-AUTHORIZED))
        (var-set new-percentage-approval {perc-1: u0, perc-2: u0, caller: tx-sender});;reset new percentage approvals
        (ok (var-set collab-address-1 new-address))))

(define-public (change-address-2 (new-address principal)) 
    (begin
        (asserts! (is-eq tx-sender (var-get collab-address-2)) (err ERR-NOT-AUTHORIZED))
        (var-set new-percentage-approval {perc-1: u0, perc-2: u0, caller: tx-sender});;reset new percentage approvals
        (ok (var-set collab-address-2 new-address))))

(define-public (change-percentages (new-perc-1 uint) (new-perc-2 uint)) 
    (begin 
        (asserts! (or (is-eq tx-sender (var-get collab-address-1)) (is-eq tx-sender (var-get collab-address-2))) (err ERR-NOT-AUTHORIZED))
        (asserts! (is-eq (+ new-perc-1 new-perc-2) u100) (err ERR-INVALID-PERCENTAGE))
        (if (and 
                (is-eq (get perc-1 (var-get new-percentage-approval)) new-perc-1) 
                (is-eq (get perc-2 (var-get new-percentage-approval)) new-perc-2)
                (not (is-eq (get caller (var-get new-percentage-approval)) tx-sender))
                )
            (begin 
                (var-set perc-address-1 new-perc-1)
                (var-set perc-address-2 new-perc-2)
                (ok true))
            (begin 
                (var-set new-percentage-approval {perc-1: new-perc-1, perc-2: new-perc-2, caller: tx-sender})
                (ok true)))))

Functions (5)

FunctionAccessArgs
get-balanceread-only
withdrawpublic
change-address-1publicnew-address: principal
change-address-2publicnew-address: principal
change-percentagespublicnew-perc-1: uint, new-perc-2: uint