UNPKG

@ethsub/sol

Version:
1,238 lines (1,237 loc) 51.4 kB
{ "contractName": "Counters", "abi": [], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;` Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never directly accessed.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Counters\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Counters.sol\":\"Counters\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x21662e4254ce4ac8570b30cc7ab31435966b3cb778a56ba4d09276881cfb2437\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://acce8fe6adc670f9987a8b6aedc4cc0abcd0dcd2e152d649a12099d735bd7bad\",\"dweb:/ipfs/QmXAk17oK3daBmA8CGyVcU56L496jW3U6Ef1WkfHyB1JAV\"]}},\"version\":1}", "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fb33c7c0091f119325471adfbabe0a7ed64c1d1f83a9f2467e941c520028783664736f6c634300060c0033", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fb33c7c0091f119325471adfbabe0a7ed64c1d1f83a9f2467e941c520028783664736f6c634300060c0033", "immutableReferences": {}, "sourceMap": "670:848:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;", "deployedSourceMap": "670:848:29:-:0;;;;;;;;", "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../math/SafeMath.sol\";\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n * directly accessed.\n */\nlibrary Counters {\n using SafeMath for uint256;\n\n struct Counter {\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n // this feature: see https://github.com/ethereum/solidity/issues/4637\n uint256 _value; // default: 0\n }\n\n function current(Counter storage counter) internal view returns (uint256) {\n return counter._value;\n }\n\n function increment(Counter storage counter) internal {\n // The {SafeMath} overflow check can be skipped here, see the comment at the top\n counter._value += 1;\n }\n\n function decrement(Counter storage counter) internal {\n counter._value = counter._value.sub(1);\n }\n}\n", "sourcePath": "@openzeppelin/contracts/utils/Counters.sol", "ast": { "absolutePath": "@openzeppelin/contracts/utils/Counters.sol", "exportedSymbols": { "Counters": [ 4891 ] }, "id": 4892, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 4843, "literals": [ "solidity", ">=", "0.6", ".0", "<", "0.8", ".0" ], "nodeType": "PragmaDirective", "src": "33:31:29" }, { "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol", "file": "../math/SafeMath.sol", "id": 4844, "nodeType": "ImportDirective", "scope": 4892, "sourceUnit": 938, "src": "66:30:29", "symbolAliases": [], "unitAlias": "" }, { "abstract": false, "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": { "id": 4845, "nodeType": "StructuredDocumentation", "src": "98:571:29", "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`\n Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n directly accessed." }, "fullyImplemented": true, "id": 4891, "linearizedBaseContracts": [ 4891 ], "name": "Counters", "nodeType": "ContractDefinition", "nodes": [ { "id": 4848, "libraryName": { "contractScope": null, "id": 4846, "name": "SafeMath", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 937, "src": "699:8:29", "typeDescriptions": { "typeIdentifier": "t_contract$_SafeMath_$937", "typeString": "library SafeMath" } }, "nodeType": "UsingForDirective", "src": "693:27:29", "typeName": { "id": 4847, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "712:7:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } }, { "canonicalName": "Counters.Counter", "id": 4851, "members": [ { "constant": false, "id": 4850, "mutability": "mutable", "name": "_value", "nodeType": "VariableDeclaration", "overrides": null, "scope": 4851, "src": "1065:14:29", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 4849, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1065:7:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "name": "Counter", "nodeType": "StructDefinition", "scope": 4891, "src": "726:374:29", "visibility": "public" }, { "body": { "id": 4861, "nodeType": "Block", "src": "1180:38:29", "statements": [ { "expression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4858, "name": "counter", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4853, "src": "1197:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter storage pointer" } }, "id": 4859, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "_value", "nodeType": "MemberAccess", "referencedDeclaration": 4850, "src": "1197:14:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 4857, "id": 4860, "nodeType": "Return", "src": "1190:21:29" } ] }, "documentation": null, "id": 4862, "implemented": true, "kind": "function", "modifiers": [], "name": "current", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 4854, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4853, "mutability": "mutable", "name": "counter", "nodeType": "VariableDeclaration", "overrides": null, "scope": 4862, "src": "1123:23:29", "stateVariable": false, "storageLocation": "storage", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" }, "typeName": { "contractScope": null, "id": 4852, "name": "Counter", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 4851, "src": "1123:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" } }, "value": null, "visibility": "internal" } ], "src": "1122:25:29" }, "returnParameters": { "id": 4857, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4856, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 4862, "src": "1171:7:29", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 4855, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1171:7:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1170:9:29" }, "scope": 4891, "src": "1106:112:29", "stateMutability": "view", "virtual": false, "visibility": "internal" }, { "body": { "id": 4873, "nodeType": "Block", "src": "1277:125:29", "statements": [ { "expression": { "argumentTypes": null, "id": 4871, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4867, "name": "counter", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4864, "src": "1376:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter storage pointer" } }, "id": 4869, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "_value", "nodeType": "MemberAccess", "referencedDeclaration": 4850, "src": "1376:14:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "+=", "rightHandSide": { "argumentTypes": null, "hexValue": "31", "id": 4870, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1394:1:29", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "1376:19:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 4872, "nodeType": "ExpressionStatement", "src": "1376:19:29" } ] }, "documentation": null, "id": 4874, "implemented": true, "kind": "function", "modifiers": [], "name": "increment", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 4865, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4864, "mutability": "mutable", "name": "counter", "nodeType": "VariableDeclaration", "overrides": null, "scope": 4874, "src": "1243:23:29", "stateVariable": false, "storageLocation": "storage", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" }, "typeName": { "contractScope": null, "id": 4863, "name": "Counter", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 4851, "src": "1243:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" } }, "value": null, "visibility": "internal" } ], "src": "1242:25:29" }, "returnParameters": { "id": 4866, "nodeType": "ParameterList", "parameters": [], "src": "1277:0:29" }, "scope": 4891, "src": "1224:178:29", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" }, { "body": { "id": 4889, "nodeType": "Block", "src": "1461:55:29", "statements": [ { "expression": { "argumentTypes": null, "id": 4887, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4879, "name": "counter", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4876, "src": "1471:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter storage pointer" } }, "id": 4881, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "_value", "nodeType": "MemberAccess", "referencedDeclaration": 4850, "src": "1471:14:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", "id": 4885, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1507:1:29", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "expression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 4882, "name": "counter", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4876, "src": "1488:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter storage pointer" } }, "id": 4883, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "_value", "nodeType": "MemberAccess", "referencedDeclaration": 4850, "src": "1488:14:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 4884, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", "referencedDeclaration": 786, "src": "1488:18:29", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, "id": 4886, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1488:21:29", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1471:38:29", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 4888, "nodeType": "ExpressionStatement", "src": "1471:38:29" } ] }, "documentation": null, "id": 4890, "implemented": true, "kind": "function", "modifiers": [], "name": "decrement", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 4877, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 4876, "mutability": "mutable", "name": "counter", "nodeType": "VariableDeclaration", "overrides": null, "scope": 4890, "src": "1427:23:29", "stateVariable": false, "storageLocation": "storage", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" }, "typeName": { "contractScope": null, "id": 4875, "name": "Counter", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 4851, "src": "1427:7:29", "typeDescriptions": { "typeIdentifier": "t_struct$_Counter_$4851_storage_ptr", "typeString": "struct Counters.Counter" } }, "value": null, "visibility": "internal" } ], "src": "1426:25:29" }, "returnParameters": { "id": 4878, "nodeType": "ParameterList", "parameters": [], "src": "1461:0:29" }, "scope": 4891, "src": "1408:108:29", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" } ], "scope": 4892, "src": "670:848:29" } ], "src": "33:1486:29" }, "legacyAST": { "attributes": { "absolutePath": "@openzeppelin/contracts/utils/Counters.sol", "exportedSymbols": { "Counters": [ 4891 ] }, "license": "MIT" }, "children": [ { "attributes": { "literals": [ "solidity", ">=", "0.6", ".0", "<", "0.8", ".0" ] }, "id": 4843, "name": "PragmaDirective", "src": "33:31:29" }, { "attributes": { "SourceUnit": 938, "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol", "file": "../math/SafeMath.sol", "scope": 4892, "symbolAliases": [ null ], "unitAlias": "" }, "id": 4844, "name": "ImportDirective", "src": "66:30:29" }, { "attributes": { "abstract": false, "baseContracts": [ null ], "contractDependencies": [ null ], "contractKind": "library", "fullyImplemented": true, "linearizedBaseContracts": [ 4891 ], "name": "Counters", "scope": 4892 }, "children": [ { "attributes": { "text": " @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`\n Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}\n overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never\n directly accessed." }, "id": 4845, "name": "StructuredDocumentation", "src": "98:571:29" }, { "children": [ { "attributes": { "contractScope": null, "name": "SafeMath", "referencedDeclaration": 937, "type": "library SafeMath" }, "id": 4846, "name": "UserDefinedTypeName", "src": "699:8:29" }, { "attributes": { "name": "uint256", "type": "uint256" }, "id": 4847, "name": "ElementaryTypeName", "src": "712:7:29" } ], "id": 4848, "name": "UsingForDirective", "src": "693:27:29" }, { "attributes": { "canonicalName": "Counters.Counter", "name": "Counter", "scope": 4891, "visibility": "public" }, "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "_value", "overrides": null, "scope": 4851, "stateVariable": false, "storageLocation": "default", "type": "uint256", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "name": "uint256", "type": "uint256" }, "id": 4849, "name": "ElementaryTypeName", "src": "1065:7:29" } ], "id": 4850, "name": "VariableDeclaration", "src": "1065:14:29" } ], "id": 4851, "name": "StructDefinition", "src": "726:374:29" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [ null ], "name": "current", "overrides": null, "scope": 4891, "stateMutability": "view", "virtual": false, "visibility": "internal" }, "children": [ { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "counter", "overrides": null, "scope": 4862, "stateVariable": false, "storageLocation": "storage", "type": "struct Counters.Counter", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "contractScope": null, "name": "Counter", "referencedDeclaration": 4851, "type": "struct Counters.Counter" }, "id": 4852, "name": "UserDefinedTypeName", "src": "1123:7:29" } ], "id": 4853, "name": "VariableDeclaration", "src": "1123:23:29" } ], "id": 4854, "name": "ParameterList", "src": "1122:25:29" }, { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "", "overrides": null, "scope": 4862, "stateVariable": false, "storageLocation": "default", "type": "uint256", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "name": "uint256", "type": "uint256" }, "id": 4855, "name": "ElementaryTypeName", "src": "1171:7:29" } ], "id": 4856, "name": "VariableDeclaration", "src": "1171:7:29" } ], "id": 4857, "name": "ParameterList", "src": "1170:9:29" }, { "children": [ { "attributes": { "functionReturnParameters": 4857 }, "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "member_name": "_value", "referencedDeclaration": 4850, "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 4853, "type": "struct Counters.Counter storage pointer", "value": "counter" }, "id": 4858, "name": "Identifier", "src": "1197:7:29" } ], "id": 4859, "name": "MemberAccess", "src": "1197:14:29" } ], "id": 4860, "name": "Return", "src": "1190:21:29" } ], "id": 4861, "name": "Block", "src": "1180:38:29" } ], "id": 4862, "name": "FunctionDefinition", "src": "1106:112:29" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [ null ], "name": "increment", "overrides": null, "scope": 4891, "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" }, "children": [ { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "counter", "overrides": null, "scope": 4874, "stateVariable": false, "storageLocation": "storage", "type": "struct Counters.Counter", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "contractScope": null, "name": "Counter", "referencedDeclaration": 4851, "type": "struct Counters.Counter" }, "id": 4863, "name": "UserDefinedTypeName", "src": "1243:7:29" } ], "id": 4864, "name": "VariableDeclaration", "src": "1243:23:29" } ], "id": 4865, "name": "ParameterList", "src": "1242:25:29" }, { "attributes": { "parameters": [ null ] }, "children": [], "id": 4866, "name": "ParameterList", "src": "1277:0:29" }, { "children": [ { "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "operator": "+=", "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "member_name": "_value", "referencedDeclaration": 4850, "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 4864, "type": "struct Counters.Counter storage pointer", "value": "counter" }, "id": 4867, "name": "Identifier", "src": "1376:7:29" } ], "id": 4869, "name": "MemberAccess", "src": "1376:14:29" }, { "attributes": { "argumentTypes": null, "hexvalue": "31", "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "subdenomination": null, "token": "number", "type": "int_const 1", "value": "1" }, "id": 4870, "name": "Literal", "src": "1394:1:29" } ], "id": 4871, "name": "Assignment", "src": "1376:19:29" } ], "id": 4872, "name": "ExpressionStatement", "src": "1376:19:29" } ], "id": 4873, "name": "Block", "src": "1277:125:29" } ], "id": 4874, "name": "FunctionDefinition", "src": "1224:178:29" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [ null ], "name": "decrement", "overrides": null, "scope": 4891, "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" }, "children": [ { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "counter", "overrides": null, "scope": 4890, "stateVariable": false, "storageLocation": "storage", "type": "struct Counters.Counter", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "contractScope": null, "name": "Counter", "referencedDeclaration": 4851, "type": "struct Counters.Counter" }, "id": 4875, "name": "UserDefinedTypeName", "src": "1427:7:29" } ], "id": 4876, "name": "VariableDeclaration", "src": "1427:23:29" } ], "id": 4877, "name": "ParameterList", "src": "1426:25:29" }, { "attributes": { "parameters": [ null ] }, "children": [], "id": 4878, "name": "ParameterList", "src": "1461:0:29" }, { "children": [ { "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "operator": "=", "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "member_name": "_value", "referencedDeclaration": 4850, "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 4876, "type": "struct Counters.Counter storage pointer", "value": "counter" }, "id": 4879, "name": "Identifier", "src": "1471:7:29" } ], "id": 4881, "name": "MemberAccess", "src": "1471:14:29" }, { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "isStructConstructorCall": false, "lValueRequested": false, "names": [ null ], "tryCall": false, "type": "uint256", "type_conversion": false }, "children": [ { "attributes": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "member_name": "sub", "referencedDeclaration": 786, "type": "function (uint256,uint256) pure returns (uint256)" }, "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "member_name": "_value", "referencedDeclaration": 4850, "type": "uint256" }, "children": [ { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 4876, "type": "struct Counters.Counter storage pointer", "value": "counter" }, "id": 4882, "name": "Identifier", "src": "1488:7:29" } ], "id": 4883, "name": "MemberAccess", "src": "1488:14:29" } ], "id": 4884, "name": "MemberAccess", "src": "1488:18:29" }, { "attributes": { "argumentTypes": null, "hexvalue": "31", "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "subdenomination": null, "token": "number", "type": "int_const 1", "value": "1" }, "id": 4885, "name": "Literal", "src": "1507:1:29" } ], "id": 4886, "name": "FunctionCall", "src": "1488:21:29" } ], "id": 4887, "name": "Assignment", "src": "1471:38:29" } ], "id": 4888, "name": "ExpressionStatement",