refactor(taxonomy): regular-form class names + DEA renamed to Direct Emission Asset
User-facing labels and long names for six of the eight asset classes now use the *regular* mint · supply · category form the taxonomy document sketched, instead of the earlier canonical "Certificate/Tranche/Token" framings that didn't fit the actual mechanics: MCA → MUA (Managed Unlimited Asset, was Managed Certificate Asset) MTA → MLA (Managed Limited Asset, was Managed Tranche Asset) PTU → PUT (Permissionless Unlimited Token) PTL → PLT (Permissionless Limited Token) MTU → MUT (Managed Unlimited Token) MTL → MLT (Managed Limited Token) DEA keeps its 3-letter code (flagship configuration) but the long name changes from "Deviant Equilibrium Asset" to "Direct Emission Asset" — the class describes the mechanism; the "Deviant Equilibrium Asset" name is reserved for a specific asset the project will mint (its ticker + name), not the taxonomy class. DEA / PLA / DRA unchanged (already regular; DRA is a separate family). Internal `AssetClass` string-literal codes stay canonical (DEA/PLA/DRA/ MCA/MTA/PTU/PTL/MTU/MTL) so registries, serialised tokens, and the classifier remain stable — only the display fields (`name`, `label`, `description`) change. Two display tests updated to match. Taxonomy HTML doc: quadrant, decomposition table, class-definition cards, classification table, and trailing prose all rewritten to use the regular names; a "prior canonical" column preserves the mapping. 597/597 unit tests pass. Core tsc clean, shell tsc clean. Deployed to testchipnet.duckdns.org.
This commit is contained in:
parent
a623aae040
commit
36a900ce6d
5 changed files with 126 additions and 99 deletions
|
|
@ -490,95 +490,95 @@
|
||||||
<div class="qcode-row"><span class="qcode">PLA</span><span class="qsupply">limited</span></div>
|
<div class="qcode-row"><span class="qcode">PLA</span><span class="qsupply">limited</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="qcell token">
|
<div class="qcell token">
|
||||||
<div class="qcode-row"><span class="qcode">PTU</span><span class="qsupply">unlimited</span></div>
|
<div class="qcode-row"><span class="qcode">PUT</span><span class="qsupply">unlimited</span></div>
|
||||||
<div class="qcode-row"><span class="qcode">PTL</span><span class="qsupply">limited</span></div>
|
<div class="qcode-row"><span class="qcode">PLT</span><span class="qsupply">limited</span></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="qrow-head qrow-bottom">Managed</div>
|
<div class="qrow-head qrow-bottom">Managed</div>
|
||||||
<div class="qcell mba qrow-bottom">
|
<div class="qcell mba qrow-bottom">
|
||||||
<div class="qcode-row"><span class="qcode">MCA</span><span class="qsupply">unlimited</span></div>
|
<div class="qcode-row"><span class="qcode">MUA</span><span class="qsupply">unlimited</span></div>
|
||||||
<div class="qcode-row"><span class="qcode">MTA</span><span class="qsupply">limited</span></div>
|
<div class="qcode-row"><span class="qcode">MLA</span><span class="qsupply">limited</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="qcell token qrow-bottom">
|
<div class="qcell token qrow-bottom">
|
||||||
<div class="qcode-row"><span class="qcode">MTU</span><span class="qsupply">unlimited</span></div>
|
<div class="qcode-row"><span class="qcode">MUT</span><span class="qsupply">unlimited</span></div>
|
||||||
<div class="qcode-row"><span class="qcode">MTL</span><span class="qsupply">limited</span></div>
|
<div class="qcode-row"><span class="qcode">MLT</span><span class="qsupply">limited</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="quadrant-caption">Eight classes · three binary axes · canonical 3-letter names</div>
|
<div class="quadrant-caption">Eight classes · three binary axes · regular mint·supply·category names (DEA keeps its flagship code)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="decomposition">
|
<div class="decomposition">
|
||||||
<h3>Structural decomposition.</h3>
|
<h3>Structural decomposition.</h3>
|
||||||
<p>The canonical class names (the 3-letter forms shown in the quadrant) blend semantic content (the historical names assigned to each class) with positional structure. The structure underneath is fully regular and can be decomposed along the three axes.</p>
|
<p>Seven of the eight class names are the <strong>regular form</strong> — a positional acronym that reads mint × supply × category — because the regular names describe each class directly by its axes and don't need a separate mnemonic. The exception is <span style="font-family: 'JetBrains Mono', monospace;">DEA</span>: it keeps its 3-letter code because it names the standard's flagship configuration, but the acronym now expands as <strong>Direct Emission Asset</strong>.</p>
|
||||||
<p>The structural pattern reads as <strong>mint × supply × category</strong>:</p>
|
<p>The structural pattern reads as <strong>mint × supply × category</strong>:</p>
|
||||||
<div class="pattern">
|
<div class="pattern">
|
||||||
Position 1 (mint rule) Position 2 (supply) Position 3 (category)<br>
|
Position 1 (mint rule) Position 2 (supply) Position 3 (category)<br>
|
||||||
<strong>P</strong> · permissionless <strong>U</strong> · unlimited <strong>A</strong> · asset (MBA, fixed-rate-backed)<br>
|
<strong>P</strong> · permissionless <strong>U</strong> · unlimited <strong>A</strong> · asset (MBA, fixed-rate-backed)<br>
|
||||||
<strong>M</strong> · managed <strong>L</strong> · limited <strong>T</strong> · token (no backing)
|
<strong>M</strong> · managed <strong>L</strong> · limited <strong>T</strong> · token (no backing)
|
||||||
</div>
|
</div>
|
||||||
<p>Applying this pattern, each canonical name corresponds to a fully-regular descriptor:</p>
|
<p>Applying this pattern, the eight classes read as:</p>
|
||||||
<table class="decomp-table">
|
<table class="decomp-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Canonical</th>
|
<th>Code</th>
|
||||||
<th>Regular form</th>
|
|
||||||
<th>Full name</th>
|
<th>Full name</th>
|
||||||
<th>Decomposition</th>
|
<th>Decomposition</th>
|
||||||
|
<th>Prior canonical</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">DEA</td>
|
<td class="canonical">DEA</td>
|
||||||
<td class="regular">PUA</td>
|
<td class="full-name">Direct Emission Asset<br><span style="font-size:11px; color: var(--muted);">(flagship; regular form would be PUA)</span></td>
|
||||||
<td class="full-name">Permissionless Unlimited Asset</td>
|
|
||||||
<td class="parts">P · U · A</td>
|
<td class="parts">P · U · A</td>
|
||||||
|
<td class="regular">DEA · <span style="opacity:.7">was "Deviant Equilibrium Asset"</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">PLA</td>
|
<td class="canonical">PLA</td>
|
||||||
<td class="regular">PLA</td>
|
|
||||||
<td class="full-name">Permissionless Limited Asset</td>
|
<td class="full-name">Permissionless Limited Asset</td>
|
||||||
<td class="parts">P · L · A</td>
|
<td class="parts">P · L · A</td>
|
||||||
|
<td class="regular">PLA · unchanged</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">MCA</td>
|
<td class="canonical">MUA</td>
|
||||||
<td class="regular">MUA</td>
|
|
||||||
<td class="full-name">Managed Unlimited Asset</td>
|
<td class="full-name">Managed Unlimited Asset</td>
|
||||||
<td class="parts">M · U · A</td>
|
<td class="parts">M · U · A</td>
|
||||||
|
<td class="regular">MCA · was "Managed Certificate Asset"</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">MTA</td>
|
<td class="canonical">MLA</td>
|
||||||
<td class="regular">MLA</td>
|
|
||||||
<td class="full-name">Managed Limited Asset</td>
|
<td class="full-name">Managed Limited Asset</td>
|
||||||
<td class="parts">M · L · A</td>
|
<td class="parts">M · L · A</td>
|
||||||
|
<td class="regular">MTA · was "Managed Tranche Asset"</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">PTU</td>
|
<td class="canonical">PUT</td>
|
||||||
<td class="regular">PUT</td>
|
|
||||||
<td class="full-name">Permissionless Unlimited Token</td>
|
<td class="full-name">Permissionless Unlimited Token</td>
|
||||||
<td class="parts">P · U · T</td>
|
<td class="parts">P · U · T</td>
|
||||||
|
<td class="regular">PTU</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">PTL</td>
|
<td class="canonical">PLT</td>
|
||||||
<td class="regular">PLT</td>
|
|
||||||
<td class="full-name">Permissionless Limited Token</td>
|
<td class="full-name">Permissionless Limited Token</td>
|
||||||
<td class="parts">P · L · T</td>
|
<td class="parts">P · L · T</td>
|
||||||
|
<td class="regular">PTL</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">MTU</td>
|
<td class="canonical">MUT</td>
|
||||||
<td class="regular">MUT</td>
|
|
||||||
<td class="full-name">Managed Unlimited Token</td>
|
<td class="full-name">Managed Unlimited Token</td>
|
||||||
<td class="parts">M · U · T</td>
|
<td class="parts">M · U · T</td>
|
||||||
|
<td class="regular">MTU</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="canonical">MTL</td>
|
<td class="canonical">MLT</td>
|
||||||
<td class="regular">MLT</td>
|
|
||||||
<td class="full-name">Managed Limited Token</td>
|
<td class="full-name">Managed Limited Token</td>
|
||||||
<td class="parts">M · L · T</td>
|
<td class="parts">M · L · T</td>
|
||||||
|
<td class="regular">MTL</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p style="margin-top: 18px;"><strong>On the asymmetry.</strong> The canonical names carry semantic content the regular forms do not: <span style="font-family: 'JetBrains Mono', monospace;">DEA</span> embeds the project prefix because it names the standard's flagship configuration; <span style="font-family: 'JetBrains Mono', monospace;">MCA</span> and <span style="font-family: 'JetBrains Mono', monospace;">MTA</span> use "Certificate" and "Tranche" as descriptive markers of intended use case. The regular forms in the middle column are not project-canonical names — they appear here only to show how the canonical names decompose along the three structural axes.</p>
|
<p style="margin-top: 18px;"><strong>On the DEA asymmetry.</strong> <span style="font-family: 'JetBrains Mono', monospace;">DEA</span> keeps a semantically-loaded 3-letter code because it names the standard's flagship configuration; the other seven classes now use the regular positional form so the acronym describes the class directly. The name "Deviant Equilibrium Asset" is reserved for a specific asset the project mints — an asset whose taxonomy class is DEA (Direct Emission Asset) but whose ticker and name reference the Nash equilibrium property. The class-vs-asset distinction: the class describes the mechanism; the asset carries a project identity within that class. <strong>The earlier canonical names (MCA · "Managed Certificate Asset", MTA · "Managed Tranche Asset", the PTU/PTL/MTU/MTL forms with "Token" in the middle) are retired</strong> — those framings implied use cases that didn't fit the mechanics.</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
@ -595,7 +595,7 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<div class="class-grid">
|
<div class="class-grid">
|
||||||
<div class="class-card">
|
<div class="class-card">
|
||||||
<div class="class-code">DEA</div>
|
<div class="class-code">DEA</div>
|
||||||
<div class="class-name">Deviant Equilibrium Asset</div>
|
<div class="class-name">Direct Emission Asset</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Permissionless</span>
|
<span class="prop">Permissionless</span>
|
||||||
<span class="prop">Fixed rate</span>
|
<span class="prop">Fixed rate</span>
|
||||||
|
|
@ -614,8 +614,8 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<div class="class-desc">Same permissionless mint as DEA — anyone can claim from the contract at the fixed rate — but with a hard supply cap declared at genesis. When the cap is reached, the mint side closes permanently by exhaustion. Holders retain the protocol-enforced redemption right at the genesis rate indefinitely. The contract continues to operate for redemptions after issuance is exhausted.</div>
|
<div class="class-desc">Same permissionless mint as DEA — anyone can claim from the contract at the fixed rate — but with a hard supply cap declared at genesis. When the cap is reached, the mint side closes permanently by exhaustion. Holders retain the protocol-enforced redemption right at the genesis rate indefinitely. The contract continues to operate for redemptions after issuance is exhausted.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-card">
|
<div class="class-card">
|
||||||
<div class="class-code">MCA</div>
|
<div class="class-code">MUA</div>
|
||||||
<div class="class-name">Managed Certificate Asset</div>
|
<div class="class-name">Managed Unlimited Asset</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Managed</span>
|
<span class="prop">Managed</span>
|
||||||
<span class="prop">Fixed rate</span>
|
<span class="prop">Fixed rate</span>
|
||||||
|
|
@ -624,18 +624,18 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<div class="class-desc">The founder is the sole issuer — new units enter circulation only through founder-initiated mint transactions. The fixed BCH backing rate applies to every issued unit and cannot be modified. The founder can pause mint operations (by not minting) but cannot devalue, freeze, or terminate the contract. Existing holders retain their redemption right regardless of founder action.</div>
|
<div class="class-desc">The founder is the sole issuer — new units enter circulation only through founder-initiated mint transactions. The fixed BCH backing rate applies to every issued unit and cannot be modified. The founder can pause mint operations (by not minting) but cannot devalue, freeze, or terminate the contract. Existing holders retain their redemption right regardless of founder action.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-card">
|
<div class="class-card">
|
||||||
<div class="class-code">MTA</div>
|
<div class="class-code">MLA</div>
|
||||||
<div class="class-name">Managed Tranche Asset</div>
|
<div class="class-name">Managed Limited Asset</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Managed</span>
|
<span class="prop">Managed</span>
|
||||||
<span class="prop">Fixed rate</span>
|
<span class="prop">Fixed rate</span>
|
||||||
<span class="prop">Limited</span>
|
<span class="prop">Limited</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-desc">Same managed-mint pattern as MCA but with a hard supply cap. The founder mints up to the cap, after which no further issuance is possible by anyone. Suitable for fixed-allocation configurations where a known maximum supply is required at genesis. Holders retain the protocol-enforced redemption right indefinitely.</div>
|
<div class="class-desc">Same managed-mint pattern as MUA but with a hard supply cap. The founder mints up to the cap, after which no further issuance is possible by anyone. Suitable for fixed-allocation configurations where a known maximum supply is required at genesis. Holders retain the protocol-enforced redemption right indefinitely.</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><strong>On the supply property.</strong> Under the current CashScript implementation, redemptions reduce the issued supply (redeemed units are burned rather than returned to the issuance pool). For DEA and MCA — unlimited supply — this is operationally irrelevant. For PLA and MTA — limited supply — this produces deflationary supply dynamics under redemption pressure. This is a property of the present implementation, not an intrinsic property of the standard. Future implementations may modify the reservoir behavior to return redeemed units to the issuance pool.</p>
|
<p><strong>On the supply property.</strong> Under the current CashScript implementation, redemptions reduce the issued supply (redeemed units are burned rather than returned to the issuance pool). For DEA and MUA — unlimited supply — this is operationally irrelevant. For PLA and MLA — limited supply — this produces deflationary supply dynamics under redemption pressure. This is a property of the present implementation, not an intrinsic property of the standard. Future implementations may modify the reservoir behavior to return redeemed units to the issuance pool.</p>
|
||||||
|
|
||||||
<p><strong>On the rate property.</strong> The rate is fixed at genesis. The contract has no mechanism to modify it. The rate cannot be voted on, governed, oracle-fed, or administratively adjusted. Whatever rate is declared at the moment of contract deployment is the rate that applies to every issued and redeemed unit for as long as the contract operates — which is indefinitely.</p>
|
<p><strong>On the rate property.</strong> The rate is fixed at genesis. The contract has no mechanism to modify it. The rate cannot be voted on, governed, oracle-fed, or administratively adjusted. Whatever rate is declared at the moment of contract deployment is the rate that applies to every issued and redeemed unit for as long as the contract operates — which is indefinitely.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -652,8 +652,8 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
|
|
||||||
<div class="class-grid">
|
<div class="class-grid">
|
||||||
<div class="class-card token">
|
<div class="class-card token">
|
||||||
<div class="class-code">PTU</div>
|
<div class="class-code">PUT</div>
|
||||||
<div class="class-name">Permissionless Token Unlimited</div>
|
<div class="class-name">Permissionless Unlimited Token</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Permissionless</span>
|
<span class="prop">Permissionless</span>
|
||||||
<span class="prop">No rate</span>
|
<span class="prop">No rate</span>
|
||||||
|
|
@ -662,18 +662,18 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<div class="class-desc">A CashToken whose mint covenant is open to any spender and whose supply has no cap. No protocol-enforced rate-to-BCH relationship. Use cases: open-mint memecoins, free-issuance experimental tokens, community-mintable assets without supply cap or backing claim.</div>
|
<div class="class-desc">A CashToken whose mint covenant is open to any spender and whose supply has no cap. No protocol-enforced rate-to-BCH relationship. Use cases: open-mint memecoins, free-issuance experimental tokens, community-mintable assets without supply cap or backing claim.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-card token">
|
<div class="class-card token">
|
||||||
<div class="class-code">PTL</div>
|
<div class="class-code">PLT</div>
|
||||||
<div class="class-name">Permissionless Token Limited</div>
|
<div class="class-name">Permissionless Limited Token</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Permissionless</span>
|
<span class="prop">Permissionless</span>
|
||||||
<span class="prop">No rate</span>
|
<span class="prop">No rate</span>
|
||||||
<span class="prop">Limited</span>
|
<span class="prop">Limited</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-desc">Same permissionless mint as PTU, with a hard supply cap declared at genesis. No backing claim. Use cases: open-mint collectibles where any participant can mint up to the cap, community-distributed claim tokens with a fixed total, time-limited mint events.</div>
|
<div class="class-desc">Same permissionless mint as PUT, with a hard supply cap declared at genesis. No backing claim. Use cases: open-mint collectibles where any participant can mint up to the cap, community-distributed claim tokens with a fixed total, time-limited mint events.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-card token">
|
<div class="class-card token">
|
||||||
<div class="class-code">MTU</div>
|
<div class="class-code">MUT</div>
|
||||||
<div class="class-name">Managed Token Unlimited</div>
|
<div class="class-name">Managed Unlimited Token</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Managed</span>
|
<span class="prop">Managed</span>
|
||||||
<span class="prop">No rate</span>
|
<span class="prop">No rate</span>
|
||||||
|
|
@ -682,20 +682,20 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<div class="class-desc">Issuer-controlled mint with no supply cap and no backing claim. The issuer can mint arbitrary new units; market dynamics set the price. Use cases: project tokens, governance tokens, utility tokens, conventional unbacked altcoins. The default form of most existing CashTokens.</div>
|
<div class="class-desc">Issuer-controlled mint with no supply cap and no backing claim. The issuer can mint arbitrary new units; market dynamics set the price. Use cases: project tokens, governance tokens, utility tokens, conventional unbacked altcoins. The default form of most existing CashTokens.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-card token">
|
<div class="class-card token">
|
||||||
<div class="class-code">MTL</div>
|
<div class="class-code">MLT</div>
|
||||||
<div class="class-name">Managed Token Limited</div>
|
<div class="class-name">Managed Limited Token</div>
|
||||||
<div class="class-props">
|
<div class="class-props">
|
||||||
<span class="prop">Managed</span>
|
<span class="prop">Managed</span>
|
||||||
<span class="prop">No rate</span>
|
<span class="prop">No rate</span>
|
||||||
<span class="prop">Limited</span>
|
<span class="prop">Limited</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="class-desc">Issuer-controlled mint with a hard supply cap. The issuer retains mint authority up to the cap, after which no further issuance is possible. Use cases: tickets (event admissions with fixed seat count), credentials (membership tokens, certificates of completion), tranched collections, fixed-supply community tokens.</div>
|
<div class="class-desc">Issuer-controlled mint with a hard supply cap. The issuer retains mint authority up to the cap, after which no further issuance is possible. Use cases: tickets (event admissions with fixed seat count), credentials (membership tokens, certificates of completion), fixed-slice collections, fixed-supply community tokens.</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><strong>On swap eligibility.</strong> The Atomic Swap Mechanism (ASM) operates on the MBA family because the fixed rate provides a deterministic conversion relationship — the Universal Exchange Rate <code style="font-family: 'JetBrains Mono', monospace;">rateA / rateB</code> defines how one MBA exchanges for another at the protocol level. The Token family has no rate; ASM cannot operate because no protocol-defined conversion exists. A token-for-token swap would require external price discovery, which is outside the MBA Standard's scope.</p>
|
<p><strong>On swap eligibility.</strong> The Atomic Swap Mechanism (ASM) operates on the MBA family because the fixed rate provides a deterministic conversion relationship — the Universal Exchange Rate <code style="font-family: 'JetBrains Mono', monospace;">rateA / rateB</code> defines how one MBA exchanges for another at the protocol level. The Token family has no rate; ASM cannot operate because no protocol-defined conversion exists. A token-for-token swap would require external price discovery, which is outside the MBA Standard's scope.</p>
|
||||||
|
|
||||||
<p><strong>On collateralized-debt ("CDP") stablecoins (amended 2026-05-27, ADR-0033).</strong> A CDP stablecoin (MakerDAO/DAI-class) shares the <em>permissionless-mint surface</em> of an MBA — anyone locks collateral and mints — which can make it look like a backed asset. It is not. The collateral backs the <strong>debt position</strong> (the vault, a liability), <strong>not the circulating token</strong>: a holder has no protocol-enforced redemption claim on the collateral, the token's value is market-determined, and its peg is breakable (cf. TerraUSD). By the <em>consensus-backing test</em> it carries no per-unit rate-to-BCH invariant, and by the <em>unilateral-redemption test</em> the holder cannot realize base-unit value without a market or counterparty — so it is <strong>not an MBA</strong>. A permissionless CDP stablecoin classifies as <strong>PTU</strong> (no backing claim · permissionless · unlimited), <strong>distinct from a custodial stablecoin</strong> (USDC/USDT), which is managed-mint and classifies as <strong>MTU</strong>. The on-chain collateralization is a property of the debt vault (a soft-backed liability), never of the token. See ADR-0033 and <code>asset-landscape.md</code>.</p>
|
<p><strong>On collateralized-debt ("CDP") stablecoins (amended 2026-05-27, ADR-0033).</strong> A CDP stablecoin (MakerDAO/DAI-class) shares the <em>permissionless-mint surface</em> of an MBA — anyone locks collateral and mints — which can make it look like a backed asset. It is not. The collateral backs the <strong>debt position</strong> (the vault, a liability), <strong>not the circulating token</strong>: a holder has no protocol-enforced redemption claim on the collateral, the token's value is market-determined, and its peg is breakable (cf. TerraUSD). By the <em>consensus-backing test</em> it carries no per-unit rate-to-BCH invariant, and by the <em>unilateral-redemption test</em> the holder cannot realize base-unit value without a market or counterparty — so it is <strong>not an MBA</strong>. A permissionless CDP stablecoin classifies as <strong>PUT</strong> (no backing claim · permissionless · unlimited), <strong>distinct from a custodial stablecoin</strong> (USDC/USDT), which is managed-mint and classifies as <strong>MUT</strong>. The on-chain collateralization is a property of the debt vault (a soft-backed liability), never of the token. See ADR-0033 and <code>asset-landscape.md</code>.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
@ -733,12 +733,12 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td>Fixed rate</td><td>Permissionless</td><td>Unlimited</td><td class="class-code">DEA</td></tr>
|
<tr><td>Fixed rate</td><td>Permissionless</td><td>Unlimited</td><td class="class-code">DEA</td></tr>
|
||||||
<tr><td>Fixed rate</td><td>Permissionless</td><td>Limited</td><td class="class-code">PLA</td></tr>
|
<tr><td>Fixed rate</td><td>Permissionless</td><td>Limited</td><td class="class-code">PLA</td></tr>
|
||||||
<tr><td>Fixed rate</td><td>Managed</td><td>Unlimited</td><td class="class-code">MCA</td></tr>
|
<tr><td>Fixed rate</td><td>Managed</td><td>Unlimited</td><td class="class-code">MUA</td></tr>
|
||||||
<tr><td>Fixed rate</td><td>Managed</td><td>Limited</td><td class="class-code">MTA</td></tr>
|
<tr><td>Fixed rate</td><td>Managed</td><td>Limited</td><td class="class-code">MLA</td></tr>
|
||||||
<tr><td>None</td><td>Permissionless</td><td>Unlimited</td><td class="class-code">PTU</td></tr>
|
<tr><td>None</td><td>Permissionless</td><td>Unlimited</td><td class="class-code">PUT</td></tr>
|
||||||
<tr><td>None</td><td>Permissionless</td><td>Limited</td><td class="class-code">PTL</td></tr>
|
<tr><td>None</td><td>Permissionless</td><td>Limited</td><td class="class-code">PLT</td></tr>
|
||||||
<tr><td>None</td><td>Managed</td><td>Unlimited</td><td class="class-code">MTU</td></tr>
|
<tr><td>None</td><td>Managed</td><td>Unlimited</td><td class="class-code">MUT</td></tr>
|
||||||
<tr><td>None</td><td>Managed</td><td>Limited</td><td class="class-code">MTL</td></tr>
|
<tr><td>None</td><td>Managed</td><td>Limited</td><td class="class-code">MLT</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -761,7 +761,7 @@ Position 1 (mint rule) Position 2 (supply) Position 3 (catego
|
||||||
|
|
||||||
<p><strong>No issuance ceiling for DEA.</strong> Specifically for the DEA configuration (permissionless · unlimited), no party can close issuance. The supply has no cap; the mint covenant is open. Issuance continues for as long as the contract operates — indefinitely.</p>
|
<p><strong>No issuance ceiling for DEA.</strong> Specifically for the DEA configuration (permissionless · unlimited), no party can close issuance. The supply has no cap; the mint covenant is open. Issuance continues for as long as the contract operates — indefinitely.</p>
|
||||||
|
|
||||||
<p>For the managed classes (MCA, MTA), the issuer can choose not to mint. But the contract continues to operate for the units already issued, and the issuer's choice not to mint does not affect existing holders' redemption rights. For the limited classes (PLA, MTA), issuance closes when the supply cap is reached, but the contract continues to operate for redemptions of the issued units.</p>
|
<p>For the managed classes (MUA, MLA), the issuer can choose not to mint. But the contract continues to operate for the units already issued, and the issuer's choice not to mint does not affect existing holders' redemption rights. For the limited classes (PLA, MLA), issuance closes when the supply cap is reached, but the contract continues to operate for redemptions of the issued units.</p>
|
||||||
|
|
||||||
<p>These properties are structural. They follow from the contract's code, not from the deploying party's intentions, the operator's policies, or any institutional commitment. The standard is functional independent of who deployed it, who holds it, or who interacts with it.</p>
|
<p>These properties are structural. They follow from the contract's code, not from the deploying party's intentions, the operator's policies, or any institutional commitment. The standard is functional independent of who deployed it, who holds it, or who interacts with it.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -23,43 +23,50 @@ type Backing = 'mba' | 'token';
|
||||||
type Mint = 'permissionless' | 'managed';
|
type Mint = 'permissionless' | 'managed';
|
||||||
type Supply = 'unlimited' | 'limited';
|
type Supply = 'unlimited' | 'limited';
|
||||||
|
|
||||||
|
// Regular-form class codes: mint · supply · category (P/M · U/L · A/T).
|
||||||
|
// DEA is the flagship configuration and keeps its 3-letter code — but its
|
||||||
|
// long name is now "Direct Emission Asset" (the class); the label "Deviant
|
||||||
|
// Equilibrium Asset" is reserved for the specific asset we'll mint (its
|
||||||
|
// ticker + name), not the taxonomy class.
|
||||||
// [code, formal name, asm-eligible] keyed by backing|mint|supply.
|
// [code, formal name, asm-eligible] keyed by backing|mint|supply.
|
||||||
const CLASS: Record<string, [string, string, boolean]> = {
|
const CLASS: Record<string, [string, string, boolean]> = {
|
||||||
'mba|permissionless|unlimited': ['DEA', 'Deviant Equilibrium Asset', true],
|
'mba|permissionless|unlimited': ['DEA', 'Direct Emission Asset', true],
|
||||||
'mba|permissionless|limited': ['PLA', 'Permissionless Limited Asset', true],
|
'mba|permissionless|limited': ['PLA', 'Permissionless Limited Asset', true],
|
||||||
'mba|managed|unlimited': ['MCA', 'Managed Certificate Asset', false],
|
'mba|managed|unlimited': ['MUA', 'Managed Unlimited Asset', false],
|
||||||
'mba|managed|limited': ['MTA', 'Managed Tranche Asset', false],
|
'mba|managed|limited': ['MLA', 'Managed Limited Asset', false],
|
||||||
'token|permissionless|unlimited': ['PTU', 'Permissionless Token Unlimited', false],
|
'token|permissionless|unlimited': ['PUT', 'Permissionless Unlimited Token', false],
|
||||||
'token|permissionless|limited': ['PTL', 'Permissionless Token Limited', false],
|
'token|permissionless|limited': ['PLT', 'Permissionless Limited Token', false],
|
||||||
'token|managed|unlimited': ['MTU', 'Managed Token Unlimited', false],
|
'token|managed|unlimited': ['MUT', 'Managed Unlimited Token', false],
|
||||||
'token|managed|limited': ['MTL', 'Managed Token Limited', false],
|
'token|managed|limited': ['MLT', 'Managed Limited Token', false],
|
||||||
};
|
};
|
||||||
|
|
||||||
// Detail copy (condensed from artemision-tab.html DATA; ADR-0028 peer labels).
|
// Detail copy — regular-form names. Descriptions dropped "certificate/tranche"
|
||||||
|
// framing (they didn't fit the actual mechanics); each cell now says what the
|
||||||
|
// class IS along its three axes, plus the practical use case.
|
||||||
const DETAIL: Record<string, { name: string; fam: string; def: string }> = {
|
const DETAIL: Record<string, { name: string; fam: string; def: string }> = {
|
||||||
MBA: { name: 'Mathematically Backed Assets', fam: 'Family · backed', def: 'The backed family. Every unit carries a protocol-enforced backing rate to BCH, set at genesis and immutable — a fixed, redeemable claim on locked BCH. Redemption is the contract itself: no custodian, no off-switch. The strict-enforcement category (Layer 2b).' },
|
MBA: { name: 'Mathematically Backed Assets', fam: 'Family · backed', def: 'The backed family. Every unit carries a protocol-enforced backing rate to BCH, set at genesis and immutable — a fixed, redeemable claim on locked BCH. Redemption is the contract itself: no custodian, no off-switch. The strict-enforcement category (Layer 2b).' },
|
||||||
NBA: { name: 'Non-Backed Assets', fam: 'Family · no peg', def: 'No backing mechanism — the contract locks no BCH at a fixed rate and there is no protocol redemption. Value is market-set. Tokens, memecoins, collectibles, and PoW-style coins all live here; fiat/stablecoins too (their backing is off-chain, unenforceable).' },
|
NBA: { name: 'Non-Backed Assets', fam: 'Family · no peg', def: 'No backing mechanism — the contract locks no BCH at a fixed rate and there is no protocol redemption. Value is market-set. Tokens, memecoins, collectibles, and PoW-style coins all live here; fiat/stablecoins too (their backing is off-chain, unenforceable).' },
|
||||||
DEA: { name: 'Deviant Equilibrium Asset', fam: 'MBA · Hard-Backed', def: 'Counterparty-free backed currency — every unit carries its BCH backing inside its own UTXO, redeemable by your own spend. The hardest backing a currency has carried. Orbital / ASM eligible.' },
|
DEA: { name: 'Direct Emission Asset', fam: 'MBA · flagship configuration', def: 'Counterparty-free backed currency — every unit carries its BCH backing inside its own UTXO, redeemable by your own spend. Permissionless mint, fixed rate, no supply cap. The hardest backing a currency has carried. Orbital / ASM eligible.' },
|
||||||
PLA: { name: 'Permissionless Limited Asset', fam: 'MBA · Commodity', def: 'Backed like a DEA but with a capped reservoir. Once minted out the ASM goes inert, yet the BCH floor (PNV) stays redeemable forever.' },
|
PLA: { name: 'Permissionless Limited Asset', fam: 'MBA · capped reservoir', def: 'Backed like a DEA but with a hard supply cap at genesis. Once the reservoir is minted out the ASM goes inert, yet the BCH floor (PNV) stays redeemable forever.' },
|
||||||
MCA: { name: 'Managed Certificate Asset', fam: 'MBA · Bond', def: 'Issuer-gated, uncapped issuance with a protocol-enforced BCH floor + redemption — a rolling backed program (bond / reserve-note). The home for a *protocol-backed* stablecoin (reserves enforced on-chain). No ASM.' },
|
MUA: { name: 'Managed Unlimited Asset', fam: 'MBA · issuer-gated · uncapped', def: 'Issuer-gated, uncapped issuance with a protocol-enforced BCH floor + redemption — a rolling backed program. The home for a protocol-backed stablecoin (reserves enforced on-chain). No ASM.' },
|
||||||
MTA: { name: 'Managed Tranche Asset', fam: 'MBA · Tranche', def: 'Issuer-gated and hard-capped, with a protocol-enforced BCH floor — a fixed slice (tranche) of backed issuance; notes & bills. No ASM.' },
|
MLA: { name: 'Managed Limited Asset', fam: 'MBA · issuer-gated · capped', def: 'Issuer-gated and hard-capped, with a protocol-enforced BCH floor — a fixed slice of backed issuance. No ASM.' },
|
||||||
PTU: { name: 'Permissionless Token Unlimited', fam: 'NBA · Game currency', def: 'Non-Convertible Virtual Currency — open-mint (anyone mints by spending into the covenant), uncapped, no backing. In-game currencies, faucet/tap-to-earn tokens.' },
|
PUT: { name: 'Permissionless Unlimited Token', fam: 'NBA · open-mint · uncapped', def: 'Anyone mints by spending into the covenant. No supply cap, no backing. Faucet / tap-to-earn / in-game currencies, community-mintable tokens.' },
|
||||||
PTL: { name: 'Permissionless Token Limited', fam: 'NBA · Mineable Coin', def: 'Open-mint but hard-capped, no backing floor, no exclusive operator — Bitcoin / gold / silver-style direct-value assets: mined or extracted by anyone, finite, unbacked.' },
|
PLT: { name: 'Permissionless Limited Token', fam: 'NBA · open-mint · capped', def: 'Open-mint but hard-capped, no backing floor, no exclusive operator — Bitcoin / gold / silver-style direct-value assets: mined or extracted by anyone, finite, unbacked.' },
|
||||||
MTU: { name: 'Managed Token Unlimited', fam: 'NBA · Meme / Tokens', def: 'Issuer-controlled, uncapped, no protocol backing — the default CashToken. Memecoins, governance/utility tokens, and fiat / "stablecoins" (backing claimed off-chain, unenforced → NBA, not MBA).' },
|
MUT: { name: 'Managed Unlimited Token', fam: 'NBA · issuer-controlled · uncapped', def: 'Issuer-controlled, uncapped, no protocol backing — the default CashToken. Memecoins, governance / utility tokens, and fiat / "stablecoins" (backing claimed off-chain, unenforced → NBA, not MBA).' },
|
||||||
MTL: { name: 'Managed Token Limited', fam: 'NBA · NFT / Collectibles', def: 'Issuer-controlled and capped, no backing — fixed NFT collections, numbered editions, tickets, memberships, capped memecoins.' },
|
MLT: { name: 'Managed Limited Token', fam: 'NBA · issuer-controlled · capped', def: 'Issuer-controlled and capped, no backing — fixed NFT collections, numbered editions, tickets, memberships, capped meme tokens.' },
|
||||||
};
|
};
|
||||||
|
|
||||||
const MBA_CLASSES: [string, string, string][] = [
|
const MBA_CLASSES: [string, string, string][] = [
|
||||||
['DEA', 'Hard-Backed', 'permissionless · unlimited'],
|
['DEA', 'Direct Emission Asset', 'permissionless · unlimited'],
|
||||||
['PLA', 'Commodity', 'permissionless · limited'],
|
['PLA', 'Permissionless Limited', 'permissionless · limited'],
|
||||||
['MCA', 'Bond', 'managed · unlimited'],
|
['MUA', 'Managed Unlimited', 'managed · unlimited'],
|
||||||
['MTA', 'Tranche', 'managed · limited'],
|
['MLA', 'Managed Limited', 'managed · limited'],
|
||||||
];
|
];
|
||||||
const NBA_CLASSES: [string, string, string][] = [
|
const NBA_CLASSES: [string, string, string][] = [
|
||||||
['PTU', 'Game currency', 'permissionless · unlimited'],
|
['PUT', 'Permissionless Unlimited', 'permissionless · unlimited'],
|
||||||
['PTL', 'Mineable Coin', 'permissionless · limited'],
|
['PLT', 'Permissionless Limited', 'permissionless · limited'],
|
||||||
['MTU', 'Meme / Tokens', 'managed · unlimited'],
|
['MUT', 'Managed Unlimited', 'managed · unlimited'],
|
||||||
['MTL', 'NFT / Collectibles', 'managed · limited'],
|
['MLT', 'Managed Limited', 'managed · limited'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// Render a formal name with the initial of each word in acid (ADR-0028: read the
|
// Render a formal name with the initial of each word in acid (ADR-0028: read the
|
||||||
|
|
|
||||||
|
|
@ -97,10 +97,20 @@ const ORDER: readonly AssetClass[] = [
|
||||||
'MTL',
|
'MTL',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Class metadata — user-facing labels and names use the *regular* form
|
||||||
|
// (mint · supply · category, P/M · U/L · A/T) rather than the earlier
|
||||||
|
// canonical acronyms. Two carry-overs the regular pass doesn't touch:
|
||||||
|
// - The `code` field is the on-disk / on-the-wire identifier and stays
|
||||||
|
// canonical (DEA / MCA / MTA / PTU / PTL / MTU / MTL) so registries,
|
||||||
|
// serialised tokens, and the classifier remain stable.
|
||||||
|
// - `DEA` keeps its 3-letter code (it's the flagship configuration) but
|
||||||
|
// its long name is now "Direct Emission Asset" — the label "Deviant
|
||||||
|
// Equilibrium Asset" is reserved for the specific asset we'll mint
|
||||||
|
// (its ticker + name), not the taxonomy class.
|
||||||
export const ASSET_CLASS_INFO: Record<AssetClass, AssetClassInfo> = {
|
export const ASSET_CLASS_INFO: Record<AssetClass, AssetClassInfo> = {
|
||||||
DEA: {
|
DEA: {
|
||||||
code: 'DEA',
|
code: 'DEA',
|
||||||
name: 'Deviant Equilibrium Asset',
|
name: 'Direct Emission Asset',
|
||||||
family: 'MBA',
|
family: 'MBA',
|
||||||
mint: 'permissionless',
|
mint: 'permissionless',
|
||||||
supply: 'unlimited',
|
supply: 'unlimited',
|
||||||
|
|
@ -136,73 +146,73 @@ export const ASSET_CLASS_INFO: Record<AssetClass, AssetClassInfo> = {
|
||||||
},
|
},
|
||||||
MCA: {
|
MCA: {
|
||||||
code: 'MCA',
|
code: 'MCA',
|
||||||
name: 'Managed Certificate Asset',
|
name: 'Managed Unlimited Asset',
|
||||||
family: 'MBA',
|
family: 'MBA',
|
||||||
mint: 'managed',
|
mint: 'managed',
|
||||||
supply: 'unlimited',
|
supply: 'unlimited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: true,
|
showsPnv: true,
|
||||||
label: 'MCA',
|
label: 'MUA',
|
||||||
description:
|
description:
|
||||||
'Managed mint, fixed rate, unlimited supply. The non-custodial stablecoin home (Architecture A only).',
|
'Managed mint, fixed rate, unlimited supply. Issuer-gated backed issuance with a protocol-enforced BCH floor + redemption.',
|
||||||
},
|
},
|
||||||
MTA: {
|
MTA: {
|
||||||
code: 'MTA',
|
code: 'MTA',
|
||||||
name: 'Managed Tranche Asset',
|
name: 'Managed Limited Asset',
|
||||||
family: 'MBA',
|
family: 'MBA',
|
||||||
mint: 'managed',
|
mint: 'managed',
|
||||||
supply: 'limited',
|
supply: 'limited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: true,
|
showsPnv: true,
|
||||||
label: 'MTA',
|
label: 'MLA',
|
||||||
description:
|
description:
|
||||||
'Managed mint, fixed rate, capped supply. Bond / tranche-like instruments.',
|
'Managed mint, fixed rate, capped supply. Issuer-gated hard-capped backed issuance.',
|
||||||
},
|
},
|
||||||
PTU: {
|
PTU: {
|
||||||
code: 'PTU',
|
code: 'PTU',
|
||||||
name: 'Permissionless Token Unlimited',
|
name: 'Permissionless Unlimited Token',
|
||||||
family: 'Token',
|
family: 'Token',
|
||||||
mint: 'permissionless',
|
mint: 'permissionless',
|
||||||
supply: 'unlimited',
|
supply: 'unlimited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: false,
|
showsPnv: false,
|
||||||
label: 'Token · PTU',
|
label: 'Token · PUT',
|
||||||
description:
|
description:
|
||||||
'Permissionless mint, no backing, uncapped. Open-mint memecoins, community-mintable tokens.',
|
'Permissionless mint, no backing, uncapped. Open-mint memecoins, community-mintable tokens.',
|
||||||
},
|
},
|
||||||
PTL: {
|
PTL: {
|
||||||
code: 'PTL',
|
code: 'PTL',
|
||||||
name: 'Permissionless Token Limited',
|
name: 'Permissionless Limited Token',
|
||||||
family: 'Token',
|
family: 'Token',
|
||||||
mint: 'permissionless',
|
mint: 'permissionless',
|
||||||
supply: 'limited',
|
supply: 'limited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: false,
|
showsPnv: false,
|
||||||
label: 'Token · PTL',
|
label: 'Token · PLT',
|
||||||
description:
|
description:
|
||||||
'Permissionless mint, no backing, capped. Open-mint collectibles, capped mint events.',
|
'Permissionless mint, no backing, capped. Open-mint collectibles, capped mint events.',
|
||||||
},
|
},
|
||||||
MTU: {
|
MTU: {
|
||||||
code: 'MTU',
|
code: 'MTU',
|
||||||
name: 'Managed Token Unlimited',
|
name: 'Managed Unlimited Token',
|
||||||
family: 'Token',
|
family: 'Token',
|
||||||
mint: 'managed',
|
mint: 'managed',
|
||||||
supply: 'unlimited',
|
supply: 'unlimited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: false,
|
showsPnv: false,
|
||||||
label: 'Token · MTU',
|
label: 'Token · MUT',
|
||||||
description:
|
description:
|
||||||
'Managed mint, no backing, uncapped. Project / governance / utility tokens; the default existing CashToken.',
|
'Managed mint, no backing, uncapped. Project / governance / utility tokens; the default existing CashToken.',
|
||||||
},
|
},
|
||||||
MTL: {
|
MTL: {
|
||||||
code: 'MTL',
|
code: 'MTL',
|
||||||
name: 'Managed Token Limited',
|
name: 'Managed Limited Token',
|
||||||
family: 'Token',
|
family: 'Token',
|
||||||
mint: 'managed',
|
mint: 'managed',
|
||||||
supply: 'limited',
|
supply: 'limited',
|
||||||
asm: 'none',
|
asm: 'none',
|
||||||
showsPnv: false,
|
showsPnv: false,
|
||||||
label: 'Token · MTL',
|
label: 'Token · MLT',
|
||||||
description:
|
description:
|
||||||
'Managed mint, no backing, capped. Tickets, credentials, memberships, fixed collections.',
|
'Managed mint, no backing, capped. Tickets, credentials, memberships, fixed collections.',
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -75,14 +75,24 @@ test('ASM eligibility: DEA + DRA full, PLA until-depleted, all others none', ()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Token classes label as "Token · CODE"; MBA classes label as the bare code', () => {
|
test('labels use the regular mint·supply·category form (DEA keeps its flagship code)', () => {
|
||||||
|
// The `code` field stays canonical for storage compatibility, but the
|
||||||
|
// user-facing `label` reads out the class's three axes directly.
|
||||||
|
// MBA: bare regular code · Token: "Token · <regular code>".
|
||||||
|
const expected: Record<string, string> = {
|
||||||
|
DEA: 'DEA', // flagship — code and label both stay DEA
|
||||||
|
PLA: 'PLA', // already regular
|
||||||
|
DRA: 'DRA', // dynamic-rate variant (own family)
|
||||||
|
MCA: 'MUA', // Managed Unlimited Asset (was Certificate)
|
||||||
|
MTA: 'MLA', // Managed Limited Asset (was Tranche)
|
||||||
|
PTU: 'Token · PUT',
|
||||||
|
PTL: 'Token · PLT',
|
||||||
|
MTU: 'Token · MUT',
|
||||||
|
MTL: 'Token · MLT',
|
||||||
|
};
|
||||||
for (const c of allAssetClasses()) {
|
for (const c of allAssetClasses()) {
|
||||||
const info = assetClassInfo(c);
|
const info = assetClassInfo(c);
|
||||||
if (info.family === 'Token') {
|
assert.equal(info.label, expected[c], `label for class ${c}`);
|
||||||
assert.equal(info.label, `Token · ${c}`);
|
|
||||||
} else {
|
|
||||||
assert.equal(info.label, c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -381,7 +381,7 @@ test('non-MBA CashToken (backing: token) renders in the Token family, no peg', (
|
||||||
assert.equal(t.kind, 'token_std');
|
assert.equal(t.kind, 'token_std');
|
||||||
if (t.kind !== 'token_std') return;
|
if (t.kind !== 'token_std') return;
|
||||||
assert.equal(t.assetClass, 'PTU');
|
assert.equal(t.assetClass, 'PTU');
|
||||||
assert.equal(t.assetClassLabel, 'Token · PTU');
|
assert.equal(t.assetClassLabel, 'Token · PUT');
|
||||||
assert.equal(t.unitsTotal, 42n);
|
assert.equal(t.unitsTotal, 42n);
|
||||||
assert.equal(t.satsTotal, 9_000n);
|
assert.equal(t.satsTotal, 9_000n);
|
||||||
const codes = t.warnings.map((w) => w.code);
|
const codes = t.warnings.map((w) => w.code);
|
||||||
|
|
@ -416,7 +416,7 @@ test('canonical managed-mint token (unlimited reservoir) classifies as MCA, no A
|
||||||
if (a.kind !== 'tier_a') return;
|
if (a.kind !== 'tier_a') return;
|
||||||
assert.equal(a.verification, 'canonical');
|
assert.equal(a.verification, 'canonical');
|
||||||
assert.equal(a.assetClass, 'MCA');
|
assert.equal(a.assetClass, 'MCA');
|
||||||
assert.equal(a.assetClassLabel, 'MCA');
|
assert.equal(a.assetClassLabel, 'MUA');
|
||||||
assert.equal(a.asm, 'none'); // managed mint is never ASM-eligible
|
assert.equal(a.asm, 'none'); // managed mint is never ASM-eligible
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue