Protocol
How the certificate is wired
Thirteen calls take an issue from the KYC gate to redemption. Each one is gated to a single role, enforced by the contract.
Every call, in order
Calls that move the issue to a new phase are marked with the phase they lead to.
- 01AgentERC-3643
registerIdentity()Records the KYC result for a wallet
Agent · ERC-3643
- 02ProtocolERC-7092
openIssue()Quota, denomination, tenor, profit rate
Protocol · ERC-7092
- 03InvestorsERC-4626
deposit()IDRX in, certificates minted 1:1
Investors · ERC-4626
- 04Auditor SafeSafe
closeSubscription()to ActiveEnds the offer, starts the tenor
Auditor Safe · Safe
- 05ProtocolSafe
allocateToTreasury()Principal out to the project
Protocol · Safe
- 06ProtocolERC-4626
fundCoupon()Pays one profit period in
Protocol · ERC-4626
- 07InvestorsERC-4626
claimCoupon()Pulls the holder's profit share
Investors · ERC-4626
- 08ProtocolSafe
returnFromTreasury()Project repays the principal
Protocol · Safe
- 09ProtocolERC-7092
markMatured()to MaturedTenor over, principal fully back
Protocol · ERC-7092
- 10Auditor SafeSafe
openRedemption()to RedeemingLets holders request their money
Auditor Safe · Safe
- 11InvestorsERC-7540
requestRedeem()Certificates leave, request opens
Investors · ERC-7540
- 12ProtocolERC-7540
fulfillRedeem()Settles the open requests
Protocol · ERC-7540
- 13InvestorsERC-7540
redeem()Claims the principal in IDRX
Investors · ERC-7540
PROTOCOL_ROLE
Protocol admin
Opens the issue, moves principal to and from the project, funds each profit period, settles redemptions and can pause. It cannot close the offer or open redemption.
- Holders
- 0x1cEd...2238 0xa189...de85
- Can call
- openIssue · allocateToTreasury · fundCoupon · fulfillRedeem · pause
AUDITOR_ROLE
Auditor Safe
The only key that can close the offer and open redemption. The role administers itself, so the protocol admin cannot grant it.
- Safe
- 0x411E...2801
- Signing policy
AGENT_ROLE
Compliance agent
Keeps the ERC-3643 register: records verified wallets, freezes a wallet or part of a balance, forces a transfer under a court order, and moves a position to a new wallet after a lost key.
- Registry
- 0x0161...fD5b
- Can call
- registerIdentity · setAddressFrozen · freezePartialTokens · forcedTransfer · recoveryAddress
Deployed contracts
Ethereum Sepolia, chain ID 11155111.
- 0x185e3524Ea9A638122a7d3A6104aCD9112Fce3F7
SukukCertificate
ERC-7092 bond, ERC-4626 accounting, ERC-7540 redemption. Issues SUKUK1.
- 0x016160DE3042C61Db79f1A8af9b317689289fD5b
InvestorRegistry
ERC-3643 KYC gate consulted on every transfer.
- 0x6D5f64e820Dd2342F1D08aF439A2902793869e74
MockIDRX
ERC-20, 18 decimals. Testnet only, not the official IDRX.
What the contract does not check
The contract does not verify that a real-world asset backs the issue, or that a funded profit period matches what the project actually earned. Those checks are made off-chain by the Safe owners before they sign. The expected figure is published as expectedCouponAmount() for comparison.