Skip to content

Simplify liquid supply calculation #69

@whoabuddy

Description

@whoabuddy

Describing the Issue

Liquid supply is getting complex, so much so we've thought about splitting it out into its own contract and have yet to add the operating fund to it.

This is the current calculation for action proposals

;; calculate the liquid supply of the dao token
(define-read-only (get-liquid-supply (blockHeight uint))
(let
(
(blockHash (unwrap! (get-block-hash blockHeight) ERR_RETRIEVING_START_BLOCK_HASH))
(totalSupply (unwrap! (at-block blockHash (contract-call? .aibtc-token get-total-supply)) ERR_FETCHING_TOKEN_DATA))
(preDexBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_PRE_DEX)) ERR_FETCHING_TOKEN_DATA))
(dexBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_DEX)) ERR_FETCHING_TOKEN_DATA))
(poolBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_POOL)) ERR_FETCHING_TOKEN_DATA))
(treasuryBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TREASURY)) ERR_FETCHING_TOKEN_DATA))
(totalLocked (+ preDexBalance dexBalance poolBalance treasuryBalance))
)
(ok (- totalSupply totalLocked))
)
)

And for core proposals (same calculation)

;; calculate the liquid supply of the dao token
(define-read-only (get-liquid-supply (blockHeight uint))
(let
(
(blockHash (unwrap! (get-block-hash blockHeight) ERR_RETRIEVING_START_BLOCK_HASH))
(totalSupply (unwrap! (at-block blockHash (contract-call? .aibtc-token get-total-supply)) ERR_FETCHING_TOKEN_DATA))
(preDexBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_PRE_DEX)) ERR_FETCHING_TOKEN_DATA))
(dexBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_DEX)) ERR_FETCHING_TOKEN_DATA))
(poolBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TOKEN_POOL)) ERR_FETCHING_TOKEN_DATA))
(treasuryBalance (unwrap! (at-block blockHash (contract-call? .aibtc-token get-balance VOTING_TREASURY)) ERR_FETCHING_TOKEN_DATA))
(totalLocked (+ preDexBalance dexBalance poolBalance treasuryBalance))
)
(ok (- totalSupply totalLocked))
)
)

Both perform the same check for quorum which is set as a constant in each contract (15% action / 25% core)

;; quorum: check if enough total votes vs liquid supply
(metQuorum (and hasVotes
(>= (/ (* (+ votesFor votesAgainst) u100) liquidTokens) VOTING_QUORUM)
))

Open Questions

What if a DAO uses a different DEX than Bitflow long-term? Would providing liquidity or diversifying hurt the ability to vote?

Could we measure the liquid supply by just subtracting the treasury and operating fund balance as locked amounts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions