Contract Overview
Balance:
0 ETH
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0xf533448064d71024f3e0f81a4cda2b317242cd7974cc124f875f2712e7ae5da2 | 0x60a06040 | 12484966 | 61 days 16 mins ago | 0xc625f59d51ecdff57fefe535c80d318ca42a0ec4 | IN | Create: Events | 0 ETH | 0.002377025094 |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Events
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.18; import {IAccount, IEvents} from "src/interfaces/IEvents.sol"; import {IFactory} from "./interfaces/IFactory.sol"; /// @title Consolidates all events emitted by the Smart Margin Accounts /// @dev restricted to only Smart Margin Accounts /// @author JaredBorders ([email protected]) contract Events is IEvents { /*////////////////////////////////////////////////////////////// IMMUTABLES //////////////////////////////////////////////////////////////*/ /// @inheritdoc IEvents address public immutable factory; /*////////////////////////////////////////////////////////////// MODIFIERS //////////////////////////////////////////////////////////////*/ /// @dev modifier that restricts access to only accounts modifier onlyAccounts() { if (!IFactory(factory).accounts(msg.sender)) { revert OnlyAccounts(); } _; } /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ /// @notice constructs the Events contract /// @param _factory: address of the factory contract constructor(address _factory) { factory = _factory; } /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ /// @inheritdoc IEvents function emitDeposit(address user, uint256 amount) external override onlyAccounts { emit Deposit({user: user, account: msg.sender, amount: amount}); } /// @inheritdoc IEvents function emitWithdraw(address user, uint256 amount) external override onlyAccounts { emit Withdraw({user: user, account: msg.sender, amount: amount}); } /// @inheritdoc IEvents function emitEthWithdraw(address user, uint256 amount) external override onlyAccounts { emit EthWithdraw({user: user, account: msg.sender, amount: amount}); } /// @inheritdoc IEvents function emitUniswapV3Swap( address tokenIn, address tokenOut, address recipient, uint256 amountIn, uint256 amountOutMinimum ) external override onlyAccounts { emit UniswapV3Swap({ tokenIn: tokenIn, tokenOut: tokenOut, recipient: recipient, amountIn: amountIn, amountOutMinimum: amountOutMinimum }); } /// @inheritdoc IEvents function emitConditionalOrderPlaced( uint256 conditionalOrderId, bytes32 gelatoTaskId, bytes32 marketKey, int256 marginDelta, int256 sizeDelta, uint256 targetPrice, IAccount.ConditionalOrderTypes conditionalOrderType, uint256 desiredFillPrice, bool reduceOnly ) external override onlyAccounts { emit ConditionalOrderPlaced({ account: msg.sender, conditionalOrderId: conditionalOrderId, gelatoTaskId: gelatoTaskId, marketKey: marketKey, marginDelta: marginDelta, sizeDelta: sizeDelta, targetPrice: targetPrice, conditionalOrderType: conditionalOrderType, desiredFillPrice: desiredFillPrice, reduceOnly: reduceOnly }); } /// @inheritdoc IEvents function emitConditionalOrderCancelled( uint256 conditionalOrderId, bytes32 gelatoTaskId, IAccount.ConditionalOrderCancelledReason reason ) external override onlyAccounts { emit ConditionalOrderCancelled({ account: msg.sender, conditionalOrderId: conditionalOrderId, gelatoTaskId: gelatoTaskId, reason: reason }); } /// @inheritdoc IEvents function emitConditionalOrderFilled( uint256 conditionalOrderId, bytes32 gelatoTaskId, uint256 fillPrice, uint256 keeperFee, IAccount.PriceOracleUsed priceOracle ) external override onlyAccounts { emit ConditionalOrderFilled({ account: msg.sender, conditionalOrderId: conditionalOrderId, gelatoTaskId: gelatoTaskId, fillPrice: fillPrice, keeperFee: keeperFee, priceOracle: priceOracle }); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.18; import {IAccount} from "./IAccount.sol"; /// @title Interface for contract that emits all events emitted by the Smart Margin Accounts /// @author JaredBorders ([email protected]) interface IEvents { /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ /// @notice emitted when a non-account contract attempts to call a restricted function error OnlyAccounts(); /*////////////////////////////////////////////////////////////// VIEWS //////////////////////////////////////////////////////////////*/ /// @notice returns the address of the factory contract function factory() external view returns (address); /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ /// @notice emitted after a successful withdrawal /// @param user: the address that withdrew from account /// @param amount: amount of marginAsset to withdraw from account function emitDeposit(address user, uint256 amount) external; event Deposit( address indexed user, address indexed account, uint256 amount ); /// @notice emitted after a successful withdrawal /// @param user: the address that withdrew from account /// @param amount: amount of marginAsset to withdraw from account function emitWithdraw(address user, uint256 amount) external; event Withdraw( address indexed user, address indexed account, uint256 amount ); /// @notice emitted after a successful ETH withdrawal /// @param user: the address that withdrew from account /// @param amount: amount of ETH to withdraw from account function emitEthWithdraw(address user, uint256 amount) external; event EthWithdraw( address indexed user, address indexed account, uint256 amount ); /// @notice emitted after a successful token swap /// @param tokenIn: contract address of the inbound token /// @param tokenOut: contract address of the outbound token /// @param recipient: address to receive the outbound token /// @param amountIn: amount of inbound token to swap /// @param amountOutMinimum: minimum amount of outbound token to receive function emitUniswapV3Swap( address tokenIn, address tokenOut, address recipient, uint256 amountIn, uint256 amountOutMinimum ) external; event UniswapV3Swap( address tokenIn, address tokenOut, address recipient, uint256 amountIn, uint256 amountOutMinimum ); /// @notice emitted when a conditional order is placed /// @param conditionalOrderId: id of conditional order /// @param gelatoTaskId: id of gelato task /// @param marketKey: Synthetix PerpsV2 market key /// @param marginDelta: margin change /// @param sizeDelta: size change /// @param targetPrice: targeted fill price /// @param conditionalOrderType: expected conditional order type enum where 0 = LIMIT, 1 = STOP, etc.. /// @param desiredFillPrice: desired price to fill Synthetix PerpsV2 order at execution time /// @param reduceOnly: if true, only allows position's absolute size to decrease function emitConditionalOrderPlaced( uint256 conditionalOrderId, bytes32 gelatoTaskId, bytes32 marketKey, int256 marginDelta, int256 sizeDelta, uint256 targetPrice, IAccount.ConditionalOrderTypes conditionalOrderType, uint256 desiredFillPrice, bool reduceOnly ) external; event ConditionalOrderPlaced( address indexed account, uint256 indexed conditionalOrderId, bytes32 indexed gelatoTaskId, bytes32 marketKey, int256 marginDelta, int256 sizeDelta, uint256 targetPrice, IAccount.ConditionalOrderTypes conditionalOrderType, uint256 desiredFillPrice, bool reduceOnly ); /// @notice emitted when a conditional order is cancelled /// @param conditionalOrderId: id of conditional order /// @param gelatoTaskId: id of gelato task /// @param reason: reason for cancellation function emitConditionalOrderCancelled( uint256 conditionalOrderId, bytes32 gelatoTaskId, IAccount.ConditionalOrderCancelledReason reason ) external; event ConditionalOrderCancelled( address indexed account, uint256 indexed conditionalOrderId, bytes32 indexed gelatoTaskId, IAccount.ConditionalOrderCancelledReason reason ); /// @notice emitted when a conditional order is filled /// @param conditionalOrderId: id of conditional order /// @param gelatoTaskId: id of gelato task /// @param fillPrice: price the conditional order was executed at /// @param keeperFee: fees paid to the executor /// @param priceOracle: price oracle used to execute conditional order function emitConditionalOrderFilled( uint256 conditionalOrderId, bytes32 gelatoTaskId, uint256 fillPrice, uint256 keeperFee, IAccount.PriceOracleUsed priceOracle ) external; event ConditionalOrderFilled( address indexed account, uint256 indexed conditionalOrderId, bytes32 indexed gelatoTaskId, uint256 fillPrice, uint256 keeperFee, IAccount.PriceOracleUsed priceOracle ); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.18; /// @title Kwenta Factory Interface /// @author JaredBorders ([email protected]) interface IFactory { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ /// @notice emitted when new account is created /// @param creator: account creator (address that called newAccount()) /// @param account: address of account that was created (will be address of proxy) /// @param version: version of account created event NewAccount( address indexed creator, address indexed account, bytes32 version ); /// @notice emitted when implementation is upgraded /// @param implementation: address of new implementation event AccountImplementationUpgraded(address implementation); /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ /// @notice thrown when factory cannot set account owner to the msg.sender /// @param data: data returned from failed low-level call error FailedToSetAcountOwner(bytes data); /// @notice thrown when Account creation fails due to no version being set /// @param data: data returned from failed low-level call error AccountFailedToFetchVersion(bytes data); /// @notice thrown when factory is not upgradable error CannotUpgrade(); /// @notice thrown when account is unrecognized by factory error AccountDoesNotExist(); /*////////////////////////////////////////////////////////////// VIEWS //////////////////////////////////////////////////////////////*/ /// @return canUpgrade: bool to determine if system can be upgraded function canUpgrade() external view returns (bool); /// @return logic: account logic address function implementation() external view returns (address); /// @param _account: address of account /// @return whether or not account exists function accounts(address _account) external view returns (bool); /// @param _account: address of account /// @return owner of account function getAccountOwner(address _account) external view returns (address); /// @param _owner: address of owner /// @return array of accounts owned by _owner function getAccountsOwnedBy(address _owner) external view returns (address[] memory); /*////////////////////////////////////////////////////////////// OWNERSHIP //////////////////////////////////////////////////////////////*/ /// @notice update owner to account(s) mapping /// @dev does *NOT* check new owner != old owner /// @param _newOwner: new owner of account /// @param _oldOwner: old owner of account function updateAccountOwnership(address _newOwner, address _oldOwner) external; /*////////////////////////////////////////////////////////////// ACCOUNT DEPLOYMENT //////////////////////////////////////////////////////////////*/ /// @notice create unique account proxy for function caller /// @return accountAddress address of account created function newAccount() external returns (address payable accountAddress); /*////////////////////////////////////////////////////////////// UPGRADABILITY //////////////////////////////////////////////////////////////*/ /// @notice upgrade implementation of account which all account proxies currently point to /// @dev this *will* impact all existing accounts /// @dev future accounts will also point to this new implementation (until /// upgradeAccountImplementation() is called again with a newer implementation) /// @dev *DANGER* this function does not check the new implementation for validity, /// thus, a bad upgrade could result in severe consequences. /// @param _implementation: address of new implementation function upgradeAccountImplementation(address _implementation) external; /// @notice remove upgradability from factory /// @dev cannot be undone function removeUpgradability() external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.18; import {IPerpsV2MarketConsolidated} from "src/interfaces/synthetix/IPerpsV2MarketConsolidated.sol"; /// @title Kwenta Smart Margin Account v2.1.0 Implementation Interface /// @author JaredBorders ([email protected]), JChiaramonte7 ([email protected]) interface IAccount { /*/////////////////////////////////////////////////////////////// Types ///////////////////////////////////////////////////////////////*/ /// @notice Command Flags used to decode commands to execute /// @dev under the hood ACCOUNT_MODIFY_MARGIN = 0, ACCOUNT_WITHDRAW_ETH = 1 enum Command { ACCOUNT_MODIFY_MARGIN, // 0 ACCOUNT_WITHDRAW_ETH, PERPS_V2_MODIFY_MARGIN, PERPS_V2_WITHDRAW_ALL_MARGIN, PERPS_V2_SUBMIT_ATOMIC_ORDER, PERPS_V2_SUBMIT_DELAYED_ORDER, // 5 PERPS_V2_SUBMIT_OFFCHAIN_DELAYED_ORDER, PERPS_V2_CLOSE_POSITION, PERPS_V2_SUBMIT_CLOSE_DELAYED_ORDER, PERPS_V2_SUBMIT_CLOSE_OFFCHAIN_DELAYED_ORDER, PERPS_V2_CANCEL_DELAYED_ORDER, // 10 PERPS_V2_CANCEL_OFFCHAIN_DELAYED_ORDER, GELATO_PLACE_CONDITIONAL_ORDER, GELATO_CANCEL_CONDITIONAL_ORDER, UNISWAP_V3_SWAP, PERMIT2_PERMIT // 15 } /// @notice denotes conditional order types for code clarity /// @dev under the hood LIMIT = 0, STOP = 1 enum ConditionalOrderTypes { LIMIT, STOP } /// @notice denotes conditional order cancelled reasons for code clarity /// @dev under the hood CONDITIONAL_ORDER_CANCELLED_BY_USER = 0, CONDITIONAL_ORDER_CANCELLED_NOT_REDUCE_ONLY = 1 enum ConditionalOrderCancelledReason { CONDITIONAL_ORDER_CANCELLED_BY_USER, CONDITIONAL_ORDER_CANCELLED_NOT_REDUCE_ONLY } /// @notice denotes what oracle is used for price when executing conditional orders /// @dev under the hood PYTH = 0, CHAINLINK = 1 enum PriceOracleUsed { PYTH, CHAINLINK } /// @param factory: address of the Smart Margin Account Factory /// @param events: address of the contract used by all accounts for emitting events /// @param marginAsset: address of the Synthetix ProxyERC20sUSD contract used as the margin asset /// @param perpsV2ExchangeRate: address of the Synthetix PerpsV2ExchangeRate /// @param futuresMarketManager: address of the Synthetix FuturesMarketManager /// @param systemStatus: address of the Synthetix SystemStatus /// @param gelato: address of Gelato /// @param ops: address of Ops /// @param settings: address of contract used to store global settings /// @param universalRouter: address of Uniswap's Universal Router /// @param permit2: address of Uniswap's Permit2 struct AccountConstructorParams { address factory; address events; address marginAsset; address perpsV2ExchangeRate; address futuresMarketManager; address systemStatus; address gelato; address ops; address settings; address universalRouter; address permit2; } /// marketKey: Synthetix PerpsV2 Market id/key /// marginDelta: amount of margin to deposit or withdraw; positive indicates deposit, negative withdraw /// sizeDelta: denoted in market currency (i.e. ETH, BTC, etc), size of Synthetix PerpsV2 position /// targetPrice: limit or stop price target needing to be met to submit Synthetix PerpsV2 order /// gelatoTaskId: unqiue taskId from gelato necessary for cancelling conditional orders /// conditionalOrderType: conditional order type to determine conditional order fill logic /// desiredFillPrice: desired price to fill Synthetix PerpsV2 order at execution time /// reduceOnly: if true, only allows position's absolute size to decrease struct ConditionalOrder { bytes32 marketKey; int256 marginDelta; int256 sizeDelta; uint256 targetPrice; bytes32 gelatoTaskId; ConditionalOrderTypes conditionalOrderType; uint256 desiredFillPrice; bool reduceOnly; } /// @dev see example below elucidating targtPrice vs desiredFillPrice: /// 1. targetPrice met (ex: targetPrice = X) /// 2. account submits delayed order to Synthetix PerpsV2 with desiredFillPrice = Y /// 3. keeper executes Synthetix PerpsV2 order after delay period /// 4. if current market price defined by Synthetix PerpsV2 /// after delay period satisfies desiredFillPrice order is filled /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ /// @notice thrown when commands length does not equal inputs length error LengthMismatch(); /// @notice thrown when Command given is not valid error InvalidCommandType(uint256 commandType); /// @notice thrown when conditional order type given is not valid due to zero sizeDelta error ZeroSizeDelta(); /// @notice exceeds useable margin /// @param available: amount of useable margin asset /// @param required: amount of margin asset required error InsufficientFreeMargin(uint256 available, uint256 required); /// @notice call to transfer ETH on withdrawal fails error EthWithdrawalFailed(); /// @notice base price from the oracle was invalid /// @dev Rate can be invalid either due to: /// 1. Returned as invalid from ExchangeRates - due to being stale or flagged by oracle /// 2. Out of deviation bounds w.r.t. to previously stored rate /// 3. if there is no valid stored rate, w.r.t. to previous 3 oracle rates /// 4. Price is zero error InvalidPrice(); /// @notice thrown when account execution has been disabled in the settings contract error AccountExecutionDisabled(); /// @notice thrown when a call attempts to reenter the protected function error Reentrancy(); /// @notice thrown when token swap attempted with invalid token (i.e. token that is not whitelisted) /// @param tokenIn: token attempting to swap from /// @param tokenOut: token attempting to swap to error TokenSwapNotAllowed(address tokenIn, address tokenOut); /// @notice thrown when a conditional order is attempted to be executed during invalid market conditions /// @param conditionalOrderId: conditional order id /// @param executor: address of executor error CannotExecuteConditionalOrder( uint256 conditionalOrderId, address executor ); /// @notice thrown when a conditional order is attempted to be executed but SM account cannot pay fee /// @param executorFee: fee required to execute conditional order error CannotPayExecutorFee(uint256 executorFee, address executor); /*////////////////////////////////////////////////////////////// VIEWS //////////////////////////////////////////////////////////////*/ /// @notice returns the version of the Account function VERSION() external view returns (bytes32); /// @return returns the amount of margin locked for future events (i.e. conditional orders) function committedMargin() external view returns (uint256); /// @return returns current conditional order id function conditionalOrderId() external view returns (uint256); /// @notice get delayed order data from Synthetix PerpsV2 /// @dev call reverts if _marketKey is invalid /// @param _marketKey: key for Synthetix PerpsV2 Market /// @return delayed order struct defining delayed order (will return empty struct if no delayed order exists) function getDelayedOrder(bytes32 _marketKey) external returns (IPerpsV2MarketConsolidated.DelayedOrder memory); /// @notice checker() is the Resolver for Gelato /// (see https://docs.gelato.network/developer-services/automate/guides/custom-logic-triggers/smart-contract-resolvers) /// @notice signal to a keeper that a conditional order is valid/invalid for execution /// @dev call reverts if conditional order Id does not map to a valid conditional order; /// ConditionalOrder.marketKey would be invalid /// @param _conditionalOrderId: key for an active conditional order /// @return canExec boolean that signals to keeper a conditional order can be executed by Gelato /// @return execPayload calldata for executing a conditional order function checker(uint256 _conditionalOrderId) external view returns (bool canExec, bytes memory execPayload); /// @notice the current withdrawable or usable balance /// @return free margin amount function freeMargin() external view returns (uint256); /// @notice get up-to-date position data from Synthetix PerpsV2 /// @param _marketKey: key for Synthetix PerpsV2 Market /// @return position struct defining current position function getPosition(bytes32 _marketKey) external returns (IPerpsV2MarketConsolidated.Position memory); /// @notice conditional order id mapped to conditional order /// @param _conditionalOrderId: id of conditional order /// @return conditional order function getConditionalOrder(uint256 _conditionalOrderId) external view returns (ConditionalOrder memory); /*////////////////////////////////////////////////////////////// MUTATIVE //////////////////////////////////////////////////////////////*/ /// @notice sets the initial owner of the account /// @dev only called once by the factory on account creation /// @param _owner: address of the owner function setInitialOwnership(address _owner) external; /// @notice executes commands along with provided inputs /// @param _commands: array of commands, each represented as an enum /// @param _inputs: array of byte strings containing abi encoded inputs for each command function execute(Command[] calldata _commands, bytes[] calldata _inputs) external payable; /// @notice execute queued conditional order /// @dev currently only supports conditional order submission via PERPS_V2_SUBMIT_OFFCHAIN_DELAYED_ORDER COMMAND /// @param _conditionalOrderId: key for an active conditional order function executeConditionalOrder(uint256 _conditionalOrderId) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.18; interface IPerpsV2MarketConsolidated { struct Position { uint64 id; uint64 lastFundingIndex; uint128 margin; uint128 lastPrice; int128 size; } struct DelayedOrder { bool isOffchain; int128 sizeDelta; uint128 desiredFillPrice; uint128 targetRoundId; uint128 commitDeposit; uint128 keeperDeposit; uint256 executableAtTime; uint256 intentionTime; bytes32 trackingCode; } function marketKey() external view returns (bytes32 key); function positions(address account) external view returns (Position memory); function delayedOrders(address account) external view returns (DelayedOrder memory); function baseAsset() external view returns (bytes32 key); function assetPrice() external view returns (uint256 price, bool invalid); function transferMargin(int256 marginDelta) external; function withdrawAllMargin() external; function modifyPositionWithTracking( int256 sizeDelta, uint256 desiredFillPrice, bytes32 trackingCode ) external; function closePositionWithTracking( uint256 desiredFillPrice, bytes32 trackingCode ) external; function submitCloseOffchainDelayedOrderWithTracking( uint256 desiredFillPrice, bytes32 trackingCode ) external; function submitCloseDelayedOrderWithTracking( uint256 desiredTimeDelta, uint256 desiredFillPrice, bytes32 trackingCode ) external; function submitDelayedOrderWithTracking( int256 sizeDelta, uint256 desiredTimeDelta, uint256 desiredFillPrice, bytes32 trackingCode ) external; function submitOffchainDelayedOrderWithTracking( int256 sizeDelta, uint256 desiredFillPrice, bytes32 trackingCode ) external; function cancelDelayedOrder(address account) external; function cancelOffchainDelayedOrder(address account) external; }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyAccounts","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"indexed":false,"internalType":"enum IAccount.ConditionalOrderCancelledReason","name":"reason","type":"uint8"}],"name":"ConditionalOrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"fillPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"keeperFee","type":"uint256"},{"indexed":false,"internalType":"enum IAccount.PriceOracleUsed","name":"priceOracle","type":"uint8"}],"name":"ConditionalOrderFilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"marketKey","type":"bytes32"},{"indexed":false,"internalType":"int256","name":"marginDelta","type":"int256"},{"indexed":false,"internalType":"int256","name":"sizeDelta","type":"int256"},{"indexed":false,"internalType":"uint256","name":"targetPrice","type":"uint256"},{"indexed":false,"internalType":"enum IAccount.ConditionalOrderTypes","name":"conditionalOrderType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"desiredFillPrice","type":"uint256"},{"indexed":false,"internalType":"bool","name":"reduceOnly","type":"bool"}],"name":"ConditionalOrderPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"name":"UniswapV3Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"internalType":"enum IAccount.ConditionalOrderCancelledReason","name":"reason","type":"uint8"}],"name":"emitConditionalOrderCancelled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"internalType":"uint256","name":"fillPrice","type":"uint256"},{"internalType":"uint256","name":"keeperFee","type":"uint256"},{"internalType":"enum IAccount.PriceOracleUsed","name":"priceOracle","type":"uint8"}],"name":"emitConditionalOrderFilled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"conditionalOrderId","type":"uint256"},{"internalType":"bytes32","name":"gelatoTaskId","type":"bytes32"},{"internalType":"bytes32","name":"marketKey","type":"bytes32"},{"internalType":"int256","name":"marginDelta","type":"int256"},{"internalType":"int256","name":"sizeDelta","type":"int256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"},{"internalType":"enum IAccount.ConditionalOrderTypes","name":"conditionalOrderType","type":"uint8"},{"internalType":"uint256","name":"desiredFillPrice","type":"uint256"},{"internalType":"bool","name":"reduceOnly","type":"bool"}],"name":"emitConditionalOrderPlaced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitEthWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"name":"emitUniswapV3Swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610d9e380380610d9e83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ce26100bc6000396000818161010601528181610192015281816102dd0152818161041301528181610564015281816106a3015281816107d101526108ff0152610ce26000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806379a495271161005b57806379a49527146100db578063b014da21146100ee578063c45a015514610101578063d63f1ca61461015157600080fd5b8063146c64fc1461008d57806328ba84ca146100a25780633b9d50e7146100b5578063568824dc146100c8575b600080fd5b6100a061009b366004610a28565b610164565b005b6100a06100b0366004610ace565b6102af565b6100a06100c3366004610af8565b6103e5565b6100a06100d6366004610b4d565b610536565b6100a06100e9366004610ace565b610675565b6100a06100fc366004610ace565b6107a3565b6101287f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100a061015f366004610b9a565b6108d1565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa1580156101ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102129190610bd3565b610248576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87893373ffffffffffffffffffffffffffffffffffffffff167fba811735fedb82e0b67094c3a35da6b732eddc026ac4c96ffe39530d5ad706f58a8a8a8a8a8a8a60405161029c9796959493929190610c2e565b60405180910390a4505050505050505050565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa158015610339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035d9190610bd3565b610393576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051818152339073ffffffffffffffffffffffffffffffffffffffff8416907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906020015b60405180910390a35050565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610bd3565b6104c9576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff87811682528681166020830152851681830152606081018490526080810183905290517ff91fb43a848c5a47fa97f843dad71ad1264fae4f40ca09f5b63804f53285fe2d9181900360a00190a15050505050565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa1580156105c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e49190610bd3565b61061a576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83853373ffffffffffffffffffffffffffffffffffffffff167f23644a348af99f6c71d7ec999ded77ff899c87403fdc65eafed1bd0f336b21dd86868660405161066693929190610c74565b60405180910390a45050505050565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190610bd3565b610759576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051818152339073ffffffffffffffffffffffffffffffffffffffff8416907f4ffc5e5909c5e9b0ea91efeaddb04bf70a58475f0c5f62d0314e6636ddb9ae96906020016103d9565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190610bd3565b610887576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051818152339073ffffffffffffffffffffffffffffffffffffffff8416907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020016103d9565b6040517f5e5c06e20000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e5c06e290602401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190610bd3565b6109b5576040517f3963460400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81833373ffffffffffffffffffffffffffffffffffffffff167fc5a43b936a8a2cbc928f034c4caa61dfa41b4cf0ec2782f472f9d16433199dc6846040516109fd9190610c99565b60405180910390a4505050565b60028110610a1757600080fd5b50565b8015158114610a1757600080fd5b60008060008060008060008060006101208a8c031215610a4757600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135610a7c81610a0a565b925060e08a013591506101008a0135610a9481610a1a565b809150509295985092959850929598565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ac957600080fd5b919050565b60008060408385031215610ae157600080fd5b610aea83610aa5565b946020939093013593505050565b600080600080600060a08688031215610b1057600080fd5b610b1986610aa5565b9450610b2760208701610aa5565b9350610b3560408701610aa5565b94979396509394606081013594506080013592915050565b600080600080600060a08688031215610b6557600080fd5b853594506020860135935060408601359250606086013591506080860135610b8c81610a0a565b809150509295509295909350565b600080600060608486031215610baf57600080fd5b83359250602084013591506040840135610bc881610a0a565b809150509250925092565b600060208284031215610be557600080fd5b8151610bf081610a1a565b9392505050565b60028110610a17577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060e082019050888252876020830152866040830152856060830152610c5485610bf7565b8460808301528360a083015282151560c083015298975050505050505050565b8381526020810183905260608101610c8b83610bf7565b826040830152949350505050565b60208101610ca683610bf7565b9190529056fea2646970667358221220d9a218e60ea3295c5de8e218767a94582d4fc0e840a01931afb120d96956dfd664736f6c6343000812003300000000000000000000000030582eee34719fe22b1b6c3b607636a3ab94522e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000030582eee34719fe22b1b6c3b607636a3ab94522e
-----Decoded View---------------
Arg [0] : _factory (address): 0x30582eeE34719fe22b1B6c3b607636A3ab94522E
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000030582eee34719fe22b1b6c3b607636a3ab94522e