ChainScore Labs
All Guides

How Governance Works in NFT-Fi Protocols

LABS

How Governance Works in NFT-Fi Protocols

Chainscore © 2025

Core Governance Concepts in NFT-Fi

Key mechanisms and structures that enable decentralized decision-making and protocol evolution within NFT financialization platforms.

Governance Tokens

Governance tokens represent voting power and ownership in a protocol. They are typically earned through liquidity provision, staking, or participation.

  • Enable voting on proposals like fee changes or treasury allocation.
  • Example: $NFTX holders vote on vault parameters and new collection whitelisting.
  • Token distribution models directly impact decentralization and community alignment.

Proposal Lifecycle

The proposal lifecycle is the formal process from idea to execution. It includes drafting, temperature checks, on-chain voting, and timelock execution.

  • Prevents rash changes via mandatory discussion and quorum thresholds.
  • Example: A BendDAO proposal to adjust liquidation thresholds must pass a 7-day vote.
  • This structured process ensures deliberate and secure protocol upgrades.

Treasury Management

Treasury management involves the decentralized control of a protocol's accumulated assets, often from fees or token sales.

  • Funds are used for grants, liquidity incentives, or strategic acquisitions.
  • Example: JPEG'd DAO votes on allocating treasury funds to underwrite new insurance pools.
  • Effective management is critical for long-term sustainability and growth.

Delegation & Voting Power

Delegation allows token holders to assign their voting power to experts or representatives without transferring assets.

  • Increases participation by reducing voter fatigue for casual holders.
  • Example: A user delegates their $SOS tokens to a known community developer.
  • Systems like vote-escrow (veTokens) can lock tokens to amplify voting weight.

Parameter Governance

Parameter governance refers to the community-controlled adjustment of key protocol variables that affect risk and economics.

  • Includes loan-to-value ratios, liquidation penalties, and fee structures.
  • Example: MetaStreet governors vote to update the interest rate curve for a specific NFT collection.
  • Allows protocols to dynamically adapt to market conditions and collateral risk.

Upgrade Mechanisms

Upgrade mechanisms are the technical processes for modifying smart contract logic, often involving proxies or modular systems.

  • Timelocks give users a window to exit before changes take effect.
  • Example: A Sudoswap governance vote to upgrade the AMM contract for new features.
  • These mechanisms balance innovation with the security of immutable user funds.

The Governance Proposal Lifecycle

Process overview

1

Draft and Signal

Formulate the proposal and gauge community sentiment.

Detailed Instructions

Begin by drafting a Temperature Check or Request for Comment (RFC) post on the protocol's governance forum, such as Discourse or Commonwealth. This is a non-binding discussion phase. Clearly articulate the proposal's motivation, technical specification, and on-chain implications. Use this stage to gather feedback, identify potential flaws, and build consensus. For an NFT lending protocol, this could involve proposing a new loan-to-value (LTV) ratio for a specific collection or a change to the liquidation penalty.

  • Sub-step 1: Research historical proposals and forum discussions for context.
  • Sub-step 2: Draft the RFC with clear sections: Summary, Abstract, Motivation, Specification.
  • Sub-step 3: Post the draft and actively engage with community feedback for 5-7 days.
markdown
**Proposal:** Adjust LTV for Bored Ape Yacht Club to 40% **Motivation:** Floor price volatility has decreased, allowing for a safer increase in capital efficiency.

Tip: Use snapshot polls on the forum to quantitatively measure initial sentiment before proceeding to a formal vote.

2

Formal Proposal Submission

Create the on-chain governance proposal.

Detailed Instructions

Once community sentiment is positive, the proposal must be formalized into an on-chain transaction. This involves interacting with the protocol's governance contract, typically using a function like propose(). You will need to encode the calldata for the intended actions, such as calling setLTV(address _collection, uint256 _ltv) on the protocol's core contract. Ensure you have sufficient voting power (often a minimum threshold of delegated tokens) to submit. The proposal will be queued in a pending state, entering a timelock period if the protocol uses one.

  • Sub-step 1: Encode the target contract call data using a library like ethers.js or viem.
  • Sub-step 2: Call propose(address[] targets, uint256[] values, bytes[] calldatas, string description) on the governor contract.
  • Sub-step 3: Verify the transaction succeeds and note the generated proposalId.
solidity
// Example calldata for setting an LTV on a hypothetical NFT lending vault bytes memory callData = abi.encodeWithSignature("setLTV(address,uint256)", 0xBC4CA0..., 4000); // 40%

Tip: Test the calldata and proposal logic on a testnet fork before mainnet submission to avoid costly errors.

3

Voting Period

Token holders cast their votes on the active proposal.

Detailed Instructions

After the submission delay, the proposal enters the voting period, typically lasting 3-7 days. Token holders delegate their voting power to themselves or a delegatee to participate. Votes are cast by calling castVote(proposalId, support), where support is an integer (e.g., 1=For, 0=Against, 2=Abstain). Voting power is usually calculated via a snapshot of token balances at a specific block number. For NFT-Fi, voters must weigh the proposal's impact on protocol risk, revenue, and user experience. A quorum (minimum voting power participation) must be met for the vote to be valid.

  • Sub-step 1: Check the proposal's status and voting start block on a block explorer or frontend.
  • Sub-step 2: Ensure your voting power is delegated correctly to your address.
  • Sub-step 3: Cast your vote via the governance UI or directly via contract interaction.
javascript
// Using ethers.js to cast a vote await governorContract.castVote(proposalId, 1); // Vote 'For'

Tip: Voting strategies can be complex; some protocols use vote-escrowed tokens or NFT-based voting where the weight depends on staked assets.

4

Execution and Implementation

If successful, the proposal actions are executed on-chain.

Detailed Instructions

If the vote passes the quorum and majority threshold, the proposal moves to the execution phase. The proposer or any Ethereum address can call the execute() function on the governor contract, providing the same target, value, and calldata used in the proposal. This transaction will perform the encoded actions, such as updating a parameter in the protocol's smart contracts. If a timelock is used, there is a mandatory delay between vote conclusion and when execute() can be called, allowing users to react to passed changes. Always verify the execution transaction on a block explorer.

  • Sub-step 1: Wait for the voting period and any timelock delay to complete.
  • Sub-step 2: Call execute(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash).
  • Sub-step 3: Monitor the transaction and confirm the state change (e.g., new LTV is active).
solidity
// The execution call mirrors the initial proposal Governor(governorAddress).execute(targets, values, calldatas, descriptionHash);

Tip: Failed executions can occur if the proposal logic reverts or conditions change; always have a fallback plan and consider multi-sig execution for critical upgrades.

Governance Models in Major NFT-Fi Protocols

Comparison of token-based governance structures, voting mechanisms, and key parameters.

Governance FeatureBlur (BLUR)LooksRare (LOOKS)BendDAO (BEND)JPEG'd (PUSd)

Governance Token

BLUR

LOOKS

BEND

PUSd

Voting Power Basis

Escrowed BLUR (xBLUR)

Staked LOOKS

Staked BEND

Staked PUSd (vePUSd)

Proposal Threshold

25,000,000 xBLUR

3,000,000 LOOKS

5,000,000 BEND

50,000 vePUSd

Quorum Requirement

30% of xBLUR supply

10% of staked LOOKS

20% of staked BEND

15% of vePUSd supply

Voting Period Duration

7 days

3 days

5 days

7 days

Treasury Control

Yes (Community Treasury)

Yes (Protocol Fees)

Yes (Reserve Fund)

Yes (Protocol-Owned Liquidity)

Delegated Voting

Supported

Not Supported

Supported

Supported (via veNFT)

Typical Proposal Types

Fee changes, grants, integrations

Fee adjustments, tokenomics

Loan parameter updates

Collateral additions, risk parameters

Key Protocol Parameters Under Governance Control

Controlling Financial Incentives

Governance tokens grant holders the right to vote on core economic parameters that directly impact protocol revenue, user costs, and staking rewards. These are the financial levers that shape the ecosystem's health and sustainability.

Key Parameters

  • Protocol Fee Percentage: The share of trading or loan fees that is directed to the treasury or token stakers. For example, LooksRare governance voted to adjust its trading fee from 2% to a variable rate.
  • Reward Emission Schedules: The rate and distribution of governance token rewards for liquidity providers, stakers, or traders. This controls inflation and incentive alignment.
  • Treasury Management: Decisions on allocating accumulated protocol fees for grants, buybacks, or strategic investments to fund development and growth.

Example

In an NFT lending protocol like NFTfi, governance could vote to increase the protocol fee on successful loans from 1% to 1.5%, directing more revenue to stakers of the governance token.

How Governance Works in NFT-Fi Protocols

Process overview

1

Understand the Governance Token and Voting Power

Acquire and analyze the protocol's native governance token to participate.

Detailed Instructions

First, identify the protocol's governance token, such as $NFTX for NFTX or $BEND for BendDAO. Acquire tokens through a DEX or the protocol's liquidity incentives. Your voting power is typically proportional to your token balance, often with mechanisms for delegation or time-locked boosts (e.g., ve-token models). Check the token's contract on Etherscan to verify its total supply and distribution. For on-chain governance, your voting weight is calculated directly from your wallet balance at a specific block height when a proposal is created.

  • Sub-step 1: Query the token contract's balanceOf() function for your address.
  • Sub-step 2: Research if the protocol uses a staking contract (e.g., veNFTX) to boost voting power.
  • Sub-step 3: Verify the governance module address in the protocol's documentation to ensure interaction with the correct contract.
solidity
// Example: Checking voting power in a simple governance contract function getVotes(address account) public view returns (uint256) { return IERC20(govToken).balanceOf(account); }

Tip: For delegated voting, use the protocol's interface to delegate your votes to a trusted address or delegate.xyz without transferring token custody.

2

Review Active and Pending Governance Proposals

Navigate the protocol's governance forum and on-chain proposal queue.

Detailed Instructions

