BlockChain/솔리디티
FunctionModifier
정신이 많이없는 개발자
2022. 3. 13. 23:49
728x90
반응형
modifier함수를 사용하는 이유는 무엇일까?
일단 자주 사용하는 조건문에대한 반복을 막을 수 있다.
A,B,C 함수에 x=10이면 함수사용을 거부한다라는 조건을 각각에 넣기 보다는 x=10이면 거부해주는 함수 하나를 만들어서 재사용하는 것이 훨씬 좋다고 생각이 든다.
밑에 코드를 참조하면 더 쉽게 이해가 가겠지만,
1. Basic은 modifier을 만들고 사용되어야하는 함수부분에 추가해주는것이다. 이때 인자값이 필요가없는 경우다.
2. input은 위 1번과 같은경우지만 modifier에 인자가들어가야 하는 부분이다.
function incBy(uint _x) external whenNotPause cap(_x)
modifier을 연달아 사용가능하며 필요하다면 인자값도 전달해줄 수 있다.
3. sandwich - 개인적으로 모르고 있었던 기능;
code1 _; code2. -> modifer code1 실행 -> _;함수실행 -> modifer code2 실행
아래 코드 참조
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract FunctionModifier {
//Basic, input, sandWich
bool public paused;
uint public count;
modifier whenNotPause(){
require(!paused, "pasued");
_;
}
function setPasue(bool _paused) external {
paused = _paused;
}
function inc() external whenNotPause{
count += 1;
}
function dec() external whenNotPause{
count -= 1;
}
modifier cap(uint _x){
require(_x <100, "x >= 100");
_;
}
function incBy(uint _x) external whenNotPause cap(_x){
require(_x<100, "x>= 100");
count += _x;
}
modifier sandwich() {
count += 10;
_;
count *= 2;
}
function foo() external sandwich {
count += 1;
}
//실행해보면 값이 22가 됨.
//그말은 즉시 foo함수 기능이 처리되고 다시 modifier 밑에부분이 처리된다는 의미.
}
반응형