Source Code

(impl-trait .extension-trait.extension-trait)
(impl-trait .proposal-trait.proposal-trait)
(use-trait ft-trait .trait-sip-010.sip-010-trait)
(define-constant ERR-NOT-AUTHORIZED (err u1000))
(define-constant ERR-CANNOT-STAKE (err u10016))
(define-map blocklist principal bool)
(define-read-only (is-dao-or-extension)
    (ok (asserts! (or (is-eq tx-sender .executor-dao) (contract-call? .executor-dao is-extension contract-caller)) ERR-NOT-AUTHORIZED)))
(define-read-only (is-blocklisted-or-default (sender principal))
	(default-to false (map-get? blocklist sender)))
(define-read-only (get-reward-cycle-length)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-reward-cycle-length))
(define-read-only (get-apower-multiplier-in-fixed-or-default)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-apower-multiplier-in-fixed-or-default 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token))
(define-read-only (get-staking-stats-at-cycle (reward-cycle uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-staking-stats-at-cycle 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle))
(define-read-only (get-staking-stats-at-cycle-or-default (reward-cycle uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-staking-stats-at-cycle-or-default 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle))
(define-read-only (get-user-id (user principal))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-user-id 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token user))
(define-read-only (get-user (user-id uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-user 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token user-id))
(define-read-only (get-registered-users-nonce)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-registered-users-nonce 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token))
(define-read-only (get-registered-users-nonce-or-default)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-registered-users-nonce-or-default 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token))
(define-read-only (get-staker-at-cycle (reward-cycle uint) (user-id uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-staker-at-cycle 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle user-id))
(define-read-only (get-staker-at-cycle-or-default (reward-cycle uint) (user-id uint))
	(contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-staker-at-cycle-or-default 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle user-id))
(define-read-only (get-reward-cycle (burn-height uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-reward-cycle 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token burn-height))
(define-read-only (staking-active-at-cycle (reward-cycle uint))
	(contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool staking-active-at-cycle 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle))
(define-read-only (get-first-stacks-block-in-reward-cycle (reward-cycle uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-first-stacks-block-in-reward-cycle 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle))
(define-read-only (get-staking-reward (user-id uint) (target-cycle uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-staking-reward 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token user-id target-cycle))
(define-read-only (get-token-halving-cycle)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-token-halving-cycle))
(define-read-only (get-coinbase-thresholds)
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-coinbase-thresholds))
(define-read-only (get-coinbase-amount-or-default (reward-cycle uint))
  (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool get-coinbase-amount-or-default 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token reward-cycle))
(define-read-only (get-staker-at-cycle-or-default-by-tx-sender (reward-cycle uint))
  (get-staker-at-cycle-or-default reward-cycle (default-to u0 (get-user-id tx-sender))))
(define-read-only (get-staking-reward-by-tx-sender (target-cycle uint))
  (get-staking-reward (default-to u0 (get-user-id tx-sender)) target-cycle))
(define-read-only (get-staking-stats-coinbase (reward-cycle uint))
  { staking-stats: (get-staking-stats-at-cycle-or-default reward-cycle), coinbase-amount: (get-coinbase-amount-or-default reward-cycle) })
(define-read-only (get-staked-many (target-cycles (list 1000 uint)))
  (map get-staker-at-cycle-or-default-by-tx-sender target-cycles))
(define-read-only (get-staking-rewards-many (target-cycles (list 1000 uint)))
  (map get-staking-reward-by-tx-sender target-cycles))
(define-public (stake-tokens (amount-token uint) (lock-period uint))
  (let (
			(sender tx-sender))
		(asserts! (not (is-blocklisted-or-default sender)) ERR-NOT-AUTHORIZED)
		(asserts! (> amount-token u0) ERR-CANNOT-STAKE)			
		(as-contract (try! (contract-call? .token-alex burn-fixed amount-token sender)))
		(as-contract (try! (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token mint-fixed amount-token sender)))
    (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool stake-tokens 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token amount-token lock-period)))
(define-public (claim-staking-reward (target-cycle uint))
  (let (
			(sender tx-sender)
			(claimed (try! (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool claim-staking-reward 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token target-cycle)))
			(total-claimed (+ (get to-return claimed) (get entitled-token claimed))))
			(asserts! (not (is-blocklisted-or-default sender)) ERR-NOT-AUTHORIZED)
			(and (> total-claimed u0) (as-contract (try! (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token burn-fixed total-claimed sender))))
			(and (> total-claimed u0) (as-contract (try! (contract-call? .token-alex mint-fixed total-claimed sender))))
			(ok claimed)))
(define-public (claim-staking-reward-many (target-cycles (list 1000 uint)))
  (ok (map claim-staking-reward target-cycles)))
(define-public (callback (sender principal) (payload (buff 2048)))
	(ok true))
(define-public (execute (sender principal))
	(begin 
		(try! (contract-call? .executor-dao set-extensions (list { extension: .alex-staking, enabled: false } )))
		(try! (contract-call? .executor-dao set-extensions (list { extension: .alex-staking-v2, enabled: true } )))
		(ok true)))
(define-public (set-blocklist-many (blocked-many (list 1000 { sender: principal, blocked: bool })))
	(begin 
		(try! (is-dao-or-extension))
		(ok (map set-blocklist blocked-many))))
(define-public (set-reward-cycle-length (new-reward-cycle-length uint))
  (begin
    (try! (is-dao-or-extension))
		(as-contract (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool set-reward-cycle-length new-reward-cycle-length))))
(define-public (set-apower-multiplier-in-fixed (new-apower-multiplier-in-fixed uint))
  (begin
    (try! (is-dao-or-extension))
    (as-contract (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool set-apower-multiplier-in-fixed 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token new-apower-multiplier-in-fixed))))
(define-public (set-token-halving-cycle (new-token-halving-cycle uint))
  (begin
    (try! (is-dao-or-extension))
		(as-contract (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool set-token-halving-cycle new-token-halving-cycle))))
(define-public (set-coinbase-amount (coinbase-1 uint) (coinbase-2 uint) (coinbase-3 uint) (coinbase-4 uint) (coinbase-5 uint))
  (begin
    (try! (is-dao-or-extension))
    (as-contract (contract-call? 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.alex-reserve-pool set-coinbase-amount 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.age000-governance-token coinbase-1 coinbase-2 coinbase-3 coinbase-4 coinbase-5))))
(define-private (set-blocklist (blocked { sender: principal, blocked: bool }))
	(begin
		(print { object: "alex-staking", action: "set-blocklist", payload: blocked }) 
		(ok (map-set blocklist (get sender blocked) (get blocked blocked)))))

Functions (35)

FunctionAccessArgs
is-dao-or-extensionread-only
is-blocklisted-or-defaultread-onlysender: principal
get-reward-cycle-lengthread-only
get-apower-multiplier-in-fixed-or-defaultread-only
get-staking-stats-at-cycleread-onlyreward-cycle: uint
get-staking-stats-at-cycle-or-defaultread-onlyreward-cycle: uint
get-user-idread-onlyuser: principal
get-userread-onlyuser-id: uint
get-registered-users-nonceread-only
get-registered-users-nonce-or-defaultread-only
get-staker-at-cycleread-onlyreward-cycle: uint, user-id: uint
get-staker-at-cycle-or-defaultread-onlyreward-cycle: uint, user-id: uint
get-reward-cycleread-onlyburn-height: uint
staking-active-at-cycleread-onlyreward-cycle: uint
get-first-stacks-block-in-reward-cycleread-onlyreward-cycle: uint
get-staking-rewardread-onlyuser-id: uint, target-cycle: uint
get-token-halving-cycleread-only
get-coinbase-thresholdsread-only
get-coinbase-amount-or-defaultread-onlyreward-cycle: uint
get-staker-at-cycle-or-default-by-tx-senderread-onlyreward-cycle: uint
get-staking-reward-by-tx-senderread-onlytarget-cycle: uint
get-staking-stats-coinbaseread-onlyreward-cycle: uint
get-staked-manyread-onlytarget-cycles: (list 1000 uint
get-staking-rewards-manyread-onlytarget-cycles: (list 1000 uint
stake-tokenspublicamount-token: uint, lock-period: uint
claim-staking-rewardpublictarget-cycle: uint
claim-staking-reward-manypublictarget-cycles: (list 1000 uint
callbackpublicsender: principal, payload: (buff 2048
executepublicsender: principal
set-blocklist-manypublicblocked-many: (list 1000 { sender: principal, blocked: bool }
set-reward-cycle-lengthpublicnew-reward-cycle-length: uint
set-apower-multiplier-in-fixedpublicnew-apower-multiplier-in-fixed: uint
set-token-halving-cyclepublicnew-token-halving-cycle: uint
set-coinbase-amountpubliccoinbase-1: uint, coinbase-2: uint, coinbase-3: uint, coinbase-4: uint, coinbase-5: uint
set-blocklistprivateblocked: { sender: principal, blocked: bool }