[TIL] 2023-05-17

Melon Coder·2023년 5월 17일
2

TIL

목록 보기
36/50
post-thumbnail

Today I Learned


[Solidity]


require안에 and / or

contract A {
    uint public a;
    uint public b;
    uint public c;

    function setABCD(uint _a, uint _b, uint _c) public {
        (a, b, c) = (_a, _b, _c);
    }

    function ABC() public view returns(string memory) {
        require(a == 0 && b != 1 || c == 0);
        return "pass";
    }

    function ABC2() public view returns(string memory) {
        require(a == 0 || b != 1 && c == 0);
        return "pass";
    }
}

&&(and), ||(or) 연산자의 위치에 따라 헷갈릴 수가 있다.
쉽게 생각하면 and끼리 먼저 묶이고 or로 나뉜다고 생각하면 될 것 같다.
그리고 소괄호()로도 묶어줄수가 있는데 괄호를 쓰면 먼저 묶인다고 생각하면 될듯.


receive함수 유무 차이

contract B {
    function deposit() public payable {}

    uint eth = 1 ether

    function transferTo(address payable _to, uint amount) public {
        _to.transfer(amount * eth);
    }
}

contract C1 {
    function deposit() public payable {}
    receive() external payable{}
}

contract C2 {
    function deposit() public payable {}
}
  • B: deposit / transferTo
  • C1: deposit / receive
  • C2: deposit

result

B(transferTo) -> C1 (O)
B(transferTo) -> C2 (X) receive없기 때문에
deposit은 다 가능. payable 있어서

0개의 댓글