-
Notifications
You must be signed in to change notification settings - Fork 0
/
Call.sol
42 lines (26 loc) · 1.35 KB
/
Call.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Test{
uint public total =0;
string public incrementer;
uint public fallbackCount =0;
fallback() external payable {
fallbackCount ++;
}
function inc(uint256 _amount,string memory _incrementer)external returns (uint256){
total += _amount;
incrementer=_incrementer;
return total;
}
}
contract Caller{
function testCaller(address _contract,uint256 _amount ,string memory _incrementer)external returns(bool,uint256){
(bool err,bytes memory res)=_contract.call(abi.encodeWithSignature("inc(uint256,string)", _amount,_incrementer ));//önce fonksiyonun adı ve aldığı parametreler ardından parametrelerin isimlerini yazıyoruzz
uint256 _total =abi.decode(res,(uint256));//decode etmesini istediğimiz değeri ve hangi türde decode etmesini istediğimizi yazıyoruz.
return (err,_total);
}
function payToFallback(address _contract) external payable {
(bool err,)= _contract.call{value:msg.value}("");//Bir kontrata düşük seviyeli fonksiyon çağrıları (call, delegatecall veya send) kullanılarak erişildiğinde ve hedef kontratta çağrılan fonksiyon bulunamadığında fallback fonksiyonu tetiklenir.
if (!err) revert();
}
}