Contract Reference
All addresses are Ethereum mainnet (chainId 1) and verifiable on a block explorer.
Token
| Field | Value |
|---|---|
| Name | Wren Staked tGBP |
| Symbol | wstGBP |
| Decimals | 18 |
| Contract | MaseerOne |
| Address | 0x57C3571f10767E49C9d7b60feb6c67804783B7aE |
Underlying (gem) | tGBP — 0x27f6c8289550fCE67f6B50BeD1F519966aFE5287 |
Module addresses
The token holds six module references. Proxy modules are bound at their proxy address; the implementation is where the logic (and event ABI) lives.
| Ref | Role | Proxy | Implementation |
|---|---|---|---|
gem | Underlying (tGBP) | 0x27f6c8289550fCE67f6B50BeD1F519966aFE5287 | — |
pip | Price oracle | 0x6A79dCe61A12aa4b75449e0B03746260765D07dF | 0x44BFEB1110bA6091034DBaAb450eF1e7469fF072 |
act | Market gate | 0xB59cB4d3075a8ce5013C78e8Bd7aDA3Fd1300f7f | 0x635dbb7841c27c74b6bDbf1BEd548aAe2C6C9D77 |
adm | Treasury | 0xa8F5bE8457D6ed5c659647fa8d107C3F2086626A | 0x192575eeb42644a8014eB545c69f5125e2437A56 |
cop | Compliance guard — inherits tGBP’s ban list | 0x794cF5948444b14105587455EbE96Caace036d52 | 0x3bb8eBb11816e1C20c3Db57e2E7e5b421b159255 |
flo | Output conduit | 0x57C3571f10767E49C9d7b60feb6c67804783B7aE (= token) | — |
| — | Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 | — |
Compiled with Solidity 0.8.34 (pragma floor ^0.8.28). Source and audit reports are
maintained in the protocol’s canonical source repository.
View functions for integrators
| Function | Returns | Notes |
|---|---|---|
navprice() | uint256 | Raw oracle NAV price (WAD). |
mintcost() | uint256 | NAV adjusted up by bpsin (0 for wstGBP). Use directly to quote mints. |
burncost() | uint256 | NAV adjusted down by bpsout (25 = 0.25%). Use directly to quote redeems. |
mintable() | bool | Whether minting is currently open. |
burnable() | bool | Whether redeeming is currently open. |
capacity() | uint256 | Max total supply (≈ unbounded for wstGBP). |
cooldown() | uint256 | Redemption delay in seconds (currently 0 ⇒ atomic redeem). |
totalSupply() | uint256 | wstGBP in circulation. |
balanceOf(address) | uint256 | wstGBP balance. |
gem() | address | The underlying token (tGBP). |
redemptionCount() | uint256 | Number of redemptions ever opened. |
redemptions(uint256) | (uint256 amount, address redeemer, uint96 date) | A queued redemption by id. |
Write functions
| Function | Signature | Notes |
|---|---|---|
mint | mint(uint256 amt) → uint256 _out | Pull amt tGBP, mint wstGBP. Requires prior tGBP approve. |
redeem | redeem(uint256 amt) → uint256 _id | Burn amt wstGBP; settles tGBP atomically when cooldown 0. |
exit | exit(uint256 id) → uint256 _out | Settle a queued redemption once claimable (cooldown > 0 only). |
Standard ERC‑20 (transfer, approve, transferFrom, allowance) and EIP‑2612
permit are also available; all user‑facing calls are compliance‑gated.
The cop guard inherits its ban list from the underlying gem — for wstGBP that is tGBP
(via tGBP’s isBanned), so an address banned on tGBP cannot mint, redeem, or receive
wstGBP.
issue(uint256) and smelt(...) are issuer‑only supply operations governed by the
treasury registry, and proxy/oracle administration is owner‑gated. These are on‑chain
governance functions, not part of normal integration. wstGBP is a compliance‑gated
real‑world asset (RWA) token: this privileged surface exists to meet compliance
requirements, not for discretionary control over user balances.
Events
event ContractCreated(address indexed creator, uint256 indexed price, uint256 indexed amount);
event ContractRedemption(uint256 indexed id, uint256 indexed date, address indexed redeemer, uint256 amount);
event ClaimProcessed(uint256 indexed id, address indexed claimer, uint256 indexed amount);
// plus standard ERC-20 Transfer / ApprovalABI
A curated ABI covering mint/redeem/exit, the integrator views, and the three lifecycle events. Sufficient for viem/wagmi integration.
export const wstgbpAbi = [
{ type: 'function', name: 'mint', stateMutability: 'nonpayable',
inputs: [{ name: 'amt', type: 'uint256' }], outputs: [{ name: '_out', type: 'uint256' }] },
{ type: 'function', name: 'redeem', stateMutability: 'nonpayable',
inputs: [{ name: 'amt', type: 'uint256' }], outputs: [{ name: '_id', type: 'uint256' }] },
{ type: 'function', name: 'exit', stateMutability: 'nonpayable',
inputs: [{ name: 'id', type: 'uint256' }], outputs: [{ name: '_out', type: 'uint256' }] },
{ type: 'function', name: 'navprice', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'mintcost', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'burncost', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'mintable', stateMutability: 'view', inputs: [], outputs: [{ type: 'bool' }] },
{ type: 'function', name: 'burnable', stateMutability: 'view', inputs: [], outputs: [{ type: 'bool' }] },
{ type: 'function', name: 'capacity', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'cooldown', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'balanceOf', stateMutability: 'view',
inputs: [{ name: 'account', type: 'address' }], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'gem', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] },
{ type: 'function', name: 'redemptionCount', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },
{ type: 'function', name: 'redemptions', stateMutability: 'view',
inputs: [{ type: 'uint256' }],
outputs: [
{ name: 'amount', type: 'uint256' },
{ name: 'redeemer', type: 'address' },
{ name: 'date', type: 'uint96' },
] },
{ type: 'event', name: 'ContractCreated', anonymous: false,
inputs: [
{ name: 'creator', type: 'address', indexed: true },
{ name: 'price', type: 'uint256', indexed: true },
{ name: 'amount', type: 'uint256', indexed: true },
] },
{ type: 'event', name: 'ContractRedemption', anonymous: false,
inputs: [
{ name: 'id', type: 'uint256', indexed: true },
{ name: 'date', type: 'uint256', indexed: true },
{ name: 'redeemer', type: 'address', indexed: true },
{ name: 'amount', type: 'uint256', indexed: false },
] },
{ type: 'event', name: 'ClaimProcessed', anonymous: false,
inputs: [
{ name: 'id', type: 'uint256', indexed: true },
{ name: 'claimer', type: 'address', indexed: true },
{ name: 'amount', type: 'uint256', indexed: true },
] },
] as const