Solidity (19) 썸네일형 리스트형 delegatecall 이란? 이번시간에는 delegatecall에 대해서 배워봅시다. delegate란 "위임하다" 라는 뜻을 가지고있습니다. 여기서는 함수를 위임받다 라는 정도만 이해하시고가면 될 것 같습니다. delegatecall 특징 1. msg.sender가 스마트컨트랙트 사용자를 가르킨다. 2. 외부 컨트랙트의 함수를 마치 자기 것 처럼 사용한다. call 함수란? 이번시간에는 call 함수에 대해서 알아봅시다. call 함수의 특징 1. 송금할 때 2. 외부함수를 부를 때 1번같은경우는 지난 글에서 많이 다뤘기 때문에 이번시간에는 2번에 대해서만 알아봅시다. // SPDX-License-Identifier: MIT pragma solidity 0.8.20; contract add { function addNumber(uint256 _num1, uint256 _num2) public pure returns(uint256) { return _num1 + _num2; } } contract callTest { event callEvent(bool _success, bytes _output); function callFunction(address _contractAdd,.. Fallback 과 receive함수란? 이번시간에는 Fallback 함수와 receive 함수에 대해서 알아보겠습니다. fallback이란 대비책이라는 영단어를 의미하고 있습니다. 먼저 fallback과 receive함수의 특징에 대해서 알아봅시다. 1. Fallback 1. 이름이 없는 함수다. 2. external 키워드가 붙어져 있어 외부에서만 실행이 가능하다. 3. 외부에서 함수를 실행할 때, 이더를 보낼 때 실행. 4. 외부에서 보내고 싶은 해당 컨트랙트의 없는 함수를 실행할 때 실행. 2. receive 1. 이름이 없는 함수다. 2. external 키워드가 붙어져 있어 외부에서만 실행이 가능하다. 3. 순수하게 이더를 받을 때만 실행 글로만 보기에는 너무 어려우니 예제코드를 보면서 쉽게 이해해 보도록 합시다. fallback (.. balance 와 msg.sender란? 오늘은 balance와 msg.sender에 대해서 알아봅시다. 1. balance balance는 내가 이더를 총 얼마 가지고 있냐 를 의미합니다. 2. msg.sender msg.sender는 스마트 컨트랙트 내에 함수를 호출한 사람의 계좌를 의미합니다 msg.sender의 말이 너무 어렵죠? 코드를 통해 한번 쉽게 이해를 해봅시다. contract lecture { event SendETH(address _msgSender, uint256 _currentValue); function sendEhter(address payable _to) public payable { require(msg.sender.balance >= msg.value, "Your Ether is not enough"); _to... 이더를 보내는 함수(send,transfer) feat. (payable,msg.value) 오늘은 다른 사람 계좌에 이더를 보내는 함수에 대해서 알아보겠습니다. 1. send contract lecture { event howMuch(uint256 _value); function sendNow(address payable _to) public payable { bool sent = _to.send(msg.value); require(sent,"Failed to send Either"); emit howMuch(msg.value); } } 여기 sendNow라는 이더를 보내는 함수가 있습니다. 저랑 같이 천천히 한번 봅시다 . 파라미터에 payable이라는 키워드가 보이시죠? 이 payable은 쉽게말해 이더를 보낼 수 있는 키워드입니다. 즉 다른 계좌에 이더를 보내고싶으면 payable이라는 .. Modifier란? 이번 시간에는 Modifier에 대해서 아주아주아주 쉽게 설명을 해드릴겁니다. Modifier에 의미는 "수정하다" 라는 의미를 갖고 있습니다. 바로 코드를 통해 살펴봅시다. contract lecture { uint256 public num; modifier changeNum_ { num = 23; _; } function changeNum() public changeNum_ { num = 24; } } 여기 changeNum이라는 함수가 있습니다 근데 무언가 특이한 걸 확인할 수 있습니다. changNum 오른쪽에 changeNum_ 이라는걸 볼 수 있습니다. 그렇다라는건 이 함수는 modifier가 있다 라는걸 의미합니다. modifier는 간단히 말해 기존 함수보다 더 먼저 실행되는 함수라고 생각.. 에러 핸들러란? (assert, revert, require) 이번시간에는 에러 핸들러에 대해서 알아봅시다. 에러 핸들러란 무엇일까요? 말 그대로 에러가 발생했을때 그 에러를 어떻게 처리할거냐 를 말하는겁니다 첫번째 에러 핸들러 assert에 대해서 한번 알아봅시다. 1. assert assert는 주장하다 라는 영단어를 가지고 있습니다. assert의 특징은 gas를 모두 소비한 후, 조건이 충족되지 않을 경우(false일 경우) 에러를 발생시킵니다. contract lecture { function assertTest(uint a) public pure{ assert(a == 7); } } assertTest 한번 호출해볼까요? (배포 후) assertTest 함수에 8을 던져줬습니다. 그러면 assert(a == 7); 이 코드가 False가 되겠죠? 그러므로.. mapping이란? 이번시간에는 mapping 에 대해서 알아보도록 합시다. mapping은 key와 value로 이루어져있습니다. 여기서 key와 value가 뭘까요? 예를들어 마트에있는 과자로 예시를 들어봅시다 꼬깔콘이 key 라면 꼬깔콘의 가격은 value입니다. code를 한번 봅시다. contract lecture { mapping(string => uint256) item; function setItem(string memory _item, uint256 _price) public { item[_item] = _price; } function getItem(string memory _item) public view returns(uint256) { return item[_item]; } } 여기 item이라는 m.. 이전 1 2 3 다음