mirror of
https://github.com/pezkuwichain/pezkuwi-fellows.git
synced 2026-07-06 13:57:26 +00:00
460 lines
41 KiB
HTML
460 lines
41 KiB
HTML
|
|
<!DOCTYPE HTML>
|
|
<html lang="en" class="polkadot" dir="ltr">
|
|
<head>
|
|
<!-- Book generated using mdBook -->
|
|
<meta charset="UTF-8">
|
|
<title>RFC-0155: pUSD (Polkadot USD over-collateralised debt token) - Polkadot Fellowship RFCs</title>
|
|
|
|
|
|
<!-- Custom HTML head -->
|
|
|
|
<meta name="description" content="An online book of RFCs approved or proposed within the Polkadot Fellowship.">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<link rel="icon" href="../favicon.svg">
|
|
<link rel="shortcut icon" href="../favicon.png">
|
|
<link rel="stylesheet" href="../css/variables.css">
|
|
<link rel="stylesheet" href="../css/general.css">
|
|
<link rel="stylesheet" href="../css/chrome.css">
|
|
<link rel="stylesheet" href="../css/print.css" media="print">
|
|
|
|
<!-- Fonts -->
|
|
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
|
|
<link rel="stylesheet" href="../fonts/fonts.css">
|
|
|
|
<!-- Highlight.js Stylesheets -->
|
|
<link rel="stylesheet" href="../highlight.css">
|
|
<link rel="stylesheet" href="../tomorrow-night.css">
|
|
<link rel="stylesheet" href="../ayu-highlight.css">
|
|
|
|
<!-- Custom theme stylesheets -->
|
|
<link rel="stylesheet" href="../theme/polkadot.css">
|
|
|
|
</head>
|
|
<body class="sidebar-visible no-js">
|
|
<div id="body-container">
|
|
<!-- Provide site root to javascript -->
|
|
<script>
|
|
var path_to_root = "../";
|
|
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "polkadot" : "polkadot";
|
|
</script>
|
|
|
|
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
|
<script>
|
|
try {
|
|
var theme = localStorage.getItem('mdbook-theme');
|
|
var sidebar = localStorage.getItem('mdbook-sidebar');
|
|
|
|
if (theme.startsWith('"') && theme.endsWith('"')) {
|
|
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
|
}
|
|
|
|
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
|
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
|
}
|
|
} catch (e) { }
|
|
</script>
|
|
|
|
<!-- Set the theme before any content is loaded, prevents flash -->
|
|
<script>
|
|
var theme;
|
|
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
|
if (theme === null || theme === undefined) { theme = default_theme; }
|
|
var html = document.querySelector('html');
|
|
html.classList.remove('polkadot')
|
|
html.classList.add(theme);
|
|
var body = document.querySelector('body');
|
|
body.classList.remove('no-js')
|
|
body.classList.add('js');
|
|
</script>
|
|
|
|
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
|
|
|
|
<!-- Hide / unhide sidebar before it is displayed -->
|
|
<script>
|
|
var body = document.querySelector('body');
|
|
var sidebar = null;
|
|
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
|
|
if (document.body.clientWidth >= 1080) {
|
|
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
|
sidebar = sidebar || 'visible';
|
|
} else {
|
|
sidebar = 'hidden';
|
|
}
|
|
sidebar_toggle.checked = sidebar === 'visible';
|
|
body.classList.remove('sidebar-visible');
|
|
body.classList.add("sidebar-" + sidebar);
|
|
</script>
|
|
|
|
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
|
<div class="sidebar-scrollbox">
|
|
<ol class="chapter"><li class="chapter-item expanded affix "><a href="../introduction.html">Introduction</a></li><li class="spacer"></li><li class="chapter-item expanded affix "><li class="part-title">Newly Proposed</li><li class="spacer"></li><li class="chapter-item expanded affix "><li class="part-title">Proposed</li><li class="chapter-item expanded "><a href="../proposed/0145-remove-unnecessary-allocator-usage.html">RFC-0145: Remove the host-side runtime memory allocator</a></li><li class="chapter-item expanded "><a href="../proposed/0150-voting-while-delegating.html">RFC-150: Allow Voting While Delegating</a></li><li class="chapter-item expanded "><a href="../proposed/0154-multi-slot-aura.html">RFC-0154: AURA Multi-Slot Collation </a></li><li class="chapter-item expanded "><a href="../proposed/0156-bls-signatures.html">RFC-0156: Add BLS12-381 Host Functions</a></li><li class="spacer"></li><li class="chapter-item expanded affix "><li class="part-title">Approved</li><li class="chapter-item expanded "><a href="../approved/0001-agile-coretime.html">RFC-1: Agile Coretime</a></li><li class="chapter-item expanded "><a href="../approved/0005-coretime-interface.html">RFC-5: Coretime Interface</a></li><li class="chapter-item expanded "><a href="../approved/0007-system-collator-selection.html">RFC-0007: System Collator Selection</a></li><li class="chapter-item expanded "><a href="../approved/0008-parachain-bootnodes-dht.html">RFC-0008: Store parachain bootnodes in relay chain DHT</a></li><li class="chapter-item expanded "><a href="../approved/0009-improved-net-light-client-requests.html">RFC-0009: Improved light client requests networking protocol</a></li><li class="chapter-item expanded "><a href="../approved/0010-burn-coretime-revenue.html">RFC-0010: Burn Coretime Revenue</a></li><li class="chapter-item expanded "><a href="../approved/0012-process-for-adding-new-collectives.html">RFC-0012: Process for Adding New System Collectives</a></li><li class="chapter-item expanded "><a href="../approved/0013-prepare-blockbuilder-and-core-runtime-apis-for-mbms.html">RFC-0013: Prepare Core runtime API for MBMs</a></li><li class="chapter-item expanded "><a href="../approved/0014-improve-locking-mechanism-for-parachains.html">RFC-0014: Improve locking mechanism for parachains</a></li><li class="chapter-item expanded "><a href="../approved/0017-coretime-market-redesign.html">RFC-0017: Coretime Market Redesign</a></li><li class="chapter-item expanded "><a href="../approved/0022-adopt-encointer-runtime.html">RFC-0022: Adopt Encointer Runtime</a></li><li class="chapter-item expanded "><a href="../approved/0026-sassafras-consensus.html">RFC-0026: Sassafras Consensus Protocol</a></li><li class="chapter-item expanded "><a href="../approved/0032-minimal-relay.html">RFC-0032: Minimal Relay</a></li><li class="chapter-item expanded "><a href="../approved/0042-extrinsics-state-version.html">RFC-0042: Add System version that replaces StateVersion on RuntimeVersion</a></li><li class="chapter-item expanded "><a href="../approved/0043-storage-proof-size-hostfunction.html">RFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block Utilization</a></li><li class="chapter-item expanded "><a href="../approved/0045-nft-deposits-asset-hub.html">RFC-0045: Lowering NFT Deposits on Asset Hub</a></li><li class="chapter-item expanded "><a href="../approved/0047-assignment-of-availability-chunks.html">RFC-0047: Assignment of availability chunks to validators</a></li><li class="chapter-item expanded "><a href="../approved/0048-session-keys-runtime-api.html">RFC-0048: Generate ownership proof for SessionKeys</a></li><li class="chapter-item expanded "><a href="../approved/0050-fellowship-salaries.html">RFC-0050: Fellowship Salaries</a></li><li class="chapter-item expanded "><a href="../approved/0056-one-transaction-per-notification.html">RFC-0056: Enforce only one transaction per notification</a></li><li class="chapter-item expanded "><a href="../approved/0059-nodes-capabilities-discovery.html">RFC-0059: Add a discovery mechanism for nodes based on their capabilities</a></li><li class="chapter-item expanded "><a href="../approved/0078-merkleized-metadata.html">RFC-0078: Merkleized Metadata</a></li><li class="chapter-item expanded "><a href="../approved/0084-general-transaction-extrinsic-format.html">RFC-0084: General transactions in extrinsic format</a></li><li class="chapter-item expanded "><a href="../approved/0091-dht-record-creation-time.html">RFC-0091: DHT Authority discovery record creation time</a></li><li class="chapter-item expanded "><a href="../approved/0097-unbonding_queue.html">RFC-0097: Unbonding Queue</a></li><li class="chapter-item expanded "><a href="../approved/0099-transaction-extension-version.html">RFC-0099: Introduce a transaction extension version</a></li><li class="chapter-item expanded "><a href="../approved/0100-xcm-multi-type-asset-transfer.html">RFC-0100: New XCM instruction: InitiateAssetsTransfer</a></li><li class="chapter-item expanded "><a href="../approved/0101-xcm-transact-remove-max-weight-param.html">RFC-0101: XCM Transact remove require_weight_at_most parameter</a></li><li class="chapter-item expanded "><a href="../approved/0103-introduce-core-index-commitment.html">RFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receipts</a></li><li class="chapter-item expanded "><a href="../approved/0105-xcm-improved-fee-mechanism.html">RFC-0105: XCM improved fee mechanism</a></li><li class="chapter-item expanded "><a href="../approved/0107-xcm-execution-hints.html">RFC-0107: XCM Execution hints</a></li><li class="chapter-item expanded "><a href="../approved/0108-xcm-remove-testnet-ids.html">RFC-0108: Remove XCM testnet NetworkIds</a></li><li class="chapter-item expanded "><a href="../approved/0122-alias-origin-on-asset-transfers.html">RFC-0122: Asset transfers can alias XCM origin on destination to original origin</a></li><li class="chapter-item expanded "><a href="../approved/0123-pending-code-as-storage-location-for-runtime-upgrades.html">RFC-0123: Introduce :pending_code as intermediate storage key for the runtime code</a></li><li class="chapter-item expanded "><a href="../approved/0125-xcm-asset-metadata.html">RFC-0125: XCM Asset Metadata</a></li><li class="chapter-item expanded "><a href="../approved/0126-introduce-pvq.html">RFC-0126: Introduce PVQ (PolkaVM Query)</a></li><li class="chapter-item expanded "><a href="../approved/0135-compressed-blob-prefixes.html">RFC-0135: Compressed Blob Prefixes</a></li><li class="chapter-item expanded "><a href="../approved/0139-faster-erasure-coding.html">RFC-0139: Faster Erasure Coding</a></li><li class="chapter-item expanded "><a href="../approved/0146-deflationary-fee-proposal.html">RFC-0146: Deflationary Transaction Fee Model for the Relay Chain and its System Parachains</a></li><li class="chapter-item expanded "><a href="../approved/0149-rfc-1-renewal-adjustment.html">RFC-0149: Renewal Adjustment</a></li><li class="spacer"></li><li class="chapter-item expanded affix "><li class="part-title">Stale</li><li class="chapter-item expanded "><a href="../stale/0000-pre-elves_soft.html">RFC-0000: Pre-ELVES soft concensus</a></li><li class="chapter-item expanded "><a href="../stale/0000-rewards.html">RFC-0000: Validator Rewards</a></li><li class="chapter-item expanded "><a href="../stale/0004-remove-unnecessary-allocator-usage.html">RFC-0004: Remove the host-side runtime memory allocator</a></li><li class="chapter-item expanded "><a href="../stale/0006-dynamic-pricing-for-bulk-coretime-sales.html">RFC-0006: Dynamic Pricing for Bulk Coretime Sales</a></li><li class="chapter-item expanded "><a href="../stale/0034-xcm-absolute-location-account-derivation.html">RFC-34: XCM Absolute Location Account Derivation</a></li><li class="chapter-item expanded "><a href="../stale/0035-conviction-voting-delegation-modifications.html"> RFC-0035: Conviction Voting Delegation Modifications</a></li><li class="chapter-item expanded "><a href="../stale/0044-rent-based-registration.html">RFC-0044: Rent based registration model</a></li><li class="chapter-item expanded "><a href="../stale/0054-remove-heap-pages.html">RFC-0054: Remove the concept of "heap pages" from the client</a></li><li class="chapter-item expanded "><a href="../stale/0070-x-track-kusamanetwork.html">RFC-0070: X Track for @kusamanetwork</a></li><li class="chapter-item expanded "><a href="../stale/0073-referedum-deposit-track.html">RFC-0073: Decision Deposit Referendum Track</a></li><li class="chapter-item expanded "><a href="../stale/0074-stateful-multisig-pallet.html">RFC-0074: Stateful Multisig Pallet</a></li><li class="chapter-item expanded "><a href="../stale/0077-increase-max-length-of-identity-pgp-fingerprint-value.html">RFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytes</a></li><li class="chapter-item expanded "><a href="../stale/0088-broker-pallet-slashable-deposit-purchaser-reputation-reserved-cores.html">RFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker pallet</a></li><li class="chapter-item expanded "><a href="../stale/00xx-secondary-marketplace-for-regions.html">RFC-0001: Secondary Market for Regions</a></li><li class="chapter-item expanded "><a href="../stale/00xx-smart-contracts-coretime-chain.html">RFC-0002: Smart Contracts on the Coretime Chain</a></li><li class="chapter-item expanded "><a href="../stale/0102-offchain-parachain-runtime-upgrades.html">RFC-0000: Feature Name Here</a></li><li class="chapter-item expanded "><a href="../stale/0106-xcm-remove-fees-mode.html">RFC-0106: Remove XCM fees mode</a></li><li class="chapter-item expanded "><a href="../stale/0111-pure-proxy-replication.html">RFC-0111: Pure Proxy Replication</a></li><li class="chapter-item expanded "><a href="../stale/0112-compress-state-response-message-in-state-sync.html">RFC-0112: Compress the State Response Message in State Sync</a></li><li class="chapter-item expanded "><a href="../stale/0114-secp256r1-hostfunction.html">RFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signatures</a></li><li class="chapter-item expanded "><a href="../stale/0117-unbrick-collective.html">RFC-0117: The Unbrick Collective</a></li><li class="chapter-item expanded "><a href="../stale/0120-referenda-confirmation-by-candle-mechanism.html">RFC-0120: Referenda Confirmation by Candle Mechanism</a></li><li class="chapter-item expanded "><a href="../stale/0124-extrinsic-version-5.html">RFC-0124: Extrinsic version 5</a></li><li class="chapter-item expanded "><a href="../stale/0138-invulnerable-collator-election.html">RFC-0138: Election mechanism for invulnerable collators on system chains</a></li><li class="chapter-item expanded "><a href="../stale/0152-decentralized-convex-preference-coretime-market-for-polkadot.html">RFC-0152: Decentralized Convex-Preference Coretime Market for Polkadot</a></li><li class="chapter-item expanded "><a href="../stale/0155-pUSD.html" class="active">RFC-0155: pUSD (Polkadot USD over-collateralised debt token)</a></li><li class="chapter-item expanded "><a href="../stale/RFC-114 Adjust Tipper Track Confirmation Periods.html">RFC-114: Adjust Tipper Track Confirmation Periods</a></li><li class="chapter-item expanded "><a href="../stale/TODO-stale-nomination-reward-curve.html">RFC-TODO: Stale Nomination Reward Curve</a></li><li class="chapter-item expanded "><a href="../stale/xxxx-improve-the-security-of-proof-of-possession.html">RFC-XXXX: Adding customized mandatory context to proof of possession statement</a></li></ol>
|
|
</div>
|
|
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
|
|
</nav>
|
|
|
|
<!-- Track and set sidebar scroll position -->
|
|
<script>
|
|
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
|
|
sidebarScrollbox.addEventListener('click', function(e) {
|
|
if (e.target.tagName === 'A') {
|
|
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
|
|
}
|
|
}, { passive: true });
|
|
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
|
|
sessionStorage.removeItem('sidebar-scroll');
|
|
if (sidebarScrollTop) {
|
|
// preserve sidebar scroll position when navigating via links within sidebar
|
|
sidebarScrollbox.scrollTop = sidebarScrollTop;
|
|
} else {
|
|
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
|
|
var activeSection = document.querySelector('#sidebar .active');
|
|
if (activeSection) {
|
|
activeSection.scrollIntoView({ block: 'center' });
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<div id="page-wrapper" class="page-wrapper">
|
|
|
|
<div class="page">
|
|
<div id="menu-bar-hover-placeholder"></div>
|
|
<div id="menu-bar" class="menu-bar sticky">
|
|
<div class="left-buttons">
|
|
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
|
<i class="fa fa-bars"></i>
|
|
</label>
|
|
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
|
<i class="fa fa-paint-brush"></i>
|
|
</button>
|
|
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
|
<li role="none"><button role="menuitem" class="theme" id="polkadot">Polkadot</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
|
|
</ul>
|
|
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
|
<i class="fa fa-search"></i>
|
|
</button>
|
|
</div>
|
|
|
|
<h1 class="menu-title">Polkadot Fellowship RFCs</h1>
|
|
|
|
<div class="right-buttons">
|
|
<a href="../print.html" title="Print this book" aria-label="Print this book">
|
|
<i id="print-button" class="fa fa-print"></i>
|
|
</a>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="search-wrapper" class="hidden">
|
|
<form id="searchbar-outer" class="searchbar-outer">
|
|
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
|
</form>
|
|
<div id="searchresults-outer" class="searchresults-outer hidden">
|
|
<div id="searchresults-header" class="searchresults-header"></div>
|
|
<ul id="searchresults">
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
|
<script>
|
|
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
|
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
|
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
|
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
|
});
|
|
</script>
|
|
|
|
<div id="content" class="content">
|
|
<main>
|
|
<p><a href="https://github.com/polkadot-fellows/RFCs/pull/155">(source)</a></p>
|
|
<p><strong>Table of Contents</strong></p>
|
|
<ul>
|
|
<li><a href="#rfc-0155-pusd-polkadot-usd-over-collateralised-debt-token">RFC-0155: pUSD (Polkadot USD over-collateralised debt token)</a>
|
|
<ul>
|
|
<li><a href="#summary">Summary</a></li>
|
|
<li><a href="#motivation">Motivation</a></li>
|
|
<li><a href="#stakeholders">Stakeholders</a></li>
|
|
<li><a href="#explanation">Explanation</a>
|
|
<ul>
|
|
<li><a href="#protocol-overview">Protocol Overview</a></li>
|
|
<li><a href="#oracle-infrastructure">Oracle Infrastructure</a></li>
|
|
<li><a href="#issuance">Issuance</a></li>
|
|
<li><a href="#redemption">Redemption</a></li>
|
|
<li><a href="#liquidation">Liquidation</a></li>
|
|
<li><a href="#incentives-pusd-savings-opt-in">Incentives: pUSD Savings (opt-in)</a></li>
|
|
<li><a href="#governance">Governance</a></li>
|
|
<li><a href="#emergency-shutdown">Emergency Shutdown</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#drawbacks">Drawbacks</a></li>
|
|
<li><a href="#testing-security-and-privacy">Testing, Security, and Privacy</a></li>
|
|
<li><a href="#performance-ergonomics-and-compatibility">Performance, Ergonomics, and Compatibility</a>
|
|
<ul>
|
|
<li><a href="#performance">Performance</a></li>
|
|
<li><a href="#ergonomics">Ergonomics</a></li>
|
|
<li><a href="#compatibility">Compatibility</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#prior-art-and-references">Prior Art and References</a></li>
|
|
<li><a href="#unresolved-questions">Unresolved Questions</a></li>
|
|
<li><a href="#future-directions-and-related-material">Future Directions and Related Material</a>
|
|
<ul>
|
|
<li><a href="#smart-contract-liquidation-participation">Smart-Contract Liquidation Participation</a></li>
|
|
<li><a href="#treasury-payment-transition">Treasury Payment Transition</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h1 id="rfc-0155-pusd-polkadot-usd-over-collateralised-debt-token"><a class="header" href="#rfc-0155-pusd-polkadot-usd-over-collateralised-debt-token">RFC-0155: pUSD (Polkadot USD over-collateralised debt token)</a></h1>
|
|
<div class="table-wrapper"><table><thead><tr><th></th><th></th></tr></thead><tbody>
|
|
<tr><td><strong>Start Date</strong></td><td>2025-09-11</td></tr>
|
|
<tr><td><strong>Description</strong></td><td>Polkadot native stablecoin on Asset Hub</td></tr>
|
|
<tr><td><strong>Authors</strong></td><td>Bryan Chen</td></tr>
|
|
</tbody></table>
|
|
</div>
|
|
<h2 id="summary"><a class="header" href="#summary">Summary</a></h2>
|
|
<p>pUSD (Polkadot USD over-collateralised debt token) is a new DOT-collateralized stablecoin deployed on Asset Hub. It is an overcollateralized stablecoin backed purely by DOT. The implementation follows the Honzon protocol pioneered by Acala. In addition, this RFC introduces an opt-in pUSD Savings module that lets holders lock pUSD to earn interest funded from stability fees.</p>
|
|
<h2 id="motivation"><a class="header" href="#motivation">Motivation</a></h2>
|
|
<blockquote>
|
|
<p>"Polkadot Hub should have a native DOT backed stable coin because people need it and otherwise we will haemorrhage benefits, liquidity and/or security." - Gav</p>
|
|
</blockquote>
|
|
<p>Primary use cases of pUSD:</p>
|
|
<ul>
|
|
<li>As with any overcollateralized stablecoin, pUSD lets users borrow against their DOT so they can spend pUSD without selling DOT immediately.</li>
|
|
<li>pUSD is designed to integrate with the Polkadot Treasury so payments can be made in pUSD instead of DOT, avoiding the need for the Treasury to manage a stablecoin reserve.</li>
|
|
<li>Eventually pUSD may be used for staking rewards to replace DOT inflation.</li>
|
|
<li>Passive holding option: pUSD holders can lock into the Savings module to earn interest, strengthening demand-side support for the peg.</li>
|
|
</ul>
|
|
<h2 id="stakeholders"><a class="header" href="#stakeholders">Stakeholders</a></h2>
|
|
<ul>
|
|
<li>pUSD holders</li>
|
|
<li>Polkadot Treasury</li>
|
|
<li>Ecosystem projects</li>
|
|
<li>Protocol developers</li>
|
|
</ul>
|
|
<h2 id="explanation"><a class="header" href="#explanation">Explanation</a></h2>
|
|
<p>pUSD is implemented using the Honzon protocol stack used to power aUSD, adapted for DOT-only collateral on Asset Hub.</p>
|
|
<h3 id="protocol-overview"><a class="header" href="#protocol-overview">Protocol Overview</a></h3>
|
|
<p>The Honzon protocol functions as a lending system where users can:</p>
|
|
<ol>
|
|
<li><strong>Deposit collateral</strong>: Lock DOT as collateral in Collateralized Debt Positions (CDPs).</li>
|
|
<li><strong>Mint pUSD</strong>: Generate pUSD stablecoins against collateral value.</li>
|
|
<li><strong>Accrue interest</strong>: Pay interest over time via the debit exchange rate (stability fee).</li>
|
|
<li><strong>Maintain health</strong>: Keep CDPs above the liquidation ratio to avoid liquidation.</li>
|
|
<li><strong>Liquidation</strong>: Underwater CDPs are liquidated via DEX and/or auctions to keep the system solvent.</li>
|
|
</ol>
|
|
<h3 id="oracle-infrastructure"><a class="header" href="#oracle-infrastructure">Oracle Infrastructure</a></h3>
|
|
<p>The pUSD system relies on robust oracle infrastructure to maintain accurate price feeds for DOT and ensure proper collateral valuations.</p>
|
|
<p><strong>Oracle source</strong></p>
|
|
<ul>
|
|
<li><strong>DEX price feeds</strong>: Real-time DOT prices aggregated from decentralized exchanges across parachains via XCM messaging or state-proofs. A time-weighted average price (TWAP) will be used to resist short-term manipulation.</li>
|
|
</ul>
|
|
<p><strong>Price aggregation mechanism</strong></p>
|
|
<ul>
|
|
<li><strong>Deviation filtering</strong>: Price feeds that deviate significantly from the median are flagged and may be excluded from calculations. Circuit breakers pause updates on extreme moves to protect solvency.</li>
|
|
</ul>
|
|
<h3 id="issuance"><a class="header" href="#issuance">Issuance</a></h3>
|
|
<p>DOT holders can open a vault (CDP) to lock their DOT and borrow up to a protocol-defined percentage of its value as pUSD, subject to a required collateral ratio and debt ceilings.</p>
|
|
<h3 id="redemption"><a class="header" href="#redemption">Redemption</a></h3>
|
|
<p>At any time, the vault owner can repay pUSD (principal plus accrued interest via the debit exchange rate) to unlock DOT, fully or partially.</p>
|
|
<h3 id="liquidation"><a class="header" href="#liquidation">Liquidation</a></h3>
|
|
<p>When a vault's collateral ratio falls below the liquidation ratio, it becomes unsafe and is liquidated. The system employs a tiered liquidation approach to maximize efficiency and minimize market impact.</p>
|
|
<p><strong>Primary liquidation: DEX-first approach</strong></p>
|
|
<ol>
|
|
<li><strong>Instant settlement</strong>: Liquidation is executed immediately through available DEX liquidity on Asset Hub.</li>
|
|
<li><strong>Market-rate execution</strong>: DOT is sold at current market rates with minimal slippage, reducing the liquidation penalty for vault owners.</li>
|
|
<li><strong>Automated execution</strong>: Off-chain workers continuously monitor vault health and trigger DEX liquidations automatically when ratios fall below thresholds.</li>
|
|
<li><strong>Slippage protection</strong>: Maximum slippage limits prevent excessive losses during low-liquidity periods.</li>
|
|
</ol>
|
|
<p><strong>Fallback liquidation: auction mechanism</strong></p>
|
|
<ul>
|
|
<li>When DEX liquidity is insufficient or slippage exceeds acceptable limits, the system falls back to a traditional auction system.</li>
|
|
</ul>
|
|
<p><strong>Liquidation process flow</strong></p>
|
|
<ol>
|
|
<li><strong>Health check</strong>: Off-chain workers monitor collateral ratios continuously.</li>
|
|
<li><strong>Trigger</strong>: When a ratio falls below the liquidation threshold, liquidation is queued.</li>
|
|
<li><strong>DEX attempt</strong>: The system attempts to sell required collateral through the Asset Hub DEX.</li>
|
|
<li><strong>Auction fallback</strong>: If DEX liquidation fails or is insufficient, collateral enters the auction system.</li>
|
|
<li><strong>Settlement</strong>: Proceeds repay CDP debt plus penalties; excess collateral is returned to the owner.</li>
|
|
<li><strong>Bad debt handling</strong>: Any shortfalls become bad debt managed by CDP treasury mechanisms.</li>
|
|
</ol>
|
|
<p>Any excess collateral after repaying debt and penalties is refunded to the owner. Shortfalls become bad debt and are handled by CDP treasury mechanisms.</p>
|
|
<h3 id="incentives-pusd-savings-opt-in"><a class="header" href="#incentives-pusd-savings-opt-in">Incentives: pUSD Savings (opt-in)</a></h3>
|
|
<p>The protocol includes a Savings module that allows pUSD holders to lock tokens and earn interest paid from stability fees.</p>
|
|
<p><strong>Design goals</strong></p>
|
|
<ul>
|
|
<li>Create baseline demand for pUSD, improving peg robustness.</li>
|
|
<li>Return a configurable share of stability fees to long-term holders after safety buffers.</li>
|
|
<li>Keep UX simple and native to Asset Hub.</li>
|
|
</ul>
|
|
<p><strong>Mechanics</strong></p>
|
|
<ul>
|
|
<li><strong>Locking</strong>: Users deposit pUSD into the Savings pallet to receive an internal savings balance (no separate token required) or an spUSD receipt token (implementation choice).</li>
|
|
<li><strong>Interest source</strong>: Interest is funded by the stability fees collected from CDP debt via the debit exchange rate.</li>
|
|
<li><strong>Distribution rule (waterfall)</strong>:
|
|
<ol>
|
|
<li>Cover realized bad debt.</li>
|
|
<li>Top up a protocol reserve buffer to a target level.</li>
|
|
<li>Distribute remaining fees to Savings depositors pro rata as the Savings Rate.</li>
|
|
<li>Any residual can flow to Treasury per governance.</li>
|
|
</ol>
|
|
</li>
|
|
<li><strong>Rate model</strong>: A governance-set annualized Savings Rate (SR) that parameterized as a share of the effective stability fee.</li>
|
|
<li><strong>Accrual</strong>: Interest accrues continuously via an exchange rate (savings index). Accounting can update per block or in discrete epochs.</li>
|
|
<li><strong>Controls and limits</strong>:
|
|
<ul>
|
|
<li>Global cap on total Savings deposits (optional) to protect liquidity.</li>
|
|
<li>No leverage: Savings cannot be used as collateral.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p><strong>Parameter examples (TBD by governance)</strong></p>
|
|
<ul>
|
|
<li>Savings Rate bounds: 0 to 80 percent of net stability fees after safety buffer.</li>
|
|
</ul>
|
|
<h3 id="governance"><a class="header" href="#governance">Governance</a></h3>
|
|
<p>A Financial Fellowship (within the broader Polkadot on-chain governance framework) will govern risk parameters and Treasury actions to ensure economic safety. The Fellowship can also perform emergency actions, such as freezing the oracle price feed if manipulation is detected.</p>
|
|
<p>Governance-managed parameters include (non-exhaustive):</p>
|
|
<ul>
|
|
<li>Collateral ratios, liquidation ratios, stability fee schedule, and debt ceilings.</li>
|
|
<li>Liquidation penalties, DEX slippage limits, auction parameters.</li>
|
|
<li>Oracle selection and circuit-breaker thresholds.</li>
|
|
<li>Savings parameters: Savings Rate, fee share split, reserve buffer target and deposit caps.</li>
|
|
</ul>
|
|
<h3 id="emergency-shutdown"><a class="header" href="#emergency-shutdown">Emergency Shutdown</a></h3>
|
|
<p>As a last resort, an emergency shutdown can be performed by the Fellowship to halt minting/liquidation and allow equitable settlement: lock oracle prices, cancel auctions, and let users settle pUSD against collateral at the locked rates. Savings deposits remain redeemable 1:1 for pUSD at the last savings index; interest accrual stops at shutdown.</p>
|
|
<h2 id="drawbacks"><a class="header" href="#drawbacks">Drawbacks</a></h2>
|
|
<ul>
|
|
<li><strong>Oracle dependencies</strong>: The system's safety relies heavily on accurate and timely price feeds. Oracle manipulation or failures could lead to incorrect liquidations or allow undercollateralized positions to remain open.</li>
|
|
<li><strong>Governance overhead</strong>: Proper risk management requires active governance to adjust parameters like collateral ratios, stability fees, Savings Rate, and debt ceilings based on market conditions and system health.</li>
|
|
<li><strong>Rate complexity</strong>: Introducing a Savings module adds parameter complexity and potential user confusion if rate and fee policies change frequently.</li>
|
|
</ul>
|
|
<h2 id="testing-security-and-privacy"><a class="header" href="#testing-security-and-privacy">Testing, Security, and Privacy</a></h2>
|
|
<p><strong>Testing requirements</strong></p>
|
|
<ul>
|
|
<li>Comprehensive stress testing of liquidation mechanisms under various market-volatility scenarios.</li>
|
|
<li>Integration testing with the Asset Hub DEX to ensure adequate liquidity for liquidation swaps.</li>
|
|
<li>Emergency-shutdown procedure testing to ensure graceful system halt and equitable settlement.</li>
|
|
<li>Economic testing of incentive structures for liquidators and system stability.</li>
|
|
<li>Savings accounting tests: exchange-rate accuracy, fee-waterfall correctness, boundary cases on caps/cooldowns, and epoch transitions.</li>
|
|
</ul>
|
|
<p><strong>Security considerations</strong></p>
|
|
<ul>
|
|
<li><strong>Oracle security</strong>: Oracles must be resistant to manipulation. Implement circuit breakers for sudden price movements and multiple sources where possible.</li>
|
|
<li><strong>Liquidation MEV</strong>: Liquidation opportunities may be exploited by MEV searchers, potentially disadvantaging regular users. Consider implementing Dutch auction mechanisms or short delays to mitigate.</li>
|
|
<li><strong>Governance attacks</strong>: Risk-parameter changes must have appropriate time delays and safeguards to prevent malicious adjustments that could trigger mass liquidations.</li>
|
|
<li><strong>Savings abuse</strong>: Prevent rate-change gaming and flash-deposit capture by using epoch-based accrual, previous-epoch supply snapshots, or short cool-downs. Ensure fee-waterfall priority cannot be bypassed.</li>
|
|
</ul>
|
|
<h2 id="performance-ergonomics-and-compatibility"><a class="header" href="#performance-ergonomics-and-compatibility">Performance, Ergonomics, and Compatibility</a></h2>
|
|
<h3 id="performance"><a class="header" href="#performance">Performance</a></h3>
|
|
<p>This proposal introduces necessary computational overhead to Asset Hub for CDP management, liquidation monitoring, and Savings accounting. The impact is minimized through:</p>
|
|
<ul>
|
|
<li><strong>Off-chain worker optimization</strong>: Liquidation monitoring runs in off-chain workers to avoid on-chain computational overhead.</li>
|
|
<li><strong>Index accrual efficiency</strong>: Savings index updates can be amortized per block or per epoch with O(1) per-account reads/writes.</li>
|
|
</ul>
|
|
<h3 id="ergonomics"><a class="header" href="#ergonomics">Ergonomics</a></h3>
|
|
<p>The proposal optimizes for several key usage patterns:</p>
|
|
<ul>
|
|
<li><strong>Treasury integration</strong>: Treasury payment workflows are streamlined with native pUSD support, eliminating the need for complex stablecoin reserve management and reducing operational overhead for Treasury administrators.</li>
|
|
<li><strong>Holder experience</strong>: A single "Earn with Savings" flow with clear APR and risk notes encourages organic pUSD demand without leverage.</li>
|
|
<li><strong>Developer integration</strong>: Asset Hub's native asset infrastructure allows seamless integration with existing wallets and DeFi protocols without requiring new asset registration flows or custom interfaces.</li>
|
|
</ul>
|
|
<h3 id="compatibility"><a class="header" href="#compatibility">Compatibility</a></h3>
|
|
<ul>
|
|
<li><strong>Asset Hub compatibility</strong>: pUSD integrates with existing Asset Hub infrastructure including native asset transfers, fee payment mechanisms, and XCM asset handling. No breaking changes to existing Asset Hub functionality.</li>
|
|
<li><strong>Wallet compatibility</strong>: As a native Asset Hub asset, pUSD works with all existing Polkadot ecosystem wallets without requiring wallet updates or custom integration work.</li>
|
|
</ul>
|
|
<h2 id="prior-art-and-references"><a class="header" href="#prior-art-and-references">Prior Art and References</a></h2>
|
|
<p>The implementation follows the Honzon protocol pioneered by Acala for their aUSD stablecoin system. Key references include:</p>
|
|
<ul>
|
|
<li>Acala's Honzon protocol documentation and implementation.</li>
|
|
<li>MakerDAO's CDP system, which inspired many overcollateralized stablecoin designs.</li>
|
|
<li>MakerDAO's Dai Savings Rate (DSR), which informs the Savings module design and fee distribution mechanics.</li>
|
|
</ul>
|
|
<h2 id="unresolved-questions"><a class="header" href="#unresolved-questions">Unresolved Questions</a></h2>
|
|
<ul>
|
|
<li><strong>Financial Fellowship governance model</strong>: How should the Financial Fellowship be structured and selected? What specific powers should it have over risk parameters, and what checks and balances should exist to prevent governance capture or misaligned incentives?</li>
|
|
<li><strong>Oracle infrastructure design</strong>: How exactly should we get price data from other parachains (via XCM or state-proofs)? How do we ensure the implementation is not fragile to runtime upgrades?</li>
|
|
<li><strong>Emergency powers scope</strong>: What conditions should trigger emergency shutdown, and who should have the authority to execute it? How can the system balance responsiveness to crises with protection against governance attacks?</li>
|
|
<li><strong>Treasury integration</strong>: Should the Treasury automatically mint pUSD when making a payout? How should the Treasury manage its CDP positions?</li>
|
|
<li><strong>Savings policy</strong>: What is the initial Savings Rate, fee share split, cap size, and reserve buffer target? Under what conditions can throttles be enabled, and what notice is required?</li>
|
|
</ul>
|
|
<h2 id="future-directions-and-related-material"><a class="header" href="#future-directions-and-related-material">Future Directions and Related Material</a></h2>
|
|
<h3 id="smart-contract-liquidation-participation"><a class="header" href="#smart-contract-liquidation-participation">Smart-Contract Liquidation Participation</a></h3>
|
|
<p>Future versions of the system will allow smart contracts to register as liquidation participants, enabling:</p>
|
|
<ul>
|
|
<li><strong>Automated liquidation bots</strong>: Smart contracts can participate automatically, providing more reliable liquidation services and potentially better prices for distressed positions.</li>
|
|
<li><strong>DeFi protocol integration</strong>: Other DeFi protocols can integrate directly with the liquidation system, allowing for more sophisticated strategies and cross-protocol arbitrage.</li>
|
|
<li><strong>Custom logic</strong>: Registered smart contracts can implement custom liquidation strategies, such as gradual liquidation over time or cross-chain liquidation via XCM bridges.</li>
|
|
</ul>
|
|
<h3 id="treasury-payment-transition"><a class="header" href="#treasury-payment-transition">Treasury Payment Transition</a></h3>
|
|
<p>In a later phase, staking rewards may be paid in pUSD instead of DOT inflation, requiring:</p>
|
|
<ul>
|
|
<li>Economic modeling to determine appropriate reward conversion rates.</li>
|
|
<li>Governance framework for managing the transition from DOT to pUSD rewards.</li>
|
|
<li>Technical implementation of pUSD-based reward distribution systems.</li>
|
|
<li>Impact assessment on DOT tokenomics and staking participation rates.</li>
|
|
</ul>
|
|
|
|
</main>
|
|
|
|
<nav class="nav-wrapper" aria-label="Page navigation">
|
|
<!-- Mobile navigation buttons -->
|
|
<a rel="prev" href="../stale/0152-decentralized-convex-preference-coretime-market-for-polkadot.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
<i class="fa fa-angle-left"></i>
|
|
</a>
|
|
|
|
<a rel="next prefetch" href="../stale/RFC-114 Adjust Tipper Track Confirmation Periods.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
<i class="fa fa-angle-right"></i>
|
|
</a>
|
|
|
|
<div style="clear: both"></div>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
|
<a rel="prev" href="../stale/0152-decentralized-convex-preference-coretime-market-for-polkadot.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
<i class="fa fa-angle-left"></i>
|
|
</a>
|
|
|
|
<a rel="next prefetch" href="../stale/RFC-114 Adjust Tipper Track Confirmation Periods.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
<i class="fa fa-angle-right"></i>
|
|
</a>
|
|
</nav>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
window.playground_copyable = true;
|
|
</script>
|
|
|
|
|
|
<script src="../elasticlunr.min.js"></script>
|
|
<script src="../mark.min.js"></script>
|
|
<script src="../searcher.js"></script>
|
|
|
|
<script src="../clipboard.min.js"></script>
|
|
<script src="../highlight.js"></script>
|
|
<script src="../book.js"></script>
|
|
|
|
<!-- Custom JS scripts -->
|
|
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|