Governance starts off-chain on forums like Commonwealth or Discourse. Analyze discussion threads for Temperature Checks or Request for Comments (RFCs) to gauge community sentiment. For on-chain activity, query the governance contract's state. Call the proposalCount() function to get the total, then fetch specific proposals using proposals(uint256). A proposal's status (e.g., Pending, Active, Defeated, Succeeded) is crucial. Examine key parameters: proposalThreshold (minimum tokens needed to submit), votingDelay, and votingPeriod (often 24-72 hours for voting).

  • Sub-step 1: Locate the official governance forum URL from the protocol's documentation.
  • Sub-step 2: Use Etherscan's "Read Contract" tab on the governance address to fetch proposalCount and recent proposal IDs.
  • Sub-step 3: For a specific proposalId, decode the calldata to understand the intended contract calls and parameters.
javascript
// Example: Fetching proposal details using ethers.js const proposal = await governorContract.proposals(proposalId); console.log("Start Block:", proposal.startBlock.toString()); console.log("End Block:", proposal.endBlock.toString()); console.log("For Votes:", proposal.forVotes.toString());

Tip: Cross-reference the on-chain descriptionHash with the IPFS hash posted on the forum to ensure proposal integrity.

3

Cast Your Vote On-Chain

Execute a transaction to vote for, against, or abstain on a live proposal.

Detailed Instructions

When a proposal's voting period is active (block number between startBlock and endBlock), you can cast your vote. Connect your Web3 wallet to the protocol's governance UI or interact directly with the contract. The core function is typically castVote(uint256 proposalId, uint8 support), where support is 1 (for), 0 (against), or 2 (abstain). Your vote is final and cannot be changed. Ensure you have sufficient ETH for gas, as voting transactions are state-changing. After voting, verify the transaction receipt and check that your vote weight is reflected by calling getReceipt(proposalId, voterAddress).

  • Sub-step 1: Confirm the proposal state is Active by calling state(proposalId) (should return 1).
  • Sub-step 2: Prepare the transaction data for castVote, specifying the proposalId and your support choice.
  • Sub-step 3: Execute the transaction and monitor its confirmation on a block explorer.
solidity
// Interface for a typical Governor contract function interface IGovernor { function castVote(uint256 proposalId, uint8 support) external returns (uint256); }

Tip: Use a blockchain explorer to verify the VoteCast event was emitted with your address and correct vote weight.

4

Execute a Successful Proposal

Queue and execute a proposal that has passed the vote and timelock delay.

Detailed Instructions

A proposal that reaches the quorum and a majority of forVotes enters a Succeeded state. It must then pass through a timelock period, a security feature delaying execution. First, call queue(uint256 proposalId) on the governance contract, which schedules the proposal's actions in the timelock contract. After the delay (e.g., 48 hours), any address can call execute(uint256 proposalId) to run the encoded function calls. This often involves upgrading contracts, adjusting treasury parameters, or modifying fee structures. Failed execution due to gas or state reverts can leave the proposal queued indefinitely.

  • Sub-step 1: Verify state(proposalId) returns 4 (Succeeded) and that the eta (execution timestamp) is not yet set.
  • Sub-step 2: Call queue with the proposalId, which will calculate and set the eta as block.timestamp + timelock.delay().
  • Sub-step 3: After the delay, call execute, providing the same proposalId and ensuring the caller pays the gas for the batched actions.
javascript
// Example: Checking and executing a proposal const state = await governor.state(proposalId); // Should be 4 (Succeeded) if (state === 4) { await governor.queue(proposalId); // Wait for timelock delay... await governor.execute(proposalId); }

Tip: Monitor the timelock contract's QueueTransaction and ExecuteTransaction events to track the proposal's progress.

5

Analyze Governance Data and Delegation

Use analytics tools and subgraphs to track voting history and delegate influence.

Detailed Instructions

Post-vote analysis is key for informed future participation. Use The Graph subgraphs or Dune Analytics dashboards to query historical voting data. Analyze metrics like voter turnout, delegate concentration, and proposal passage rates. For protocols with vote delegation, examine top delegates' voting history and statements. You can delegate your voting power programmatically by calling delegate(address delegatee) on the governance token contract. This transfers voting weight without transferring tokens, allowing experts to vote on behalf of holders. Assess the security implications of delegate collusion or apathy leading to low quorum.

  • Sub-step 1: Query the protocol's subgraph for Vote entities filtered by voter or proposal.
  • Sub-step 2: Analyze a Dune dashboard showing governance KPIs like average voting power per proposal.
  • Sub-step 3: To delegate, call the token contract's delegate function, specifying the delegatee's ENS or address.
graphql
# Example Subgraph Query for Votes query { votes(where: {proposal: "123"}) { voter support votes } }

Tip: Consider using Snapshot for off-chain signaling votes, which many NFT-Fi protocols use for gas-free sentiment checks before on-chain execution.

SECTION-FAQ

NFT-Fi Governance FAQ

Ready to Start Building?

Let's bring your Web3 vision to life.

From concept to deployment, ChainScore helps you architect, build, and scale secure blockchain solutions.