UPD — Universal Private Dollar
SDK Quickstart
Install the UPD SDK, get a quote, mint UPD, and burn UPD.
Testnet Only
UPD is currently deployed on testnet. Do not use with real funds.
Installation
npm install @permissionless-technologies/upd-sdkSetup
import { createUPDClient } from '@permissionless-technologies/upd-sdk'
import { createPublicClient, createWalletClient, http } from 'viem'
import { sepolia } from 'viem/chains'
const publicClient = createPublicClient({ chain: sepolia, transport: http() })
const walletClient = createWalletClient({ chain: sepolia, transport: http() })
const upd = createUPDClient({
publicClient,
walletClient,
chainId: sepolia.id,
})Get a Quote
Before minting, check how much UPD you'll receive for your ETH:
import { quoteMintUPD } from '@permissionless-technologies/upd-sdk/core'
// Get current ETH price and compute quote
const { ethPrice, updAmount, fee } = await upd.quoteMint({
ethAmount: parseEther('1.0'),
})
console.log(`1 ETH → ${formatUnits(updAmount, 18)} UPD at $${ethPrice}/ETH`)Mint UPD
Deposit ETH (converted to stETH) to mint UPD:
// Mint UPD by depositing ETH
const { txHash, updMinted } = await upd.mint({
ethAmount: parseEther('1.0'),
minUpdOut: updAmount * 99n / 100n, // 1% slippage tolerance
})
console.log(`Minted ${formatUnits(updMinted, 18)} UPD`)Burn UPD
Redeem UPD to receive stETH:
// Get quote for burn
const { stEthAmount } = await upd.quoteBurn({
updAmount: parseUnits('1000', 18),
})
// Burn UPD to receive stETH
const { txHash, stEthReceived } = await upd.burn({
updAmount: parseUnits('1000', 18),
minStEthOut: stEthAmount * 99n / 100n,
})Check Balances
const updBalance = await upd.getUPDBalance(myAddress)
const collateralInfo = await upd.getCollateralInfo()
console.log('UPD balance:', formatUnits(updBalance, 18))
console.log('Collateralization ratio:', collateralInfo.ratio.toString() + '%')React Integration
import { UPDProvider, useUPD, useCollateral } from '@permissionless-technologies/upd-sdk/react'
function App() {
return (
<UPDProvider chainId={11155111}>
<UPDStats />
</UPDProvider>
)
}
function UPDStats() {
const { balance, isLoading } = useUPD()
const { ratio, totalCollateral } = useCollateral()
if (isLoading) return <div>Loading...</div>
return (
<div>
<p>Your UPD balance: {formatUnits(balance, 18)} UPD</p>
<p>System collateralization: {ratio.toString()}%</p>
</div>
)
}Next Steps
- Concepts — How the peg works — stETH collateral model
- SDK Reference — full API documentation
- Smart Contracts — the 9 contracts and their roles
Universal Private Dollar
Self-sovereign, non-freezable stablecoin pegged 1:1 to USD. No issuer, no custodian, no blacklist — you mint directly against the protocol using stETH collateral.
How the Peg Works
The $1 USD peg mechanism — self-sovereign minting against stETH, overcollateralization, and how yield accrues without rebasing.