Modifioijat ja checks-effects-interactions-malli
Käyttäkää funktioiden modifioijia ennakkoehtojen selkeään valvontaan ja soveltakaa checks-effects-interactions-mallia turvallisempien sopimusten kirjoittamiseen.
Modifioijat ja checks-effects-interactions-malli on ilmainen Lohkoketjun älysopimukset Soliditylla-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Lohkoketjun älysopimukset Soliditylla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.
Mitä modifierit ovat?
Muokkaaja on uudelleenkäytettävää koodia, joka suoritetaan ennen funktion runkoa tai sen ympärillä. Se sopii erinomaisesti esiehtojen, kuten käyttöoikeuksien tarkistamisen, valvontaan ilman samojen tarkistusten toistamista kaikkialla.
Muokkaajan määrittäminen
Erityinen _;-paikkamerkki osoittaa, missä funktion runko suoritetaan. Sitä edeltävä koodi suoritetaan ensin, ja sen jälkeinen koodi suoritetaan funktion palauttaessa.
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}Muokkaajan käyttäminen
Liitä muokkaaja funktion määrittelyyn. Tarkistus suoritetaan automaattisesti jokaisella kutsulla, jolloin funktion runko voi keskittyä logiikkaan.
function withdraw() public onlyOwner {
payable(owner).transfer(address(this).balance);
}Parametreja käyttävät muokkaajat
Muokkaajat voivat vastaanottaa argumentteja, mikä tekee niistä joustavia dynaamisten ehtojen, kuten vähimmäisarvojen, tarkistamiseen.
modifier costs(uint price) {
require(msg.value >= price, "Not enough");
_;
}Useiden muokkaajien ketjuttaminen
Voit käyttää yhdessä funktiossa useita muokkaajia; ne suoritetaan vasemmalta oikealle. Pidä ne pieninä ja yhteen tarkoitukseen keskittyvinä, jotta yhdistelmät pysyvät ennakoitavina.
function buy() public payable onlyWhenOpen costs(1 ether) {
// ...
}Uudelleenkutsun vaara
Kun sopimus kutsuu ulkoista osoitetta, tämä osoite voi kutsua takaisin sopimukseesi ennen ensimmäisen kutsun valmistumista. Tämä uudelleenkutsu voi tyhjentää varat, jos tila päivitetään liian myöhään.
Tarkistukset–vaikutukset–vuorovaikutukset
tarkistukset–vaikutukset–vuorovaikutukset-malli jakaa funktion kolmeen vaiheeseen: syötteiden vahvistaminen (tarkistukset), tilan päivittäminen (vaikutukset) ja ulkoisten sopimusten kutsuminen (vuorovaikutukset). Ulkoiset kutsut tehdään viimeisenä.
Haavoittuva kotiutus
Tämä lähettää ETH:ta ennen saldon nollaamista, mikä jättää mahdollisuuden uudelleenkutsulle.
// VULNERABLE
function withdraw() public {
uint amt = balances[msg.sender];
payable(msg.sender).call{value: amt}("");
balances[msg.sender] = 0; // too late!
}Turvallinen versio
Päivitä tila ennen ulkoista kutsua, jotta uudelleenkutsuva kutsu näkee nollasaldon.
// SAFE
function withdraw() public {
uint amt = balances[msg.sender];
balances[msg.sender] = 0; // effects first
payable(msg.sender).call{value: amt}(""); // interaction last
}Uudelleenkutsun estot
Lisää turvallisuuden parantamiseksi uudelleenkutsun eston muokkaaja, joka asettaa suojalipun suorituksen ajaksi ja hylkää sisäkkäiset kutsut. OpenZeppelinin kaltaiset kirjastot tarjoavat nonReentrant-muokkaajan.
Mallien yhdistäminen
Käytä muokkaajia tarkistukset-vaiheessa (käyttöoikeudet ja validointi), rakenna funktion runko vaikutukset–vuorovaikutukset-järjestykseen ja lisää varoja siirtäviin funktioihin esto. Yhdessä nämä muodostavat vahvan perustason suojauksen.
Pikatarkistus
Testaa tietosi turvallisista sopimusmalleista.
Kertaus
Opit puolustavia Solidity-malleja:
- Muokkaajat keskittävät esiehdot, kuten käyttöoikeuksien tarkistamisen
- Ne voivat vastaanottaa parametreja, ja niitä voidaan ketjuttaa
- Tarkistukset–vaikutukset–vuorovaikutukset järjestää funktiot uudelleenkutsujen estämiseksi
- Lisää uudelleenkutsun esto varoja siirtäviin funktioihin
Nämä mallit ovat turvallisten sopimusten kirjoittamisen perusta.
Opi Lohkoketjun älysopimukset Soliditylla tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Modifioijat ja checks-effects-interactions-malli” ilmainen?
Kyllä – oppitunnin ”Modifioijat ja checks-effects-interactions-malli” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Lohkoketjun älysopimukset Soliditylla-kurssin, päivitä CoddyKit PROhon. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Modifioijat ja checks-effects-interactions-malli”?
Käyttäkää funktioiden modifioijia ennakkoehtojen selkeään valvontaan ja soveltakaa checks-effects-interactions-mallia turvallisempien sopimusten kirjoittamiseen. Harjoittelet Lohkoketjun älysopimukset Soliditylla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lohkoketjun älysopimukset Soliditylla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lohkoketjun älysopimukset Soliditylla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Modifioijat ja checks-effects-interactions-malli”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lohkoketjun älysopimukset Soliditylla-oppitunnilla?
Kyllä. Jokainen Lohkoketjun älysopimukset Soliditylla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Periytyminen ja rajapinnat
- Kirjastot ja abstraktit sopimukset
- Virheenkäsittely Revertillä ja Requirella
- Modifioijat ja checks-effects-interactions-malli