Skip to main content

Firefish protokol

Zdrojový kód k dispozici

Zdrojový kód pro implementaci protokolu Firefish je dostupný na protocol.firefish.io. Zahrnuje klienta a pokyny pro deterministické sestavení.

Tento dokument popisuje technický design protokolu Firefish. Vezměte prosím na vědomí, že samotná implementace – dodaná prostřednictvím platformy Firefish – se může v určitých aspektech lišit, protože jak platforma, tak underlying escrow systém jsou stále aktivně vyvíjeny. Pro nejpřesnější a nejaktuálnější informace o současné funkčnosti a omezeních protokolu Firefish se prosím podívejte na podmínky služby.

Účastníci protokolu Firefish

  • Dlužník: Jednotlivec nebo subjekt, který vlastní bitcoin a hledá likviditu ve fiat měně nebo stablecoinu.
  • Investor: Fyzická nebo právnická osoba, která má nadbytečné peníze ve fiatu nebo stablecoin a chce získávat úroky.
  • Likvidátor: Subjekt odpovědný za likvidaci zástavy, pokud dlužník nesplní své závazky, nebo pokud hodnota zajištění klesne pod požadovaný práh. Investor může buď sám jednat jako likvidátor, nebo tuto roli delegovat na Firefish.
  • Price Oracle: Oracle, který ověřuje cenu bitcoinu. Může být implementováno jako důvěryhodná instituce, veřejný orákl, nebo prahová hodnota institucí a veřejných oráklů. Price Oracle je v současnosti provozován společností Firefish.
  • Payment Oracle: Oracle, který potvrzuje, zda byla provedena převod peněz (např. splácení půjčky). Payment Oracle v současnosti provozuje Firefish.
  • Firefish: Platforma, která spojuje Investora a Dlužníka a zajišťuje jejich bezpečnou interakci.

Jednotlivé výstupy z půjček

Níže se nachází tabulka možných výstupů úvěru, včetně (i) definice výsledku (Popis), (ii) kdo rozhoduje, že k výsledku došlo (Spoušť), a (iii) co se stane s bitcoinovým zástavou pro tento výstup.

Výstup z půjčkyPopisVýsledekSpouštěč
SplaceníÚvěr byl úspěšně splacenVeškerá bitcoinová zástava je vrácena dlužníkoviPayment Oracle
DefaultPůjčka není splacenaZástava je odeslána likvidátorovi (distribuční úschova). Část zajištění se použije k pokrytí dlužné částky (buď v bitcoinech pro samosprávnou likvidaci, nebo v měně půjčky pro likvidaci Firefish), zbytek je vrácen DlužníkoviPayment Oracle
LikvidaceZajištění dlužníka již plně nezajišťuje půjčku kvůli poklesu její hodnotyVeškerý kolaterál je odesílán věřiteli (pro samo-řízenou likvidaci) nebo likvidátorovi (pro Firefish likvidaci)Price Oracle a Payment Oracle
ZrušeníŽadatel uzamknul bitcoin do escrow, ale věřitel neposkytl půjčkuVeškerá bitcoinová zástava je vrácena dlužníkoviPayment Oracle
ApokalypsaOracly nereagujíDlužník může získat veškeré bitcoinové zajištění z úschovy jeden měsíc po datu splatnosti prostřednictvím obnovovací transakce (recovery transakce)Žadatel o půjčku

Escrow kontrakt

Escrow kontrakt je nedílnou součástí protokolu Firefish. Umožňuje uzamknout kolaterál na konkrétní multisig adrese a definuje pravidla, která udávají, jak může být tento kolaterál uvolněn.

První vrstva Escrow kontraktu je escrow transakce (txescrow). Jeho vstupem je bitcoin dlužníka (prostřednictvím transakce odeslané na Prefund definované níže) a jeho výstupem je 3-z-3 multisig, s klíči drženými:

  • Price Oracle
  • Payment Oracle
  • Dlužník (escrow klíč dlužníka, označovaný jako B-EPH)

Výstup z escrow transakce představuje samotnou úschovu a zde se uchovává bitcoin během celé doby trvání půjčky.

