Naciśnij ESC, aby zamknąć

Segmenty RWA: Obligacje, Kredyty i Akcje w Blockchain

Sektor RWA definitywnie wyrósł z fazy pilotażowych proof-of-conceptów: wartość ztokenizowanych aktywów (nie licząc stablecoinów) przekroczyła już 15 miliardów dolarów. Kapitał instytucjonalny nie wchodzi tu dla „blockchainowej romantyki”, ale dla bezwzględnej optymalizacji kosztów i natychmiastowego rozliczenia (instant settlement). Różnicę między realnym rentownym kapitałem a napompowanym dźwignią powietrzem w DeFi widać gołym okiem.

Rozbijmy na czynniki pierwsze matematykę, zaplecze prawne i inżynieryjne pułapki czterech kluczowych segmentów: obligacji skarbowych, creditu prywatnego (Private Credit), ztokenizowanych akcji oraz surowców.

On-chain T-Bills: Obligacje i papiery państwowe

Tokenizacja amerykańskich bonów skarbowych (T-Bills) to najbardziej płynny i dopracowany pod kątem prawnym segment. Idea jest prosta: przenieść fiatową stopę wolną od ryzyka (FED Fund Rate) do świata on-chain, z pominięciem tradycyjnych brokerów, ich prowizji i weekendowych przerw w bankowości.

Architektura i struktura zabezpieczenia

W praktyce stosuje się dwa podstawowe modele wdrożenia:

  • Direct Ownership (Bezpośrednia własność przez SPV): Fundusz powołuje spółkę celową (Special Purpose Vehicle) w jurysdykcji typu Kajmany, Delaware czy BVI. SPV kupuje krótkoterminowe T-Bills (zazwyczaj 0-3 miesiące) lub zawiera umowy repo (Reverse Repo). Token reprezentuje udział w tym konkretnym SPV. Przykłady: BlackRock BUIDL, Franklin Templeton (FOBXX).
  • Re-staking / Collateralized Vaults: Użytkownik deponuje stablecoiny (USDC/USDT), a protokół poprzez licencjonowanego powiernika (np. BNY Mellon czy BitGo) wymienia je na fiat i kupuje aktywa.

Główna martwa strefa dla inwestora to mechanika wykupu (Redemption Period). Blockchain działa 24/7/365, podczas gdy tradycyjny system Fedwire i izby rozliczeniowe (DTCC) pracują wyłącznie w dni robocze, z uwzględnieniem bankowych dni wolnych.

redemption period
 

Jeśli protokół obiecuje natychmiastowy mint i redemption (Instant Redemption), oznacza to, że pod spodem utrzymuje bufor płynnościowy w USDC/USDT (zazwyczaj 10–15% TVL). Gdy w momencie masowej ucieczki kapitału (bank run) bufor ten ulegnie wyczerpaniu, protokół wstrzymuje działanie do momentu otwarcia amerykańskich rynków (T+1 lub T+2).

Produkt / ProtokółStruktura zabezpieczeniaCzas wykupu (Redemption)Min. próg wejściaJurysdykcja SPV
BlackRock (BUIDL)100% Cash, US T-Bills, Rev RepoT+0 (przez pool Circle) / T+1$5 000 000BVI / USA
Ondo Finance (USDY)Krótkoterminowe US T-Bills, Depozyty bankoweT+2..T+3 dni robocze$500BVI
Ondo (OUSG)BlackRock BUIDL + ETF (SHV)Instant (ograniczony buforem)$100 000Delaware, USA
Centrifuge (Anemoy)US Treasury BillsPaczki miesięczne / dzienne (batches)$5 000BVI

Kredytowanie prywatne (Private Credit)

Podczas gdy T-Bills oferują bezpieczne, zachowawcze 4–5% w skali roku, Private Credit na blockchainie (Centrifuge, Goldfinch, Maple Finance) pozwala wyciągnąć 10–18%. Z tym że nie ma tu mowy o wolnych od ryzyka obligacjach skarbowych. To niezabezpieczone lub częściowo zabezpieczone pożyczki dla realnego biznesu: fintechów z rynków wschodzących, firm leasingowych, deweloperów czy instytucji mikrofinansowych.

Transze ryzyka: Senior i Junior (First-Loss)

