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.

  1. 01
    registerIdentity()

    Records the KYC result for a wallet

    Agent · ERC-3643

  2. 02
    openIssue()

    Quota, denomination, tenor, profit rate

    Protocol · ERC-7092

  3. 03
    deposit()

    IDRX in, certificates minted 1:1

    Investors · ERC-4626

  4. 04
    closeSubscription()to Active

    Ends the offer, starts the tenor

    Auditor Safe · Safe

  5. 05
    allocateToTreasury()

    Principal out to the project

    Protocol · Safe

  6. 06
    fundCoupon()

    Pays one profit period in

    Protocol · ERC-4626

  7. 07
    claimCoupon()

    Pulls the holder's profit share

    Investors · ERC-4626

  8. 08
    returnFromTreasury()

    Project repays the principal

    Protocol · Safe

  9. 09
    markMatured()to Matured

    Tenor over, principal fully back

    Protocol · ERC-7092

  10. 10
    openRedemption()to Redeeming

    Lets holders request their money

    Auditor Safe · Safe

  11. 11
    requestRedeem()

    Certificates leave, request opens

    Investors · ERC-7540

  12. 12
    fulfillRedeem()

    Settles the open requests

    Protocol · ERC-7540

  13. 13
    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.

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.

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.

Can call
registerIdentity · setAddressFrozen · freezePartialTokens · forcedTransfer · recoveryAddress

Deployed contracts

Ethereum Sepolia, chain ID 11155111.

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.