UNPKG

@dolomite-exchange/dolomite-margin

Version:

Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol

1,025 lines (1,024 loc) 80 kB
{ "contractName": "AccountBalanceLib", "abi": [], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Dolomite * Library contract that checks a user's balance after an operation to be non-negative\",\"methods\":{},\"title\":\"AccountBalanceLib\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol\":\"AccountBalanceLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol\":{\"keccak256\":\"0x76fd16d615fe7cfceaf775b4e6524fd0462606c802b082498c768a7a4ca01a20\",\"urls\":[\"bzz-raw://56068145e300cde1c77c22e38cb753378abf2f0d4613dcb203e33ff101f169e2\",\"dweb:/ipfs/QmXvMzr9n7vzMHdUPgnc58KX4mrbQAqkq4kDETaj5Y55ZY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/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": "0x60636023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea365627a7a72315820bf200216557ee927d62f0b8406f393c953c63efc98bcecfe42c89425d83679bf6c6578706572696d656e74616cf564736f6c63430005100040", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea365627a7a72315820bf200216557ee927d62f0b8406f393c953c63efc98bcecfe42c89425d83679bf6c6578706572696d656e74616cf564736f6c63430005100040", "sourceMap": "1054:1075:35:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24", "deployedSourceMap": "1054:1075:35:-;;;;;;;;", "source": "/*\n\n Copyright 2022 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 { Account } from \"../../protocol/lib/Account.sol\";\nimport { Require } from \"../../protocol/lib/Require.sol\";\nimport { Types } from \"../../protocol/lib/Types.sol\";\n\n\n/**\n * @title AccountBalanceLib\n * @author Dolomite\n *\n * Library contract that checks a user's balance after an operation to be non-negative\n */\nlibrary AccountBalanceLib {\n using Types for Types.Par;\n\n // ============ Constants ============\n\n bytes32 private constant FILE = \"AccountBalanceLib\";\n\n // ============ Types ============\n\n /// Checks that either BOTH, FROM, or TO accounts do not have negative balances\n enum BalanceCheckFlag {\n Both,\n From,\n To,\n None\n }\n\n // ============ Functions ============\n\n /**\n * Checks that the account's balance is non-negative. Reverts if the check fails\n */\n function verifyBalanceIsNonNegative(\n IDolomiteMargin dolomiteMargin,\n address _owner,\n uint256 _accountIndex,\n uint256 _marketId\n ) internal view {\n Account.Info memory account = Account.Info(_owner, _accountIndex);\n Types.Par memory par = dolomiteMargin.getAccountPar(account, _marketId);\n Require.that(\n par.isPositive() || par.isZero(),\n FILE,\n \"account cannot go negative\",\n _owner,\n _accountIndex,\n _marketId\n );\n }\n}\n", "sourcePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol", "ast": { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol", "exportedSymbols": { "AccountBalanceLib": [ 5891 ] }, "id": 5892, "nodeType": "SourceUnit", "nodes": [ { "id": 5821, "literals": [ "solidity", "^", "0.5", ".7" ], "nodeType": "PragmaDirective", "src": "595:23:35" }, { "id": 5822, "literals": [ "experimental", "ABIEncoderV2" ], "nodeType": "PragmaDirective", "src": "619:33:35" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol", "file": "../../protocol/interfaces/IDolomiteMargin.sol", "id": 5824, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 24694, "src": "654:80:35", "symbolAliases": [ { "foreign": 5823, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol", "file": "../../protocol/lib/Account.sol", "id": 5826, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 24886, "src": "736:57:35", "symbolAliases": [ { "foreign": 5825, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol", "file": "../../protocol/lib/Require.sol", "id": 5828, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 28453, "src": "794:57:35", "symbolAliases": [ { "foreign": 5827, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol", "file": "../../protocol/lib/Types.sol", "id": 5830, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 31362, "src": "852:53:35", "symbolAliases": [ { "foreign": 5829, "local": null } ], "unitAlias": "" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": "@title AccountBalanceLib\n@author Dolomite\n * Library contract that checks a user's balance after an operation to be non-negative", "fullyImplemented": true, "id": 5891, "linearizedBaseContracts": [ 5891 ], "name": "AccountBalanceLib", "nodeType": "ContractDefinition", "nodes": [ { "id": 5833, "libraryName": { "contractScope": null, "id": 5831, "name": "Types", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 31361, "src": "1092:5:35", "typeDescriptions": { "typeIdentifier": "t_contract$_Types_$31361", "typeString": "library Types" } }, "nodeType": "UsingForDirective", "src": "1086:26:35", "typeName": { "contractScope": null, "id": 5832, "name": "Types.Par", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 30890, "src": "1102:9:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_storage_ptr", "typeString": "struct Types.Par" } } }, { "constant": true, "id": 5836, "name": "FILE", "nodeType": "VariableDeclaration", "scope": 5891, "src": "1162:51:35", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 5834, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1162:7:35", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "4163636f756e7442616c616e63654c6962", "id": 5835, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1194:19:35", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e63fe6d0d9cfec5a76723470e4d0a3a7d9b135df88639475dc2d57d3070ca84a", "typeString": "literal_string \"AccountBalanceLib\"" }, "value": "AccountBalanceLib" }, "visibility": "private" }, { "canonicalName": "AccountBalanceLib.BalanceCheckFlag", "id": 5841, "members": [ { "id": 5837, "name": "Both", "nodeType": "EnumValue", "src": "1376:4:35" }, { "id": 5838, "name": "From", "nodeType": "EnumValue", "src": "1390:4:35" }, { "id": 5839, "name": "To", "nodeType": "EnumValue", "src": "1404:2:35" }, { "id": 5840, "name": "None", "nodeType": "EnumValue", "src": "1416:4:35" } ], "name": "BalanceCheckFlag", "nodeType": "EnumDefinition", "src": "1344:82:35" }, { "body": { "id": 5889, "nodeType": "Block", "src": "1756:371:35", "statements": [ { "assignments": [ 5855 ], "declarations": [ { "constant": false, "id": 5855, "name": "account", "nodeType": "VariableDeclaration", "scope": 5889, "src": "1766:27:35", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Info_$24851_memory_ptr", "typeString": "struct Account.Info" }, "typeName": { "contractScope": null, "id": 5854, "name": "Account.Info", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 24851, "src": "1766:12:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Info_$24851_storage_ptr", "typeString": "struct Account.Info" } }, "value": null, "visibility": "internal" } ], "id": 5861, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 5858, "name": "_owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5845, "src": "1809:6:35", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 5859, "name": "_accountIndex", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5847, "src": "1817:13:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 5856, "name": "Account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 24885, "src": "1796:7:35", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Account_$24885_$", "typeString": "type(library Account)" } }, "id": 5857, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "Info", "nodeType": "MemberAccess", "referencedDeclaration": 24851, "src": "1796:12:35", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_Info_$24851_storage_ptr_$", "typeString": "type(struct Account.Info storage pointer)" } }, "id": 5860, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1796:35:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Info_$24851_memory", "typeString": "struct Account.Info memory" } }, "nodeType": "VariableDeclarationStatement", "src": "1766:65:35" }, { "assignments": [ 5865 ], "declarations": [ { "constant": false, "id": 5865, "name": "par", "nodeType": "VariableDeclaration", "scope": 5889, "src": "1841:20:35", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_memory_ptr", "typeString": "struct Types.Par" }, "typeName": { "contractScope": null, "id": 5864, "name": "Types.Par", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 30890, "src": "1841:9:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_storage_ptr", "typeString": "struct Types.Par" } }, "value": null, "visibility": "internal" } ], "id": 5871, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 5868, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5855, "src": "1893:7:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Info_$24851_memory_ptr", "typeString": "struct Account.Info memory" } }, { "argumentTypes": null, "id": 5869, "name": "_marketId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5849, "src": "1902:9:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_struct$_Info_$24851_memory_ptr", "typeString": "struct Account.Info memory" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 5866, "name": "dolomiteMargin", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5843, "src": "1864:14:35", "typeDescriptions": { "typeIdentifier": "t_contract$_IDolomiteMargin_$24693", "typeString": "contract IDolomiteMargin" } }, "id": 5867, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "getAccountPar", "nodeType": "MemberAccess", "referencedDeclaration": 24398, "src": "1864:28:35", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_struct$_Info_$24851_memory_ptr_$_t_uint256_$returns$_t_struct$_Par_$30890_memory_ptr_$", "typeString": "function (struct Account.Info memory,uint256) view external returns (struct Types.Par memory)" } }, "id": 5870, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1864:48:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_memory_ptr", "typeString": "struct Types.Par memory" } }, "nodeType": "VariableDeclarationStatement", "src": "1841:71:35" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 5881, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "expression": { "argumentTypes": null, "id": 5875, "name": "par", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5865, "src": "1948:3:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_memory_ptr", "typeString": "struct Types.Par memory" } }, "id": 5876, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "isPositive", "nodeType": "MemberAccess", "referencedDeclaration": 31094, "src": "1948:14:35", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Par_$30890_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Par_$30890_memory_ptr_$", "typeString": "function (struct Types.Par memory) pure returns (bool)" } }, "id": 5877, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1948:16:35", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "expression": { "argumentTypes": null, "id": 5878, "name": "par", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5865, "src": "1968:3:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_memory_ptr", "typeString": "struct Types.Par memory" } }, "id": 5879, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "isZero", "nodeType": "MemberAccess", "referencedDeclaration": 31107, "src": "1968:10:35", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_struct$_Par_$30890_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_Par_$30890_memory_ptr_$", "typeString": "function (struct Types.Par memory) pure returns (bool)" } }, "id": 5880, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1968:12:35", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "1948:32:35", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "id": 5882, "name": "FILE", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5836, "src": "1994:4:35", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "hexValue": "6163636f756e742063616e6e6f7420676f206e65676174697665", "id": 5883, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2012:28:35", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_dda313d78d4f06e1f7a8359baefb8ab7818bec11c1f071a315614d8bb3d3cec4", "typeString": "literal_string \"account cannot go negative\"" }, "value": "account cannot go negative" }, { "argumentTypes": null, "id": 5884, "name": "_owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5845, "src": "2054:6:35", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 5885, "name": "_accountIndex", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5847, "src": "2074:13:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 5886, "name": "_marketId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 5849, "src": "2101:9:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_stringliteral_dda313d78d4f06e1f7a8359baefb8ab7818bec11c1f071a315614d8bb3d3cec4", "typeString": "literal_string \"account cannot go negative\"" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 5872, "name": "Require", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 28452, "src": "1922:7:35", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Require_$28452_$", "typeString": "type(library Require)" } }, "id": 5874, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "that", "nodeType": "MemberAccess", "referencedDeclaration": 28020, "src": "1922:12:35", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (bool,bytes32,bytes32,address,uint256,uint256) pure" } }, "id": 5887, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1922:198:35", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 5888, "nodeType": "ExpressionStatement", "src": "1922:198:35" } ] }, "documentation": " Checks that the account's balance is non-negative. Reverts if the check fails", "id": 5890, "implemented": true, "kind": "function", "modifiers": [], "name": "verifyBalanceIsNonNegative", "nodeType": "FunctionDefinition", "parameters": { "id": 5850, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 5843, "name": "dolomiteMargin", "nodeType": "VariableDeclaration", "scope": 5890, "src": "1623:30:35", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_contract$_IDolomiteMargin_$24693", "typeString": "contract IDolomiteMargin" }, "typeName": { "contractScope": null, "id": 5842, "name": "IDolomiteMargin", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 24693, "src": "1623:15:35", "typeDescriptions": { "typeIdentifier": "t_contract$_IDolomiteMargin_$24693", "typeString": "contract IDolomiteMargin" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 5845, "name": "_owner", "nodeType": "VariableDeclaration", "scope": 5890, "src": "1663:14:35", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 5844, "name": "address", "nodeType": "ElementaryTypeName", "src": "1663:7:35", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 5847, "name": "_accountIndex", "nodeType": "VariableDeclaration", "scope": 5890, "src": "1687:21:35", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 5846, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1687:7:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 5849, "name": "_marketId", "nodeType": "VariableDeclaration", "scope": 5890, "src": "1718:17:35", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 5848, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1718:7:35", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1613:128:35" }, "returnParameters": { "id": 5851, "nodeType": "ParameterList", "parameters": [], "src": "1756:0:35" }, "scope": 5891, "src": "1578:549:35", "stateMutability": "view", "superFunction": null, "visibility": "internal" } ], "scope": 5892, "src": "1054:1075:35" } ], "src": "595:1535:35" }, "legacyAST": { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/AccountBalanceLib.sol", "exportedSymbols": { "AccountBalanceLib": [ 5891 ] }, "id": 5892, "nodeType": "SourceUnit", "nodes": [ { "id": 5821, "literals": [ "solidity", "^", "0.5", ".7" ], "nodeType": "PragmaDirective", "src": "595:23:35" }, { "id": 5822, "literals": [ "experimental", "ABIEncoderV2" ], "nodeType": "PragmaDirective", "src": "619:33:35" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol", "file": "../../protocol/interfaces/IDolomiteMargin.sol", "id": 5824, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 24694, "src": "654:80:35", "symbolAliases": [ { "foreign": 5823, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol", "file": "../../protocol/lib/Account.sol", "id": 5826, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 24886, "src": "736:57:35", "symbolAliases": [ { "foreign": 5825, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol", "file": "../../protocol/lib/Require.sol", "id": 5828, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 28453, "src": "794:57:35", "symbolAliases": [ { "foreign": 5827, "local": null } ], "unitAlias": "" }, { "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol", "file": "../../protocol/lib/Types.sol", "id": 5830, "nodeType": "ImportDirective", "scope": 5892, "sourceUnit": 31362, "src": "852:53:35", "symbolAliases": [ { "foreign": 5829, "local": null } ], "unitAlias": "" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": "@title AccountBalanceLib\n@author Dolomite\n * Library contract that checks a user's balance after an operation to be non-negative", "fullyImplemented": true, "id": 5891, "linearizedBaseContracts": [ 5891 ], "name": "AccountBalanceLib", "nodeType": "ContractDefinition", "nodes": [ { "id": 5833, "libraryName": { "contractScope": null, "id": 5831, "name": "Types", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 31361, "src": "1092:5:35", "typeDescriptions": { "typeIdentifier": "t_contract$_Types_$31361", "typeString": "library Types" } }, "nodeType": "UsingForDirective", "src": "1086:26:35", "typeName": { "contractScope": null, "id": 5832, "name": "Types.Par", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 30890, "src": "1102:9:35", "typeDescriptions": { "typeIdentifier": "t_struct$_Par_$30890_storage_ptr", "typeString": "struct Types.Par" } } }, { "constant": true, "id": 5836, "name": "FILE", "nodeType": "VariableDeclaration", "scope": 5891, "src": "1162:51:35", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 5834, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1162:7:35", "typeDescriptions": { "typeIdentifier": "t_bytes32",