Source Code

(impl-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.proposal-trait.proposal-trait)

;; Define the total vote constant
(define-constant total-vote u2821095342675391)

;; Define the list of (pool-id, votes) tuples (excluding zero votes)
(define-constant pool-votes (list 
    {pool-id: u74, votes: u304056183}
    {pool-id: u29, votes: u13415293544}
    {pool-id: u51, votes: u34954141196}
    {pool-id: u54, votes: u555400000000}
    {pool-id: u34, votes: u403684937492683}
    {pool-id: u83, votes: u29094238344860}
    {pool-id: u112, votes: u1262745963929}
    {pool-id: u31, votes: u9023800000000}
    {pool-id: u10, votes: u22877806608895}
    {pool-id: u89, votes: u10007400000000}
    {pool-id: u35, votes: u2101331000000}
    {pool-id: u63, votes: u20000000000}
    {pool-id: u52, votes: u1000000000}
    {pool-id: u114, votes: u44461600000000}
    {pool-id: u109, votes: u3374540711800}
    {pool-id: u107, votes: u400200000000}
    {pool-id: u39, votes: u1258700000000}
    {pool-id: u69, votes: u6491511227615}
    {pool-id: u50, votes: u148324977156}
    {pool-id: u65, votes: u46479063715408}
    {pool-id: u16, votes: u657962862012}
    {pool-id: u38, votes: u105562389789041}
    {pool-id: u42, votes: u7322911187}
    {pool-id: u12, votes: u9442267144440}
    {pool-id: u98, votes: u248461520093142}
    {pool-id: u61, votes: u8000000000}
    {pool-id: u79, votes: u20115700000000}
    {pool-id: u43, votes: u369250650062472}
    {pool-id: u7, votes: u230594067304555}
    {pool-id: u103, votes: u12250800000000}
    {pool-id: u82, votes: u114616701832248}
    {pool-id: u41, votes: u519900000000}
    {pool-id: u57, votes: u1000000000}
    {pool-id: u113, votes: u257688766150107}
    {pool-id: u99, votes: u276228100942611}
    {pool-id: u18, votes: u456542356900773}
    {pool-id: u100, votes: u10872541252506}
    {pool-id: u30, votes: u1100000000}
    {pool-id: u48, votes: u14083000000}
    {pool-id: u17, votes: u2823000000000}
    {pool-id: u33, votes: u122405114248077}
    {pool-id: u37, votes: u511389386458}
    {pool-id: u58, votes: u148852130597}
    {pool-id: u23, votes: u1078483131896}
    {pool-id: u64, votes: u2000000000}
))

