forked from AmazingAng/WTF-Solidity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Call.sol
62 lines (50 loc) · 1.74 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
contract OtherContract {
// Variável de estado x
// Recebendo evento eth, registrando amount e gas
event Log(uint amount, uint gas);
fallback() external payable{}
// Retorna o saldo de ETH do contrato
function getBalance() view public returns(uint) {
return address(this).balance;
}
// Você pode ajustar a função da variável de estado _x e também pode enviar ETH para o contrato (payable)
function setX(uint256 x) external payable{
_x = x;
// Se ETH for transferido, dispara o evento Log
if(msg.value > 0){
emit Log(msg.value, gasleft());
}
}
// Ler x
function getX() external view returns(uint x){
x = _x;
}
}
contract Call{
// Definir o evento de resposta, exibindo o resultado de retorno da chamada 'success' e 'data'
event Response(bool success, bytes data);
function callSetX(address payable _addr, uint256 x) public payable {
// chamar setX(), enquanto também é possível enviar ETH
(bool success, bytes memory data) = _addr.call{value: msg.value}(
abi.encodeWithSignature("setX(uint256)", x)
);
//Liberar evento
}
function callGetX(address _addr) external returns(uint256){
// call getX()
(bool success, bytes memory data) = _addr.call(
abi.encodeWithSignature("getX()")
);
//Liberar evento
return abi.decode(data, (uint256));
}
function callNonExist(address _addr) external{
// call função inexistente
(bool success, bytes memory data) = _addr.call(
abi.encodeWithSignature("foo(uint256)")
);
//Liberar evento
}
}