상세 컨텐츠

본문 제목

솔리디티 강좌 36강 - call

솔리디티 깨부수기 - 기본

by D_One 2021. 10. 5. 12:21

본문


유튜브를 통해, 쉽고 간편하게 이해 해보아요!

https://youtu.be/ax5lHvxL9dE

구독/좋아요 해주셔서 감사합니다 :) !!


 

안녕하세요

 

오늘은 call에 대해서 심도 있게 알아 보려고 합니다. 

 

지난 시간에 배운 이더를 보내는 3가지 방법중 call 이라고 설명을 하였습니다. 

 

사실 call 에는 코인을 송금하는 기능 이외에도, 스마트컨트랙의 주소만있다면, 내부 이든 외부 이든 접근이 가능합니다.

 

abi를 통해서 함수를 접근합니다. 

 

abi 안에는 컴파일된 스마트컨트랙의 정보가 담겨 있습니다, 이것을 통하여, 스마트 컨트랙을 접근을 합니다.

 

자세한 설명은, 영상에서 꼭 확인 해주시기 바랍나다.

 

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 < 0.9.0;

contract add{
    event JustFallback(string _str);
    function addNumber(uint256 _num1, uint256 _num2) public pure returns(uint256){
        return _num1 + _num2;
    }
    fallback() external {
     emit JustFallback("JustFallback is called");
    }
}

contract caller{
    event calledFunction(bool _success, bytes _output);
   
    //1. 송금하기 
    function transferEther(address payable _to) public payable{
        (bool success,) = _to.call{value:msg.value}("");
        require(success,"failed to transfer ether");
    }
    
    //2. 외부 스마트 컨트랙 함수 부르기 
    function callMethod(address _contractAddr,uint256 _num1, uint256 _num2) public{
        (bool success, bytes memory outputFromCalledFunction) = _contractAddr.call(
              abi.encodeWithSignature("addNumber2(uint256,uint256)",_num1,_num2)
              );
        require(success,"failed to transfer ether");
        emit calledFunction(success,outputFromCalledFunction);
    }
}

 

관련글 더보기