interface IToken {
function getBalance(address user) external;
}
uint balance = IToken(tokenAddress).getBalance(userAddress);
// address(0) // what is address(0)
contract Escrow {
// state variables
address public depositor; // contract deployer
address public beneficiary;
address public arbiter;
uint[3] numbers = [1,2,3]; // fixed
address[1] y = [0xc783df8a850f42e7F7e57013759C285caa701eB6]; // fixed
error NotAuthorized(address, string, address);
event Approved(uint256);
constructor(address _arbiter, address _beneficiary) payable {
depositor = msg.sender;
arbiter = _arbiter;
beneficiary = _beneficiary;
}
function approve() external {
if(msg.sender != arbiter) revert NotAuthorized(msg.sender, '!=', arbiter);
uint256 contractBalance = address(this).balance;
(bool success,) = beneficiary.call{value:contractBalance}("");
require(success);
emit Approved(contractBalance);
}
}
function sendAlert(address _contractFish) external {
// functionSignature = "bake()";
bytes4 memory signatureFunctionBake = abi.encodePacked(bytes4(keccak256("bake()")); // method original
bytes memory signatureFunctionBake = abi.encodeWithSignature("bake(uint256,uint256)", 10, 5); // method with arguments
(bool success, ) = _contractFish.call(signatureFunctionBake);
// abi.encodeWithSignature("receiveData(uint256)", 5)
require(success);
}
contract Fish {
bool public baked;
function bake() external {
baked = true;
}
function arrayMagic()
{
uint IndexFixedSize5; //
// create a new array with this size
//uint[] memory filtered = new uint[](IndexFixedSize);
address[] memory addresses = new address[](IndexFixedSize)
}
}
// -----
import "forge-std/Test.sol";
import "../src/Hero.sol";
import "../src/Sidekick.sol";
contract ContractTest is Test {
Sidekick public sidekick;
Fish public contractFish;
function setUp() public {
contractFish= new Fish();
sidekick = new Sidekick();
}
function testAlert() public {
sidekick.sendAlert(address(contractFish));
assertEq(contractFish.baked(), true, "it should have baked the fish");
}
}