Core smart contract implementation for USDU Finance, a stablecoin protocol built on Ethereum. This repository contains the essential contracts for the USDU stablecoin, yield-generating vault adapters, and reward distribution system.
Key Components:
- USDU Stablecoin: ERC20 stablecoin with role-based governance
- Vault Adapters: TermMax, Morpho & Curve integrations for borrow & lending market and deep liquidity
- Reward System: Token distribution and staking rewards
- TermMax Integration: Advanced yield optimization strategies
contracts/
├── stablecoin/ # USDU stablecoin core implementation
├── vault/ # Vault adapters for yield generation
├── morpho/ # Morpho protocol integration
├── curve/ # Curve protocol integration
├── reward/ # Reward distribution system
└── test/ # Test contracts and utilities
Supported Networks:
- Mainnet (primary): Full protocol deployment with all contracts
- L2s (in discussion): Polygon, Arbitrum, Optimism, Base, Avalanche, Gnosis, Sonic
See
exports/address.types.tsfor complete chain configurations andexports/address.config.tsfor deployed addresses.
- No permanent modules: every module set via
Stablecoin.setModule/setModulePubliccarries anexpiredAttimestamp. There is no "forever" sentinel (e.g.type(uint256).max) — future deployments should boundexpiredAtto amaxLifespan(e.g. 100yrs), which is effectively permanent in practice but keeps modules re-affirmable.
# Setup
yarn install
cp .env.example .env # Configure your environment
# Development
yarn compile # Compile contracts
yarn test # Run tests
yarn coverage # Test coverage
# Deployment
yarn deploy ignition/modules/StablecoinModule.ts --network mainnet --verify
# Package
yarn npm:build # Build for npm
yarn npm:publish # Publish packageCreate .env file (see .env.example):
DEPLOYER_SEED="your mnemonic here"
DEPLOYER_SEED_INDEX=0
ALCHEMY_RPC_KEY=your_api_key
ETHERSCAN_API=your_api_keyyarn test # All tests
yarn test test/Stablecoin.ts # Specific test
yarn coverage # Coverage reportCreate deployment modules in /ignition/modules/ and parameter files in /ignition/params/:
yarn deploy ignition/modules/StablecoinModule.ts --network mainnet --verify --deployment-id USDU01This compiles, deploys, and verifies contracts on Etherscan/Sourcify. Artifacts are saved to /ignition/deployments/.
Manual Verification:
npx hardhat verify --network mainnet --constructor-args ./ignition/constructor-args/$FILE.js $ADDRESS
npx hardhat ignition verify $DEPLOYMENT --include-unrelated-contractsThe package exports TypeScript ABIs and address configurations:
ABIs: exports/abis/ - Contract ABIs as TypeScript constants
Addresses: exports/address.config.ts - Deployed contract addresses by chain
Types: exports/address.types.ts - Chain configurations and type definitions
import { ADDRESS, StablecoinABI, MorphoAdapterV1ABI } from '@usdu-finance/usdu-core';
// Get mainnet addresses
const { usduStable, usduMorphoAdapterV1_2 } = ADDRESS[1];
// Use ABIs with contract instances
const stablecoin = new Contract(usduStable, StablecoinABI, provider);- Update version in
package.json(semantic versioning) - Build package:
yarn npm:build(uses tsup config) - Publish:
yarn npm:publish(requiresnpm login)
Next.js Integration:
// next.config.js
module.exports = {
transpilePackages: ['@usdu-finance/usdu-core'],
};