Ponieważ niewypłacalność w biznesie jest nieunikniona, pule kapitałowe buduje się w oparciu o mechanizm Waterfall (kaskadę wypłat). Rynek dzieli uczestników na dwie kluczowe warstwy:

  • Transza Junior (First-Loss Capital / Equity): Dostawcy płynności w tej transzy biorą na siebie pierwsze uderzenie w przypadku defaultu. Jeśli pożyczkobiorca nie odda środków, straty są pokrywane w pierwszej kolejności z kapitału inwestorów Junior. Ze względu na wysokie ryzyko, stopa zwrotu jest tu najwyższa (20–30%+). Często w tę transzę wchodzą sami underwriterzy lub protokoły, by udowodnić rynkowi swój „skin in the game”.
  • Transza Senior: Środki są chronione przez poduszkę finansową transzy Junior. Rentowność jest niższa (8–12%), ale wypłata następuje w pierwszej kolejności. Dopóki skala defaultów nie przekracza wolumenu warstwy Junior, inwestor Senior nie traci ani grosza z kapitału początkowego.

First loss capital
 

Wyliczenie APY dla transzy Senior opiera się na wzorze uwzględniającym dźwignię finansową nad warstwą Junior:

Formula RWA
 

Gdzie V oznacza wolumen kapitału w danej transzy, a R to ważona stopa procentowa portfela pożyczkowego. W przypadku defaultu pożyczkobiorcy, rozmiar strat dla warstwy Junior sprowadza się do prostego odpisu: min(Losses, Vjunior).

Programowalne rozliczanie wypłat Waterfall w Solidity

Poniżej znajduje się gotowy smart kontrakt do dystrybucji odsetek i kapitału według logiki Waterfall. Kod został napisany bez zewnętrznych zależności, aby przejrzyście zaprezentować całą matematykę.

// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;
/// @title WaterfallDistribution - Dystrybucja spłat w transzach Senior/Junior dla puli RWA
/// @notice Realizacja kaskadowej spłaty długu bez zewnętrznych bibliotek
contract WaterfallDistribution {
    address public immutable owner;
    uint256 public seniorPrincipal;
    uint256 public juniorPrincipal;
    
    uint256 public seniorInterestDebt;
    uint256 public juniorInterestDebt;
    uint256 public constant SENIOR_RATE_BPS = 800;  // 8.00% APY
    uint256 public constant JUNIOR_RATE_BPS = 2000; // 20.00% APY
    uint256 public constant BPS_DENOMINATOR = 10000;
    event Deposited(address indexed investor, uint8 tranche, uint256 amount);
    event RepaymentProcessed(uint256 interestPaid, uint256 principalPaid);
    modifier onlyOwner() {
        require(msg.sender == owner, "NOT_OWNER");
        _;
    }
    constructor() {
        owner = msg.sender;
    }
    // # zasilenie płynnością poszczególnych transz
    function deposit(uint8 tranche) external payable {
        require(msg.value > 0, "ZERO_AMOUNT");
        if (tranche == 0) {
            seniorPrincipal += msg.value;
            emit Deposited(msg.sender, 0, msg.value);
        } else if (tranche == 1) {
            juniorPrincipal += msg.value;
            emit Deposited(msg.sender, 1, msg.value);
        } else {
            revert("INVALID_TRANCHE");
        }
    }
    // # naliczanie odsetek za dany okres (prosta kalkulacja)
    function accrueInterest(uint256 periodInDays) external onlyOwner {
        seniorInterestDebt += (seniorPrincipal * SENIOR_RATE_BPS * periodInDays) / (365 * BPS_DENOMINATOR);
        juniorInterestDebt += (juniorPrincipal * JUNIOR_RATE_BPS * periodInDays) / (365 * BPS_DENOMINATOR);
    }
    // # sztywna mechanika kaskadowa do obsługi przychodzącego fiatu/stablecoinów
    function processRepayment() external payable onlyOwner {
        uint256 remaining = msg.value;
        // 1. W pierwszej kolejności spłacamy odsetki Senior
        if (remaining > 0 && seniorInterestDebt > 0) {
            uint256 paySeniorInt = remaining > seniorInterestDebt ? seniorInterestDebt : remaining;
            seniorInterestDebt -= paySeniorInt;
            remaining -= paySeniorInt;
        }
        // 2. W drugiej kolejności spłacamy odsetki Junior
        if (remaining > 0 && juniorInterestDebt > 0) {
            uint256 payJuniorInt = remaining > juniorInterestDebt ? juniorInterestDebt : remaining;
            juniorInterestDebt -= payJuniorInt;
            remaining -= payJuniorInt;
        }
        // 3. Spłacamy kapitał główny (principal) Senior
        if (remaining > 0 && seniorPrincipal > 0) {
            uint256 paySeniorPrn = remaining > seniorPrincipal ? seniorPrincipal : remaining;
            seniorPrincipal -= paySeniorPrn;
            remaining -= paySeniorPrn;
        }
        // 4. Cała reszta środków trafia na spłatę kapitału Junior (First-Loss absorbuje straty, jeśli remaining == 0)
        if (remaining > 0 && juniorPrincipal > 0) {
            uint256 payJuniorPrn = remaining > juniorPrincipal ? juniorPrincipal : remaining;
            juniorPrincipal -= payJuniorPrn;
            remaining -= payJuniorPrn;
        }
        emit RepaymentProcessed(msg.value - remaining, remaining);
    }
}

