contract Caller { //Just some useless variables address public fixedAddress; address public storedAddress; //useless (but good for testing as they contribute as decoys) uint256 private statevar; bytes32 private far; constructor (address addr) public { fixedAddress = addr; } /* // Commented out because this causes laser to enter an infinite loop... :/ // It sets the free memory pointer to a symbolic value, and things break //some typical function as a decoy function thisisfine() public { (bool success, bytes memory mem) = fixedAddress.call(""); } */ function sha256Test1() public returns (uint256) { uint256 i; if (sha256(abi.encodePacked("ab", "c")) == sha256("abc")) { // True i = 5555555555555555; } else { // False i = 323232325445454546; } return i; } function sha256Test2() public returns (uint256) { uint256 i; if (sha256("abd") == sha256(abi.encodePacked("ab", "d"))) { // True i = 34756834765834658; } else { // False i = 8756476956956795876987; } return i; } function ripemdTest() public returns (uint256) { uint256 i; bytes20 v1 = ripemd160(""); bytes20 v2 = ripemd160("hhhhh"); if (v1 != v2) { // True i = 999999999999999999993; } else { // False i = 1111111111112; } return i; } function ecrecoverTest() public returns (uint256) { bytes32 foobar1 = 0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8; bytes32 foobar2 = 0x38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e; uint8 v = 28; bytes32 r = 0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac8038825608; bytes32 s = 0x4f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada; uint256 i; address addr1 = ecrecover(keccak256(abi.encodePacked(foobar1)), v, r, s); address addr2 = ecrecover(keccak256(abi.encodePacked(foobar1, foobar2)), v, r, s); if (addr1 != addr2) { // True i = 674837568743979857398564869; } else { // False i = 3487683476979311; } return i; } //identity is invoked here in compiler and not below function needIdentityInvoke(uint sea) public returns (uint) { return sea; } function identityFunction(int input) public returns(int out) { assembly { let x := mload(0x40) mstore(x, input) let success := call(500000000, 0x4, 100000, x, 0x20, x, 0x20) out := mload(x) mstore(0x40, x) } } function identityTest1() public returns (uint256) { uint256 i; if (identityFunction(100) == 100) { // True i = 87426857369875698; } else { // False i = 476934798798347; } return i; } }