Паметни уговори
Ова страница описује главне уговоре Тржнице и Ваучера у protocol v1.1.0. Понашање уговора обезбеђује механику поравнања; не замењује објаве издаваоца, правила Тржнице нити друге услове трансакције који важе за конкретну употребу.
Појмови и речник разликују уређену Тржницу обавеза од SwapPool, а поравнање размене од подношења ради искоришћења, испуњења и раздужења.
Ваучер (GiftableToken)
GiftableToken је ERC20 токен са механиком коју издавалац може користити за Ваучер:
- Овлашћено издавање — власник може одредити писце који смеју да издају токене помоћу
mintTo. - Необавезни истек — вредност истека
0значи да уговор не намеће истек. Иначе се пренос, издавање и спаљивање поништавају у подешено време или после њега. Свако може трајно забележити коначно стањеexpiredнепосредним позивомapplyExpiry. - Обрачун количине —
totalMintedиtotalBurnedприказују укупну активност издавања и спаљивања. Функцијаburn, доступна само власнику, спаљује токене које држи адреса власника.
Уговор токена не одређује робу или услуге издаваоца, вредност искоришћења, капацитет нити конверзију у новац. GiftableToken постаје обавеза која се може искористити само кроз засебно објављене услове и поступање издаваоца. Издаваоци остају одговорни да те услове тачно опишу и поштују.
Тржница обавеза (SwapPool)
SwapPool је трезор токена и механизам поравнања размена. Иако излаже ERC20 метаподатке за назив, симбол и децимале Тржнице, уговор v1.1.0 не издаје токене удела у Тржници. Ликвидност се уноси преносом токена у Тржницу, а власник уговора може повући расположиву ликвидност.
Састав и необавезне зависности
| Подешавање | Када није постављено | Поље адресе које се може запечатити |
|---|---|---|
tokenRegistry | Сваки токен може проћи проверу избора Тржнице | Да |
tokenLimiter | Депозити немају уговорно ограничење стања | Да |
quoter | Сирови улазни износ сматра се једнаким сировом понуђеном излазном износу | Да |
feePolicy | Накнада Тржнице је нула | Да |
feeAddress | Накнаде Тржнице се не прикупљају као накнаде које наведени прималац може повући | Да |
protocolFeeController | Протоколска накнада се не наплаћује | Не |
Пет печата трајно закључава актуелне адресе feePolicy, feeAddress, quoter, tokenRegistry и tokenLimiter од замене преко њихових подешавача. protocolFeeController и feesDecoupled су почетне вредности и нису међу тих пет печата.
Печаћење адресе не замрзава уговор на тој адреси. Запечаћени регистар, Limiter, Quoter или политика накнада — као и подешени контролор протоколске накнаде — и даље се могу мењати ако то њихово управљање дозвољава. Администратор ERC-1967 проксија такође може надоградити имплементацију Тржнице. Смислена тврдња о непроменљивости зато зависи од управљања власником Тржнице, администратора проксија и сваке подешене зависности.
Поравнање размене
При размени SwapPool:
- Проверава да улазни и излазни токен пролазе необавезни регистар и проверава тражени улаз према необавезном ограничењу стања у Тржници.
- Повлачи улазни токен од позиваоца и мери стварно примљени износ. Вредновање користи измерени износ, укључујући токене са накнадом при преносу.
- Добија бруто понуду од подешеног
Quoter-а или користи сирови примљени износ акоQuoterније подешен. - Израчунава накнаду Тржнице и сваку додатну протоколску накнаду, па проверава расположиву ликвидност излазног токена.
- Шаље протоколску накнаду непосредно подешеном примаоцу протокола, преноси номинални нето излаз примаоцу и бележи накнаду Тржнице ако је адреса накнаде подешена.
- Емитује стари догађај
Swapи детаљнији догађајSwapSettlement.
SwapSettlement бележи покретача, оба токена, измерени улаз, бруто понуђени излаз, послати номинални излаз, стварни излаз забележен код примаоца, накнаду Тржнице и протоколску накнаду. Номинални и забележени излаз могу се разликовати када излазни токен наплаћује накнаду при преносу. Поље fee у старом догађају Swap садржи само накнаду Тржнице.
Варијанта withdraw(tokenOut, tokenIn, value, recipient, minAmountOut, deadline) са шест аргумената представља ограничену путању извршења. Поништава се после рока или када је забележено повећање стања примаоца мање од minAmountOut. Интегратори треба да је користе јер је приказана понуда привремена: стање Quoter-а, политика накнада, ликвидност, ограничења и подаци оракла могу се променити пре извршења. Старије варијанте са три и четири аргумента не пружају ове границе на нивоу Тржнице.
Сабирање накнада
Накнада Тржнице и протоколска накнада одбијају се од бруто понуђеног излаза. Протоколска накнада се не издваја из накнаде Тржнице и Тржница задржава целу израчунату накнаду.
На пример, за бруто понуду од 100 јединица:
- накнада Тржнице од 2% прикупља 2 јединице за Тржницу;
- протоколска стопа од 10% примењена на ту накнаду шаље још 0,2 јединице непосредно примаоцу протокола; и
- корисник прима 97,8 јединица.
Протоколски обрачун користи већи износ од израчунате накнаде Тржнице и претпостављене основе накнаде од 1%. Тиме се спречава да врло мала накнада Тржнице сведе протоколски обрачун готово на нулу. Неважеће збирне стопе поништавају се грешком FeeTooHigh, а понуда чије би поравнање било нула грешком InsufficientOutput.
Овлашћења власника и надоградње
Власник уговора може наплатити прикупљене накнаде Тржнице и позвати withdrawLiquidity да пренесе било који расположиви токен Тржнице на изабрану адресу различиту од нуле. Када су накнаде одвојене, прикупљене накнаде се изузимају из овог пута за повлачење ликвидности; иначе остају део стања Тржнице. Учесници не треба да сматрају депоновану ликвидност трајно закључаном осим ако додатне и проверљиве контроле управљања утврђују такав исход.
Печаћење подешавања не уклања ово овлашћење за повлачење ликвидности. Не уклања ни засебно овлашћење администратора ERC-1967 проксија за надоградњу.
Модули вредновања
Сва три Quoter уговора примењују функције понуде у оба смера које користе SwapPool и SwapRouter:
DecimalQuoter— нормализација децимала без стања, уз претпоставку вредносне једнакости 1:1.RelativeQuoter— нормализација децимала и релативни индекси цена којима управља власник. Непостављени индекс токена подразумева једнакост.OracleQuoter— одређује курс сваког токена преко подешеног оракла, са општим или појединачним ограничењем старости податка и необавезним множиоцем излаза од 0,9 до 1,0.
OracleQuoter је поуздан онолико колико су поуздани избор извора и његово управљање. Валута и смер извора морају бити доследни, децимале тачне, ажурирања позитивна и свежа, а управљање може заменити изворе или променити ограничења свежине. Манипулација извором, одложено ажурирање, прекид мреже, погрешно подешен пар или губитак кључа власника оракла могу произвести лоше понуде или поништити размене.
OracleRelay је необавезни посредник за најновији круг једног извора, усаглашен са интерфејсом оракла. Овлашћени писац поново објављује изворне вредности; нема доказа између ланаца ни сачуване историје кругова. Посредник прихвата вредности писца уз проверу да временска ознака није у будућности. OracleQuoter засебно одбија непозитивне или застареле одговоре, док власник посредника може променити писца или поништити актуелни круг. Корисници зато морају проценити извор података, писца, власника и поступак праћења.
Политика накнада и ограничења
FeePolicy чува подразумевану накнаду у деловима на милион и необавезна усмерена одступања за парове. Власник може мењати те стопе осим ако то не ограничава управљање ван уговора.
Limiter чува највеће стање токена на одређеној адреси Тржнице. Власник или овлашћени писац може променити то ограничење. Ограничење нула блокира депозите када је Limiter активан; без Limiter-а депозити нису ограничени.
Ова ограничења описују подешену изложеност токену у Тржници. Сама по себи не класификују стање токена као зајам или правни дуг, не доказују капацитет издаваоца и не гарантују испуњење. Та питања зависе од услова издаваоца, правила Тржнице, трансакције приказане кориснику и важећег закона.
Контролор протоколске накнаде
ProtocolFeeController је необавезна компонента накнаде на нивоу примене. Њен власник може мењати протоколску стопу и примаоца или искључити накнаду. Више Тржница може делити један контролор, али протокол не захтева један контролор по мрежи.
Када је активан и подешен, прималац се плаћа непосредно у излазном токену током сваке успешне размене. Начин на који прималац користи средства — на пример за рад, праћење, подршку ликвидности или другу објављену сврху — питање је управљања, а не гаранција уговора.