Druhá vrstva smlouvy o úschově je reprezentována sadou částečně podepsaných transakcí (nazývaných uzavírací transakce), které používají bitcoinovou zástavu z výstupu úschovy buď pro věřitele/liquidátora, nebo pro dlužníka, přičemž odpovídají různým výsledkům půjčky. Všechny tyto transakce jsou předem podepsány Dlužníkem pomocí jejich escrow klíče (B-EPH). Tento soukromý klíč je poté zahozen, jelikož je dočasný/efemérní (odtud název B-EPH). Zahodit soukromý klíč Dlužníka zajišťuje, že tyto předem podepsané transakce se stanou jediným způsobem, jak přesunout bitcoinovou zástavu z úschovy, což efektivně pojistí všechny strany podle dohodnutých pravidel.

Kromě toho, že jsou předem podepsány Dlužníkem, jsou tyto uzavírací transakce předem podepsány oraklem, které nenese odpovědnost za odpovídající výsledek půjčky. Později, když známe výsledný status půjčky, odpovědný oracle toto potvrdí přidáním posledního chybějícího podpisu na základní uzavírací transakci (tím se transakce stává platnou) a vysílá tuto transakci do bitcoinové sítě.

Timelocks

Některé uzavírací transakce používají časové zámky, což zajišťuje, že tyto transakce lze použít pouze od určitého data v budoucnu. Konkrétně:

  • uzavření transakce odpovídající Default má nastavený časový zámek na datum splatnosti, protože potenciální Default je hodnocen nejdříve k datu splatnosti.
  • uzavírající transakce odpovídající katastrofě má časový zámek nastavený na jeden měsíc po datu splatnosti (dlužník si tak může vrátit bitcoin touto transakcí, i kdyby naše Oracles neodpovídali)

Shrnutí uzavíracích transakcí

Celkem máme pět uzavíracích transakcí:

Jednotlivé výstupy z půjčekUzavření transakceChybějící podpisVýstup naTimelock
SplacenítxsplaceníPayment OracleŽadatel o půjčku-
DefaulttxDefaultPayment OracleLikvidátordatum splatnosti
LikvidacetxlikvidacePrice Oracle a Payment OracleVěřitel/Likvidátor-
ZrušenítxsplaceníPayment OracleŽadatel o půjčku-
Apokalypsatxobnovovací transakce-Žadatel o půjčkudatum splatnosti + 1 měsíc

Escrow kontrakt může být schematicky zobrazen takto:

Protokol Firefish

Prefund kontrakt

Abychom escrow proces učinili praktický pro dlužníky, kteří používají různé bitcoinové infrastruktury (hardwarové peněženky, softwarové peněženky,custodial peněženky), navrhujeme nejprve zkonsolidovat zůstatky UTXO ve vaší peněžence, které budou následně použity jako zástava k dané půjčce.

Toto řešení usnadňuje Žadatelům o půjčku interakci s Firefish protokolem. Nejprve odešlou svou bitcoinovou zástavu na konkrétní prefund adresu (Aprefund), což umožňuje vytvoření následného escrow a všech uzavírajících transakcí.

Prefund adresa definuje následující podmínky pro použití:

  • 3 ze 3 multisig (prefund klíč dlužníka, Price oracle, Payment oracle), nebo
  • Prefund klíč a relativní časový zámek na 7 dní.

První způsob využívající multisig se používá k přesunu bitcoinů z prefundu do escrow, pokud všechny klíče podepíšou transakci. Druhá podmínka pro použití prefund klíče dlužníka s relativním časovým zámkem funguje jako ochrana pro dlužníka, pokud se oracles stanou nefunkčními během nastavení kontraktu.

Jakmile je bitcoin uzamčen na adrese prefund, všechny informace jsou již známy pro vytvoření escrow a všech uzavíracích transakcí.

Celý protokol Firefish, včetně prefund, escrow a uzavíracích transakcí, může být schematicky znázorněn takto:

Protokol Firefish

Implementace protokolu

Celý protokol Firefish je implementován v Rustu. Aby se zjednodušila interakce s protokolem pro žadatele o půjčku, část aplikace, nazývaná borrower-wasm, je zkompilována do WebAssembly a běží na platformě Firefish. Zdrojový kód pro borrower-wasm je dostupný zde. Obsahuje také pokyny pro deterministické sestavení, což umožňuje dlužníkům ověřit, že klient použitý na platformě Firefish odpovídá publikovanému zdrojovému kódu.

