Solidity modifier

Solidity modifier

Solidity์—๋Š” modifier๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

modifier๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

๊ฐ„๋‹จํ•œ modifier์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

modifier modifierName {
    // ...modifier code...

    _;  // this represents the function body that the modifier is applied to
}

_; ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜์˜ ๋‚˜๋จธ์ง€ body ๋ถ€๋ถ„์„ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋ช…๋ น์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

function functionName() modifierName public {
    // ...function code...
}

๋ณดํ†ต modifier๋ฅผ ํ†ตํ•ด์„œ ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Access control : onlyOwner์™€ ๊ฐ™์ด Role์— ๋”ฐ๋ผ ํ•จ์ˆ˜ Access๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•จ

  2. Precondition : ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์œ„ํ•œ ์ „์ œ์กฐ๊ฑด, (e.g. decorator๋ฅผ ์ด์šฉํ•œ ์ œ์–ด์™€ ๋น„์Šทํ•˜๋‹ค)

๋ณดํ†ต modifier ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ error ๋ฐ assestion์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด revert(), require() ๋ฐ assert()์™€ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.

revert

revert() ํ•จ์ˆ˜๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ์ƒํƒœ๋ฅผ ํ˜„์žฌ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

์ด๋Š” ํ˜„์žฌ ๊ธฐ๋Šฅ์—์„œ ๋ธ”๋ก์ฒด์ธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ทจ์†Œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

revert()๋Š” ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์  ๋ฌธ์ž์—ด ๋ฉ”์‹œ์ง€๋„ ํ—ˆ์šฉํ•œ๋‹ค.

required

require() ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ฐธ์ด์–ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ž…๋ ฅ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋˜๋Š” ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

require() ๋‚ด๋ถ€ ์กฐ๊ฑด์ด false์ด๋ฉด revert()์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํŠธ๋žœ์žญ์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

require()๋Š” ๋˜ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์„ ํƒ์  ๋ฌธ์ž์—ด ๋ฉ”์‹œ์ง€๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

assert

assert() ํ•จ์ˆ˜๋Š” require()์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ์˜ค๋ฅ˜ ๋˜๋Š” ์ ˆ๋Œ€ ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์กฐ๊ฑด์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

assert() ๋‚ด๋ถ€์˜ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด๋ฉด ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

assert()๋Š” ๊ณ ์žฅ์ด ๋‚ฌ์„ ๋•Œ ๋‚จ์€ ๊ฐ€์Šค๋ฅผ ๋ชจ๋‘ ์†Œ๋น„ํ•˜๋ฏ€๋กœ, revert()๋ณด๋‹ค ์‚ฌ์šฉ ๋น„์šฉ์ด ๋” ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค.

๋‚˜๋ผ๋ฉด ์‹ค์ œ ํ”„๋กœ๋•์…˜์—์„œ๋Š” require์™€ revert๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , assert๋Š” ํ…Œ์ŠคํŠธ๋„ท ํ˜น์€ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

Last updated