{
  "contractName": "IGenericTraderProxyBase",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Dolomite * Base contract interface for implementing a generic trader proxy for trading assets using any trader from msg.sender\",\"methods\":{},\"title\":\"IGenericTraderProxyBase\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol\":\"IGenericTraderProxyBase\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IEventEmitterRegistry.sol\":{\"keccak256\":\"0x51ae058dafa3850ba14ea352c637af48e213c4b4e69e4d398b84ec6fed91d309\",\"urls\":[\"bzz-raw://974dda23508e2d7428433db7fb280c1bc82e197fd68f9d425c57f7bf57fdf82f\",\"dweb:/ipfs/QmeTteQN1tMXChaQ4nzBvLpndVfghaoznsQDM8kAqgDeF9\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol\":{\"keccak256\":\"0x2ac2830618b13f412f53c803cb8c5e79f1ea1a7da0767fb0c6430a3435153f6f\",\"urls\":[\"bzz-raw://5e128520cdac823bc7dbe5331708c650d9a4ad6a18ec3bb7d9e8739f8360cfc0\",\"dweb:/ipfs/QmcDcrnMcXUGm7NT3q6Z4idFzqcNZukrwHn5GjX44u5Win\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Events.sol\":{\"keccak256\":\"0x2345dcc1ebf53a3d5449dab083b1fb90b5362dae692f8ff3ad00078862894e9b\",\"urls\":[\"bzz-raw://ebd34c557c06caf0696774844f0ca9746412ecc452bdd978b3bca0fd71aefbde\",\"dweb:/ipfs/QmcwXXKgv77DqfhxABRg85WR6RBPTLmge5vJGp99o9kFf8\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50604c80601d6000396000f3fe6080604052600080fdfea365627a7a72315820ae251e103033de0fb3b954be5326f387658f2776daf7f03d39667291600bd1656c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x6080604052600080fdfea365627a7a72315820ae251e103033de0fb3b954be5326f387658f2776daf7f03d39667291600bd1656c6578706572696d656e74616cf564736f6c63430005100040",
  "sourceMap": "1043:2925:25:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1043:2925:25;;;;;;;",
  "deployedSourceMap": "1043:2925:25:-;;;;;",
  "source": "/*\n\n    Copyright 2023 Dolomite.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { IDolomiteMargin } from \"../../protocol/interfaces/IDolomiteMargin.sol\";\n\nimport { Types } from \"../../protocol/lib/Types.sol\";\nimport {IEventEmitterRegistry} from \"./IEventEmitterRegistry.sol\";\n\n\n/**\n * @title IGenericTraderProxyBase\n * @author Dolomite\n *\n * Base contract interface for implementing a generic trader proxy for trading assets using any trader from msg.sender\n */\ninterface IGenericTraderProxyBase {\n\n    // ============ Enums ============\n\n    enum TraderType {\n        /// @dev    The trade will be conducted using external liquidity, using an `ActionType.Sell` or `ActionType.Buy`\n        ///         action.\n        ExternalLiquidity,\n        /// @dev    The trade will be conducted using internal liquidity, using an `ActionType.Trade` action.\n        InternalLiquidity,\n        /// @dev    The trade will be conducted using external liquidity using an `ActionType.Sell` or `ActionType.Buy`\n        ///         action. If this TradeType is used, the trader must be validated using\n        ///         the `IIsolationModeToken#isTokenConverterTrusted` function on the IsolationMode token.\n        IsolationModeUnwrapper,\n        /// @dev    The trade will be conducted using external liquidity using an `ActionType.Sell` or `ActionType.Buy`\n        ///         action. If this TradeType is used, the trader must be validated using\n        ///         the `IIsolationModeToken#isTokenConverterTrusted` function on the IsolationMode token.\n        IsolationModeWrapper\n    }\n\n    // ============ Structs ============\n\n    struct\n    TraderParam {\n        /// @dev The type of trade to conduct\n        TraderType traderType;\n        /// @dev    The index into the `_makerAccounts` array of the maker account to trade with. Should be set to 0 if\n        ///         the traderType is not `TraderType.InternalLiquidity`.\n        uint256 makerAccountIndex;\n        /// @dev The address of IAutoTrader or IExchangeWrapper that will be used to conduct the trade.\n        address trader;\n        /// @dev The data that will be passed through to the trader contract.\n        bytes tradeData;\n    }\n\n    struct GenericTraderProxyCache {\n        IDolomiteMargin dolomiteMargin;\n        IEventEmitterRegistry eventEmitterRegistry;\n        /// @dev    True if the user is making a margin deposit, false if they are withdrawing. False if the variable is\n        ///         unused too.\n        bool isMarginDeposit;\n        /// @dev    The other account number that is not `_traderAccountNumber`. Only used for TransferCollateralParams.\n        uint256 otherAccountNumber;\n        /// @dev    The index into the account array at which traders start.\n        uint256 traderAccountStartIndex;\n        /// @dev    The cursor for the looping through the operation's actions.\n        uint256 actionsCursor;\n        /// @dev    The balance of `inputMarket` that the trader has before the call to `dolomiteMargin.operate`\n        Types.Wei inputBalanceWeiBeforeOperate;\n        /// @dev    The balance of `outputMarket` that the trader has before the call to `dolomiteMargin.operate`\n        Types.Wei outputBalanceWeiBeforeOperate;\n        /// @dev    The balance of `transferMarket` that the trader has before the call to `dolomiteMargin.operate`\n        Types.Wei transferBalanceWeiBeforeOperate;\n    }\n}\n",
  "sourcePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol",
  "ast": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol",
    "exportedSymbols": {
      "IGenericTraderProxyBase": [
        4608
      ]
    },
    "id": 4609,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4567,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "595:23:25"
      },
      {
        "id": 4568,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "619:33:25"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
        "file": "../../protocol/interfaces/IDolomiteMargin.sol",
        "id": 4570,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 24694,
        "src": "654:80:25",
        "symbolAliases": [
          {
            "foreign": 4569,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../../protocol/lib/Types.sol",
        "id": 4572,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 31362,
        "src": "736:53:25",
        "symbolAliases": [
          {
            "foreign": 4571,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IEventEmitterRegistry.sol",
        "file": "./IEventEmitterRegistry.sol",
        "id": 4574,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 4499,
        "src": "790:66:25",
        "symbolAliases": [
          {
            "foreign": 4573,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": "@title IGenericTraderProxyBase\n@author Dolomite\n * Base contract interface for implementing a generic trader proxy for trading assets using any trader from msg.sender",
        "fullyImplemented": true,
        "id": 4608,
        "linearizedBaseContracts": [
          4608
        ],
        "name": "IGenericTraderProxyBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "IGenericTraderProxyBase.TraderType",
            "id": 4579,
            "members": [
              {
                "id": 4575,
                "name": "ExternalLiquidity",
                "nodeType": "EnumValue",
                "src": "1299:17:25"
              },
              {
                "id": 4576,
                "name": "InternalLiquidity",
                "nodeType": "EnumValue",
                "src": "1436:17:25"
              },
              {
                "id": 4577,
                "name": "IsolationModeUnwrapper",
                "nodeType": "EnumValue",
                "src": "1780:22:25"
              },
              {
                "id": 4578,
                "name": "IsolationModeWrapper",
                "nodeType": "EnumValue",
                "src": "2129:20:25"
              }
            ],
            "name": "TraderType",
            "nodeType": "EnumDefinition",
            "src": "1124:1031:25"
          },
          {
            "canonicalName": "IGenericTraderProxyBase.TraderParam",
            "id": 4588,
            "members": [
              {
                "constant": false,
                "id": 4581,
                "name": "traderType",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2282:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_TraderType_$4579",
                  "typeString": "enum IGenericTraderProxyBase.TraderType"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4580,
                  "name": "TraderType",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4579,
                  "src": "2282:10:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_TraderType_$4579",
                    "typeString": "enum IGenericTraderProxyBase.TraderType"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4583,
                "name": "makerAccountIndex",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2507:25:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4582,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2507:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4585,
                "name": "trader",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2646:14:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 4584,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2646:7:25",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4587,
                "name": "tradeData",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2748:15:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 4586,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "2748:5:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TraderParam",
            "nodeType": "StructDefinition",
            "scope": 4608,
            "src": "2203:567:25",
            "visibility": "public"
          },
          {
            "canonicalName": "IGenericTraderProxyBase.GenericTraderProxyCache",
            "id": 4607,
            "members": [
              {
                "constant": false,
                "id": 4590,
                "name": "dolomiteMargin",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "2817:30:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IDolomiteMargin_$24693",
                  "typeString": "contract IDolomiteMargin"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4589,
                  "name": "IDolomiteMargin",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 24693,
                  "src": "2817:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IDolomiteMargin_$24693",
                    "typeString": "contract IDolomiteMargin"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4592,
                "name": "eventEmitterRegistry",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "2857:42:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IEventEmitterRegistry_$4498",
                  "typeString": "contract IEventEmitterRegistry"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4591,
                  "name": "IEventEmitterRegistry",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4498,
                  "src": "2857:21:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEventEmitterRegistry_$4498",
                    "typeString": "contract IEventEmitterRegistry"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4594,
                "name": "isMarginDeposit",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3062:20:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 4593,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3062:4:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4596,
                "name": "otherAccountNumber",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3213:26:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4595,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3213:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4598,
                "name": "traderAccountStartIndex",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3326:31:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4597,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3326:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4600,
                "name": "actionsCursor",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3447:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4599,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3447:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4602,
                "name": "inputBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3591:38:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4601,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3591:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4604,
                "name": "outputBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3753:39:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4603,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3753:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4606,
                "name": "transferBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3918:41:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4605,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3918:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GenericTraderProxyCache",
            "nodeType": "StructDefinition",
            "scope": 4608,
            "src": "2776:1190:25",
            "visibility": "public"
          }
        ],
        "scope": 4609,
        "src": "1043:2925:25"
      }
    ],
    "src": "595:3374:25"
  },
  "legacyAST": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IGenericTraderProxyBase.sol",
    "exportedSymbols": {
      "IGenericTraderProxyBase": [
        4608
      ]
    },
    "id": 4609,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4567,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "595:23:25"
      },
      {
        "id": 4568,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "619:33:25"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
        "file": "../../protocol/interfaces/IDolomiteMargin.sol",
        "id": 4570,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 24694,
        "src": "654:80:25",
        "symbolAliases": [
          {
            "foreign": 4569,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../../protocol/lib/Types.sol",
        "id": 4572,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 31362,
        "src": "736:53:25",
        "symbolAliases": [
          {
            "foreign": 4571,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/interfaces/IEventEmitterRegistry.sol",
        "file": "./IEventEmitterRegistry.sol",
        "id": 4574,
        "nodeType": "ImportDirective",
        "scope": 4609,
        "sourceUnit": 4499,
        "src": "790:66:25",
        "symbolAliases": [
          {
            "foreign": 4573,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": "@title IGenericTraderProxyBase\n@author Dolomite\n * Base contract interface for implementing a generic trader proxy for trading assets using any trader from msg.sender",
        "fullyImplemented": true,
        "id": 4608,
        "linearizedBaseContracts": [
          4608
        ],
        "name": "IGenericTraderProxyBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "IGenericTraderProxyBase.TraderType",
            "id": 4579,
            "members": [
              {
                "id": 4575,
                "name": "ExternalLiquidity",
                "nodeType": "EnumValue",
                "src": "1299:17:25"
              },
              {
                "id": 4576,
                "name": "InternalLiquidity",
                "nodeType": "EnumValue",
                "src": "1436:17:25"
              },
              {
                "id": 4577,
                "name": "IsolationModeUnwrapper",
                "nodeType": "EnumValue",
                "src": "1780:22:25"
              },
              {
                "id": 4578,
                "name": "IsolationModeWrapper",
                "nodeType": "EnumValue",
                "src": "2129:20:25"
              }
            ],
            "name": "TraderType",
            "nodeType": "EnumDefinition",
            "src": "1124:1031:25"
          },
          {
            "canonicalName": "IGenericTraderProxyBase.TraderParam",
            "id": 4588,
            "members": [
              {
                "constant": false,
                "id": 4581,
                "name": "traderType",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2282:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_TraderType_$4579",
                  "typeString": "enum IGenericTraderProxyBase.TraderType"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4580,
                  "name": "TraderType",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4579,
                  "src": "2282:10:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_TraderType_$4579",
                    "typeString": "enum IGenericTraderProxyBase.TraderType"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4583,
                "name": "makerAccountIndex",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2507:25:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4582,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2507:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4585,
                "name": "trader",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2646:14:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 4584,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2646:7:25",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4587,
                "name": "tradeData",
                "nodeType": "VariableDeclaration",
                "scope": 4588,
                "src": "2748:15:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 4586,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "2748:5:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TraderParam",
            "nodeType": "StructDefinition",
            "scope": 4608,
            "src": "2203:567:25",
            "visibility": "public"
          },
          {
            "canonicalName": "IGenericTraderProxyBase.GenericTraderProxyCache",
            "id": 4607,
            "members": [
              {
                "constant": false,
                "id": 4590,
                "name": "dolomiteMargin",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "2817:30:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IDolomiteMargin_$24693",
                  "typeString": "contract IDolomiteMargin"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4589,
                  "name": "IDolomiteMargin",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 24693,
                  "src": "2817:15:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IDolomiteMargin_$24693",
                    "typeString": "contract IDolomiteMargin"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4592,
                "name": "eventEmitterRegistry",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "2857:42:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IEventEmitterRegistry_$4498",
                  "typeString": "contract IEventEmitterRegistry"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4591,
                  "name": "IEventEmitterRegistry",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4498,
                  "src": "2857:21:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEventEmitterRegistry_$4498",
                    "typeString": "contract IEventEmitterRegistry"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4594,
                "name": "isMarginDeposit",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3062:20:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 4593,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3062:4:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4596,
                "name": "otherAccountNumber",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3213:26:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4595,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3213:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4598,
                "name": "traderAccountStartIndex",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3326:31:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4597,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3326:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4600,
                "name": "actionsCursor",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3447:21:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4599,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3447:7:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4602,
                "name": "inputBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3591:38:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4601,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3591:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4604,
                "name": "outputBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3753:39:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4603,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3753:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4606,
                "name": "transferBalanceWeiBeforeOperate",
                "nodeType": "VariableDeclaration",
                "scope": 4607,
                "src": "3918:41:25",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                  "typeString": "struct Types.Wei"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 4605,
                  "name": "Types.Wei",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 31149,
                  "src": "3918:9:25",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                    "typeString": "struct Types.Wei"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "GenericTraderProxyCache",
            "nodeType": "StructDefinition",
            "scope": 4608,
            "src": "2776:1190:25",
            "visibility": "public"
          }
        ],
        "scope": 4609,
        "src": "1043:2925:25"
      }
    ],
    "src": "595:3374:25"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2026-03-02T16:38:28.543Z",
  "devdoc": {
    "author": "Dolomite * Base contract interface for implementing a generic trader proxy for trading assets using any trader from msg.sender",
    "methods": {},
    "title": "IGenericTraderProxyBase"
  },
  "userdoc": {
    "methods": {}
  }
}