# How to Verify Anything

## 0.4 How to Verify Anything

Modulexo does not require trust in interfaces.

Every state transition, accounting value, and distribution can be verified directly on-chain.

This page outlines how.

***

## 1️⃣ Verify Token Burn (Inventory Provision)

#### What to verify:

That tokens were permanently removed and converted into accounting units.

#### Step 1 — Locate Sponsorship Transaction

Call:

```
sponsor(beneficiary, token, tokenAmountUnits)
```

Find transaction on explorer.

Confirm event:

```
Sponsored(
  sponsor,
  beneficiary,
  token,
  tokenAmountUnits,
  newAllowanceUnits
)
```

#### Step 2 — Confirm Burn Routing

From the same transaction:

Verify transfer to:

```
blackHole()
```

Call on SponsorshipLedger:

```
blackHole()
```

Ensure tokens were transferred to this address.

This confirms finality.

***

## 2️⃣ Verify Available Units

To confirm accounting units:

Call on SponsorshipLedger:

```
recyclableBalance(beneficiary, token)
```

This value must match:

newAllowanceUnits minus consumed units.

If units are zero, execution cannot proceed.

***

## 3️⃣ Verify Execution (Recycle)

#### Step 1 — Locate Execution Transaction

Function:

```
recycle(token) payable
```

Confirm event:

```
Recycled(
  beneficiary,
  token,
  nativePaidWei,
  unitsConsumed,
  recycleRailWei,
  weightMinted
)
```

#### Step 2 — Confirm Units Were Consumed

In same block:

Event:

```
AllowanceConsumed(
  beneficiary,
  token,
  unitsConsumed,
  remainingUnits
)
```

This proves ledger mutation.

***

## 4️⃣ Verify Weight Allocation

After recycle execution:

Call on RecyclingEngine:

```
weightOf(beneficiary)
```

Also verify:

```
totalWeight()
```

The user’s proportional participation is:

```
weightOf(user) / totalWeight()
```

No UI needed.

***

## 5️⃣ Verify Distribution Math

Distribution is based on:

```
accNativePerWeight()
```

To verify claimable:

Call:

```
claimable(beneficiary)
```

Internally derived from:

```
(weight × accNativePerWeight / ACC_SCALE) − rewardDebt
```

You can verify:

```
rewardDebt(beneficiary)
```

No discretionary adjustments exist.

***

## 6️⃣ Verify Claim

Call:

```
claim()
```

Confirm event:

```
Claimed(user, amountWei)
```

Verify native transfer occurred.

If transfer fails:\
Transaction reverts.

***

## 7️⃣ Verify Fee Routing

During recycle execution:

Native value is split via router.

Verify router address:

```
router()
```

Confirm:

* Ops rail transfer
* Provider rail transfer
* Recycle rail accumulation

All transfers visible in transaction internal logs.

***

## 8️⃣ Verify Governance

On Ethereum:

Check:

* Governor address
* Timelock address
* Fund owner

Verify:

* Proposal creation
* Voting results
* Queue event
* Execute event

If ownership transferred to Timelock:\
Private operator control is removed.

***

## 9️⃣ Verify Parameter State

On RecyclingEngine:

```
baseWeightPriceWei()
decayPerDayPPM()
linearGrowthSlopeWeiPerDay()
```

Confirm these match documented values.

If changed:\
Event emitted:

```
ParamsSet(...)
```

No silent parameter changes possible.

***

## Verification Principle

If something cannot be verified through:

* Public read functions
* Emitted events
* Explorer logs

It is not part of Modulexo.

The UI reflects contract state.\
It does not define it.
