[TIL] 2023-05-12

Melon Coder·2023년 5월 14일
1

TIL

목록 보기
33/50
post-thumbnail

Today I Learned


[Solidity]

오늘은 오전에 비트코인 백서에 대한 내용을 읽었고, 오후에는 회원가입에 대한 기능을 구현하는 퀴즈를 보았다.


payable

payable 키워드는 해당 함수나 주소가 이더나 다른 토큰을 받을 수 있음을 나타내는데 사용된다.

    address payable owner; // 돈을 받을 수 있음.
    address a; // 돈을 받는 것이 불가능.

    function deposit() public payable returns(uint) {
        return msg.value; // 함수 호출한 주소 -> 컨트랙트 주소
    }

receive vs fallback

receive function

receive함수는 이더를 받을 때 실행되는 함수로, 받는 주소가 컨트랙트 주소일 때 실행된다.

receive() external payable {}
  • externalpayable 키워드가 필요하다.
  • 각 컨트랙트는 하나의 receive함수를 선언할 수 있다.
  • 인자를 가질 수 없다.

fallback function

fallback함수는 무기명 함수 즉, 이름이 없는 함수로 불리며 컨트랙트에서 하나의 default함수와 같다.
fallback함수는 직접 호출되지 않고, 호출된 함수가 정의되지 않은 함수일 때 실행된다.
또한 이더를 보낼 때 자동으로 실행된다.

fallback() external payable {}

sorting

ascending

    function sorting() public { // ascending sorting
        for (uint i=0; i<numbers.length-1; i++) {
            for (uint j=i+1; j<numbers.length; j++) {
                if (numbers[i] < numbers[j]) {
                    (numbers[i], numbers[j]) = (numbers[j], numbers[i]);
                }
            }
        }
    }

이 코드는 그려가보며 로직을 생각해보았는데 다음과 같이 생각하고 코드를 이해하였다.

즉, 두 요소끼리의 비교를 통해 정렬이 이뤄지는데 이를 i, j 그리고 i는 0부터 시작하여 배열의 길이-1까지 증가, 그리고 j는 i+1부터 배열의 길이까지 증가하여 이중포문으로 구성하였고 두 요소중에 j가 i보다 더 크면 두 요소의 위치를 변경시켜주는 로직이었다.
이 정렬은 내림차순(큰 값부터)정렬이었고 오름차순정렬은 반대로 하면 된다.

descending

    function sorting2() public {
        for (uint i=0; i<numbers.length-1; i++) {
            for (uint j=i+1; j<numbers.length; j++) {
                if (numbers[i] > numbers[j]) {
                    (numbers[i], numbers[j]) = (numbers[j], numbers[i]);
                }
            }
        }
    }

1개의 댓글

comment-user-thumbnail
2023년 5월 18일

receive, fallback 헷갈렸는데 잘 읽고 갑니다!

답글 달기