[solidity] require? constructor? modifier?

HyeongA·2023년 5월 15일
0

Blockchain_dev

목록 보기
6/20
post-thumbnail

require

  • require 함수는 실행 전에 입력과 조건을 확인하는 데 사용된다.
  • require(조건문, "만족하지 않을 시 메세지")
  • 조건이 거짓이면 즉시 실행을 중지한다.
  • require를 사용하여 조건 불충족시 불필요한 가스비 사용을 막을 수 있다.
//_n이 10보다 작을 경우 실행
	function require0(uint _n)public pure returns(uint){
        require(_n<10, "input should be lower than 10"); 
        return _n*3;
    }
//b가 true일 경우 실행
    function require1() public pure returns(uint){
        uint _a = 1;
        bool b; 			//기본값 false
        require(b,"Error");  // 통과못함
        return _a;
    }
//require위치에 따른 실행 ; return 실행됨, a = 1
    function require2() public pure returns(uint) {
        uint _a = 1;
        bool b;
        return _a;
        require(b, "Error"); // Unrecheable code ;작동되지 않음
    }
//return이 없고, require이 제일 마지막에 있을 경우
    function require3() public {
        bool c;
        a=5;
        require(c,"Error"); // return이 작동하지 않았기 떄문에 a를 5로 바꾼 것도 전부 다 다시 revert(원래 상태로 복구)시킴
    }

연산자 혼용

||,&& 혼용 사용 시 : || 연산자 기준으로 구분됨

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시 명시해 주어야 한다.
// example1 : 초기값 설정
	uint a;
    uint b; 
	constructor(){
        a = 7;
        b = 4;
    }
// example2 : input값 받아서 설정
    struct Student{
        string name;
        uint number;
    }
    Student s;
    constructor(string memory _name, uint _number){
        s = Student(_name, _number);
    }
// example3 
    constructor()payable {
        payable(this).transfer(msg.value); // 배포할 때 msg.value 만큼 contract에게 바로 입금
        owner = payable(msg.sender);  // 배포하는 지갑주소가 바로 owner로 설정
    }

modifier

  • 한 번에 여러 타 함수의 동작을 변경하거나 제한하는 데 사용한다.
  • 중복되는 조건을 여러 함수에 적용하여야 하는 경우 많이 사용되며, modifier사용 시 코드를 효율적으로 작성할 수 있다.
  • Function modifiers are used to change or restrict the behavior of a function in a smart contract.
// modifier함수
  modifier lessThanFive(){
          require(a<5, "should be less than five"); //조건
          _; // 함수가 실행되는 시점
      }
// modifier 사용하는 함수
  function doubleA() public lessThanFive{
          a=a*2;
      }
//example
  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";
      }
profile
Solidity | React | Python

0개의 댓글