Skantokenizowane akcje i surowce (Commodities)

Akcje gigantów z tradycyjnego rynku (Apple, Tesla) czy twarde aktywa (złoto, ropa, nieruchomości) otwierają drzwi do globalnego kapitału, ale bardzo szybko zderzają się ze ścianą, jeśli chodzi o kompatybilność infrastruktury.

Aktywa syntetyczne vs. 100% pokrycia w świecie rzeczywistym

Gdy zajrzymy pod maskę, zobaczysz fundamentalną różnicę w architekturze skantokenizowanych akcji i surowców:

  • Aktywa syntetyczne (Synthetics): Nadzabezpieczone krypto-derywatywy (np. snxUSD od Synthetix). Nie stoją za nimi żadne bezpośrednie roszczenia prawne do prawdziwych akcji czy sztabek złota. Ich cena jest śledzona przez wyrocznie (oracles), a cała pozycja ma pokrycie w ETH, USDC lub natywnych tokenach projektu. Plusy? Płynność 24/7, brak cenzury i zerowy KYC. Minusy? Potężne ryzyko likwidacji przy ostrym dumpie zabezpieczenia i absolutny brak jakichkolwiek praw do fizycznego aktywa czy dywidendy.
  • 100% Asset-Backed (Pełne pokrycie fizyczne/prawne): Token jest na sztywno powiązany z kwitem depozytowym, akcją lub sztabką złota spoczywającą w skarbu powiernika (PAXG, Tether Gold XAUt, Backed Finance bIB01). Każdy pojedynczy token ma bezpośrednie odzwierciedlenie w realnym świecie. Jeśli emitent pójdzie na dno, specjalna struktura prawna SPV pozwala holderom tokenów dochodzić swoich praw do majątku na drodze dedykowanego arbitrażu.

Problem z market makingiem w weekendy

Klasyczne giełdy (NYSE, NASDAQ, LME) działają w sztywnych godzinach i zamykają rolety na weekendy oraz święta. Tymczasem orderbooki w krypto kręcą się 24/7/365.

problem
 

W soboty i niedziele powstaje niebezpieczna próżnia cenowa. Jeśli na rynku krypto tąpnie jakiś makroekonomiczny shock, animatorzy rynku (market makerzy) obsługujący skantokenizowane akcje nie mają jak zabezpieczyć (zahedgować) swoich pozycji na tradycyjnych parkietach.

