{"id":"ERC-3643","name":"T-REX (Regulated Exchanges)","status":"Final","chain":"both","category":{"id":"identity","name":"Identity & Privacy","description":"Who you are on-chain, and what you choose to reveal"},"journeyStages":[{"id":"management","name":"Asset Management","description":"Managing assets over time"}],"uxImpact":"Security tokens enforce compliance at transfer — only verified investors can hold, automatic checks against regulations. Design implications: show verification status prominently, guide through KYC/identity verification, display transfer eligibility before attempting. Design decisions: how to handle failed compliance checks — educational messaging, clear next steps for verification, balance regulatory requirements with user frustration.","hasDetailedContent":true,"content":{"id":"ERC-3643","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-3643","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Security tokens enforce compliance at transfer — only verified investors can hold, automatic checks against regulations.","designerTakeaways":["You can show Verified investor badge prominently on portfolio and send screens.","Your send flow can pre-check recipient eligibility before the user signs.","You can guide rejected users through KYC next steps instead of raw revert reasons."],"applicability":{"whenToUse":["Tokenized securities or regulated assets.","Transfers must fail for non-verified wallets.","Issuer operates T-REX compliance stack."],"whenToAvoid":["Fully permissionless tokens with no compliance requirement.","Target chain lacks identity registry infrastructure.","Product cannot host or link KYC flow."]},"prototypeFirst":[{"screen":"KYC verification onboarding","why":"Users cannot invest without completing identity verification.","covers":["Unverified","Pending","Verified","Rejected"],"include":["Step list","Document upload","Status tracker","Retry path"]},{"screen":"Pre-transfer eligibility check","why":"Catch compliance failure before wallet signature.","covers":["Both verified","Recipient not verified","Sender restricted"],"include":["Recipient address field","Eligibility result","Block send with reason"]},{"screen":"Verified portfolio view","why":"Holdings should reinforce trusted status.","covers":["Verified holdings","Restricted token"],"include":["Verification badge","Transfer button gated","Contact issuer link"]},{"screen":"Compliance failure recovery","why":"Rejected transfers need human next steps.","covers":["KYC expired","Jurisdiction block"],"include":["Plain reason","Renew verification CTA","Support contact"]}],"mentalModel":[{"label":"Security token","description":"Regulated asset — not every wallet may hold it."},{"label":"Identity registry","description":"On-chain record of which addresses passed KYC."},{"label":"Compliance check","description":"Every transfer validates both parties against rules before execution."},{"label":"Verification lifecycle","description":"KYC can expire or revoke — status is not permanent by default."},{"label":"Transfer eligibility","description":"Pre-check answers will this send succeed before user commits."}],"statesToDesign":[{"state":"Unverified — cannot hold","trigger":"User lacks KYC.","userNeed":"Complete verification to invest.","designResponse":"Full-screen Verify to continue with step tracker."},{"state":"Verification pending","trigger":"KYC submitted, awaiting review.","userNeed":"Know timeline and that funds are safe.","designResponse":"Pending badge with estimated review time."},{"state":"Verified — can transfer","trigger":"User and counterparty eligible.","userNeed":"Normal send experience with confidence.","designResponse":"Verified badges on both parties; enabled Send."},{"state":"Recipient not verified","trigger":"Pre-check fails on recipient.","userNeed":"Understand block before signing.","designResponse":"Recipient cannot receive this asset yet with explanation."},{"state":"Verification expired","trigger":"KYC lapsed.","userNeed":"Renew without losing holdings view.","designResponse":"Expired badge; transfers disabled until renewal."}],"designDecisions":[{"question":"When to run eligibility check?","recommendation":"On address paste and before review step.","rationale":"Late failures waste signatures and trust."},{"question":"How to message failed compliance?","recommendation":"This wallet is not verified for this asset — not You are not allowed.","rationale":"Neutral compliance language reduces offense."},{"question":"Show verification in public address display?","recommendation":"Optional Verified chip on known counterparties only.","rationale":"Do not leak KYC status broadly without consent."}],"problemsSolved":[{"problem":"Regulated transfers fail mysteriously","oldWay":"Revert after user signs full transaction","newWay":"Pre-transfer eligibility check with clear reason","impact":"critical"},{"problem":"Investors unsure if they qualify","oldWay":"Discover blocks at purchase","newWay":"Verification status visible in portfolio at all times","impact":"high"},{"problem":"Issuer support overwhelmed by KYC questions","oldWay":"Opaque compliance errors","newWay":"Guided renewal and rejection flows with next steps","impact":"medium"}],"uxPatterns":[{"name":"Verification Status Badge","description":"Persistent KYC state on portfolio and profile.","mockup":"concept/siwe-sign-in","components":["VerifiedBadge","PendingState","RenewCTA"],"userFlow":["User opens portfolio","Sees verification status","Renews if expired","Transfers enabled"]},{"name":"Transfer Eligibility Pre-Check","description":"Validate recipient before send confirmation.","mockup":"concept/verify-safety","components":["AddressInput","EligibilityResult","SendGate"],"userFlow":["User pastes address","Check runs","Pass enables Send","Fail shows reason"]}],"seenInTheWild":[{"app":"Tokeny","url":"https://tokeny.com/","note":"T-REX implementation reference for compliance UX."},{"app":"Securitize","url":"https://securitize.io/","note":"Tokenized securities onboarding and KYC patterns."},{"app":"tZERO","url":"https://www.tzero.com/","note":"Regulated trading sets verification expectations."},{"app":"Polymesh","url":"https://polymesh.network/","note":"Identity-first chain informs verification badge UX."}],"antiPatterns":[{"pattern":"Allowing sign then compliance revert","why":"Wasted gas and legal frustration","instead":"Pre-check eligibility before wallet prompt","severity":"critical"},{"pattern":"Generic Transfer failed toast","why":"Users cannot fix KYC or pick new recipient","instead":"Specific compliance reason with renewal or support CTA","severity":"high"},{"pattern":"Hiding verification requirement until checkout","why":"Drop-off at payment after emotional investment","instead":"Verify gate at portfolio entry and asset page","severity":"high"}],"vocabulary":[{"use":"Verified investor","avoid":"Whitelisted ONCHAINID","why":"Regulatory-friendly status language."},{"use":"Cannot receive this asset","avoid":"Compliance module revert","why":"Outcome without Solidity terms."},{"use":"Complete verification","avoid":"Submit KYC claim","why":"Action-oriented onboarding copy."}],"onMonad":[{"aspect":"KYC refresh","ethereum":"Re-verification txs may feel costly","monad":"Low fees reduce friction for status updates","designImplication":"Encourage periodic re-check without gas anxiety."},{"aspect":"Transfer pre-check speed","ethereum":"Eligibility queries may lag","monad":"Fast reads enable instant paste validation","designImplication":"Validate recipient on every keystroke debounce."}],"technicalNotes":"ERC-3643 T-REX requires identity registry integration; never allow send UI without eligibility pre-check.","relatedStandards":[{"id":"ERC-20","relationship":"Fungible token with compliance hooks"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-3643","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-3643","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-3643","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-3643","markdown":"https://www.eipsfordesigners.com/standards/ERC-3643/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-3643/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-3643","official":"https://eips.ethereum.org/EIPS/erc-3643","discussion":"https://ethereum-magicians.org/search?q=ERC-3643"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}