Protocol stelar la master · protocol stellarstellar · GitHub
Ofertele susținute de active sunt o propunere de rezolvare a problemei, care s-ar putea ca ofertele din registru să nu fie executabile.

Ofertele susținute de active sunt o propunere de rezolvare a problemei conform cărora un singur cont ar putea avea datorii, sub formă de oferte în registru, care depășește activele contului. Când se întâmplă acest lucru, ofertele din registrul s-ar putea să nu fie executabile, în sensul că nu există nicio ofertă de trecere astfel încât să fie schimbată întreaga sumă a ofertei. Ofertele din registru care nu sunt executabile oferă un fals sentiment de lichiditate.
Vom spune că o ofertă este „executabilă imediat în totalitate” (pe scurt IEIF) dacă, dacă ar fi traversată de o ofertă ipotetică fără limite cu privire la suma cumpărată sau vândută, întreaga sumă a activului de vânzare ar fi schimbată. Este de dorit ca toate ofertele să fie IEIF, deoarece acest lucru permite utilizatorilor să evalueze cu ușurință cantitatea de lichiditate disponibilă.
Protocolul impune ca, la crearea, fiecare ofertă să îndeplinească următoarele două condiții:
- Suma oferită pentru vânzare nu depășește soldul disponibil al activului de vânzare
- Suma oferită pentru cumpărare (calculată implicit) nu depășește limita disponibilă a activului de cumpărare
Vom demonstra acum că aceste condiții nu sunt suficiente pentru a ne asigura că o ofertă este IEIF. Să presupunem că un cont creează o ofertă care este IEIF cu suma de vânzare egală cu soldul disponibil al activului de vânzare. Contul creează apoi o a doua ofertă cu un preț mai slab, dar altfel identic cu prima. Deși fiecare ofertă îndeplinește individual cerințele de mai sus, a doua ofertă nu este IEIF. Să presupunem că a doua ofertă a fost traversată de o ofertă ipotetică fără limite. Această ofertă de trecere ar traversa inițial prima ofertă, care nu lasă sold disponibil pentru activul de vânzare. Atunci când a doua ofertă este apoi încrucișată, nu se pot schimba active.
Analog cu exemplul de mai sus, este posibil să creați oferte multiple care îndeplinesc în mod individual cerințele, dar care depășesc limita disponibilă atunci când sunt luate în considerare în total. Să presupunem că o ofertă creează o ofertă care este IEIF cu suma de cumpărare egală cu limita disponibilă a activului de cumpărare. Contul creează apoi o a doua ofertă cu un preț mai slab, dar altfel identic cu prima. Deși fiecare ofertă îndeplinește individual cerințele de mai sus, a doua ofertă nu este IEIF. Să presupunem că a doua ofertă a fost traversată de o ofertă ipotetică fără limite. Această ofertă de traversare ar trece inițial de prima ofertă, care nu lasă nicio limită disponibilă pentru activul de cumpărare. Atunci când a doua ofertă este apoi încrucișată, nu se pot schimba active.
Această propunere va necesita modificări XDR pentru AccountEntry și TrustLineEntry, precum și actualizări de schemă pentru conturi și tabele cu linii de încredere. Actualizarea XDR este:
SQL necesar pentru actualizarea schemei este:
De asemenea, trebuie adăugat codul rezultatului operației ACCOUNT_MERGE_DEST_FULL:
Scopul propunerii de oferte susținute de active este de a menține invariantul că fiecare ofertă este IEIF. Începem cu o discuție despre ceea ce poate face ca ofertele să nu mai fie IEIF:
Din această analiză, este clar că orice propunere care încearcă să modifice sau să șteargă oferte care nu mai sunt IEIF ar necesita menținerea cărții de oferte după încasarea taxelor și după fiecare operațiune. Acest lucru ar fi atât complicat, cât și ineficient. În schimb, urmărim o propunere care modifică operațiunile astfel încât să garanteze că ofertele rămân IEIF. Pentru a realiza acest lucru, mai întâi definim cantități noi care sunt date derivate din registru:
- cont.vanzareDatoriu
- Pentru contul A: suma activului nativ oferit pentru a fi vândut, cumulat la toate ofertele deținute de A
- account.buyingDatorii
- Pentru contul A: suma activului nativ oferit pentru a fi cumpărat, cumulat la toate ofertele deținute de A