Żeby uchronić protokoły przed atakami arbitrażowymi i drenażem płynności, stosuje się kilka sprawdzonych patentów:

  • Dynamiczne rozszerzanie spreadu (Dynamic Spread Scaling): Algorytmy w AMM-ach i na giełdach CLOB automatycznie rozciągają spread bid/ask z bazowych np. 0.05% do nawet 1.5–3.0% od razu po tym, jak zamyka się giełda w Nowym Jorku czy Londynie.
  • Smart Contract Circuit Breakers (Bezpieczniki): Zamrożenie ostatniej ceny zamknięcia (Friday Close Price) na wyroczni Chainlink. Wszystkie grubsze transakcje, które odchylają się od tego kursu o więcej niż zadany próg (np. 2%), są z automatu blokowane aż do otwarcia tradycyjnego rynku.
  • Chainlink Proof of Reserve (PoR): Automatyczna weryfikacja kont powierniczych (BNY Mellon, Brink's) tuż przed wyemitowaniem (zmiętowaniem) nowych tokenów. Jeśli fizyczna sztabka czy akcja nie wpłynęła na rachunek, smart kontrakt po prostu odrzuca transakcję.

Walidacja wyroczni i ochrona przed nieaktualną ceną (Stale Price Protection)

Żeby bezpiecznie realizować transakcje na skantokenizowanych akcjach i surowcach, backend i smart kontrakty muszą bezwzględnie pilnować timestampów w data feedach od Chainlinka.

Poniżej znajdziesz gotowy skrypt w Pythonie (Web3.py) do monitorowania stanu wyroczni złota (XAU/USD) z walidacją świeżości danych (Stale Check).

import sys
from web3 import Web3
# # połączenie z węzłem RPC Mainnet
RPC_URL = "https://eth.merkle.io"
w3 = Web3(Web3.HTTPProvider(RPC_URL))
if not w3.is_connected():
    sys.exit("CRITICAL: Błąd połączenia z węzłem RPC")
# # kontrakt Chainlink XAU/USD (Ethereum Mainnet)
FEED_ADDRESS = "0x214eD128B890A985B66282E2e66A7D9D3eAf39dA"
CHAINLINK_ABI = [
    {
        "inputs": [],
        "name": "latestRoundData",
        "outputs": [
            {"name": "roundId", "type": "uint80"},
            {"name": "answer", "type": "int256"},
            {"name": "startedAt", "type": "uint256"},
            {"name": "updatedAt", "type": "uint256"},
            {"name": "answeredInRound", "type": "uint80"}
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "decimals",
        "outputs": [{"name": "", "type": "uint8"}],
        "stateMutability": "view",
        "type": "function"
    }
]
feed_contract = w3.eth.contract(address=w3.to_checksum_address(FEED_ADDRESS), abi=CHAINLINK_ABI)
def verify_oracle_price(max_stale_time_seconds=86400):
    try:
        round_id, price, started_at, updated_at, answered_in_round = feed_contract.functions.latestRoundData().call()
        decimals = feed_contract.functions.decimals().call()
        
        current_block_time = w3.eth.get_block('latest')['timestamp']
        
        # # przeliczenie właściwej ceny z uwzględnieniem miejsc po przecinku
        human_price = price / (10 ** decimals)
        time_delta = current_block_time - updated_at
        # # rygorystyczna walidacja rundy i czasu
        if price <= 0:
            raise ValueError("Wyrocznia zwróciła nieprawidłową (zerową lub ujemną) cenę")
            
        if answered_in_round < round_id:
            raise ValueError("Dane rundy są nieaktualne (stale round)")
            
        if time_delta > max_stale_time_seconds:
            print(f"WARN: Cena jest nieaktualna! Opóźnienie: {time_delta} sek. (Tradycyjne giełdy są zamknięte)")
            return human_price, False
        return human_price, True
    except Exception as e:
        print(f"ERROR: Błąd wywołania smart kontraktu: {e}")
        return None, False
if __name__ == "__main__":
    price, is_valid = verify_oracle_price()
    if price:
        print(f"Aktualna cena XAU/USD: ${price:.2f} | Status: {'OK' if is_valid else 'STALE'}")

Metryki EXMON do oceny protokołów RWA

Podczas audytu i ewaluacji projektów z sektora RWA nasi analitycy i inżynierowie biorą na warsztat pięć kluczowych wskaźników:

MetrykaWzór / ŹródłoNorma / Próg krytycznyCo oznacza w praktyce
Default Rate (Kredyty prywatne)Spisane długi / Udzielony kapitał< 2.5%Realna jakość underwriting u i zarządzania ryzykiem po stronie pożyczkobiorców.
First-Loss Capital BufferVjunior / Vtotal≥ 15%Bufor ochronny dla inwestorów typu Senior na wypadek niewypłacalności.
Liquidity Buffer Ratio (T-Bills)USDC / Rezerwy gotówkowe / TVL10% - 20%Zdolność protokołu do realizacji wykupu (Redemption) jeszcze w tym samym dniu.
PoR Update FrequencyFeed-y Chainlink PoRCzas rzeczywisty / CodzienniePrzejrzystość potwierdzania realnych aktywów spoczywających na kontach depozytowych.
Legal Claim EnforceabilitySPV / Opinia prawnaBezpośrednie cesje zabezpieczeniaPrawna możliwość sądowego przejęcia zabezpieczenia w przypadku bankructwa emitenta.

Kapitał instytucjonalny wchodzi w RWA nie dla anonimowości, ale dla przejrzystości egzekwowania smart kontraktów i niepodważalnej ochrony praw własności.

Astra EXMON

Astra is the official voice of EXMON and the editorial collective dedicated to bringing you the most timely and accurate information from the crypto market. Astra represents the combined expertise of our internal analysts, product managers, and blockchain engineers.

...

Dodaj opinię

Twój adres e-mail nie zostanie opublikowany. Obowiązkowe pola są oznaczone*