;; Used to simulate mainnet migration from v1 to v2 in the test suite
;; Must be called after deploying migrate-v0-v1.clar
(define-constant deployer tx-sender)
(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)
;; TODO: to fetch off-chain
(define-constant holders (list
'SP2FA1H3K9FMY2CQ80WWT2JYMHZ5Z2B810AT41APW
'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR
'SPWKDKPZ3QDPQGDADWJ3EWPAP14CB1N1HDQ897W5
'SP15WAVKQNT241YVCGQMJS777E17H9TS96M21Q5DX
'SP2977G167RB11CCRQDCB3MKJ0AXJK2S75G2JMHAM
'SP2NNT3JBTS93DHW86F66KW2WD9BSGYKXZV8GJ8KY
'SP3MHM9HFXX3ZJT4B43C2Q6A4HJ287S70GDTTC6XY
'SP3CEM5Y6P273YX74ME1D70AN6HJPQTA1HCK1HEBW
'SP2M64A49FD47RC7WJZNH9ZZPN6R72BQ2S4ZDV9MR
'SP242EYG60RDPPY74JSZRZGT3VEAZAVY2XJ37HJW9
'SP2EZBRH2T5A4TPFFTDK48CHR0WG95YZZA4HC1TJE
'SP30A5QYGBG69PQT7Y2CVW9SAX3VTWA3QY5DST080
'SP2GWFRM68YNT1BSZDE2DE7AS7JV46P3ECPSNTPCB
'SP143S7QJWE14EYGVTC99HGYEMG70YVG1RT81KA1A
'SP3P9XNPA8GQ2GH2BJ0P3DK71HS34WSD6TK59G3HR
'SP1XE3NF4ECXWBHB7DRB1WTM9TYCCTVN6PWG9W0BT
'SP1W9GZJ0KCKFCX0V0YTFGX7WZ3H9X26J3WPD0R30
'SP31A0B5K60KHWM3S3JD0B47TG3R43PT1KRV7V53B
'SP2WRX7ZAR4Z1SJ5V1NHBXZHWX2112HATSDV4R0Y5
'SP1EVDA2XDA0PC56W0XFMWXWX7F3TC4HY35XXM88G
'SP3XD84X3PE79SHJAZCDW1V5E9EA8JSKRBPEKAEK7
'SP24YJDP5R2F4BJNR3EMMFE3QVR1HJ2T6XPGC1N7S
'SP2K8KMB5KFZHHPEGDH0X7Y8KVQSG3CYHJVSX3FHQ
'SP1VNT02M7N2XGHE7ZN0V9MD0YEEMC1D9EDVZ94PA
'SPWGBBG0G1Y4NMYFK7166EJ9T1WDPXCSHXFN92PS
'SP2P8TTHQQPYDKX6P3F99FV4PHPC1BRAHAW7QRHAD
'SP20W5G3VF4SY9S095TVYPHFX04YWGX25XZYT68K4
'SP2KW7JS1S4F4FQD869JCCKS2QC8NZJWBPFFMW6R4
'SPAV0VQHN75HVZ8XX24CHM17N7PJN94YSENZHRT0
'SP16JSP1JMTBNV3GN5Y3JYEEPG5WK3SGSYDZSM7VJ
'SP19B7JPCGVBP2TEZ32FYHVQPWD9JGVGVBWZJNFCX
'SP2GB8MCSPVQRX2M7ACDTKS75DHA0JQ8GSD5JJ8ED
'SP18YRRY3RVZDVBK71N52WGP5B9QJQ8PZXY7AS5H9
'SP1J5PS54EC4M9WN7CVNFRP5J88DB9K0MS06PZ7R6
'SPN0FMB91X65WPEMQ278NCWCZ14XSAT7MJ4J9543
'SP3RY185H0R8TNX4PGRYFZ07AV001N23N1FJX9MEE
'SP3T8XVBX10T72WB2E41ZTS5NCY85WC6YMWR2QA6K
'SP8SW57KSRRH1R0X5BDGNBZ8Z67KFEW74Z9KVVZ5
'SP3VFJDBAM5AQVRRBCWNP2CFT3A2PC0SCYSKJ3EGH
'SP3WT9PV5E28VBHAN7KV2BTHCA93SC9R7B64MB043
'SP1FN4ESFYD1CXCJBE3WN1XPR8CGE8N30PYVNB7PT
'SP1ZPS1ENZ8KXXMS960DQ6ZT3AQSB7BWD2W6P6297
'SP1FXCKY6E03H7HYKWX8Z0DGJ54YDK5CQH1EDSAJM
'SP39TAEWH0DYMK8DZ00D61DMA4D4N544HVGQHVJR7
'SPRADAE89F2YM9J9QZANK903SS63BY9XDK0HHHNV
'SPBN2RYDXB4231HJ2GHFFRGQ54X0SBMHFVRAVCW3
'SP3GXRSVBWTVS7DNK466APX88XZKAB8FT52ZQ8WG4
'SP1N4RJNMF1ZW1PSDCNNV37GPX2GA2ZEZF5ZMSSTX
'SPARHENQD3QXG6VTHPNQBXSA72508JZZA4NW7VNG
'SP29X26NFGW78W6DZ05XR0VPFA8HSZ87YX4FMNPWG
'SP3NXCB6WJTHDT4ZSWYW5Q8GDYC29FZAVM94TAA1V
'SP3PMKNKF6EB97WRJQ234H9G03YGXPST1T8PAY3XG
'SP9XKFETDDVXCACG4501SDWGV3R8AEDRMKZNHP4Y
'SP2FY8MV3EZVRTG2Q9J1KMMRVKC86DQ00BGGCQJXQ
'SP3V540F0YRSZAJXEV4W53G8AQWA1JPDWNJQSRMHA
'SPQRVXMG41C7K6ZG0PY06BBTS3JPET2Y8H31JE9Z
'SP2DH0WAMJ13BGGRDVEVYKDXMDDKXJYX79305GY1K
'SP3G3GN0K670Q3YN59X2BYH31V7YWQ4Q547HVV1XE
'SPDBCT835MPD9HTDTN56WZX9J2STSQXY5M3JJ5G2
'SP3JG5564E6GW56ZFQ5G7B8BMQ8H3H292A3JT6AGA
'SP2WPTFTP17PGJM8328QWG3SNV9EZ9W1C7EGTD5BQ
'SP3E5RB8B65ZXXC9TFEJRB7W95YY7D1PB3H1M6XFK
'SPKGS0Y412RTY88A4A8S1XF8EEPRM3BVJ4FJ8GYP
'SPFJQ1HKXPHNPK9RWWT6V30B9HRA6HJC0QZYM9ND
'SP2FA1YC17JTTT93Y616RR7PGRNTFY0871PNA7Y5G
'SP148ZYXWFVCJEKAXZ3KQN1S5EKDWRQ5VBF4XPVPW
'SP2P336EM6HGAX7NQJGR0A4W7KP11BNY25YDSTA6W
'SP1RJ530AMMT8GHQXTWGA71RXED06WGRK9DD04933
'SP3Y551Z8JWJ9ZZG3XK5YPQWXBXDNGSAAXP27ZJ7K
'SP2SJZMDHHG2F2FFBB0FQ9YYCD6XMX409HRXVNREQ
'SPC9YQ34Q1XCCC7XPRZ5CB2XF22JV3WNM7BMMARD
'SP19BVGYWCHZCMAPYY5B0SBPMMCHJ46DZSJJBFZY8
'SP24ACTWX0M8A3KKC3GC5Q8YGFA0QN6A3ZG94156P
'SP2QE3SKKZAY68Z3KN4TTJN41BVE3B5QVJMNKJAZB
'SP2RS0YJZ2QH5VYXQ91X06B9QYR90BNGJETWP0V69
'SP1RF3KTXFV2JSNMESSXXK7V61MFB5EJRJJF2ARHF
'SP27JJS3774KPR0MMB5FH77VWBD8KD0SVNZ4QNX5X
'SPYD3HVFASAPF4N9WF45PRF5FPN0C67F2F4BK7Z1
'SPH3X54MB56RGF917CK0T7SZM8E9SS1GY6RTCN14
'SP3EB16DXT05GSBH9VMJ14KWC4N38DV0YSRCB0EZN
'SP3WAAYXPC6WZNEC7SHGR36D32RJPZVXRR1BG0QSY
'SP2584CQMQCSTHA033VN2KATCSXA2X54QYWZMZS29
'SP3NRG8DMXEPD4TMDX18PZM9PCPEH36QEZ83QDZPT
'SP29JDBZVBA1NVN40R4RZJ2H4CXZJ75B51FJ7DXAP
'SP1DC9B9FTVED6N1984X89V3XMCJFRVAHHG62Q6WH
'SP2RFGZ9WWXV3CZAR9QR94FHJ1WVZ59SF8J6QEA0C
'SP2YSFPT19S2S5FGT8WVTRAH02F1KS3QY72WCK45P
'SP17F1B19FWE8JFP24S6YVZPBGQ2E2M802VKYNBFK
'SP27G8MQ9R0DDE3ESVF2N034YZG6QD71YAXZRD13J
'SP7CD8EB3GT9N5PFW8TPY9CMF84208V7KB0EPAPR
'SP1VKEVK39KZTA7T95XTYX3ACXBSDBDQC3HECH4QA
'SP1A6KAXF6QTGT8T8XK2MBJY9EWSG04TX4E7REHKC
'SP3RW6BW9F5STYG2K8XS5EP5PM33E0DNQT4XEG864
'SP2N7VSJ2DT9NY438G3VDWYFP3WWBKYN46GQPHH6T
'SPJJE3PPC7070BTDB8H8YB537HQCKRQ5QF3TRPW1
'SP1M6YMXN2765KHVDK5AGT1WG1AY9G7SA4BPGWFNB
'SPHKNB2BHPZZJZAQND4ND16P9N5WRK4JCXDEBNEW
'SP2QJNK08YJRQKXGN09QTGDCGA5C34ARVJ33626PY
'SP18V1ZKEW9YZ8YRNPPSDW9VXT3BSX6HW00HN3R16
'SPX74BVCREFB62QW9VB15JAASXYRK49Q6M650632
'SP1TEB27G4VQZED23HG32PQNA7RMTKE8A3JFC3DH6
'SP3C9JPPGYZV04QF3J0N3ME7KN5NDVF79AZ96HR1
'SP31ATSC5AHXRJ7SRB3GHA6324D26V3XJ97QE3TSJ
'SP1XGQNEBDY7EYAY7KYNG1R3EAKECR2QNED7TNS02
'SP1454QJJZC5E7Q5D25R32Q1WYCGAN2MZHC1W349D
'SP3SF0PSD7KYVJQPKKRBYJFF7NENGFHZSBVHM3B27
'SP398Q24ED39YEGPMQZQYNMAGK9ZWV5VM50BMB72K
'SP3MTVR17D40ZGRZWGAPKSVRATYZJP66PFDAVNADF
'SPA5TQXK1FEEV8SA0S6G2PPZCWKDQQCSRG0N5BM4
'SP25SF2MPZZS8Q20QA3VTYJXTHAHCRNM5MSZYDNB0
'SP301NGCF0CXTNY1T0QECXW7GDJRSTR1XYV95Q97A
'SP3FQ2HPJ63E6F9059DC382YFPY1B0Q3KQFPJF6SE
'SP21Y3KSRJRDF39WBSDAFRYAEH8G9ZW3EWDQ2YSB9
'SPMR93J5G7M76EYKZG4DRQYZEZENYM6XMFXSCVC2
'SP2E4JE5BXQ6XVG86D2BBKSK3N9W49TEMY12CAATF
'SP1HRWQ1NB3QP80AWCSNFP7HV7MC9T0D85MTFXJRW
'SP1FRV07JWJCK8EJ37GM5SP92C9FXR5AND211HQC3
'SP3MBRYGA9D8EAVYTTTVR28NM0MGW4CBP4E18ZEVP
'SP3N2RARPZ4FZP7JHJTXF30NAHQ0T9EYG4QZG4DJ5
'SP2APBCHA5YWSB4MBRHN4KAVPM6EM84B4YFS88CHB
'SP1ZMZ2ZEG811WM7T9XECFM0V14D0WCRYA6RRBR4W
'SP2HMHC2JNXJ9363MDE1G2S4CTJSMDCXG4AG50VQX
'SPMA0EH4FZGPA1FJBQXJREE22CBKYCBBVH8M55TV
'SP2K04RKSPMH0PHVEH0WZNCMN0ZFM61ZTE1JF6SJM
'SPSG8C4JFTZ6YSAJX7WPTCY5N0WPGGPX166PSPZT
'SP2F0AHP4Y35AF74YK0VZN5AEZCXQK4REKBC0D8M6
'SP161QHS676YAM88D58Q958DV2XQCSF73DSN7S2DP
'SP3ACHTAH4BRCDBM7YZKQDY2K2GNPH6NFYMMTXSHQ
'SP3GPV7YEVS2VNFYYXEJA4HWXA0HFX4SMFK9F12P7
'SP2FDNZSMWW3WNSPVK39AJES1XE8HACPBWAE5NWK6
'SP1WYHPJJVN3P0PS32BMF33P6WVVK1SNRRS28ZF0G
'SP86QENQB6S45M2BMPE7Y1XJ76FQA4J5Z5WA5D9M
'SP1WTRVC2B8NQTSFCPDKVV2WGD02NMHCDRBX9X22K
'SPEFCW4DY382E1YGJFZD4DQARNWASE5CT9P3V6YV
'SP3MW01M8EBJK4Q3C04265RVZX96HVGRFNVWH4BA5
'SP2AJGK10AF76C42P84CQW5A20JVKET5P5K7Z3P9H
'SP2KZ24AM4X9HGTG8314MS4VSY1CVAFH0G1KBZZ1D
'SP1B246XWM83NRE1Z1J4TGZDVFA7KFW5E3H32RZCV
'SPV0MKAK39GMGP1AD4GAN5X7J3F3ZPYJPJQZH5MJ
'SPK959EVHGPV89APDC0QFDJ8N4PEKM1MXY519Y04
'SP11Q1RRT6H0611ZKFWT30Z7KKE07STT1ARD5WMNG
'SP1HXR2W32E3H2WHJFR9JHVA23QGASX6224EPCDP9
'SP1W2ZYVWM974TFQBQ0QKM8CG6YHACJKVSA47K0GC
'SP2NQ1PC6KPM539ZHM9S5KYGV8KH4AC3X9V6FNQ0P
'SP1EQGZT0WN75N5AMJH2C40N5GBJTEVY9E6ZY8EH3
'SP1CFNZN0NCPNQWNCXMGBW35T5E3B9MJAH1SQ454J
'SP3X6G145Z6DV5H49MN0P0RK9SXY83ZN4ACM3RPMA
'SP380WYDKAB86C0WPK6FZFRCB3DDZTWKETDWQ9T54
'SP6JPABW47WGA85W4WE1VHEAJ6J0FMC036N3F7WK
'SPK3P8E11MGWEN3HNY2T5W7MKNMDDF21WWHZ6FRB
'SP1D9RSJ6M14EBQTD2HJSCG363DSE3VQVJ73V6K0H
'SP3KR9SGTMN0DRN5WPNN3MEDS4Y6XR795GCGH466K
))
(define-public (burn-mint)
(begin
(asserts! (var-get enabled) (err u10))
(asserts! (is-eq deployer tx-sender) (err u11))
(asserts! (not (var-get executed-burn-mint)) (err u12))
;; enable zdiko access
(try! (contract-call? .zdiko-v1-2 set-approved-contract (as-contract tx-sender) true))
(try! (contract-call? .zdiko-v2-0 set-approved-contract (as-contract tx-sender) true))
;; burn/mint v2 to v3
(try! (fold check-err (map consolidate-diko-lambda holders) (ok true)))
;; disable access
(try! (contract-call? .zdiko-v1-2 set-approved-contract (as-contract tx-sender) false))
(try! (contract-call? .zdiko-v2-0 set-approved-contract (as-contract tx-sender) false))
(var-set executed-burn-mint true)
(ok true)
)
)
(define-private (consolidate-diko-lambda (account principal))
(consolidate-diko-balance-to-v3 account)
)
(define-private (check-err (result (response bool uint)) (prior (response bool uint)))
(match prior ok-value result err-value (err err-value))
)
(define-private (consolidate-diko-balance-to-v3 (account principal))
(let (
;; burns old balances and mints to the latest version
(v2-balance (unwrap-panic (contract-call? .zdiko-v1-2 get-principal-balance account)))
)
;; if doesn't have v1 balance, then check if has v2 balance
(if (> v2-balance u0)
(begin
(try! (contract-call? .zdiko-v1-2 burn v2-balance account))
(try! (contract-call? .zdiko-v2-0 mint v2-balance account))
true
)
false
)
(ok true)
)
)
(define-read-only (can-execute)
(begin
(asserts! (not (var-get enabled)) (err u10))
(ok (not (var-get enabled)))
)
)
(define-public (disable)
(begin
(asserts! (is-eq deployer tx-sender) (err u11))
(ok (var-set enabled false))
)
)