오늘은 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);
}
}
솔리디티 강좌 38강 - enum (0) | 2021.10.07 |
---|---|
솔리디티 강좌 37강 - call Vs delegate call (0) | 2021.10.06 |
솔리디티 강좌 35강 - fallback / receive 함수 (0) | 2021.10.04 |
솔리디티 강좌 34강 - payable2 생성자 적용시, msg.sender 2 owner 적용해보기 (0) | 2021.10.03 |
솔리디티 강좌 33강 - balance 와 msg.sender (0) | 2021.10.02 |