Source Code

;; Used to simulate mainnet migration from v1 to v2 in the test suite
;; Must be called after deploying migrate-v0-v1.clar

(define-data-var executed bool false)
(define-data-var executed-burn-mint bool false)
(define-data-var executed-reserve-data-update bool false)
(define-data-var executed-borrower-block-height bool false)

(define-data-var enabled bool true)
(define-constant deployer tx-sender)

;; TODO: to fetch off-chain
(define-constant borrowers (list
 { borrower: 'SP216CCD1CXGSGVXEZ073A6M8MCACT8QQ33XH5QV5, new-height: u157010 }
 { borrower: 'SP2C6BAJFCZAQTE9JVTNHKERP9E85HG65DPTXHH08, new-height: u157008 }
 { borrower: 'SP18T0NVN9ASCGTHJNHP41NG82NE50ACQ8AEV6HX9, new-height: u157008 }
 { borrower: 'SP1S1SEYS6YP2DSH0RT0WXJBC8KR3KN0SWPB2CDFE, new-height: u157013 }
 { borrower: 'SPFEXFX4SAQTG8SAC3C09CR8T00AZB45Q01KG6Y8, new-height: u167225 }
 { borrower: 'SP26RCCH463CWPHP7X839DTM51RZ8T134CYBMMD2P, new-height: u157010 }
 { borrower: 'SP15BWFCTJPKJXQ25MSCDTXHXJSZVK6WKFK1RM8KG, new-height: u157581 }
 { borrower: 'SP5TX47XA0FPHJ3GP3QM1G1PXT2NYYP9R0A8NBF6, new-height: u157013 }
 { borrower: 'SPP7SF3VCAS55KRRSA6X1NGQ76VNAAFKQ0NEK5K, new-height: u158659 }
 { borrower: 'SPD7THD7GS835R02RMZPDWJ3HE6JG1CM95CEJVF3, new-height: u157026 }
 { borrower: 'SP2DH8EWYV1AD95YKNNE4QTY1VWPN9FET8Q6YAR0H, new-height: u157027 }
 { borrower: 'SP15ET57VBMPY2F9K6CBDMCC3V8FJSV58VZMZJ4ZZ, new-height: u157647 }
 { borrower: 'SPSFH3JG92JZRXNEJWBHZM0AS0ER6TJJA22QBXS6, new-height: u157028 }
 { borrower: 'SP3K6VMHJKSYH0JD181DHMR2VH7VAAPGBY7K14J3J, new-height: u157581 }
 { borrower: 'SP9ES981MBE9RJPTFWWYBBYTESCR3K3V9J1742XX, new-height: u157010 }
 { borrower: 'SP1FB3G0V2S78SMQ11M1AWK3JXXAYP2FRG1N54634, new-height: u157027 }
 { borrower: 'SP3766V2QFS9MTZGGKVTPWST3J3NMFZQ9HVTV9N34, new-height: u156984 }
 { borrower: 'SP1K345SABJ2PKYYXC2261QGGQ7W2TJX7BBY1SN7Z, new-height: u157195 }
 { borrower: 'SP2G5BMW0H0YZNNWZDECJREPA19G8K06BW1KRT94K, new-height: u157028 }
 { borrower: 'SP2X4FEGSRJ8PJ09DYGVVMTGQK9H6CSKQZGNXJQE1, new-height: u157010 }
 { borrower: 'SP2E78TGFKW96CMBWQVK118AJYD9SC7DH1E0PVCV0, new-height: u161843 }
 { borrower: 'SP2D4BNFPXSBN2D0R8QS2QRQED9TTZVVS8EBA7RPG, new-height: u157028 }
 { borrower: 'SP12JWWTT9Z26JBXCMBBNW0WT1NB5Y2CE5N6HYGTX, new-height: u158432 }
 { borrower: 'SP1VE2C3RH2NAEM7CSBET6AZB8BMQ6P2JEV7S34V9, new-height: u157010 }
 { borrower: 'SP310VPG5A9YN3PS7NTSAEBEPX3E8H0HE8MACVTKZ, new-height: u166670 }
 { borrower: 'SP1342DAV9ANVMQMF5GWYQYJD6GXPT5EENP29CV1V, new-height: u157577 }
 { borrower: 'SPD1KY2V76R8PKA0HMHHCCDE51KDQXJV0VM98V1R, new-height: u157008 }
 { borrower: 'SP1XC8PH6FK8MJ8S0M24WGWVAPPE4Z7YYZ66FEW7C, new-height: u157010 }
 { borrower: 'SPPMVWYJHZX5ADZSA7GMAAPGE3V07JEE5KZSFP4D, new-height: u156857 }
 { borrower: 'SP224G21ZK17WA7D2VZC17JPWQ1PWEDPB418HM127, new-height: u156547 }
 { borrower: 'SP35C795MDF8ZNNG120AXPR3TZSETBJ84160415M5, new-height: u302881 }
 { borrower: 'SP1A9NJCYPQ8B0B8Q1ETG55T8YYG7X3S5EBEHZXMS, new-height: u158673 }
 { borrower: 'SPA5TQXK1FEEV8SA0S6G2PPZCWKDQQCSRG0N5BM4, new-height: u157185 }
 { borrower: 'SP23FHX061WDTW4K4BN1A07WA041S1M7B6CEAJFJQ, new-height: u156336 }
 { borrower: 'SP331F8SSP31M3AZQSB850XW5AGYRFJYFZTACXA1W, new-height: u156641 }
 { borrower: 'SP3JHZQ54Y1KMHZ1RQRG1B6SW47ZCNEM5NXZTNH9Z, new-height: u157578 }
 { borrower: 'SP3KZYTDJDYSXKRZHX4397FMK6B3BQ9WDJ4HYKTKW, new-height: u156377 }
 { borrower: 'SPHAE39Y1VX5QD2RFGYJG824WCE7MXNF7DPK2B8A, new-height: u156729 }
 { borrower: 'SP6KDDXGXQET3YG38QB264B76V9FT5V77HK2JXGG, new-height: u296132 }
 { borrower: 'SPE9PMY85TREWR33YYN44DX8BJ2CX5ZKF7NDHMM5, new-height: u156628 }
 { borrower: 'SP2PGDWR97DM7ASJSXY1R7NV5Z829A2H7C40Q2MPA, new-height: u156018 }
 { borrower: 'SP2NJS89HWM7E1W4P3MWEMJQEA0WHBA2WNM01H7X, new-height: u156212 }
))

(define-public (set-borrowers-block-height)
  (begin
    ;; TODO: remove 
    (asserts! false (err u1))
    (asserts! (var-get enabled) (err u10))
    (asserts! (is-eq deployer tx-sender) (err u11))
    (asserts! (not (var-get executed-borrower-block-height)) (err u10))
    ;; enabled access
    (try! (contract-call? .pool-reserve-data set-approved-contract (as-contract tx-sender) true))

    ;; set to last updated block height of the v2 version for borrowers
    ;; only addr-2 is a borrower in this case
    (try! (fold check-err (map set-ststx-user-burn-block-height-lambda borrowers) (ok true)))

    ;; disable access
    (try! (contract-call? .pool-reserve-data set-approved-contract (as-contract tx-sender) false))

    (var-set executed-borrower-block-height true)
    (ok true)
  )
)

(define-private (set-ststx-user-burn-block-height-lambda (ststx-borrower (tuple (borrower principal) (new-height uint))))
  (set-user-burn-block-height-to-stacks-block-height
    (get borrower ststx-borrower)
    'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token
    (get new-height ststx-borrower))
)

(define-private (check-err (result (response bool uint)) (prior (response bool uint)))
  (match prior ok-value result err-value (err err-value))
)

(define-private (set-user-burn-block-height-to-stacks-block-height
  (account principal)
  (asset principal)
  (new-stacks-block-height uint))
  (begin
    (try!
      (contract-call? .pool-reserve-data set-user-reserve-data
        account
        asset
          (merge
            (unwrap-panic (contract-call? .pool-reserve-data get-user-reserve-data-read account asset))
            { last-updated-block: new-stacks-block-height })))
    (ok true)
  )
)

(define-read-only (can-execute)
  (begin
    (asserts! (not (var-get executed)) (err u10))
    (ok (not (var-get executed)))
  )
)

(define-public (disable)
  (begin
    (asserts! (is-eq deployer tx-sender) (err u11))
    (ok (var-set enabled false))
  )
)

;; (run-update)
;; (burn-mint-zststx)

Functions (6)

FunctionAccessArgs
set-borrowers-block-heightpublic
set-ststx-user-burn-block-height-lambdaprivateststx-borrower: (tuple (borrower principal, new-height: uint
check-errprivateresult: (response bool uint
set-user-burn-block-height-to-stacks-block-heightprivateaccount: principal, asset: principal, new-stacks-block-height: uint
can-executeread-only
disablepublic