00
Real World Yield (RWY) Staking
conceptsrwystakingyieldcommodities

Real World Yield (RWY) Staking

🏠 Home > Core Concepts > RWY Staking

Real World Yield (RWY) is Aurellion's mechanism for generating on-chain yield from real-world commodity processing. Users stake physical-asset tokens into processing opportunities and receive their principal back plus a share of the profits when the goods are sold.


The Core Concept

Traditional DeFi yield comes from protocol fees, token inflation, or lending. RWY yield comes from real economic activity:

10 farmers each stake 100kg of wheat tokens
→ Total: 1,000kg wheat in the Diamond
→ Grain processor collects, mills, sells flour
→ Flour sold for 15% more than raw wheat value15% profit distributed proportionally to stakers

The yield is backed by physical transformation — wheat into flour, livestock into meat products, raw gemstones into cut stones. This creates genuine, inflation-resistant returns.


Roles in RWY

Role Description
Operator Approved entity (processor, manufacturer) that creates opportunities
Staker Node operator or user who commits asset tokens
Protocol Takes 1% of profits as protocol fee

Operators must be approved by the contract owner (approvedOperators[address] = true). They post collateral (minimum 20% of opportunity value) to demonstrate commitment.


Opportunity Parameters

When an operator creates an opportunity:

Parameter Description Constraints
name Human-readable label
description What will be done with the assets
inputToken ERC-1155 token address Must be valid Aurellion asset
inputTokenId Token ID of the commodity
targetAmount Total tokens needed Must be > 0
promisedYieldBps Expected return in bps Max 5000 (50%)
fundingDeadline When staking window closes Future timestamp
processingDeadline When processing must complete After fundingDeadline

Full Lifecycle Example

Scenario: A grain processor wants to mill 1,000kg of wheat into flour.

Day 0: Operator creates opportunity
  createOpportunity("Wheat  Flour Q1 2026", "WHEAT", tokenId=1,
                    targetAmount=1000, promisedYieldBps=1500, ...)
   Status: OPEN
   OpportunityCreated event

Days 1-7: Staking period
  Staker A: stakeToOpportunity(id, 200)   200 wheat tokens transferred
  Staker B: stakeToOpportunity(id, 500)   500 wheat tokens transferred
  Staker C: stakeToOpportunity(id, 300)   300 wheat tokens transferred
   totalStaked = 1,000 (target reached)
   Status: FUNDED
   OpportunityFunded event

Day 8: Operator triggers processing
  startProcessing(id)
   Journey created to deliver wheat to mill
   Status: DELIVERY  PROCESSING

Day 30: Processing complete
  confirmProcessingComplete(id, outputAmount=950kg_flour, outputTokenId=2)
   950kg flour tokens minted to operator
   Status: PROCESSED

Day 35: Flour sold
  recordSaleProceeds(id, proceeds=13,000_USDC)
   Original wheat value: 10,000 USDC (1000kg × 10 USDC/kg)
   Profit: 3,000 USDC
   Yield: 30% (vs. promised 15%  stakers got more)
   Status: SOLD  DISTRIBUTING

Days 36+: Stakers claim
  Staker A: claimProfit(id)
     stakedAmount = 200, proportion = 20%
     principal = 200 wheat tokens back
     profit share = 20% × 3,000 × (1 - 1% protocol) = 594 USDC
     ProfitDistributed(id, stakerA, 200, 594)

  Staker B: claimProfit(id)  1485 USDC
  Staker C: claimProfit(id)  891 USDC
  Protocol receives: 30 USDC (1% of 3,000)

Profit Calculation Detail

userStake         = 200 tokens
totalStaked       = 1,000 tokens
proportion        = 200 / 1,000 = 20%

totalProceeds     = 13,000 USDC
costBasis         = 10,000 USDC (what the wheat was worth)
totalProfit       = 3,000 USDC

protocolFee       = 3,000 × 1% = 30 USDC
distributableProfit = 2,970 USDC

userProfitShare   = 2,970 × 20% = 594 USDC
userPayout        = 594 USDC (yield) + 200 wheat tokens (principal)

Staking Rules

Rule Details
Only during OPEN Cannot stake after fundingDeadline or when FUNDED
Cannot overfund totalStaked + amount <= targetAmount
Can unstake if OPEN unstakeFromOpportunity() available before FUNDED
Cannot unstake if FUNDED Committed once processing begins
Claim only once AlreadyClaimed() error on second attempt

Risk Model

Risk Mitigation
Operator disappears Operator collateral (20%) slashed
Processing fails Cancel mechanism; stakes refunded
Market price drops Yield is proportional to actual proceeds — can be < promised
Processing deadline missed Owner can cancel opportunity

If an opportunity is cancelled at any stage before PROCESSING completes, stakers receive their tokens back in full.


Operator Collateral

Operators must hold collateral to create opportunities:

minOperatorCollateralBps = 2000 (20% of opportunity value)

For a 10,000 USDC opportunity:
  Required collateral = 2,000 USDC
  Operator must have this in their account or staked in OperatorFacet

Collateral is locked for the duration of the opportunity and released upon successful completion or slashed upon misconduct.


Integration with AuSys Logistics

When an opportunity moves to DELIVERY status, it creates a logistics journey via AuSysFacet:

startProcessing(opportunityId)createJourney(...) with nodes = [operatorFacility]
  → Journey tracks physical transport to processing facility
  → DeliveryStarted(opportunityId, journeyId)

This means the same journey mechanics (driver assignment, signatures, handoff) apply to RWY deliveries.


UI Entry Points

Action Route
Browse opportunities /customer/rwy
View single opportunity /customer/rwy/[id]
My stakes /customer/rwy/my-stakes
Create opportunity (node) /node/rwy/create
Manage opportunity (node) /node/rwy