AddressImpl.sol 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.6.0;
  3. import "../utils/Address.sol";
  4. contract AddressImpl {
  5. string public sharedAnswer;
  6. event CallReturnValue(string data);
  7. function isContract(address account) external view returns (bool) {
  8. return Address.isContract(account);
  9. }
  10. function sendValue(address payable receiver, uint256 amount) external {
  11. Address.sendValue(receiver, amount);
  12. }
  13. function functionCall(address target, bytes calldata data) external {
  14. bytes memory returnData = Address.functionCall(target, data);
  15. emit CallReturnValue(abi.decode(returnData, (string)));
  16. }
  17. function functionCallWithValue(address target, bytes calldata data, uint256 value) external payable {
  18. bytes memory returnData = Address.functionCallWithValue(target, data, value);
  19. emit CallReturnValue(abi.decode(returnData, (string)));
  20. }
  21. function functionStaticCall(address target, bytes calldata data) external {
  22. bytes memory returnData = Address.functionStaticCall(target, data);
  23. emit CallReturnValue(abi.decode(returnData, (string)));
  24. }
  25. function functionDelegateCall(address target, bytes calldata data) external {
  26. bytes memory returnData = Address.functionDelegateCall(target, data);
  27. emit CallReturnValue(abi.decode(returnData, (string)));
  28. }
  29. // sendValue's tests require the contract to hold Ether
  30. receive () external payable { }
  31. }