Skip to content
Protocol contracts not yet configured for this build
Enter app

Participant guides

Verify a retirement

Everything on the Core page can be checked independently. This guide shows how, using only Blockscout and the contract itself.

The point of this exercise is that you should not have to trust this interface.

1. Find an execution

Open the Core page and look at Buyback history, or read the executor directly:

solidity
function executionsLength() external view returns (uint256)function getExecution(uint256 index) external view returns (Execution)

An Execution contains:

solidity
struct Execution {    uint64  timestamp;    uint256 ethSpent;    uint256 tokensRetired;    uint8   phase;    bool    realBurn;}

2. Find the transaction

On Blockscout, open the BuybackExecutor address and filter its transactions. Each execution emits:

text
BuybackExecuted(  uint256 ethSpent,  uint256 tokensRetired,  uint8   phase,  bool    realBurn,  uint256 minTokensOut,  uint256 newBudget,  uint256 executionIndex)

Match the executionIndex to the array index you read.

3. Check what actually happened

Inside that transaction you should see:

  1. ETH leaving the executor toward the Pons curve (phase 0) or the Uniswap v4 PoolManager (phase 2).
  2. A PLOUTO transfer in to the executor.
  3. Retirement, in one of two forms:
    • realBurn == true → a Transfer to the zero address, and totalSupply() reduced.
    • realBurn == false → a Transfer to 0x000000000000000000000000000000000000dEaD.
  4. A zero PLOUTO balance on the executor afterwards.

That last point is worth checking explicitly. The executor is never supposed to hold tokens between executions, and an invariant test asserts it.

4. Confirm the supply effect

If realBurn is true

Compare totalSupply() before and after the block. It should have fallen by exactly tokensRetired. This is a genuine supply reduction.

If realBurn is false

totalSupply() should be unchanged, and balanceOf(0x…dEaD) should have risen by tokensRetired. The tokens are unspendable but still counted in total supply.

5. Check the bounds were respected

The event includes minTokensOut. Confirm tokensRetired >= minTokensOut; the contract enforces it, but verifying costs nothing.

You can also read the executor's current limits:

solidity
maxEthPerExecution()   // hard cap per executionmaxBudgetShareBps()    // cap as a share of available budgetmaxPriceImpactBps()    // on-chain price impact toleranceminEthPerExecution()   // dust floor

and confirm ethSpent sits inside them.

6. Cross-check the cumulative figures

solidity
totalEthSpent()                 // sum of every ethSpenttotalPloutoRetiredByProtocol()  // sum of every tokensRetiredtotalPloutoBurned()totalPloutoSentToDead()

The last two must sum to the third. If they do not, something is wrong and it is worth reporting — see responsible disclosure.