Ukázka kompilace k verifikaci

Postup nastavení Escrow

Níže naleznete zjednodušený popis nastavení Escrow a životnosti půjčky.

  1. Účastníci protokolu si bezpečně vyměňují potřebná data (například detaily o půjčce) a veřejné klíče, vše prostřednictvím platformy Firefish.
  2. Dlužník zadá svou návratovou adresu, na kterou bude bitcoinová zástava vrácena po úspěšném splacení půjčky.
  3. Pomocí Firefish klienta si žadatel o půjčku vygeneruje prefund adresu.
  4. Žadatel o půjčku pošle bitcoinovou zástavu na prefund adresu pomocí své vlastní peněženky.
  5. Použitím klienta si žadatel o půjčku vytváří escrow a uzavírací transakce a následně přidává své vlastní podpisy.
  6. Oracles přidávají své vlastní podpisy k Escrow a uzavíracím transakcím podle specifikace protokolu.
  7. Pomocí aplikace si žadatel o půjčku ověřuje, že všechny transakce a podpisy jsou na svém místě. Po ověření přidá žadatel o půjčku poslední chybějící podpis pro escrow transakci.
  8. Pomocí klienta žadatel o půjčku zahodí svůj soukromý klíč pro escrow, což zajišťuje, že možnosti útraty pro escrow jsou omezeny na ty, které jsou definovány uzavíracími transakcemi.
  9. Žadatel o půjčku vyšle nyní zcela podepsanou escrow transakci , čímž efektivně uzamyká kolaterál do kontraktu. Escrow je správně nastaven.
  10. Investor pošle prostředky (fiat nebo stablecoin) žadateli o půjčku.
  11. Až bude znám výsledek půjčky (např. splacení, nesplacení), odpovídající transakce je podepsána a vyslána odpovědným oráklem pro daný výsledek, což efektivně uzavře půjčku.

Klíčové výhody Firefish protokolu

  • Escrow má "deterministickou" povahu. Může být utracen pouze na adresu Dlužníka nebo Investora/Likvidátora, ale ne na žádnou jinou entitu.
  • Investor nemusí mít žádné kryptografické materiály ani jinak interagovat s bitcoinovou sítí. To umožňuje subjektům, které nejsou nativní pro používání Bitcoinu, investovat na platformě Firefish.
  • Dlužník musí být online a interagovat s platformou pouze během fáze nastavení escrow. Poté to již není nutné - nemusí podepisovat nic jiného ani uchovávat klíče online.
  • Pokud Oracles přestanou spolupracovat během jakékoli fáze půjčky, může si Dlužník po uplynutí časového zámku poslat bitcoin na svou návratovou adresu. To lze pomocí tzv. Recovery transakce.
  • Interakce dlužníka s protokolem se redukuje na (i) poskytnout svou návratovou adresu a (ii) poslat bitcoin na prefund adresu. Celá tento proces, jako je vytváření adres a podepisování escrow, uzavíracích transakcí, je zpracovávána v aplikaci.
  • Protože je interakce tak jednoduchá, Firefish můžou používat jak vlastníci hardwarových peněženek, tak vlastníci peněženek Multi-Party Computation (MPC) (instituce) nebo dokonce úschovné řešení , jako jsou burzy (i když to není doporučeno).

Potenciální nevýhody protokolu Firefish

  • Stejně jako u jakéhokoli jiného protokolu půjček krytých bitcoinem je vyžadována jistá úroveň důvěry v Oracles a jejich správné vyhodnocení. Věříme však, že tuto potřebu důvěry lze na úrovni implementace minimalizovat (například decentralizací Price Oracle, využitím DLC, anonymizačními technikami používanými Payment Oracle atd.).
  • Smlouvu není možné zrušit bez spolupráce oracles, i když se věřitel a dlužník dohodnou.
  • Složitost navrhovaného řešení a fakt, že bezpečnostní a obchodní výhody nemusí být okamžitě zřejmé.
  • Investor (a Dlužník) musí mít určitou úroveň důvěry v likvidátora, že vrátí prostředky/bitcoin v případě likvidace a defaultu. Toto může být minimalizováno, například tím, že Likvidátor poskytne nějakou formu zajištění nebo využije DLC.