;; Define helper claimed records
(define-constant helper-claimed-records (list 
    {sender: 'SP2XE79SP3TQK67M50C44G1N021RJCMG0PPHFXWPN, pool-id: u113}
    {sender: 'SPVZB7A41TMC654VEKGN8YF5SH6THP4CYHZDHW10, pool-id: u113}
    {sender: 'SP1QSYZ0TY2SM6GKNF7SKN0BRD5GFM4HN5KXZNHG5, pool-id: u113}
    {sender: 'SPH1ZAHN998PFH9A2CBNQ5EM3HKXG08FA0CKF4MB, pool-id: u34}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u83}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u63}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u58}
    {sender: 'SP3RRGMNH6NVP2NNKTN9QQBVXWZJ2H9XDP6Y38GMG, pool-id: u34}
    {sender: 'SP3RRGMNH6NVP2NNKTN9QQBVXWZJ2H9XDP6Y38GMG, pool-id: u18}
    {sender: 'SP13F0C8HFJC9H1FR7S7WFZ9FEMNV1PBEG3GWS5N0, pool-id: u113}
    {sender: 'SP3RRGMNH6NVP2NNKTN9QQBVXWZJ2H9XDP6Y38GMG, pool-id: u43}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u96}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u32}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u34}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u22}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u17}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u46}
    {sender: 'SP1AXD41X9ZGANAJYY88XBQTZB7PZQ2FDNC0W9X28, pool-id: u66}
    {sender: 'SPHFAXDZVFHMY8YR3P9J7ZCV6N89SBET203ZAY25, pool-id: u100}
    {sender: 'SP2HJ0N3STP3T9A0CXBATW9WZD0APWB932W4P67K4, pool-id: u65}
    {sender: 'SP1V4BWKPD559WP67GWCV8VR0VRKJ7ESS8WHKYEJP, pool-id: u34}
    {sender: 'SPBNMD07T0WD2WJAH6JZJG07GYSF0X413V69J3T9, pool-id: u65}
    {sender: 'SPN3AV2KQ8HYFHGKC34SGVSS9TNMJXG56GXRSR70, pool-id: u34}
    {sender: 'SP36VJT9YM4XQW7PTWMY8B823QNZEVMR1KEQH5J75, pool-id: u33}
    {sender: 'SP36VJT9YM4XQW7PTWMY8B823QNZEVMR1KEQH5J75, pool-id: u65}
    {sender: 'SP2PM6DZ9HT5PWRE2GZZ19NERXPN9RBED8RQESHNV, pool-id: u65}
    {sender: 'SP1NTYFH1RYT2Y38VKA7JHP7C09PW3ZEF1QG765YF, pool-id: u10}
    {sender: 'SP36VJT9YM4XQW7PTWMY8B823QNZEVMR1KEQH5J75, pool-id: u38}
    {sender: 'SP1NTYFH1RYT2Y38VKA7JHP7C09PW3ZEF1QG765YF, pool-id: u83}
    {sender: 'SP1NTYFH1RYT2Y38VKA7JHP7C09PW3ZEF1QG765YF, pool-id: u65}
    {sender: 'SPED2H1PRKSQCP737XY19WEBMY28F2GSK49YD0SK, pool-id: u113}
    {sender: 'SPED2H1PRKSQCP737XY19WEBMY28F2GSK49YD0SK, pool-id: u65}
    {sender: 'SP1NTYFH1RYT2Y38VKA7JHP7C09PW3ZEF1QG765YF, pool-id: u113}
    {sender: 'SPED2H1PRKSQCP737XY19WEBMY28F2GSK49YD0SK, pool-id: u99}
    {sender: 'SP1NTYFH1RYT2Y38VKA7JHP7C09PW3ZEF1QG765YF, pool-id: u33}
    {sender: 'SP2TT71CXBRDDYP2P8XMVKRFYKRGSMBWCZ6W6FDGT, pool-id: u34}
))

;; Helper function to sum up votes from a tuple
(define-private (sum-votes (entry {pool-id: uint, votes: uint}) (acc uint))
    (+ acc (get votes entry))
)

;; Helper function to set pool votes in the helper contract
(define-private (set-pool-vote (entry {pool-id: uint, votes: uint}))
    (contract-call? 
        'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.farming-campaign-v2-01-helper-b 
        set-campaign-pool-votes
        {campaign-id: u1, pool-id: (get pool-id entry)}
        (get votes entry)
    )
)

;; Helper function to distribute alex rewards
(define-private (distribute-reward (entry {sender: principal, pool-id: uint}))
    (contract-call? 
        'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.farming-campaign-v2-01-helper-b 
        distribute-alex-reward
        (get pool-id entry)
        u1
        (get sender entry)
    )
)

(define-public (execute (sender principal))
    (let 
        (
            (calculated-total (fold sum-votes pool-votes u0))
						(bal-125 (unwrap-panic (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 get-balance-fixed u125 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.self-listing-helper-v2-04)))
						(bal-126 (unwrap-panic (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 get-balance-fixed u126 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.self-listing-helper-v2-04)))
        )
        ;; Verify total votes
        (asserts! (is-eq calculated-total total-vote) (err u1))
        
        ;; Set the helper contract as an extension
        (try! (contract-call? 
            'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.executor-dao 
            set-extensions
            (list 
                {extension: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.farming-campaign-v2-01-helper, enabled: false}
                {extension: 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.farming-campaign-v2-01-helper-b, enabled: true}
            )
        ))

        ;; Set the total vote for campaign 1
        (try! (contract-call? 
            'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.farming-campaign-v2-01-helper-b 
            set-campaign-total-vote 
            u1 
            total-vote
        ))

        ;; Set individual pool votes
        (map set-pool-vote pool-votes)

        ;; Distribute alex rewards for each record
        (map distribute-reward helper-claimed-records)

				(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 burn-fixed u125 bal-125 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.self-listing-helper-v2-04))
				(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 burn-fixed u126 bal-126 'SP1E0XBN9T4B10E9QMR7XMFJPMA19D77WY3KP2QKC.self-listing-helper-v2-04))
				(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 mint-fixed u125 bal-125 'SP1ESCTF9029MH550RKNE8R4D62G5HBY8PBBAF2N8))
				(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-amm-pool-v2-01 mint-fixed u126 bal-126 'SP1ESCTF9029MH550RKNE8R4D62G5HBY8PBBAF2N8))
        (ok true)
    )
)

Functions (4)

FunctionAccessArgs
sum-votesprivateentry: {pool-id: uint, votes: uint}, acc: uint
set-pool-voteprivateentry: {pool-id: uint, votes: uint}
distribute-rewardprivateentry: {sender: principal, pool-id: uint}
executepublicsender: principal