Skip to main content

Treasury Contract

Manages asset custody, pricing, and minting authorization.

Storage

approvedAssets: AddressMemoryMap    // Asset whitelist
poolAddresses: Map<Address, Address> // Asset → price pool
attestedBtcBalance: StoredU256 // BTC in multisig
slohmAddress: StoredAddress
authorizedMinters: AddressMemoryMap
multisigAddress: StoredAddress

Key Methods

deposit(asset, amount)

Called by Bonder. Pulls tokens via transferFrom.

withdraw(asset, amount, to)

Multisig only. Emergency withdrawal.

redeem(slohmAmount)

Burns SLOHM, returns proportional treasury assets.

function redeem(amount): void {
const share = amount / slohm.totalSupply();
slohm.burnFrom(sender, amount);

for each approvedAsset:
const payout = asset.balanceOf(this) × share;
asset.transfer(sender, payout);
}

mintRewards(rate)

Staking only. Mints SLOHM for rebase rewards.

mintForBond(to, amount)

Bonder only. Mints SLOHM for bond payouts.

setAttestedBtcBalance(amount)

Multisig only. Updates BTC balance from off-chain multisig.

Access Control

FunctionCaller
depositBonder
withdrawMultisig
mintRewardsStaking
mintForBondBonder
setAttestedBtcBalanceMultisig
addApprovedAssetMultisig

View Functions

  • totalValue() - Total treasury value in BTC
  • backingPerSlohm() - Treasury value per token
  • isApproved(asset) - Check if asset is whitelisted