v1.0.0 - Testnet

Documentation

Everything you need to know about USYC Protocol. Learn how to integrate Treasury yields and payment streaming into your applications.

Getting Started

USYC Protocol provides two core primitives for programmable Treasury yields on Arc Network:

Yield Vault

ERC-4626 compliant vault for automated Treasury yield access. Deposit USDC, earn ~4.5% APY.

Payment Streaming

Real-time payment flows for salaries, subscriptions, and vesting schedules.

Quick Start

1

Connect to Arc Network

Add Arc Testnet to your wallet (Chain ID: 462050)

2

Get Testnet Tokens

Use the faucet to get ARC and USYC tokens

3

Start Building

Integrate with our smart contracts using ethers.js or viem

Network Configuration
Network Name: Arc Testnet
RPC URL: https://rpc.testnet.arc.network
Chain ID: 462050
Currency Symbol: ARC
Block Explorer: https://testnet.arcscan.app

Smart Contracts

USYCVault.sol
ERC-4626

USYC Yield Vault

The main vault contract for depositing USDC and earning Treasury yields. Built on the ERC-4626 tokenized vault standard for maximum composability with other DeFi protocols.

Key Functions

deposit()

Deposit USDC into the vault and receive vault shares representing your position. Your deposit immediately starts earning Treasury yields.

withdraw()

Withdraw your USDC plus accumulated yield at any time. No lock-up periods or withdrawal penalties.

getYield()

View your current accumulated yield without withdrawing. Returns the yield amount in USDC.

Example Usage
// Approve vault to spend USDC
await usdc.approve(vaultAddress, amount);

// Deposit USDC and receive vault shares
const shares = await vault.deposit(amount, recipientAddress);

// Check your current yield
const yield = await vault.getYield(userAddress);

// Withdraw anytime - get USDC + yield
await vault.withdraw(shares, recipientAddress, ownerAddress);
PaymentStream.sol
Streaming

Payment Streaming

Real-time payment streaming for continuous money flows. Perfect for salaries, subscriptions, and vesting schedules. Recipients can withdraw accumulated funds at any time.

Key Functions

createStream()

Create a new payment stream to a recipient. Specify the total amount, start time, and end time. Funds flow continuously per second.

cancelStream()

Cancel an active stream. The recipient keeps what has already streamed, and remaining funds return to the sender.

withdrawFromStream()

Withdraw accumulated funds from a stream. Recipients can call this anytime to receive their earned tokens.

Example Usage
// Create a 30-day salary stream of 3,000 USDC
const streamId = await paymentStream.createStream(
  employeeAddress,     // Recipient
  usdcAddress,         // Token
  3000 * 1e6,          // Amount (6 decimals)
  startTimestamp,      // Start time
  startTimestamp + 30 * 24 * 60 * 60  // End time (30 days)
);

// Employee withdraws accumulated salary
await paymentStream.withdrawFromStream(streamId);

// Cancel stream if needed (refunds remaining to sender)
await paymentStream.cancelStream(streamId);
YieldDistributor.sol
Automated

Yield Distributor

Automatically distributes Treasury yields to vault depositors. Handles the complex math of pro-rata yield distribution based on deposit amounts and duration.

Key Functions

distributeYield()

Called periodically to distribute new Treasury yields to all vault depositors. Yield is distributed proportionally based on share ownership.

claimYield()

Claim your accumulated yield separately from your principal. Useful if you want to harvest yields while keeping your deposit active.

Example Usage
// Check pending yield for a user
const pendingYield = await yieldDistributor.pendingYield(userAddress);

// Claim accumulated yield (keeps principal deposited)
await yieldDistributor.claimYield();

// Admin function: distribute new yield to all depositors
await yieldDistributor.distributeYield(yieldAmount);

Deployed Contracts (Arc Testnet)

USYCVault0xdAe34Fcc36D0772F6e04674971F798FA01bD0538
PaymentStream0xbA5720a03bAAEcaC455Ec82A48E2A5a45216c49e
USYC Token0xe9185F0c5F296Ed1797AaE4238D26CCaBEadb86C

Testnet Only: These contracts are deployed on Arc testnet for testing. Mainnet deployment coming soon.

API Reference

Integration with ethers.js

import { ethers } from 'ethers';

// Connect to Arc Network
const provider = new ethers.JsonRpcProvider('https://rpc.testnet.arc.network');

// Contract ABIs (simplified)
const vaultABI = [
  'function deposit(uint256 assets, address receiver) returns (uint256)',
  'function withdraw(uint256 assets, address receiver, address owner) returns (uint256)',
  'function balanceOf(address account) view returns (uint256)',
  'function totalAssets() view returns (uint256)'
];

// Initialize contract
const vault = new ethers.Contract(VAULT_ADDRESS, vaultABI, signer);

// Deposit 1000 USDC
const tx = await vault.deposit(ethers.parseUnits('1000', 6), userAddress);
await tx.wait();

Integration with viem

import { createPublicClient, createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';

// Define Arc Testnet chain
const arcTestnet = {
  id: 462050,
  name: 'Arc Testnet',
  network: 'arc-testnet',
  nativeCurrency: { name: 'ARC', symbol: 'ARC', decimals: 18 },
  rpcUrls: { default: { http: ['https://rpc.testnet.arc.network'] } }
};

// Create clients
const publicClient = createPublicClient({
  chain: arcTestnet,
  transport: http()
});

// Read vault balance
const balance = await publicClient.readContract({
  address: VAULT_ADDRESS,
  abi: vaultABI,
  functionName: 'balanceOf',
  args: [userAddress]
});

Security

OpenZeppelin Standards

Built on battle-tested OpenZeppelin contracts including ERC-4626, ReentrancyGuard, and Pausable.

Open Source

All smart contract code is open source and available on GitHub for review and verification.

Audit Planned

Professional security audit scheduled before mainnet deployment. Results will be published publicly.

Non-Custodial

You maintain full control of your assets. No admin keys can access user funds.

Testnet Notice

USYC Protocol is currently deployed on Arc Testnet only. Use testnet tokens for testing - do not send real funds. Mainnet deployment will follow security audits and extensive testing.

Frequently Asked Questions

What is USYC?

USYC is a yield-bearing stablecoin backed by US Treasury Bills. It provides stable ~4.5% APY while maintaining a $1 peg, making it ideal for earning risk-free yields on-chain.

Is there a lock-up period?

No. Both the vault and payment streams allow instant withdrawals at any time. You always maintain full control of your assets with no penalties for early withdrawal.

What are the risks?

The main risk is smart contract risk. While we use battle-tested OpenZeppelin contracts and plan professional audits, all DeFi protocols carry inherent smart contract risk. USYC itself is backed by US Treasury Bills (AAA-rated).

When is mainnet launch?

Mainnet deployment is planned after comprehensive testing on Arc testnet and completion of security audits. Follow our Twitter @mous68881 for updates.

How do I get support?

Join our community channels for support and updates: