[TIL] 2023-05-12 DAY39
GIT 주소 : https://github.com/dowoo303/SOLIDITY
오늘 배운것들
- Payable
- 어제 봤던 TEST1 풀이
1) F반 뽑아내기
2) S반 상위 4명 뽑기- TEST2
각종 팁
회고
- 오전 9시~12시 수업 못 들음. -> 비트코인 백서 정독하고 Payable 새로 배웠다고 함
- TEST2 한문제도 못 풀었다 .. -> mapping, 케칵256 자습이 필요하다
돈을 받을 수 있게 만들어주는 함수
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);
}*/
}


// 배열 정렬법
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;
}
}
1문제도 못풀었다 ..
mapping이 도대체 뭔지 제대로 알 필요가 있다.
keccak256(abi.encodePacked()) 활용법도 좀 찾아봐야 할듯 .. !