contract ExampleContract
{
uint[] public numberList = [1,2,3,4,5,6,7,8,9,10];
function isEven(uint _number) public view returns(bool)
{
if(_number % 2 == 0) return true;
if(_number % 2 != 0) return false;
}
function isOdd(uint _number) public view returns(bool)
{
if(_number % 2 != 0) return true;
if(_number % 2 == 0) return false;
}
function countOddNumbers() public view returns(uint)
{
uint count = 0;
for(uint = 0; i < numberList.length; i++)
{
if (isOdd(numberList[i]) count++;
}
return count;
}
}
interface IToken {
function getBalance(address user) external;
}
uint balance = IToken(tokenAddress).getBalance(userAddress);
// address(0) // what is address(0)
contract Ownable {
address private Owner;
constructor()
{
Owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == Owner);
_;
}
}
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 onlyOwner {
if(msg.sender != arbiter) revert NotAuthorized(msg.sender, '!=', arbiter);
uint256 contractBalance = address(this).balance;
(bool success,) = beneficiary.call{value:contractBalance}("");
require(success);
resetAddressArray = new address[](0);
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[] calldata _dataList) external pure returns(uint[] memory) {
{
uint IndexFixedSize5; //
// create a new array with this size
//uint[] memory filtered = new uint[](IndexFixedSize);
address[] memory addresses = new address[](IndexFixedSize)
return addresses;
}
}
contract MemberStackList {
address[] memberAddressList;
constructor() {
memberAddressList.push(msg.sender); // deployer
}
function isMember(address _memberAddress) public view returns(bool){
for (uint i = 0; i < memberAddressList.length; i++) {
if (memberAddressList[i] == _memberAddress) {
return true;
}
}
return false;
}
function addMember(address _memberAddress) external {
require(isMember(msg.sender)); // current sender address
memberAddressList.push(_memberAddress);
}
function removeLastMember() external {
require(isMember(msg.sender)); // current sender address
memberAddressList.pop();
}
// -----
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");
}
}
contract MemberStackList Test is Test {
MemberStackList public MemberList;
address member1 = address(2);
address member2 = address(3);
address nonMember1 = address(4);
address nonMember2 = address(5);
function setUp() public {
MemberList = new MemberStackList ();
MemberList.addMember(member1);
MemberList.addMember(member2);
}
function testMembers() public {
assertEq(MemberList.isMember(member1), true);
assertEq(MemberList.isMember(member2), true);
}
function testNonMembers() public {
assertEq(MemberList.isMember(nonMember1), false);
assertEq(MemberList.isMember(nonMember2), false);
}
function testAddAsNonMember() public {
vm.startPrank(nonMember1);
vm.expectRevert();
MemberList.addMember(address(6));
vm.expectRevert();
MemberList.removeLastMember();
}
function testRemoveLastMember() public {
MemberList.removeLastMember();
assertEq(MemberList.isMember(member1), true);
assertEq(MemberList.isMember(member2), false);
MemberList.removeLastMember();
assertEq(MemberList.isMember(member1), false);
assertEq(MemberList.isMember(member2), false);
}