Source Code
Overview
ETH Balance
0 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 292,145 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 2744510 | 124 days ago | IN | 0 ETH | 0.00012842 | ||||
Deposit | 2495288 | 161 days ago | IN | 0 ETH | 0.00045137 | ||||
Deposit | 2495288 | 161 days ago | IN | 0 ETH | 0.00061876 | ||||
Deposit | 2495288 | 161 days ago | IN | 0 ETH | 0.00063664 | ||||
Deposit | 2495288 | 161 days ago | IN | 0 ETH | 0.00065658 | ||||
Deposit | 2495161 | 162 days ago | IN | 0 ETH | 0.00062786 | ||||
Deposit | 2495160 | 162 days ago | IN | 0 ETH | 0.00055195 | ||||
Deposit | 2495017 | 162 days ago | IN | 0 ETH | 0.00068267 | ||||
Deposit | 2495009 | 162 days ago | IN | 0 ETH | 0.00045034 | ||||
Deposit | 2494981 | 162 days ago | IN | 0 ETH | 0.00057576 | ||||
Deposit | 2494981 | 162 days ago | IN | 0 ETH | 0.00061903 | ||||
Deposit | 2494954 | 162 days ago | IN | 0 ETH | 0.00051062 | ||||
Deposit | 2494926 | 162 days ago | IN | 0 ETH | 0.00049075 | ||||
Deposit | 2494877 | 162 days ago | IN | 0 ETH | 0.00043383 | ||||
Deposit | 2494877 | 162 days ago | IN | 0 ETH | 0.00066067 | ||||
Deposit | 2489799 | 162 days ago | IN | 0 ETH | 0.00052719 | ||||
Deposit | 2489796 | 162 days ago | IN | 0 ETH | 0.00056351 | ||||
Deposit | 2489795 | 162 days ago | IN | 0 ETH | 0.00063992 | ||||
Deposit | 2489762 | 162 days ago | IN | 0 ETH | 0.00051976 | ||||
Deposit | 2489756 | 162 days ago | IN | 0 ETH | 0.00048204 | ||||
Deposit | 2489727 | 162 days ago | IN | 0 ETH | 0.0005527 | ||||
Deposit | 2489698 | 162 days ago | IN | 0 ETH | 0.00050802 | ||||
Deposit | 2489696 | 162 days ago | IN | 0 ETH | 0.0006405 | ||||
Deposit | 2489661 | 162 days ago | IN | 0 ETH | 0.00069327 | ||||
Deposit | 2489628 | 162 days ago | IN | 0 ETH | 0.00063745 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RollDown
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.0; // Import ERC-20 interface import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "forge-std/console.sol"; contract RollDown { //tbr address owner; // Counter for mapping key uint256 public counter; // Counter for last processed request to ensure not reading and processing already processed uint256 public lastProcessedUpdate_origin_l1; // Counter for last processed updates comming from l2 to ensure not reading and processing already processed uint256 public lastProcessedUpdate_origin_l2; event DepositAcceptedIntoQueue( uint256 requestId, address depositRecipient, address tokenAddress, uint256 amount ); event DisputeResolutionAcceptedIntoQueue( uint256 requestId, bool cancelJustified ); event WithdrawalResolutionAcceptedIntoQueue( uint256 requestId, bool success ); event L2UpdatesToRemovedAcceptedIntoQueue( uint256 requestId, uint256[] l2UpdatesToRemove ); event FundsWithdrawn( address withdrawRecipient, address tokenAddress, uint256 amount ); event cancelAndCalculatedHash(bytes32 cancelHash, bytes32 calculatedHash); enum Origin { L1, L2 } struct RequestId { Origin origin; uint256 id; } struct Deposit { RequestId requestId; address depositRecipient; address tokenAddress; uint256 amount; bytes32 blockHash; } struct L2UpdatesToRemove { RequestId requestId; uint256[] l2UpdatesToRemove; bytes32 blockHash; } struct CancelResolution { RequestId requestId; uint256 l2RequestId; bool cancelJustified; bytes32 blockHash; } struct WithdrawalResolution { RequestId requestId; uint256 l2RequestId; bool status; bytes32 blockHash; } struct L1Update { Deposit[] pendingDeposits; CancelResolution[] pendingCancelResultions; WithdrawalResolution[] pendingWithdrawalResolutions; L2UpdatesToRemove[] pendingL2UpdatesToRemove; } mapping(uint256 => WithdrawalResolution) public withdrawalResolutions; mapping(uint256 => CancelResolution) public cancelResolutions; mapping(uint256 => Deposit) private deposits; mapping(uint256 => L2UpdatesToRemove) private l2UpdatesToRemove; //TODO: should be renamed to RequestType enum UpdateType { DEPOSIT, WITHDRAWAL, WITHDRAWAL_RESOLUTION, INDEX_UPDATE, CANCEL, CANCEL_RESOLUTION } struct RequestResult { RequestId requestId; uint256 originRequestId; UpdateType updateType; bool status; } struct L2Update { Cancel[] cancels; Withdrawal[] withdrawals; RequestResult[] results; } struct Range { uint256 start; uint256 end; } struct Cancel { RequestId requestId; Range range; bytes32 hash; } struct Withdrawal { RequestId requestId; address withdrawalRecipient; address tokenAddress; uint256 amount; } constructor() { lastProcessedUpdate_origin_l1 = 0; counter = 1; lastProcessedUpdate_origin_l2 = 0; owner = msg.sender; } function deposit(address tokenAddress, uint256 amount) public { require(tokenAddress != address(0), "Invalid token address"); require(amount > 0, "Amount must be greater than zero"); address depositRecipient = msg.sender; IERC20 token = IERC20(tokenAddress); require( token.transferFrom(msg.sender, address(this), amount), "Token transfer failed" ); bytes32 blockHash = blockhash(block.number); Deposit memory depositRequest = Deposit({ requestId: RequestId({origin: Origin.L1, id: counter++}), depositRecipient: depositRecipient, tokenAddress: tokenAddress, amount: amount, blockHash: blockHash }); // Add the new request to the mapping deposits[depositRequest.requestId.id] = depositRequest; emit DepositAcceptedIntoQueue( depositRequest.requestId.id, depositRecipient, tokenAddress, amount ); } function getUpdateForL2() public view returns (L1Update memory) { return getPendingRequests(lastProcessedUpdate_origin_l1 + 1, counter - 1); } function min(uint256 a, uint256 b) private pure returns (uint256) { return a < b ? a : b; } function max(uint256 a, uint256 b) private pure returns (uint256) { return a > b ? a : b; } function getRequestsRange( L2Update calldata update ) private returns (uint256, uint256) { uint256 firstId; unchecked { firstId = uint256(0) - 1; } uint256 lastId = 0; if (update.cancels.length > 0) { firstId = min(update.cancels[0].requestId.id, firstId); lastId = max( update.cancels[update.cancels.length - 1].requestId.id, lastId ); } if (update.withdrawals.length > 0) { firstId = min(update.withdrawals[0].requestId.id, firstId); lastId = max( update.withdrawals[update.withdrawals.length - 1].requestId.id, lastId ); } if (update.results.length > 0) { firstId = min(update.results[0].requestId.id, firstId); lastId = max( update.results[update.results.length - 1].requestId.id, lastId ); } return (firstId, lastId); } function getOrderOfRequestsOriginatingOnL2( uint256 firstId, L2Update calldata update ) private returns (UpdateType[] memory) { if ( update.results.length == 0 && update.cancels.length == 0 && update.withdrawals.length == 0 ) { return new UpdateType[](0); } uint256 withdrawalId = 0; uint256 cancelId = 0; uint256 resultId = 0; uint256 orderId = 0; uint256 updatesAmount = update.cancels.length + update.withdrawals.length + update.results.length; UpdateType[] memory order = new UpdateType[](updatesAmount); for (uint256 i = firstId; i < firstId + updatesAmount; i++) { if ( withdrawalId < update.withdrawals.length && update.withdrawals[withdrawalId].requestId.id == i ) { order[orderId] = UpdateType.WITHDRAWAL; withdrawalId++; orderId++; } else if ( cancelId < update.cancels.length && update.cancels[cancelId].requestId.id == i ) { order[orderId] = UpdateType.CANCEL; cancelId++; orderId++; } else if ( resultId < update.results.length && update.results[resultId].requestId.id == i ) { order[orderId] = UpdateType.INDEX_UPDATE; resultId++; orderId++; } else { console.log("requests not in order"); revert("invalide L2Update"); } } return order; } function processRequestsOriginatingOnL2( UpdateType[] memory order, L2Update calldata inputArray ) private { uint256 cancelId = 0; uint256 withdrawalId = 0; uint256 resultsId = 0; for (uint256 i = 0; i < order.length; i++) { if (order[i] == UpdateType.WITHDRAWAL) { Withdrawal calldata withdrawal = inputArray.withdrawals[ withdrawalId++ ]; if (withdrawal.requestId.id <= lastProcessedUpdate_origin_l2) { continue; } process_l2_update_withdrawal(withdrawal); lastProcessedUpdate_origin_l2++; } else if (order[i] == UpdateType.CANCEL) { Cancel calldata cancel = inputArray.cancels[cancelId++]; if (cancel.requestId.id <= lastProcessedUpdate_origin_l2) { continue; } process_l2_update_cancels(cancel); lastProcessedUpdate_origin_l2++; } else if (order[i] == UpdateType.INDEX_UPDATE) { RequestResult calldata result = inputArray.results[resultsId++]; if (result.requestId.id <= lastProcessedUpdate_origin_l2) { continue; } lastProcessedUpdate_origin_l2++; } else { revert("unknown update type"); } } } function update_l1_from_l2(L2Update calldata inputArray) external { //1st iteration, security comes from ensuring dedicated acc //Ensure sender is dedic acc // TODO: uncomment & fix UT // require(msg.sender == owner, "Not the owner"); require( inputArray.results.length >= 1 || inputArray.cancels.length >= 1 || inputArray.withdrawals.length >= 1, "Array must have at least 1 update" ); (uint256 firstId, uint256 lastId) = getRequestsRange(inputArray); require(firstId != 0, "Invalid L2Update"); require( firstId <= lastProcessedUpdate_origin_l2 + 1, "Invalid L2Update" ); require(lastId > lastProcessedUpdate_origin_l2, "Invalid L2Update"); UpdateType[] memory order = getOrderOfRequestsOriginatingOnL2( firstId, inputArray ); uint256[] memory l2UpdatesToBeRemoved = process_l2_update_requests_results( order, inputArray.results ); processRequestsOriginatingOnL2(order, inputArray); // Create a new array with the correct size if (l2UpdatesToBeRemoved.length > 0) { uint256 rid = counter++; l2UpdatesToRemove[rid] = L2UpdatesToRemove({ requestId: RequestId({origin: Origin.L1, id: rid}), l2UpdatesToRemove: l2UpdatesToBeRemoved, blockHash: blockhash(block.number) }); lastProcessedUpdate_origin_l1 += l2UpdatesToBeRemoved.length; emit L2UpdatesToRemovedAcceptedIntoQueue(rid, l2UpdatesToBeRemoved); } } function process_l2_update_requests_results( UpdateType[] memory order, RequestResult[] calldata results ) private view returns (uint256[] memory) { if (results.length == 0) { return new uint256[](0); } uint256 updatesToBeRemovedCounter = 0; uint256[] memory l2UpdatesToBeRemovedTemp = new uint256[]( results.length ); uint256 updatesCnt = 0; for (uint256 idx = 0; idx < order.length; idx++) { if (order[idx] == UpdateType.INDEX_UPDATE) { RequestResult memory element = results[updatesCnt++]; if (element.requestId.id <= lastProcessedUpdate_origin_l2) { continue; } if ( element.updateType == UpdateType.DEPOSIT || element.updateType == UpdateType.INDEX_UPDATE || element.updateType == UpdateType.CANCEL_RESOLUTION || element.updateType == UpdateType.WITHDRAWAL_RESOLUTION ) { l2UpdatesToBeRemovedTemp[updatesToBeRemovedCounter++] = ( element.originRequestId ); } else { revert("unknown request type"); } } } uint256[] memory l2UpdatesToBeRemoved = new uint256[]( updatesToBeRemovedCounter ); for (uint256 i = 0; i < updatesToBeRemovedCounter; i++) { l2UpdatesToBeRemoved[i] = l2UpdatesToBeRemovedTemp[i]; } return l2UpdatesToBeRemoved; } function process_l2_update_cancels(Cancel calldata cancel) private { L1Update memory pending = getPendingRequests( cancel.range.start, cancel.range.end ); bytes32 correct_hash = keccak256(abi.encode(pending)); bytes32 blockHash = blockhash(block.number); CancelResolution memory resolution = CancelResolution({ requestId: RequestId({origin: Origin.L1, id: counter++}), l2RequestId: cancel.requestId.id, cancelJustified: correct_hash == cancel.hash, blockHash: blockHash }); cancelResolutions[resolution.requestId.id] = resolution; emit DisputeResolutionAcceptedIntoQueue( resolution.l2RequestId, resolution.cancelJustified ); } function process_l2_update_withdrawal( Withdrawal calldata withdrawal ) private { IERC20 token = IERC20(withdrawal.tokenAddress); bool status = token.balanceOf(address(this)) >= withdrawal.amount; bytes32 blockHash = blockhash(block.number); WithdrawalResolution memory resolution = WithdrawalResolution({ requestId: RequestId({origin: Origin.L1, id: counter++}), l2RequestId: withdrawal.requestId.id, status: status, blockHash: blockHash }); withdrawalResolutions[resolution.requestId.id] = resolution; emit WithdrawalResolutionAcceptedIntoQueue( resolution.requestId.id, status ); if (status) { token.transfer(withdrawal.withdrawalRecipient, withdrawal.amount); emit FundsWithdrawn( withdrawal.withdrawalRecipient, withdrawal.tokenAddress, withdrawal.amount ); } } function getPendingRequests( uint256 start, uint256 end ) public view returns (L1Update memory) { L1Update memory result; uint256 depositsCounter = 0; uint256 withdrawalsCounter = 0; uint256 cancelsCounter = 0; uint256 updatesToBeRemovedCounter = 0; for (uint256 requestId = start; requestId <= end; requestId++) { if (deposits[requestId].requestId.id != 0) { depositsCounter++; } else if (l2UpdatesToRemove[requestId].requestId.id != 0) { updatesToBeRemovedCounter++; } else if (withdrawalResolutions[requestId].requestId.id != 0) { withdrawalsCounter++; } else if (cancelResolutions[requestId].requestId.id != 0) { cancelsCounter++; } } result.pendingDeposits = new Deposit[](depositsCounter); result.pendingCancelResultions = new CancelResolution[](cancelsCounter); result.pendingWithdrawalResolutions = new WithdrawalResolution[]( withdrawalsCounter ); result.pendingL2UpdatesToRemove = new L2UpdatesToRemove[]( updatesToBeRemovedCounter ); withdrawalsCounter = 0; depositsCounter = 0; cancelsCounter = 0; updatesToBeRemovedCounter = 0; for (uint256 requestId = start; requestId <= end; requestId++) { if (deposits[requestId].requestId.id > 0) { result.pendingDeposits[depositsCounter++] = deposits[requestId]; } else if (withdrawalResolutions[requestId].requestId.id > 0) { result.pendingWithdrawalResolutions[ withdrawalsCounter++ ] = withdrawalResolutions[requestId]; } else if (l2UpdatesToRemove[requestId].requestId.id > 0) { result.pendingL2UpdatesToRemove[ updatesToBeRemovedCounter++ ] = l2UpdatesToRemove[requestId]; } else if (cancelResolutions[requestId].l2RequestId > 0) { result.pendingCancelResultions[ cancelsCounter++ ] = cancelResolutions[requestId]; } else { break; } } return result; } } // TODO: counter l2 check // TODO: align types again
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; import {Math} from "./math/Math.sol"; import {SignedMath} from "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; /// @solidity memory-safe-assembly assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or * denominator == 0. * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by * Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. uint256 twos = denominator & (0 - denominator); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also // works in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded * towards zero. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"address","name":"depositRecipient","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositAcceptedIntoQueue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"cancelJustified","type":"bool"}],"name":"DisputeResolutionAcceptedIntoQueue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"withdrawRecipient","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"l2UpdatesToRemove","type":"uint256[]"}],"name":"L2UpdatesToRemovedAcceptedIntoQueue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"WithdrawalResolutionAcceptedIntoQueue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"cancelHash","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"calculatedHash","type":"bytes32"}],"name":"cancelAndCalculatedHash","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cancelResolutions","outputs":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getPendingRequests","outputs":[{"components":[{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"address","name":"depositRecipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.Deposit[]","name":"pendingDeposits","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.CancelResolution[]","name":"pendingCancelResultions","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.WithdrawalResolution[]","name":"pendingWithdrawalResolutions","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256[]","name":"l2UpdatesToRemove","type":"uint256[]"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.L2UpdatesToRemove[]","name":"pendingL2UpdatesToRemove","type":"tuple[]"}],"internalType":"struct RollDown.L1Update","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUpdateForL2","outputs":[{"components":[{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"address","name":"depositRecipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.Deposit[]","name":"pendingDeposits","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"cancelJustified","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.CancelResolution[]","name":"pendingCancelResultions","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.WithdrawalResolution[]","name":"pendingWithdrawalResolutions","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256[]","name":"l2UpdatesToRemove","type":"uint256[]"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"internalType":"struct RollDown.L2UpdatesToRemove[]","name":"pendingL2UpdatesToRemove","type":"tuple[]"}],"internalType":"struct RollDown.L1Update","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedUpdate_origin_l1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedUpdate_origin_l2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"components":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"internalType":"struct RollDown.Range","name":"range","type":"tuple"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"internalType":"struct RollDown.Cancel[]","name":"cancels","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"address","name":"withdrawalRecipient","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct RollDown.Withdrawal[]","name":"withdrawals","type":"tuple[]"},{"components":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"originRequestId","type":"uint256"},{"internalType":"enum RollDown.UpdateType","name":"updateType","type":"uint8"},{"internalType":"bool","name":"status","type":"bool"}],"internalType":"struct RollDown.RequestResult[]","name":"results","type":"tuple[]"}],"internalType":"struct RollDown.L2Update","name":"inputArray","type":"tuple"}],"name":"update_l1_from_l2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalResolutions","outputs":[{"components":[{"internalType":"enum RollDown.Origin","name":"origin","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct RollDown.RequestId","name":"requestId","type":"tuple"},{"internalType":"uint256","name":"l2RequestId","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506000600281905560018055600381905580546001600160a01b03191633179055612260806100406000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637fd4f845116100665780637fd4f845146100fc578063a80fc9bd14610105578063b153870614610128578063ca9b21ae14610130578063f26ee9d01461014357600080fd5b806347e7ef24146100985780635740b89d146100ad57806361bc221a146100c057806379e041f2146100dc575b600080fd5b6100ab6100a6366004611c04565b61014c565b005b6100ab6100bb366004611c2e565b610409565b6100c960015481565b6040519081526020015b60405180910390f35b6100ef6100ea366004611c69565b610653565b6040516100d39190611e30565b6100c960025481565b610118610113366004611f1b565b610ce0565b6040516100d39493929190611f34565b6100ef610d52565b61011861013e366004611f1b565b610da2565b6100c960035481565b6001600160a01b03821661019f5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b60448201526064015b60405180910390fd5b600081116101ef5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610196565b6040516323b872dd60e01b81523360048201819052306024830152604482018390529083906001600160a01b038216906323b872dd906064016020604051808303816000875af1158015610247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026b9190611f6b565b6102af5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610196565b6040805160e081019091524340906000908060a0810180848152602001600160008154809291906102df90611f9e565b90915550905281526001600160a01b03808716602080840191909152908916604080840191909152606083018990526080909201859052825181015160009081526006909152208151805182549394508493839190829060ff19166001838181111561034d5761034d611c8b565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815289831693810193909352908a16908201529081018790527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa91015b60405180910390a1505050505050565b60016104186040830183611fb7565b90501015806104335750600161042e8280611fb7565b905010155b8061044d575060016104486020830183611fb7565b905010155b6104a35760405162461bcd60e51b815260206004820152602160248201527f4172726179206d7573742068617665206174206c6561737420312075706461746044820152606560f81b6064820152608401610196565b6000806104af83610dd7565b91509150816000036104d35760405162461bcd60e51b815260040161019690612007565b6003546104e1906001612031565b8211156105005760405162461bcd60e51b815260040161019690612007565b60035481116105215760405162461bcd60e51b815260040161019690612007565b600061052d8385610f0d565b90506000610547826105426040880188611fb7565b61127d565b9050610553828661150c565b80511561064c57600180546000918261056b83611f9e565b909155506040805160a0810190915290915080606081018060008152602090810185905290825281810185905243406040928301526000848152600790915220815180518254839190829060ff1916600183818111156105cd576105cd611c8b565b02179055506020918201516001909101558281015180516105f49260028501920190611b88565b50604082015181600301559050508151600260008282546106159190612031565b90915550506040517f09b30365986269e3939307e7ca7b7b7421a8ad08ef18bb766c668d27cbc2aef9906103f99083908590612044565b5050505050565b61067e6040518060800160405280606081526020016060815260200160608152602001606081525090565b6106a96040518060800160405280606081526020016060815260200160608152602001606081525090565b6000808080875b87811161076957600081815260066020526040902060010154156106e057846106d881611f9e565b955050610757565b60008181526007602052604090206001015415610709578161070181611f9e565b925050610757565b60008181526004602052604090206001015415610732578361072a81611f9e565b945050610757565b60008181526005602052604090206001015415610757578261075381611f9e565b9350505b8061076181611f9e565b9150506106b0565b508367ffffffffffffffff81111561078357610783612065565b6040519080825280602002602001820160405280156107e957816020015b6040805160e081018252600060a0820181815260c083018290528252602080830182905292820181905260608201819052608082015282526000199092019101816107a15790505b5085528167ffffffffffffffff81111561080557610805612065565b60405190808252806020026020018201604052801561086457816020015b6040805160c08101825260006080820181815260a0830182905282526020808301829052928201819052606082015282526000199092019101816108235790505b5060208601528267ffffffffffffffff81111561088357610883612065565b6040519080825280602002602001820160405280156108e257816020015b6040805160c08101825260006080820181815260a0830182905282526020808301829052928201819052606082015282526000199092019101816108a15790505b5060408601528067ffffffffffffffff81111561090157610901612065565b60405190808252806020026020018201604052801561095b57816020015b6040805160a0810182526000606080830182815260808401839052835260208301529181019190915281526020019060019003908161091f5790505b506060860152506000925082915081905080875b878111610cd15760008181526006602052604090206001015415610a505760008181526006602052604090819020815160e081019092528054829060a08201908390829060ff1660018111156109c7576109c7611c8b565b60018111156109d8576109d8611c8b565b81526001919091015460209182015290825260028301546001600160a01b0390811691830191909152600383015416604082015260048201546060820152600590910154608090910152865186610a2e81611f9e565b975081518110610a4057610a4061207b565b6020026020010181905250610cbf565b60008181526004602052604090206001015415610b0b5760008181526004602052604090819020815160c081019092528054829060808201908390829060ff166001811115610aa157610aa1611c8b565b6001811115610ab257610ab2611c8b565b815260019190910154602091820152908252600283015490820152600382015460ff16151560408083019190915260049092015460609091015287015185610af981611f9e565b965081518110610a4057610a4061207b565b60008181526007602052604090206001015415610c035760008181526007602052604090819020815160a081019092528054829060608201908390829060ff166001811115610b5c57610b5c611c8b565b6001811115610b6d57610b6d611c8b565b8152602001600182015481525050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bce57602002820191906000526020600020905b815481526020019060010190808311610bba575b5050505050815260200160038201548152505086606001518380610bf190611f9e565b945081518110610a4057610a4061207b565b60008181526005602052604090206002015415610cba5760008181526005602052604090819020815160c081019092528054829060808201908390829060ff166001811115610c5457610c54611c8b565b6001811115610c6557610c65611c8b565b815260019190910154602091820152908252600283015482820152600383015460ff161515604083015260049092015460609091015287015184610ca881611f9e565b955081518110610a4057610a4061207b565b610cd1565b80610cc981611f9e565b91505061096f565b50939450505050505b92915050565b60046020526000908152604090819020815180830190925280549091908290829060ff166001811115610d1557610d15611c8b565b6001811115610d2657610d26611c8b565b815260019190910154602090910152600282015460038301546004909301549192909160ff9091169084565b610d7d6040518060800160405280606081526020016060815260200160608152602001606081525090565b610d9d6002546001610d8f9190612031565b600180546100ea9190612091565b905090565b60056020526000908152604090819020815180830190925280549091908290829060ff166001811115610d1557610d15611c8b565b6000806000198180610de98680611fb7565b90501115610e6d57610e22610dfe8680611fb7565b6000818110610e0f57610e0f61207b565b905060a0020160000160200135836116ff565b9150610e6a610e318680611fb7565b6001610e3d8980611fb7565b610e48929150612091565b818110610e5757610e5761207b565b905060a002016000016020013582611715565b90505b6000610e7c6020870187611fb7565b90501115610eb857610e94610dfe6020870187611fb7565b9150610eb5610ea66020870187611fb7565b6001610e3d60208a018a611fb7565b90505b6000610ec76040870187611fb7565b90501115610f0357610edf610dfe6040870187611fb7565b9150610f00610ef16040870187611fb7565b6001610e3d60408a018a611fb7565b90505b9094909350915050565b6060610f1c6040830183611fb7565b1590508015610f345750610f308280611fb7565b1590505b8015610f4c5750610f486020830183611fb7565b1590505b15610f665750604080516000815260208101909152610cda565b600080808080610f796040880188611fb7565b9050610f886020890189611fb7565b9050610f948980611fb7565b610f9f929150612031565b610fa99190612031565b905060008167ffffffffffffffff811115610fc657610fc6612065565b604051908082528060200260200182016040528015610fef578160200160208202803683370190505b509050885b610ffe838b612031565b8110156112705761101260208a018a611fb7565b90508710801561104a57508061102b60208b018b611fb7565b8981811061103b5761103b61207b565b905060a0020160000160200135145b156110b25760018285815181106110635761106361207b565b6020026020010190600581111561107c5761107c611c8b565b9081600581111561108f5761108f611c8b565b9052508661109c81611f9e565b97505083806110aa90611f9e565b945050611268565b6110bc8980611fb7565b9050861080156110f15750806110d28a80611fb7565b888181106110e2576110e261207b565b905060a0020160000160200135145b1561115157600482858151811061110a5761110a61207b565b6020026020010190600581111561112357611123611c8b565b9081600581111561113657611136611c8b565b9052508561114381611f9e565b96505083806110aa90611f9e565b61115e60408a018a611fb7565b90508510801561119657508061117760408b018b611fb7565b878181106111875761118761207b565b905060a0020160000160200135145b156111f65760038285815181106111af576111af61207b565b602002602001019060058111156111c8576111c8611c8b565b908160058111156111db576111db611c8b565b905250846111e881611f9e565b95505083806110aa90611f9e565b61122c604051806040016040528060158152602001743932b8bab2b9ba39903737ba1034b71037b93232b960591b815250611724565b60405162461bcd60e51b8152602060048201526011602482015270696e76616c696465204c3255706461746560781b6044820152606401610196565b600101610ff4565b5098975050505050505050565b6060600082900361129d5750604080516000815260208101909152611505565b6000808367ffffffffffffffff8111156112b9576112b9612065565b6040519080825280602002602001820160405280156112e2578160200160208202803683370190505b5090506000805b875181101561146c5760038882815181106113065761130661207b565b6020026020010151600581111561131f5761131f611c8b565b0361146457600087878461133281611f9e565b95508181106113435761134361207b565b905060a002018036038101906113599190612117565b9050600354816000015160200151116113725750611464565b60008160400151600581111561138a5761138a611c8b565b14806113ab57506003816040015160058111156113a9576113a9611c8b565b145b806113cb57506005816040015160058111156113c9576113c9611c8b565b145b806113eb57506002816040015160058111156113e9576113e9611c8b565b145b15611423576020810151848661140081611f9e565b9750815181106114125761141261207b565b602002602001018181525050611462565b60405162461bcd60e51b8152602060048201526014602482015273756e6b6e6f776e2072657175657374207479706560601b6044820152606401610196565b505b6001016112e9565b5060008367ffffffffffffffff81111561148857611488612065565b6040519080825280602002602001820160405280156114b1578160200160208202803683370190505b50905060005b848110156114fe578381815181106114d1576114d161207b565b60200260200101518282815181106114eb576114eb61207b565b60209081029190910101526001016114b7565b5093505050505b9392505050565b6000806000805b85518110156116f75760018682815181106115305761153061207b565b6020026020010151600581111561154957611549611c8b565b036115b9573661155c6020870187611fb7565b8561156681611f9e565b96508181106115775761157761207b565b905060a00201905060035481600001602001351161159557506116ef565b61159e8161176a565b600380549060006115ae83611f9e565b9190505550506116ef565b60048682815181106115cd576115cd61207b565b602002602001015160058111156115e6576115e6611c8b565b0361163857366115f68680611fb7565b8661160081611f9e565b97508181106116115761161161207b565b905060a00201905060035481600001602001351161162f57506116ef565b61159e81611a15565b600386828151811061164c5761164c61207b565b6020026020010151600581111561166557611665611c8b565b036116b157366116786040870187611fb7565b8461168281611f9e565b95508181106116935761169361207b565b905060a00201905060035481600001602001351161159e57506116ef565b60405162461bcd60e51b8152602060048201526013602482015272756e6b6e6f776e20757064617465207479706560681b6044820152606401610196565b600101611513565b505050505050565b600081831061170e5781611505565b5090919050565b600081831161170e5781611505565b6117678160405160240161173891906121a7565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611b67565b50565b600061177c60808301606084016121f6565b6040516370a0823160e01b81523060048201529091506000906080840135906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f09190612211565b6040805160c0810190915291111591504340906000908060808101808481526020016001600081548092919061182590611f9e565b9091555090528152602087810135818301528515156040808401919091526060909201859052825181015160009081526004909152208151805182549394508493839190829060ff19166001838181111561188257611882611c8b565b02179055506020918201516001919091015582810151600283015560408084015160038401805460ff191691151591909117905560609093015160049092019190915582518101518251908152851515918101919091527f0c4873525770dbb64515e9d3950131f79ed8f72ff147ff1723bbe2e77e3791aa910160405180910390a1821561064c576001600160a01b03841663a9059cbb61192960608801604089016121f6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152608088013560248201526044016020604051808303816000875af1158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d9190611f6b565b507fa92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a6119cf60608701604088016121f6565b6119df60808801606089016121f6565b604080516001600160a01b0393841681529290911660208301526080880135908201526060015b60405180910390a15050505050565b6000611a2960408301356060840135610653565b9050600081604051602001611a3e9190611e30565b60408051601f19818403018152828252805160209091012060c08301909152915043409060009080608081018084815260200160016000815480929190611a8490611f9e565b909155509052815260208781013581830152608088013586146040808401919091526060909201859052825181015160009081526005909152208151805182549394508493839190829060ff191660018381811115611ae557611ae5611c8b565b021790555060209182015160019091015582810151600283015560408084015160038401805491151560ff199092169190911790556060909301516004909201919091558201518282015191517fd16f202ac5905ff5d1851f4805ffe56d1212db32fa989881d0044b9cf0f7277692611a069282521515602082015260400190565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b828054828255906000526020600020908101928215611bc3579160200282015b82811115611bc3578251825591602001919060010190611ba8565b50611bcf929150611bd3565b5090565b5b80821115611bcf5760008155600101611bd4565b80356001600160a01b0381168114611bff57600080fd5b919050565b60008060408385031215611c1757600080fd5b611c2083611be8565b946020939093013593505050565b600060208284031215611c4057600080fd5b813567ffffffffffffffff811115611c5757600080fd5b82016060818503121561150557600080fd5b60008060408385031215611c7c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b805160028110611cc157634e487b7160e01b600052602160045260246000fd5b8252602090810151910152565b611cd9828251611ca1565b60208101516040830152604081015115156060830152606081015160808301525050565b60008151808452602080850194506020840160005b83811015611d3857611d25878351611cce565b60a0969096019590820190600101611d12565b509495945050505050565b60008151808452602080850194506020840160005b83811015611d3857611d6b878351611cce565b60a0969096019590820190600101611d58565b60008151808452602080850194506020840160005b83811015611d3857815187529582019590820190600101611d93565b600082825180855260208086019550808260051b84010181860160005b84811015611e2357601f1986840301895281516080611dec858351611ca1565b8582015160408281880152611e0383880183611d7e565b930151606096909601959095525098840198925090830190600101611dcc565b5090979650505050505050565b6000602080835260a080840185516080808588015282825180855260c0945060c089019150868401935060005b81811015611eb5578451611e72848251611ca1565b808901516001600160a01b039081166040868101919091528201511660608086019190915281015185850152840151878401529387019391850191600101611e5d565b5050858901519550601f19945084888203016040890152611ed68187611cfd565b955050505050604085015181858403016060860152611ef58382611d43565b925050606085015181858403016080860152611f118382611daf565b9695505050505050565b600060208284031215611f2d57600080fd5b5035919050565b60a08101611f428287611ca1565b60408201949094529115156060830152608090910152919050565b801515811461176757600080fd5b600060208284031215611f7d57600080fd5b815161150581611f5d565b634e487b7160e01b600052601160045260246000fd5b600060018201611fb057611fb0611f88565b5060010190565b6000808335601e19843603018112611fce57600080fd5b83018035915067ffffffffffffffff821115611fe957600080fd5b602001915060a08102360382131561200057600080fd5b9250929050565b60208082526010908201526f496e76616c6964204c3255706461746560801b604082015260600190565b80820180821115610cda57610cda611f88565b82815260406020820152600061205d6040830184611d7e565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610cda57610cda611f88565b6040516080810167ffffffffffffffff811182821017156120d557634e487b7160e01b600052604160045260246000fd5b60405290565b6040805190810167ffffffffffffffff811182821017156120d557634e487b7160e01b600052604160045260246000fd5b8035611bff81611f5d565b600081830360a081121561212a57600080fd5b6121326120a4565b604082121561214057600080fd5b6121486120db565b915083356002811061215957600080fd5b808352506020840135602083015281815260408401356020820152606084013591506006821061218857600080fd5b81604082015261219a6080850161210c565b6060820152949350505050565b60006020808352835180602085015260005b818110156121d5578581018301518582016040015282016121b9565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561220857600080fd5b61150582611be8565b60006020828403121561222357600080fd5b505191905056fea2646970667358221220ab9595f552f74d08dc18ece1f994078a6a8080bd7a80c87df24d251f434d93bf64736f6c63430008160033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637fd4f845116100665780637fd4f845146100fc578063a80fc9bd14610105578063b153870614610128578063ca9b21ae14610130578063f26ee9d01461014357600080fd5b806347e7ef24146100985780635740b89d146100ad57806361bc221a146100c057806379e041f2146100dc575b600080fd5b6100ab6100a6366004611c04565b61014c565b005b6100ab6100bb366004611c2e565b610409565b6100c960015481565b6040519081526020015b60405180910390f35b6100ef6100ea366004611c69565b610653565b6040516100d39190611e30565b6100c960025481565b610118610113366004611f1b565b610ce0565b6040516100d39493929190611f34565b6100ef610d52565b61011861013e366004611f1b565b610da2565b6100c960035481565b6001600160a01b03821661019f5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b60448201526064015b60405180910390fd5b600081116101ef5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610196565b6040516323b872dd60e01b81523360048201819052306024830152604482018390529083906001600160a01b038216906323b872dd906064016020604051808303816000875af1158015610247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026b9190611f6b565b6102af5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610196565b6040805160e081019091524340906000908060a0810180848152602001600160008154809291906102df90611f9e565b90915550905281526001600160a01b03808716602080840191909152908916604080840191909152606083018990526080909201859052825181015160009081526006909152208151805182549394508493839190829060ff19166001838181111561034d5761034d611c8b565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815289831693810193909352908a16908201529081018790527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa91015b60405180910390a1505050505050565b60016104186040830183611fb7565b90501015806104335750600161042e8280611fb7565b905010155b8061044d575060016104486020830183611fb7565b905010155b6104a35760405162461bcd60e51b815260206004820152602160248201527f4172726179206d7573742068617665206174206c6561737420312075706461746044820152606560f81b6064820152608401610196565b6000806104af83610dd7565b91509150816000036104d35760405162461bcd60e51b815260040161019690612007565b6003546104e1906001612031565b8211156105005760405162461bcd60e51b815260040161019690612007565b60035481116105215760405162461bcd60e51b815260040161019690612007565b600061052d8385610f0d565b90506000610547826105426040880188611fb7565b61127d565b9050610553828661150c565b80511561064c57600180546000918261056b83611f9e565b909155506040805160a0810190915290915080606081018060008152602090810185905290825281810185905243406040928301526000848152600790915220815180518254839190829060ff1916600183818111156105cd576105cd611c8b565b02179055506020918201516001909101558281015180516105f49260028501920190611b88565b50604082015181600301559050508151600260008282546106159190612031565b90915550506040517f09b30365986269e3939307e7ca7b7b7421a8ad08ef18bb766c668d27cbc2aef9906103f99083908590612044565b5050505050565b61067e6040518060800160405280606081526020016060815260200160608152602001606081525090565b6106a96040518060800160405280606081526020016060815260200160608152602001606081525090565b6000808080875b87811161076957600081815260066020526040902060010154156106e057846106d881611f9e565b955050610757565b60008181526007602052604090206001015415610709578161070181611f9e565b925050610757565b60008181526004602052604090206001015415610732578361072a81611f9e565b945050610757565b60008181526005602052604090206001015415610757578261075381611f9e565b9350505b8061076181611f9e565b9150506106b0565b508367ffffffffffffffff81111561078357610783612065565b6040519080825280602002602001820160405280156107e957816020015b6040805160e081018252600060a0820181815260c083018290528252602080830182905292820181905260608201819052608082015282526000199092019101816107a15790505b5085528167ffffffffffffffff81111561080557610805612065565b60405190808252806020026020018201604052801561086457816020015b6040805160c08101825260006080820181815260a0830182905282526020808301829052928201819052606082015282526000199092019101816108235790505b5060208601528267ffffffffffffffff81111561088357610883612065565b6040519080825280602002602001820160405280156108e257816020015b6040805160c08101825260006080820181815260a0830182905282526020808301829052928201819052606082015282526000199092019101816108a15790505b5060408601528067ffffffffffffffff81111561090157610901612065565b60405190808252806020026020018201604052801561095b57816020015b6040805160a0810182526000606080830182815260808401839052835260208301529181019190915281526020019060019003908161091f5790505b506060860152506000925082915081905080875b878111610cd15760008181526006602052604090206001015415610a505760008181526006602052604090819020815160e081019092528054829060a08201908390829060ff1660018111156109c7576109c7611c8b565b60018111156109d8576109d8611c8b565b81526001919091015460209182015290825260028301546001600160a01b0390811691830191909152600383015416604082015260048201546060820152600590910154608090910152865186610a2e81611f9e565b975081518110610a4057610a4061207b565b6020026020010181905250610cbf565b60008181526004602052604090206001015415610b0b5760008181526004602052604090819020815160c081019092528054829060808201908390829060ff166001811115610aa157610aa1611c8b565b6001811115610ab257610ab2611c8b565b815260019190910154602091820152908252600283015490820152600382015460ff16151560408083019190915260049092015460609091015287015185610af981611f9e565b965081518110610a4057610a4061207b565b60008181526007602052604090206001015415610c035760008181526007602052604090819020815160a081019092528054829060608201908390829060ff166001811115610b5c57610b5c611c8b565b6001811115610b6d57610b6d611c8b565b8152602001600182015481525050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bce57602002820191906000526020600020905b815481526020019060010190808311610bba575b5050505050815260200160038201548152505086606001518380610bf190611f9e565b945081518110610a4057610a4061207b565b60008181526005602052604090206002015415610cba5760008181526005602052604090819020815160c081019092528054829060808201908390829060ff166001811115610c5457610c54611c8b565b6001811115610c6557610c65611c8b565b815260019190910154602091820152908252600283015482820152600383015460ff161515604083015260049092015460609091015287015184610ca881611f9e565b955081518110610a4057610a4061207b565b610cd1565b80610cc981611f9e565b91505061096f565b50939450505050505b92915050565b60046020526000908152604090819020815180830190925280549091908290829060ff166001811115610d1557610d15611c8b565b6001811115610d2657610d26611c8b565b815260019190910154602090910152600282015460038301546004909301549192909160ff9091169084565b610d7d6040518060800160405280606081526020016060815260200160608152602001606081525090565b610d9d6002546001610d8f9190612031565b600180546100ea9190612091565b905090565b60056020526000908152604090819020815180830190925280549091908290829060ff166001811115610d1557610d15611c8b565b6000806000198180610de98680611fb7565b90501115610e6d57610e22610dfe8680611fb7565b6000818110610e0f57610e0f61207b565b905060a0020160000160200135836116ff565b9150610e6a610e318680611fb7565b6001610e3d8980611fb7565b610e48929150612091565b818110610e5757610e5761207b565b905060a002016000016020013582611715565b90505b6000610e7c6020870187611fb7565b90501115610eb857610e94610dfe6020870187611fb7565b9150610eb5610ea66020870187611fb7565b6001610e3d60208a018a611fb7565b90505b6000610ec76040870187611fb7565b90501115610f0357610edf610dfe6040870187611fb7565b9150610f00610ef16040870187611fb7565b6001610e3d60408a018a611fb7565b90505b9094909350915050565b6060610f1c6040830183611fb7565b1590508015610f345750610f308280611fb7565b1590505b8015610f4c5750610f486020830183611fb7565b1590505b15610f665750604080516000815260208101909152610cda565b600080808080610f796040880188611fb7565b9050610f886020890189611fb7565b9050610f948980611fb7565b610f9f929150612031565b610fa99190612031565b905060008167ffffffffffffffff811115610fc657610fc6612065565b604051908082528060200260200182016040528015610fef578160200160208202803683370190505b509050885b610ffe838b612031565b8110156112705761101260208a018a611fb7565b90508710801561104a57508061102b60208b018b611fb7565b8981811061103b5761103b61207b565b905060a0020160000160200135145b156110b25760018285815181106110635761106361207b565b6020026020010190600581111561107c5761107c611c8b565b9081600581111561108f5761108f611c8b565b9052508661109c81611f9e565b97505083806110aa90611f9e565b945050611268565b6110bc8980611fb7565b9050861080156110f15750806110d28a80611fb7565b888181106110e2576110e261207b565b905060a0020160000160200135145b1561115157600482858151811061110a5761110a61207b565b6020026020010190600581111561112357611123611c8b565b9081600581111561113657611136611c8b565b9052508561114381611f9e565b96505083806110aa90611f9e565b61115e60408a018a611fb7565b90508510801561119657508061117760408b018b611fb7565b878181106111875761118761207b565b905060a0020160000160200135145b156111f65760038285815181106111af576111af61207b565b602002602001019060058111156111c8576111c8611c8b565b908160058111156111db576111db611c8b565b905250846111e881611f9e565b95505083806110aa90611f9e565b61122c604051806040016040528060158152602001743932b8bab2b9ba39903737ba1034b71037b93232b960591b815250611724565b60405162461bcd60e51b8152602060048201526011602482015270696e76616c696465204c3255706461746560781b6044820152606401610196565b600101610ff4565b5098975050505050505050565b6060600082900361129d5750604080516000815260208101909152611505565b6000808367ffffffffffffffff8111156112b9576112b9612065565b6040519080825280602002602001820160405280156112e2578160200160208202803683370190505b5090506000805b875181101561146c5760038882815181106113065761130661207b565b6020026020010151600581111561131f5761131f611c8b565b0361146457600087878461133281611f9e565b95508181106113435761134361207b565b905060a002018036038101906113599190612117565b9050600354816000015160200151116113725750611464565b60008160400151600581111561138a5761138a611c8b565b14806113ab57506003816040015160058111156113a9576113a9611c8b565b145b806113cb57506005816040015160058111156113c9576113c9611c8b565b145b806113eb57506002816040015160058111156113e9576113e9611c8b565b145b15611423576020810151848661140081611f9e565b9750815181106114125761141261207b565b602002602001018181525050611462565b60405162461bcd60e51b8152602060048201526014602482015273756e6b6e6f776e2072657175657374207479706560601b6044820152606401610196565b505b6001016112e9565b5060008367ffffffffffffffff81111561148857611488612065565b6040519080825280602002602001820160405280156114b1578160200160208202803683370190505b50905060005b848110156114fe578381815181106114d1576114d161207b565b60200260200101518282815181106114eb576114eb61207b565b60209081029190910101526001016114b7565b5093505050505b9392505050565b6000806000805b85518110156116f75760018682815181106115305761153061207b565b6020026020010151600581111561154957611549611c8b565b036115b9573661155c6020870187611fb7565b8561156681611f9e565b96508181106115775761157761207b565b905060a00201905060035481600001602001351161159557506116ef565b61159e8161176a565b600380549060006115ae83611f9e565b9190505550506116ef565b60048682815181106115cd576115cd61207b565b602002602001015160058111156115e6576115e6611c8b565b0361163857366115f68680611fb7565b8661160081611f9e565b97508181106116115761161161207b565b905060a00201905060035481600001602001351161162f57506116ef565b61159e81611a15565b600386828151811061164c5761164c61207b565b6020026020010151600581111561166557611665611c8b565b036116b157366116786040870187611fb7565b8461168281611f9e565b95508181106116935761169361207b565b905060a00201905060035481600001602001351161159e57506116ef565b60405162461bcd60e51b8152602060048201526013602482015272756e6b6e6f776e20757064617465207479706560681b6044820152606401610196565b600101611513565b505050505050565b600081831061170e5781611505565b5090919050565b600081831161170e5781611505565b6117678160405160240161173891906121a7565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611b67565b50565b600061177c60808301606084016121f6565b6040516370a0823160e01b81523060048201529091506000906080840135906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f09190612211565b6040805160c0810190915291111591504340906000908060808101808481526020016001600081548092919061182590611f9e565b9091555090528152602087810135818301528515156040808401919091526060909201859052825181015160009081526004909152208151805182549394508493839190829060ff19166001838181111561188257611882611c8b565b02179055506020918201516001919091015582810151600283015560408084015160038401805460ff191691151591909117905560609093015160049092019190915582518101518251908152851515918101919091527f0c4873525770dbb64515e9d3950131f79ed8f72ff147ff1723bbe2e77e3791aa910160405180910390a1821561064c576001600160a01b03841663a9059cbb61192960608801604089016121f6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152608088013560248201526044016020604051808303816000875af1158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d9190611f6b565b507fa92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a6119cf60608701604088016121f6565b6119df60808801606089016121f6565b604080516001600160a01b0393841681529290911660208301526080880135908201526060015b60405180910390a15050505050565b6000611a2960408301356060840135610653565b9050600081604051602001611a3e9190611e30565b60408051601f19818403018152828252805160209091012060c08301909152915043409060009080608081018084815260200160016000815480929190611a8490611f9e565b909155509052815260208781013581830152608088013586146040808401919091526060909201859052825181015160009081526005909152208151805182549394508493839190829060ff191660018381811115611ae557611ae5611c8b565b021790555060209182015160019091015582810151600283015560408084015160038401805491151560ff199092169190911790556060909301516004909201919091558201518282015191517fd16f202ac5905ff5d1851f4805ffe56d1212db32fa989881d0044b9cf0f7277692611a069282521515602082015260400190565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b828054828255906000526020600020908101928215611bc3579160200282015b82811115611bc3578251825591602001919060010190611ba8565b50611bcf929150611bd3565b5090565b5b80821115611bcf5760008155600101611bd4565b80356001600160a01b0381168114611bff57600080fd5b919050565b60008060408385031215611c1757600080fd5b611c2083611be8565b946020939093013593505050565b600060208284031215611c4057600080fd5b813567ffffffffffffffff811115611c5757600080fd5b82016060818503121561150557600080fd5b60008060408385031215611c7c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b805160028110611cc157634e487b7160e01b600052602160045260246000fd5b8252602090810151910152565b611cd9828251611ca1565b60208101516040830152604081015115156060830152606081015160808301525050565b60008151808452602080850194506020840160005b83811015611d3857611d25878351611cce565b60a0969096019590820190600101611d12565b509495945050505050565b60008151808452602080850194506020840160005b83811015611d3857611d6b878351611cce565b60a0969096019590820190600101611d58565b60008151808452602080850194506020840160005b83811015611d3857815187529582019590820190600101611d93565b600082825180855260208086019550808260051b84010181860160005b84811015611e2357601f1986840301895281516080611dec858351611ca1565b8582015160408281880152611e0383880183611d7e565b930151606096909601959095525098840198925090830190600101611dcc565b5090979650505050505050565b6000602080835260a080840185516080808588015282825180855260c0945060c089019150868401935060005b81811015611eb5578451611e72848251611ca1565b808901516001600160a01b039081166040868101919091528201511660608086019190915281015185850152840151878401529387019391850191600101611e5d565b5050858901519550601f19945084888203016040890152611ed68187611cfd565b955050505050604085015181858403016060860152611ef58382611d43565b925050606085015181858403016080860152611f118382611daf565b9695505050505050565b600060208284031215611f2d57600080fd5b5035919050565b60a08101611f428287611ca1565b60408201949094529115156060830152608090910152919050565b801515811461176757600080fd5b600060208284031215611f7d57600080fd5b815161150581611f5d565b634e487b7160e01b600052601160045260246000fd5b600060018201611fb057611fb0611f88565b5060010190565b6000808335601e19843603018112611fce57600080fd5b83018035915067ffffffffffffffff821115611fe957600080fd5b602001915060a08102360382131561200057600080fd5b9250929050565b60208082526010908201526f496e76616c6964204c3255706461746560801b604082015260600190565b80820180821115610cda57610cda611f88565b82815260406020820152600061205d6040830184611d7e565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610cda57610cda611f88565b6040516080810167ffffffffffffffff811182821017156120d557634e487b7160e01b600052604160045260246000fd5b60405290565b6040805190810167ffffffffffffffff811182821017156120d557634e487b7160e01b600052604160045260246000fd5b8035611bff81611f5d565b600081830360a081121561212a57600080fd5b6121326120a4565b604082121561214057600080fd5b6121486120db565b915083356002811061215957600080fd5b808352506020840135602083015281815260408401356020820152606084013591506006821061218857600080fd5b81604082015261219a6080850161210c565b6060820152949350505050565b60006020808352835180602085015260005b818110156121d5578581018301518582016040015282016121b9565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561220857600080fd5b61150582611be8565b60006020828403121561222357600080fd5b505191905056fea2646970667358221220ab9595f552f74d08dc18ece1f994078a6a8080bd7a80c87df24d251f434d93bf64736f6c63430008160033
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.