[TIL] Part2 - DAY39 Solidity - Payable, TEST1, TEST2

박동우·2023년 5월 12일

블록체인 스쿨 3기

목록 보기
37/72

[TIL] 2023-05-12 DAY39


Solidity

GIT 주소 : https://github.com/dowoo303/SOLIDITY


오늘 배운것들

  1. Payable
  2. 어제 봤던 TEST1 풀이
    1) F반 뽑아내기
    2) S반 상위 4명 뽑기
  3. TEST2

각종 팁

회고

  1. 오전 9시~12시 수업 못 들음. -> 비트코인 백서 정독하고 Payable 새로 배웠다고 함
  2. TEST2 한문제도 못 풀었다 .. -> mapping, 케칵256 자습이 필요하다



💻 Solidity 코딩

✅ Payable

돈을 받을 수 있게 만들어주는 함수

🟥 코드

contract morning {
    address a;              // 2번 지갑(payable 아님 -> 그럼에도 transfer을 하면 돈을 받을 수 있다 -> 그것이 가능한 이유는 transferTo의 인풋값에 payable 있기 떄문
    address payable owner;  // 1번 지갑(payable)

    function deposit() public payable returns(uint){    // 특정 스마트 컨트랙트가 돈을 받을 수 있게 해줌. 내가 함수를 실행시켜서 돈을 보냄
        return msg.value;
    } 


    receive() external payable{}    //  받는 사람이 컨트랙트면 실행되는 함수(돈을 받는 함수) - 함수의 이름이 붙어서옴(To앞에) -> 만약 없는 함수 호출이면 fallback으로

    fallback() external payable{}   // 오류가 발생했을 때 부르는 함수(예외처리)

    function setOwner() public {
        owner = payable(msg.sender);        // msg.sender: 거래를 일으키는 사람
    }

    function getOwner() public view returns(address payable) {
        return owner;
    }

    function setA() public {
        a = payable(msg.sender);
    }

    function getA() public view returns(address) {
        return a;
    }

    function transferTo(address payable _to, uint _amount) public {
        _to.transfer(_amount); // 지갑주소.transfer(규모)
    }

    function transferToOwner(uint _amount) public {
        owner.transfer(_amount);
    }

    /*function transferToA(uint _amount) public {
        a.transfer(_amount);
    }*/
}

✅ TEST1

Sorting

  • sorting

  • sorting2(위와 비교하는 순서가 달라짐)

🟥 코드

// 배열 정렬법
contract Sorting {
    /*
    실습가이드
    1. push() 사용하여 2,5,7,4,3,6 넣어보기
    2. get() 사용하여 결과 확인 -> 2,5,7,4,3,6
    3. sorting() 사용 후, get()으로 결과 확인 -> 7,6,5,4,3,2 
    */

    uint[] numbers;

    function push(uint _n) public {
        numbers.push(_n);
    }

    function sorting() 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]);    // 한번에 두 자리 이상 배열 바꿔주는 방법
                }
            }
        }
    }

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

    function get() public view returns(uint[] memory) {
        return numbers;
    }
}

✅ TEST2

후기

1문제도 못풀었다 ..
mapping이 도대체 뭔지 제대로 알 필요가 있다.
keccak256(abi.encodePacked()) 활용법도 좀 찾아봐야 할듯 .. !

profile
HELLO!

0개의 댓글