require
- require 함수는 실행 전에 입력과 조건을 확인하는 데 사용된다.
require(조건문, "만족하지 않을 시 메세지")
- 조건이 거짓이면 즉시 실행을 중지한다.
- require를 사용하여 조건 불충족시 불필요한 가스비 사용을 막을 수 있다.
function require0(uint _n)public pure returns(uint){
require(_n<10, "input should be lower than 10");
return _n*3;
}
function require1() public pure returns(uint){
uint _a = 1;
bool b;
require(b,"Error");
return _a;
}
function require2() public pure returns(uint) {
uint _a = 1;
bool b;
return _a;
require(b, "Error");
}
function require3() public {
bool c;
a=5;
require(c,"Error");
}
연산자 혼용
||,&& 혼용 사용 시 : || 연산자 기준으로 구분됨
require(a ==0 && b != 1 || c ==0) //a,b만족 or c만족
require(a ==0 || b != 1 && c ==0) //a만족 or b,c만족
require(a ==0 || b != 1 && c ==0 || d==0) // a만족 or b,c만족 or d만족
constructor
- 변수 생성시 초기값을 정하여 생성하는 방법
- input 값이 필요한 경우 deploy시 명시해 주어야 한다.
uint a;
uint b;
constructor(){
a = 7;
b = 4;
}
struct Student{
string name;
uint number;
}
Student s;
constructor(string memory _name, uint _number){
s = Student(_name, _number);
}
constructor()payable {
payable(this).transfer(msg.value);
owner = payable(msg.sender);
}
modifier
- 한 번에 여러 타 함수의 동작을 변경하거나 제한하는 데 사용한다.
- 중복되는 조건을 여러 함수에 적용하여야 하는 경우 많이 사용되며, modifier사용 시 코드를 효율적으로 작성할 수 있다.
- Function modifiers are used to change or restrict the behavior of a function in a smart contract.
modifier lessThanFive(){
require(a<5, "should be less than five");
_;
}
function doubleA() public lessThanFive{
a=a*2;
}
modifier overTwenty(uint _age, string memory _criminal) {
require(_age >20, "Too young");
require(keccak256(abi.encodePacked(_criminal)) != keccak256(abi.encodePacked("Bob")), "Bob is criminal. She can't buy it");
_;
}
function buyCigar(uint _a, string memory _name) public pure overTwenty(_a, _name) returns(string memory) {
return "Passed";
}