Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

trUST Backing

Every trUST in issue is matched by backing stablecoin held in the SukukFi settlement vaults. This page gives you the method to check that yourself against Berachain, without asking SukukFi for a figure and without trusting this page.

No numbers are printed here on purpose. A published figure is out of date the moment a settlement happens, and a stale figure is worse than none. The method below always returns the current position.

Addresses

Network: Berachain Mainnet · Chain ID 80094 · Explorer: https://berascan.com

You do not have to take the pairing on trust. Calling asset() on each vault returns the stablecoin it holds, and share() on each returns the trUST token address.

Source for all four contracts is at sukukfi/security-audits: WERC7575Vault.sol and WERC7575ShareToken.sol.

The check

Backing holds when:

the sum of the three vaults’ assets, converted to trUST units, equals trUST totalSupply.

Four calls give you that, and none of them need hand-built calldata.

1. trUST in issue. totalSupply() on the trUST token, selector 0x18160ddd. trUST has 18 decimals.

cast call 0xdaB8586b5126b7B1FCA5611543905597c9910670 "totalSupply()(uint256)" --rpc-url https://rpc.berachain.com

2. What each vault holds. totalAssets() on each settlement vault, selector 0x01e1d114. It is a plain balanceOf of the underlying, with no exclusions, so it is the whole balance.

cast call 0x23953876A0f7c367B0Ae5E8b9cFb6b42E503F09b "totalAssets()(uint256)" --rpc-url https://rpc.berachain.com

Repeat for the other two vault addresses.

3. Convert. Each vault exposes getScalingFactor(), selector 0xdf2f61b0, which is 10^(18 - assetDecimals). Multiply each vault’s totalAssets() by its own scaling factor and the three figures are all in trUST units. Today that is 1e12 for the two six-decimal assets and 1 for HONEY, but read it rather than assume it.

4. Add. The three converted figures should sum to the totalSupply from step 1, exactly, with no rounding allowance.

One practical warning. These are 18-decimal integers, so they exceed the 64-bit range that most shells use for arithmetic. Adding them with $(( )) in bash or zsh silently overflows and produces a wrong answer. Use Python, bc, or cast --to-unit, not shell arithmetic.

Without cast, the same calls work over plain JSON-RPC:

curl -s -X POST https://rpc.berachain.com -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x23953876A0f7c367B0Ae5E8b9cFb6b42E503F09b","data":"0x01e1d114"},"latest"]}'

Berascan’s Read Contract tab works too, on all four addresses, because every call above is a no-argument getter.

Why the equality holds by construction

This is not a reserve policy that SukukFi promises to follow. It is a property of the contracts.

Minting is atomic with the asset arriving. WERC7575Vault._deposit transfers the asset in and mints trUST in the same function call. There is no path that mints first and funds later.

The conversion is fixed, not a valuation. Shares are assets × 10^(18 - assetDecimals). The source states expressly that it has no dependency on totalSupply or totalAssets, so there is no share price to move and nothing to manipulate.

Only three contracts can mint. mint on the trUST token is onlyVaults, and the registry returns true for exactly the three vaults above and false for everything else, including the duPRT vaults and the contract owner. A fourth backing location would push the sum above supply, and unbacked minting would push it below, so the arithmetic itself rules both out.

The contracts cannot be swapped. trUST and all three settlement vaults are direct deployments, not proxies. Their ERC-1967 implementation slot reads zero, so the code behind these addresses cannot be upgraded. The duPRT vaults are upgradeable; these are not.

Every movement is KYB-gated. mint, transfer and transferFrom all require the recipient to be KYC-verified on the token. The limited-network confinement is enforced by the contract on every transfer, not just at issuance.

How to read a discrepancy

A shortfall, where supply exceeds backing, would be serious. Nothing in the contracts permits it, so treat it as a reason to stop and ask.

An excess, where backing exceeds supply, is not a shortfall. It means value has reached a vault address without passing through deposit(). The most likely cause is an ordinary token transfer sent straight to the address, for example a settlement arriving from a payment processor. The vault has no sync, skim or sweep function, so such a transfer credits nobody until SukukFi records it, which is a privileged operator action by design. See Operator control.

So an excess tells you money has arrived and has not yet been attributed. It never means trUST is under-backed.

What this does not prove

It does not prove SukukFi cannot move the assets. The settlement vaults are operator-controlled and the operator gates minting and redemption in both directions. Read Access & Compliance and Operator control.

It does not let you enumerate the vault registry. The registry is a mapping with no listing function, so you can confirm that today’s three vaults are registered and that other addresses are not, but you cannot prove from the chain that a fourth will never be registered. The reconciliation would reveal it if one were funded.

It is a unit reconciliation, not a valuation. One HONEY mints exactly the same trUST as one USDC.e. Roughly a tenth of current backing is HONEY, so that share depends on HONEY holding its peg. The check would still balance if a backing asset moved off peg.

It says nothing about the duPRT vaults or about capital deployed into a credit line, and nothing about the value of any vault position. trUST is a settlement instrument and carries no yield. See Risk Considerations and How TVL is calculated.

Current state of trUST

trUST is early. It has been issued to a small number of KYB-verified CommTrade participants and there is no secondary market in it, by design: it cannot be held or transferred by anyone outside that set. The transfer history on Berascan is short, and you should expect it to look that way rather than read it as activity.

If the check does not reconcile

Email [email protected] with the block number you queried. A published method is only worth something if a discrepancy reaches someone.