Detsember 1, 2021
UMA on platvorm, mis võimaldab kasutajatel Ethereumi plokiahelas sõlmida minimaalse usaldusega finantslepinguid. Oleme varem auditeerinud detsentraliseeritud oraakel, konkreetne finantslepingu mall, mõned ad hoc tõmbetaotlused, Perpetual Multiparty mall ja mitmesugused järkjärgulised tõmbamistaotlused pikema seotuse jooksul. Selles auditis vaatasime üle uue mehhanismi, mis võimaldab kiiresti saata žetoone 2. kihi ahelast Ethereumi põhivõrku, ja sellega seotud muudatusi Optimistic Oracle'is. Ülevaatuse viisid läbi 2 audiitorit 3 nädala jooksul.
Ulatus
Auditeeritud kohustus on f24ad501c8e813cf685f72217e7f13c8f3c366df
ja ulatus hõlmab järgmisi lepinguid:
- lepingud/insured-bridge/* (v.a testlepingud)
- lepingud-ovm/kindlustussild/rakendamine/*
- lepingud/common/implementation/AncillaryData.sol
- lepingud/oracle/implementation/SkinnyOptimisticOracle.sol
Vaatasime üle ka tugevusfailide muudatused Tõmmake päring 3445.
Eeldati, et kõik välised koodi- ja lepingusõltuvused töötavad dokumenteeritud viisil.
Süsteemi ülevaade
Toetatud kihi 2 (L2) ahelad Optimism ja Arbitrum pakuvad mehhanismi raha ülekandmiseks Ethereumi põhivõrku (L1). Turvakaalutlustel kulub nende ülekannete lõpuleviimiseks siiski märkimisväärne viivitus. Selle probleemi lahendamiseks saavad L2 žetoonide omanikud hoiustada raha UMA lepingusse ehk deposiitkasti, teades, et märgid kantakse lõpuks (partiina) üle L1 UMA lepingusse, Bridge Pool. Iga ülekantava märgi jaoks on eraldi Bridge Pool.
Pärast L2 sissemakset saab igaüks edastada üksikasjad L1 Bridge Poolile, mis ootab lühikest aega juhuks, kui keegi soovib edastatava teabe vaidlustada. Kõiki vaidlusi lahendab Skinny Optimistic Oracle (kirjeldatud allpool). Enne relee vastuvõtmist peavad likviidsuse pakkujad Bridge Pooli lepingut ette rahastama LP-märkide vastu. Vaidlustatud releed loetakse kehtivaks ja Bridge Pool viib ülekande lõpule oma reservide abil, kus osa ülekandest suunatakse releesse ja osa jääb likviidsustasudena. Vahendeid täiendatakse lõpuks, kui L2 deposiit on lõpetatud, ja likviidsustasud määratakse LP märgi omanikele.
Bridge Pool võimaldab ka kõigil individuaalselt rahastada ülekannet (ilma Bridge Pooli reservideta) enne vaidlusperioodi lõppu, vastutasuks murdosa ülekandesummast. Kuna relee üle saab endiselt vaidlustada, lähevad need vahendid kaduma, kui relee loetakse valeks. Eeldatakse, et enamikul juhtudel võimaldab see mehhanism kasutajatel kogeda viivitamatut L2-lt L1-le märgi ülekandmist.
Skinny Optimistic Oracle on kontseptuaalselt väga sarnane olemasoleva Optimistic Oracle'iga. See pakub kasutajatele stiimulimehhanismi lihtsalt kinnitada oraakli päringu tulemust, mis eeldatakse olevat täpne, kui seda ei vaidlustata. Vaidlused on suunatud aeglasemale DVM-mehhanismile, mida on kirjeldatud meie eelmistes auditiaruannetes. Peamine erinevus seisneb selles, et uues versioonis peavad kasutajad funktsioonikutsete sooritamisel esitama kogu asjakohase teabe, mistõttu väärtusi pole vaja salvestada ega salvestusruumist välja tuua. Samuti eemaldab see taotlejatelt võimaluse muuta aktiivsete päringute konfiguratsiooniparameetreid.
Oleme varem üle vaadanud pika-lühikese paari lepingu, mis annab üldise mehhanismi erinevate finantsinstrumentide loomiseks. Neid lepinguid saab lahendada siis, kui nende kehtivusaeg saabub ja arveldushind on teada. Pull Request 3445 sisse viidud muudatused toovad kaasa võimaluse lepingud ennetähtaegselt lahendada, kui arveldushind on teada enne aegumisaega.
Privilegeeritud rollid
L2 deposiitkastidel on mitu konfiguratsiooniparameetrit, sealhulgas toetatud märgid ja maksimaalne määr partiidena žetoonide saatmiseks üle silla L1-le. Samuti tuleb need konfigureerida, et tagada järjepidevus L1 loa lepingu, L2 märgi lepingu ja vastava sillakogumi vahel. Need parameetrid määratakse L1 administraatorilepinguga, mis määrab ka sillakogumite vaidluste lahendamise protsessi. Eeldatakse, et lepingut kontrollib UMA juhtimismehhanism, nii et kasutajad peavad süsteemi mõistlikuks ja õiglaseks haldamiseks seda protsessi usaldama.
Ökosüsteemi sõltuvused
Kõik läbi vaadatud komponendid kasutavad ajapõhist loogikat, mis tähendab, et need sõltuvad Ethereumi saadavusest. Eelkõige juhul, kui vaidlustehingud viibivad märkimisväärselt, võivad kehtetud releed või hinnapakkumised olla valesti kinnitatud.
Lisaks eeldab märgisild kaudselt, et kõik L2 hoiukastidesse saadetud raha kantakse lõpuks üle vastavasse L1 sillakogumisse. See sõltub Optimismi ja Arbitumi sildade ning nende vaidluste lahendamise mehhanismide korrektsest ja jätkuvast toimimisest.
Lõpuks määratakse L2 hoiukasti saadetud märgid L1 sillakogumile, mitte adressaadile. Raha kogumist hankimiseks peavad L1 žetoonide omanikud esmalt sobitama need täiendavate žetoonidega. Seetõttu tugineb mehhanism piisavalt sügavale L1 žetoonide turule, et tagada alati likviidsus.
Kliendi poolt teatatud probleemid
Auditi käigus tuvastas UMA meeskond sõltumatult mitmed probleemid ja käitumisviisid, mida tasub esile tõsta:
Kui Optimistic Oracle'i või Bridge Admini parameetrid muutuvad relee väljakutseperioodi jooksul, kustutab relee vaidlustamine edastuse, ilma et ettepaneku esitaja ega vaidlustaja saaksid kasutada täiendavaid abinõusid. Näiteks kujutage ette, et relee saadetakse tagatismärgi saamiseks
TOKEN_A
, aga relee keskelTOKEN_A
eemaldatakse tagatise valgest nimekirjast. Vaidlus taastub nüüd, kuna te ei saa esitada OO-le ega DVM-ile ühtegi hinnataotlust valgesse nimekirja kantud tagatiste kohta. Kuna me ei soovi kehtivaid vaidlustustaotlusi blokeerida,BridgePool
kustutab ootel oleva relee jaoksTOKEN_A
vaidluse korral. Selle disainiotsuse tagajärjed on järgmised:
1. Lõpliku tasu suurendamine põhjustab: Kõik selle žetooni tasumata releed on "tühistatavad" vaidluse tõttu, kas see on õige või vale. Tühistamine ei too eelist kummalegi poolele, seega eeldab see ausate vaidlejate olemasolu, kes on valmis tapma (haruldase) halva taotluse, mis juhtub lõpliku tasu muutmise ajal. See tähendab ka seda, et kurjategijal on võimalik kulutada gaasi, et releed tühistada ja sundida neid uuesti edastama.
2. Identifikaatori või loa eemaldamine lubatud loendist, mis ei tohiks juhtuda, välja arvatud juhul, kui midagi läheb väga valesti, põhjustaks:
3. Vaieldamatute taotluste pikendatud periood, mille puhul iga taotluse saab tühistada ja vaidlustamiseks puuduvad majanduslikud stiimulid. See näib parem kui vaidluste täielik blokeerimine, kuid see on tõsine halb, sest iga kurvastaja võib gaasi maksmise eest lõputult blokeerida või saata kehvad releed ilma karistuseta (peale gaasitasude).Märkus. See on alternatiiv OO-le, mis "külmutab" mõneks ajaks parameetrid, nagu lõplik tasu või tagatise valge nimekiri, kuid see nõuaks täiendavaid kõnesid OO-le, mis läheks õnneliku tee jaoks kulukaks.
Releed saab kiirendada kaudu
speedUpRelay()
pärast nende elavnemist. Kuigi me ei näe selles mingit riski, avab see võimaluse kiirlaenudeks + kiirendusteks + arveldamiseks pärast elavnemist, andes välklaenuvõtjale "tasuta" vahetu ülekandetasu. Selle ettepanekuga hoiame ära PR.
On
settle
KuiBridgePool
onWETH
bassein ja saaja on leping, mida ei olepayable
(ei saa aktsepteerida ETH-d), siissettle
ebaõnnestub. Plaanime selle parandada ja saata tagasiWETH
, kuid selles osas pole veel silmapaistvat tööd tehtud.
In
relayDeposit
, kontrollime, etBridgePool
'i saldo on suurem kui summa, mis tuleb edastada PLUSS ettepaneku esitaja võlakirjale. See on aegunud tšekk ja liiga konservatiivne, kuna ettepaneku tegija võlakiri eemaldatakse kasutajalt pärast kontrollimist. Me käsitleme seda selles ettepanekus PR.
Ma lihtsalt tabasin vea, kus
chainId
inBridgePool
, sisaldub osanaDeposit
struct ja funktsiooni sisendina kõikidele releega seotud funktsioonidele (strelayDeposit
,speedUpRelay
,settle
) on tüüpuint8
. See on liiga väike tüüp, et käsitleda näiteks Arbitumit, mille ID on 421611. Tegelikult leidsime selle vea ja parandasime selle L2 poolel:BridgeDeposit
on oma seadnudchainId
sisestageuint256
. See PR muudabchainId
onBridgePool
sobitage sisse lülitatud tüüpBridgeDepositBox
: UMA protokoll/protokoll nr 3463
Varem ei lahutanud vaidlustamise funktsioon sissemakse summat
pendingReserves
(see on muutuja, mis jälgib, kui suur osa reservfondist on lukustatud releede tõttu, mis pole veel settinud). Tulemuseks oli see, et iga vaidlus lukustas basseinis oleva relee summa määramata ajaks. LP-d ei saa seda eemaldada ega tulevased releed kasutada. Parandus on siin: UMA protokoll/protokoll nr 3473.
Leidsime vea
BridgeDepositBox
kushasEnoughTimeElapsedToBridge
ei kontrolli, kas auint256
väärtus on võrdne0
algselt: Parandatud PR 3484-s
Vahetuskursi meetod (mis on olekut muutev) kutsutakse sisse ülekantavate žetoonide ja vermitavate LP-märkide vahel sildfondi lepingu meetodil addLiquidity. See arvutus tuleb viia meetodi tippu. See põhjustab väga kummalisi riigiväärtusi. Vaata PR siin parandama.
Vaatemeetod
liquidityUtilizationPostRelay
(mida kasutatakse ainult väljaspool ahelat), teatab vale kasutusnumbri. Nimetaja sees see rida ei tohiks olla lihtsaltliquidReserves
, peaks see olema kasutamata ja kasutatud reservide esitus. Parandatud siin.
Värskendused
Lisaks probleemiparandustele vaatasime üle ka järgmised järkjärgulised muudatused.
- PR3500 eemaldab üleliigse märgi parameetri
BridgePool
üritused. - PR3478 lisab DVM-i lõpliku tasu kohaliku vahemällu salvestatud muutujate loendisse.
- PR3460 arvestab võimaliku negatiivse likviidsuse kasutamise eelisjuhtumiga (lisaks N04 käsitlemisele)
- PR3482 eemaldab üleliigsed failid ja värskendab OVM-i konstandid vastavalt OVM 2.0 muudatustele.
- PR3585 värskendab
BridgeDepositBox
liidest järjepidevuse tagamiseks ja kasutab OpenZeppeliniSafeERC20
raamatukogu.
Paranduste ülevaatamisel tuvastasime veel ühe probleemi. Väärtuse määramisel BridgePool
LP märgid, on olemas vahearvutus, mis võib ootamatult negatiivselt üle voolata, mis keelaks ajutiselt likviidsuse lisamise ja eemaldamise. Arvutus tuleks ümber korraldada, et lisada kasutatud reservid enne jaotamata tasude mahaarvamist.
Kriitiline raskusaste
[C01] Lõksu jäänud ettepaneku esitaja preemia
. LongShortPair
leping saab ettepaneku esitaja preemia mis tahes aadressilt, mis käivitab aegumise, mida kasutatakse Optimistic Oracle'is hinnapakkumiste ergutamiseks. Siiski, LongShortPairCreator
leping ka otsib ja edastab raha juurutaja aadressilt. Neid täiendavaid vahendeid ei edastata Optimistlikule Oracle'ile, vaid jäävad selle asemel lõksu LongShortPair
leping.
Kaaluge duplikaatülekande eemaldamist.
Värskenda: Kinnitatud alates kohustusest 9bab1ff353a417952ba8c96a098773f340d9da17
in PR3523.
Kõrge raskusastmega
[H01] Samaaegsed releed kahandavad varusid
. relayDeposit
funktsioon BridgePool
leping tagab, et lepingul on piisavalt rahalisi vahendeid ülekande teostamiseks. See aga ei arvesta ootel olevad reservid, mis jälgib aktiivsete releede jaoks ette nähtud vahendeid. Seetõttu võib mitu samaaegset releed toetuda samadele vahenditele ja neid kõiki ei pruugita koheselt arveldada. Eelkõige pideva ülekannete voo korral võib vahetu relee tagastamine määramata ajaks viibida.
Kaaluge releede vältimist, mis põhjustaksid ootel olevate reservide ületamise likviidsete reservide mahust.
Värskenda: Kinnitatud alates kohustusest 6290f3facbca8d878605a1d390ed59d4b6b6db02
in PR3501.
[H02] Sillaparameetrite piirid ei ühti
. deposit
funktsioon Euroopa BridgeDepositBox
2. kihi ahelates kasutatavat lepingut kasutatakse rahaliste vahendite ühendamiseks L2 ja L1 vahel. Eelkõige motiveeritakse releereid relee tehingu üksikasjad seotud L1-l BridgePool
. Küll aga kasutab panipaik kaasavad piirid piirata vahetustasusid, samal ajal kui sillabasseini kasutab eksklusiivsed piirid. See tähendab, et mõnda hoiust (25% ülekandetasudega) ei saa edastada ja mõlemal kihil ei ole vahenditele juurdepääs.
Kaaluge mõlema kihi valideerimise sünkroonimist, et tagada kõigi kehtivate hoiuste edastamine.
Värskenda: Fikseeritud kohustus 2345966b3a2ace0159379b3a13256cc1a4c5d52f
of PR3494. See klassifitseeriti algselt kriitiliseks raskusastmeks, kuid seda alandati, kui UMA meeskond märkis, et raha ei jää rangelt lõksu ja need võidakse vabastada, kui DVM-i valijad nõustuvad aktsepteerima mõjutatud hoiuste muudetud relee kirjeldust.
Keskmise raskusastmega
[M01] Tagasihelistamine valele aadressile
. SkinnyOptimisticOracle
kutsub hinnapäringul välja tagasihelistamisfunktsioonid, kui need on olemas, et taotleja saaks reageerida olulistele olekumuutustele. Tagasihelistamine on aga valesti kutsutud hinnapakkujal, mitte hinnapäringul the,en proposePriceFor
funktsioon. See tähendab, et hinnaküsija ei saa hinnapakkumistele vastata.
Õnneks seda funktsiooni praeguses koodibaasis ei kasutata. Sellegipoolest kaaluge priceProposed
tagasihelistaja.
Värskenda: Fikseeritud sidumisel 7bd3faeb6f3706132f77b9ba2dce192d1a151e74
in PR3531.
[M02] Vigane lisafunktsioon
. appendKeyValueBytes32
funktsioon peaks ühendama oma sisendid vormindatud bytes
massiivi. Siiski, currentAncillaryData
is valesti ära visatud.
Alates lisaandmetest mõjutab oraakli lahendamise protsessi, võib vale väärtus kahjustada oraakli tulemusi. Õnneks on ainult üks kõne appendKeyValueBytes32
koodibaasis ja see kasutab tühja currentAncillaryData
puhver, nii et viga seda juhtumit ei mõjuta.
Kaaluge versiooni värskendamist appendKeyValueBytes32
toimima nii, et currentAncillaryData
sisaldub tagastatud baitide massiivi.
Värskenda: Fikseeritud kohustus 5609433c154f47e8ee9c52f9b6d7c787fbe3e455
of PR3532.
[M03] Lisaandmete mittetäielik valideerimine
. LongShortPair
konstruktor kinnitab, et customAncillaryData
on piisavalt väike. Siiski ei võta see arvesse varajase aegumise väli. See tähendab Optimistlikku Oraaklit võib ootamatult tagasi lükata varajase aegumise hinnapäringud, mis selle funktsiooni keelaksid.
Kaaluge valideerimise värskendamist, et arvestada täiendava väljaga.
Värskenda: Kinnitatud alates kohustusest 4a56e66492f40e20254cebb145c2d91304f7cb43
in PR3524.
[M04] Null-ajatempli valesti käsitletud
aasta LongShortPair
lepingu ennetähtaegse aegumise ajatempel on null kasutatakse lipuna näitamaks, et keegi pole varajase aegumise mehhanismi käivitanud. Siiski on võimalik käivitada see mehhanism nulli ajatempliga. Selle stsenaariumi korral käivitatakse Optimistic Oracle, kuid kaitse hilisemate hinnapäringute eest ei ole tõhus. Õnneks üks kord arveldushind valitakse, seda ei alistata, nii et see ei too kaasa ebajärjekindlaid arveldusi. Sellest hoolimata võiks hilisem hinnapäring muuta salvestatud varajase aegumise ajatemplit, isegi kui arveldushinna määramiseks kasutatakse nulli ajatemplit. Võiks ka väljastada eksitavat sündmust.
Kaaluge varajase aegumise vältimist null-ajatempli abil.
Värskenda: Kinnitatud alates kohustusest 11d287c07c93c04f534b2ef3c869966d9f18ac60
in PR3526.
[M05] Võimalik nullside
. requestPrice
funktsioon SkinnyOptimisticOracle
leping kasutab tagatisena lõplikku tasu kui võlakiri pole täpsustatud. Siiski, requestAndProposePriceFor
funktsioon võib kasutada nullsidemeid, mis on sellega vastuolus @notice
ja @param
kommentaarid. Nullvõlakiri nõrgendab stiimulit kehtetute ettepanekute või vaidluste vastu.
Õnneks ainult seda funktsiooni kutsuda koodibaasis määrab ettepaneku esitaja võlakirja. Sellegipoolest kaaluge lõpliku tasu kasutamist, kui võlakiri pole täpsustatud.
Värskenda: Kinnitatud alates kohustusest daaabfc342ba1395a577159b6eb26adb20fcd232
in PR3534.
[M06] Mittevajalikud administraatoriõigused
. BridgePool
leping pärib alates ExpandedERC20
et ta saaks väljastada likviidsuse pakkujatele LP-märke. See pärib OpenZeppelini funktsionaalsuse ERC20
leping ja ka annab administraatori õigusi lepingulisele juurutajale, mis võimaldab neil vermida ja põletada LP-märke. Seda õigust ei nõuta aga ja kui seda kasutatakse, võib see likviidsuse pakkujaid ebaõiglaselt karistada.
Kaaluge muutmist BridgePool
kellelt otse pärida ERC20
asemel ExpandedERC20
.
Värskenda: Fikseeritud kohustus 370e8b21b660543eadbd764fed984a5bdeddce24
in PR3492.
Madal raskusaste
[L01] Aegumisel ei saa arveldada
. settle
funktsioon LongShortPair
leping arvestab arveldustingimusi kui praegune kellaaeg on rangelt enne või pärast aegumise ajatemplit. Kui praegune aeg ühtib aegumise ajatempliga, ennistatakse see aga valesti.
Kaaluge kaasava piirangu kasutamist, et see sobiks postExpiration
muutus.
Värskenda: Fikseeritud kohustus f03cdaa50b16d29e8f42f000bf7cd50a042cf616
in PR3527.
[L02] Nõuda avalduses puudub veateade
Selles on nõutav avaldus BridgePool
leping ilma veateateta.
Kaaluge konkreetsete ja informatiivsete veateadete lisamist kõikidesse nõutavatesse väidetesse.
Värskenda: Kinnitatud alates kohustusest 67e60faa3a44c842c37211d2e903a983ff192e57
in PR3536.
[L03] Dokumendistringid puuduvad
Kogu koodibaasis on juhtumeid, kus Ethereumi looduslik spetsifikatsioon puudub või on puudulik. Näited:
Kaaluge kõigi funktsioonide (ja nende parameetrite) põhjalikku dokumenteerimist, mis on osa lepingute avalikust API-st.
Värskenda: Esiletõstetud kommentaarid fikseeriti kinnitamisel e943e85a7dae60acd17a6d6aa027fbb1017c95ee
of PR3533. Me ei kinnitanud NatSpeci täielikkust ülejäänud koodibaasi osas.
Märkused ja lisateave
[N01] Kõne tagastusväärtust ei ole kontrollitud
aasta deposit
funktsioon L2 BridgeDepositBox
leping on madala taseme kõne l2Token
kui l1Token
is l1Weth
. See madala taseme kõne on aadressile deposit()
funktsioon, mis kuulub WETH liides. Kui see l2Token
käitub täpselt nagu WETH, see ei tohiks kunagi ebaõnnestuda. Kuid juhul, l2Token
käitub teisiti ja ebaõnnestub, tagasiminekut ei toimu, kuna selle madala taseme kõne õnnestumise lippu ei kontrollita kunagi.
Kaaluge kõigi madala taseme kõnede tagastusväärtuste kontrollimist ja neile sobivat reageerimist.
[N02] Indekseeritud parameetrite puudumine sündmustes
Paljudel selles koodibaasis määratletud sündmustel on parameetrid, mida tuleks indekseerida:
Arvestama sündmuste parameetrite indekseerimine et vältida ahelaväliste teenuste konkreetsete sündmuste otsimise ja filtreerimise takistamist.
Värskenda: Osaliselt fikseeritud sidumisel d156b40b2ddb109806336c4d169dbdea91ed1c3e
of PR3535. chainId
parameeter WhitelistToken
ei uuendatud.
[N03] Valamise kaudne ebaühtlus
. LongShortPair
leping üldiselt käsitleb ajatempleid kui uint64
väärtused, mis on kaudselt üle kantud uint256
väärtustab millal läks Optimistlikule Oraaklile. Siiski on requestTimestamp
parameeter the,en _requestOraclePrice
funktsioon on enneaegselt valatud a uint256
. Sellel ei ole funktsionaalseid tagajärgi.
Sellegipoolest kaaluge järjepidevuse huvides a uint64
selle parameetri jaoks ja võimaldades selle kaudselt üle kanda a-sse uint256
kui see edastati Optimistlikule Oraaklile.
Värskenda: Fikseeritud kohustus 1c3c5c000ef450f5e2da056e41caff468c3fcdcb
of PR3528. Ajatempel on nüüd selgesõnaliselt kantud.
[N04] Vale tüüp
. sendMessage
funktsioon iOptimism_CrossDomainMessenger
liides kasutab a uint256
gaasi piirmäär samas kui optimismi oma OVM_CrossDomainEnabled
kasutab a uint32
gaasi piirmäär.
Järjepidevuse ja prognoositavuse huvides kaaluge versiooni värskendamist iOptimisim_CrossDomainMessenger
sendMessage
funktsiooni kasutamiseks a uint32
gaasi piirang.
Värskenda: Kinnitatud alates kohustusest 381951aad988bbba6b2ef1b136ed5c48df50aa88
in PR3460.
[N05] Valideerimise puudumine
Kõik funktsioonid sees BridgeAdmin
see kõne _relayMessage
eeldame, et tehingu väärtus vastab l1CallValue
parameeter, kuid seda ei jõustata.
Kaaluge õige tagamist msg.value
on määratud.
Värskenda: Kinnitatud alates kohustusest f19b8d04c2343051ff2a8145abd41c39bd025063
in PR3537.
[N06] Loetavus
. _getDepositHash
funktsioon Euroopa BridgePool
leping rullib lahti depositData
struktuur interstice the l1Token
argumendina koosseisus keccak256
koos abi
kodeering. See muudab toimingu tarbetult paljusõnaliseks ja võib põhjustada vigu, kui seda muudel kihtidel uuesti rakendada.
Kaaluge argumentide lihtsustamist, et need oleksid lihtsalt järjestatud paar depositData
ja l1Token
.
Värskenda: Kinnitatud alates kohustusest 31754be4a818109fa12131f854c3f70d6c72dba7
in PR3538.
[N07] Reentrant funktsioon
. requestAndProposePriceFor
funktsioon Euroopa SkinnyOptimisticOracle
leping helistab ebausaldusväärsele isikule msg.sender
kuid teda ei valva a nonReentrant
modifikaator. Kuigi antud juhul ei tundu see olevat turvaprobleem, võib see kaasa tuua ootamatu käitumise.
Kaaluge lisamist nonReentrant
modifikaator kõigile funktsioonidele, mis kutsuvad esile ebausaldusväärseid lepinguid.
Värskenda: Fikseeritud kohustus b744d24e7579b7afa2c778f4dd680f26117b3990
of PR3539.
[N08] seqNum
pole sisse logitud
. relayMessage
funktsioon Euroopa Arbitrum_Messenger
leping ei avalda pärast tundliku toimingu sooritamist asjakohast sündmust. The relayMessage
funktsioonikutsed alamprogrammina sentTxToL2NoAliasing
mis ise tagastab uint256
väärtus seqNum
, kuid seda tagastusväärtust ei ole sisse logitud relayMessage
funktsiooni.
Kaaluge sündmuste väljastamist pärast tundlike muudatuste toimumist, et hõlbustada jälgimist ja teavitada ahelaväliseid kliente lepingu tegevusest.
Värskenda: Kinnitatud alates kohustusest 30343f33532a6c255dc4cc18c3b497d9b2767a7c
in PR3541.
[N09] Trükivead
Koodibaas sisaldab järgmisi kirjavigu:
Koodi loetavuse parandamiseks kaaluge nende kirjavigade parandamist.
Värskenda: Kinnitatud alates kohustusest 2dccbe1c2c82fe2a21c179ac06c2d4f0d911a2ca
in PR3540.
[N10] Dokumentideta ERC20 tüübikinnituse nõue
. requestEarlyExpiration
ja expire
funktsioonid Euroopa LongShortPair
Iga lepingu puhul eeldatakse, et helistaja on lepingule lisatasu andnud tõmba ettepaneku esitaja tasu.
Prognoositavuse huvides kaaluge selle nõude dokumenteerimist funktsiooni kommentaarides.
Värskenda: Fikseeritud kohustus da3754f50284480df57b90b80002da06a1ce0d02
in PR3529.
[N11] Kasutamata modifikaator
aasta BridgePool
leping, onlyFromOptimisticOracle
muutus on määratletud, kuid seda ei kasutata kunagi koodibaasis ja seetõttu tuleks see eemaldada.
Värskenda: Fikseeritud kohustus 7abece6377637e8c4cd3bd07ab9adcfa051d4e94
in PR3542.
Järeldused
Leiti 2 kriitilist ja 1 väga tõsine probleem. Parimate tavade järgimiseks ja võimaliku rünnakupinna vähendamiseks tehti mõned muudatused.
- &
- 7
- konto
- tegevus
- aktiivne
- Ad
- lisamine
- Täiendavad lisad
- aadress
- admin
- ADEelis
- Materjal: BPA ja flataatide vaba plastik
- Lubades
- Teine
- API
- argumendid
- audit
- kättesaadavus
- on
- BEST
- parimaid tavasid
- blockchain
- Kast
- BRIDGE
- Bug
- vead
- helistama
- tühistatud
- juhtudel
- püütud
- Põhjus
- väljakutse
- muutma
- kontroll
- kliendid
- kood
- kommentaarid
- konfiguratsioon
- sisaldab
- leping
- lepingud
- võiks
- kriitiline
- Praegune
- andmed
- Detsentraliseeritud
- viivitus
- Disain
- määrates kindlaks
- DID
- Vaidlus
- Ei tee
- ajal
- Varajane
- Majanduslik
- serv
- Tõhus
- ERC20
- ETH
- ethereum
- Ethereumi plokiahel
- ETHEREUM MAINNET
- sündmus
- sündmused
- näide
- vahetamine
- täitmine
- oodatav
- kogemus
- tunnusjoon
- Tasud
- finants-
- esimene
- Määrama
- välklamp
- kiirlaenud
- järgima
- avastatud
- funktsioon
- funktsioonid
- fond
- raha
- tulevik
- GAS
- gaasitasud
- andmine
- valitsemistava
- õnnelik
- võttes
- siin
- Suur
- Esiletõstetud
- omanikud
- Kuidas
- HTTPS
- kohe
- stimuleerida
- lisatud
- Kaasa arvatud
- Suurendama
- info
- huvi
- sisse
- küsimustes
- IT
- teatud
- Kiht 2
- viima
- Raamatukogu
- Vedelik
- Likviidsus
- nimekiri
- Laenud
- kohapeal
- lukus
- LP
- LP-d
- Turg
- Vastama
- kõige
- avatud
- Optimism
- oraakel
- Muu
- inimesele
- ujula
- Basseinid
- võim
- pr
- ennetada
- hind
- protsess
- ettepanek
- anda
- annab
- avalik
- põhjustel
- vähendama
- vabastatud
- Aruanded
- REST
- Tulemused
- Tulu
- läbi
- Oht
- turvalisus
- Teenused
- komplekt
- arveldamine
- Lühike
- märkimisväärne
- sarnane
- samaaegselt
- väike
- So
- kindlus
- Keegi
- midagi
- kiirus
- kulutama
- riik
- väljavõte
- ladustamine
- edu
- Toetatud
- Pind
- süsteem
- test
- Läbi
- läbi kogu
- aeg
- sümboolne
- märgid
- ülemine
- Jälgimine
- tehing
- Tehingud
- Usalda
- Värskendused
- Uudised
- UPS
- Kasutajad
- väärtus
- versioon
- vaade
- WHO
- jooksul
- ilma
- Töö
- väärt
- oleks
- null