UNPKG

tokenboost-solidity-erc20token

Version:
1,140 lines 112 kB
{ "contractName": "RBAC", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "name": "operator", "type": "address" }, { "indexed": false, "name": "role", "type": "string" } ], "name": "RoleAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "operator", "type": "address" }, { "indexed": false, "name": "role", "type": "string" } ], "name": "RoleRemoved", "type": "event" }, { "constant": true, "inputs": [ { "name": "_operator", "type": "address" }, { "name": "_role", "type": "string" } ], "name": "checkRole", "outputs": [], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_operator", "type": "address" }, { "name": "_role", "type": "string" } ], "name": "hasRole", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b5061029c806100206000396000f30060806040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c8114610050578063217fe6c6146100c6575b600080fd5b34801561005c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526100c495833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375094975061014e9650505050505050565b005b3480156100d257600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261013a95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506101bc9650505050505050565b604080519115158252519081900360200190f35b6101b8826000836040518082805190602001908083835b602083106101845780518252601f199092019160209182019101610165565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061022f565b5050565b6000610228836000846040518082805190602001908083835b602083106101f45780518252601f1990920191602091820191016101d5565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610244565b9392505050565b6102398282610244565b15156101b857600080fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff16905600a165627a7a723058209fe3ba5cfeb5ae3c338fb459dabdff8840e37062612f9f1613e81699f7b6d14c0029", "deployedBytecode": "0x60806040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c8114610050578063217fe6c6146100c6575b600080fd5b34801561005c57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526100c495833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375094975061014e9650505050505050565b005b3480156100d257600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261013a95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506101bc9650505050505050565b604080519115158252519081900360200190f35b6101b8826000836040518082805190602001908083835b602083106101845780518252601f199092019160209182019101610165565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061022f565b5050565b6000610228836000846040518082805190602001908083835b602083106101f45780518252601f1990920191602091820191016101d5565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610244565b9392505050565b6102398282610244565b15156101b857600080fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff16905600a165627a7a723058209fe3ba5cfeb5ae3c338fb459dabdff8840e37062612f9f1613e81699f7b6d14c0029", "sourceMap": "478:2158:15:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;478:2158:15;;;;;;;", "deployedSourceMap": "478:2158:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;837:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;837:114:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;837:114:15;;-1:-1:-1;837:114:15;;-1:-1:-1;;;;;;;837:114:15;;;1091:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1091:136:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1091:136:15;;-1:-1:-1;1091:136:15;;-1:-1:-1;;;;;;;1091:136:15;;;;;;;;;;;;;;;;;;;837:114;917:29;936:9;917:5;923;917:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;917:12:15;;;;;-1:-1:-1;917:12:15;;;;;;;;;;;;-1:-1:-1;;917:18:15;:29::i;:::-;837:114;;:::o;1091:136::-;1174:4;1195:27;1212:9;1195:5;1201;1195:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1195:12:15;;;;;-1:-1:-1;1195:12:15;;;;;;;;;;;;-1:-1:-1;;1195:16:15;:27::i;:::-;1188:34;1091:136;-1:-1:-1;;;1091:136:15:o;666:111:16:-;754:17;758:5;765;754:3;:17::i;:::-;746:26;;;;;;;855:128;959:19;;938:4;959:19;;;;;;;;;;;;;;;855:128::o", "source": "pragma solidity ^0.4.24;\n\nimport \"./Roles.sol\";\n\n\n/**\n * @title RBAC (Role-Based Access Control)\n * @author Matt Condon (@Shrugs)\n * @dev Stores and provides setters and getters for roles and addresses.\n * Supports unlimited numbers of roles and addresses.\n * See //contracts/mocks/RBACMock.sol for an example of usage.\n * This RBAC method uses strings to key roles. It may be beneficial\n * for you to write your own implementation of this interface using Enums or similar.\n */\ncontract RBAC {\n using Roles for Roles.Role;\n\n mapping (string => Roles.Role) private roles;\n\n event RoleAdded(address indexed operator, string role);\n event RoleRemoved(address indexed operator, string role);\n\n /**\n * @dev reverts if addr does not have role\n * @param _operator address\n * @param _role the name of the role\n * // reverts\n */\n function checkRole(address _operator, string _role)\n public\n view\n {\n roles[_role].check(_operator);\n }\n\n /**\n * @dev determine if addr has role\n * @param _operator address\n * @param _role the name of the role\n * @return bool\n */\n function hasRole(address _operator, string _role)\n public\n view\n returns (bool)\n {\n return roles[_role].has(_operator);\n }\n\n /**\n * @dev add a role to an address\n * @param _operator address\n * @param _role the name of the role\n */\n function addRole(address _operator, string _role)\n internal\n {\n roles[_role].add(_operator);\n emit RoleAdded(_operator, _role);\n }\n\n /**\n * @dev remove a role from an address\n * @param _operator address\n * @param _role the name of the role\n */\n function removeRole(address _operator, string _role)\n internal\n {\n roles[_role].remove(_operator);\n emit RoleRemoved(_operator, _role);\n }\n\n /**\n * @dev modifier to scope access to a single role (uses msg.sender as addr)\n * @param _role the name of the role\n * // reverts\n */\n modifier onlyRole(string _role)\n {\n checkRole(msg.sender, _role);\n _;\n }\n\n /**\n * @dev modifier to scope access to a set of roles (uses msg.sender as addr)\n * @param _roles the names of the roles to scope access to\n * // reverts\n *\n * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this\n * see: https://github.com/ethereum/solidity/issues/2467\n */\n // modifier onlyRoles(string[] _roles) {\n // bool hasAnyRole = false;\n // for (uint8 i = 0; i < _roles.length; i++) {\n // if (hasRole(msg.sender, _roles[i])) {\n // hasAnyRole = true;\n // break;\n // }\n // }\n\n // require(hasAnyRole);\n\n // _;\n // }\n}\n", "sourcePath": "zeppelin-solidity/contracts/access/rbac/RBAC.sol", "ast": { "absolutePath": "zeppelin-solidity/contracts/access/rbac/RBAC.sol", "exportedSymbols": { "RBAC": [ 3751 ] }, "id": 3752, "nodeType": "SourceUnit", "nodes": [ { "id": 3646, "literals": [ "solidity", "^", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:24:15" }, { "absolutePath": "zeppelin-solidity/contracts/access/rbac/Roles.sol", "file": "./Roles.sol", "id": 3647, "nodeType": "ImportDirective", "scope": 3752, "sourceUnit": 3822, "src": "26:21:15", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": "@title RBAC (Role-Based Access Control)\n@author Matt Condon (@Shrugs)\n@dev Stores and provides setters and getters for roles and addresses.\nSupports unlimited numbers of roles and addresses.\nSee //contracts/mocks/RBACMock.sol for an example of usage.\nThis RBAC method uses strings to key roles. It may be beneficial\nfor you to write your own implementation of this interface using Enums or similar.", "fullyImplemented": true, "id": 3751, "linearizedBaseContracts": [ 3751 ], "name": "RBAC", "nodeType": "ContractDefinition", "nodes": [ { "id": 3650, "libraryName": { "contractScope": null, "id": 3648, "name": "Roles", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3821, "src": "502:5:15", "typeDescriptions": { "typeIdentifier": "t_contract$_Roles_$3821", "typeString": "library Roles" } }, "nodeType": "UsingForDirective", "src": "496:27:15", "typeName": { "contractScope": null, "id": 3649, "name": "Roles.Role", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3758, "src": "512:10:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage_ptr", "typeString": "struct Roles.Role" } } }, { "constant": false, "id": 3654, "name": "roles", "nodeType": "VariableDeclaration", "scope": 3751, "src": "527:44:15", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string => struct Roles.Role)" }, "typeName": { "id": 3653, "keyType": { "id": 3651, "name": "string", "nodeType": "ElementaryTypeName", "src": "536:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "nodeType": "Mapping", "src": "527:30:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string => struct Roles.Role)" }, "valueType": { "contractScope": null, "id": 3652, "name": "Roles.Role", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 3758, "src": "546:10:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage_ptr", "typeString": "struct Roles.Role" } } }, "value": null, "visibility": "private" }, { "anonymous": false, "documentation": null, "id": 3660, "name": "RoleAdded", "nodeType": "EventDefinition", "parameters": { "id": 3659, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3656, "indexed": true, "name": "operator", "nodeType": "VariableDeclaration", "scope": 3660, "src": "592:24:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3655, "name": "address", "nodeType": "ElementaryTypeName", "src": "592:7:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3658, "indexed": false, "name": "role", "nodeType": "VariableDeclaration", "scope": 3660, "src": "618:11:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 3657, "name": "string", "nodeType": "ElementaryTypeName", "src": "618:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "src": "591:39:15" }, "src": "576:55:15" }, { "anonymous": false, "documentation": null, "id": 3666, "name": "RoleRemoved", "nodeType": "EventDefinition", "parameters": { "id": 3665, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3662, "indexed": true, "name": "operator", "nodeType": "VariableDeclaration", "scope": 3666, "src": "652:24:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3661, "name": "address", "nodeType": "ElementaryTypeName", "src": "652:7:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3664, "indexed": false, "name": "role", "nodeType": "VariableDeclaration", "scope": 3666, "src": "678:11:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 3663, "name": "string", "nodeType": "ElementaryTypeName", "src": "678:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "src": "651:39:15" }, "src": "634:57:15" }, { "body": { "id": 3680, "nodeType": "Block", "src": "911:40:15", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3677, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3668, "src": "936:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 3673, "name": "roles", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3654, "src": "917:5:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string memory => struct Roles.Role storage ref)" } }, "id": 3675, "indexExpression": { "argumentTypes": null, "id": 3674, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3670, "src": "923:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "917:12:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage", "typeString": "struct Roles.Role storage ref" } }, "id": 3676, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "check", "nodeType": "MemberAccess", "referencedDeclaration": 3805, "src": "917:18:15", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$3758_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$3758_storage_ptr_$", "typeString": "function (struct Roles.Role storage pointer,address) view" } }, "id": 3678, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "917:29:15", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 3679, "nodeType": "ExpressionStatement", "src": "917:29:15" } ] }, "documentation": "@dev reverts if addr does not have role\n@param _operator address\n@param _role the name of the role\n// reverts", "id": 3681, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "checkRole", "nodeType": "FunctionDefinition", "parameters": { "id": 3671, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3668, "name": "_operator", "nodeType": "VariableDeclaration", "scope": 3681, "src": "856:17:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3667, "name": "address", "nodeType": "ElementaryTypeName", "src": "856:7:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3670, "name": "_role", "nodeType": "VariableDeclaration", "scope": 3681, "src": "875:12:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 3669, "name": "string", "nodeType": "ElementaryTypeName", "src": "875:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "src": "855:33:15" }, "payable": false, "returnParameters": { "id": 3672, "nodeType": "ParameterList", "parameters": [], "src": "911:0:15" }, "scope": 3751, "src": "837:114:15", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 3697, "nodeType": "Block", "src": "1182:45:15", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3694, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3683, "src": "1212:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 3690, "name": "roles", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3654, "src": "1195:5:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string memory => struct Roles.Role storage ref)" } }, "id": 3692, "indexExpression": { "argumentTypes": null, "id": 3691, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3685, "src": "1201:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "1195:12:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage", "typeString": "struct Roles.Role storage ref" } }, "id": 3693, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "has", "nodeType": "MemberAccess", "referencedDeclaration": 3820, "src": "1195:16:15", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$3758_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$3758_storage_ptr_$", "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" } }, "id": 3695, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1195:27:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 3689, "id": 3696, "nodeType": "Return", "src": "1188:34:15" } ] }, "documentation": "@dev determine if addr has role\n@param _operator address\n@param _role the name of the role\n@return bool", "id": 3698, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "hasRole", "nodeType": "FunctionDefinition", "parameters": { "id": 3686, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3683, "name": "_operator", "nodeType": "VariableDeclaration", "scope": 3698, "src": "1108:17:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3682, "name": "address", "nodeType": "ElementaryTypeName", "src": "1108:7:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3685, "name": "_role", "nodeType": "VariableDeclaration", "scope": 3698, "src": "1127:12:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 3684, "name": "string", "nodeType": "ElementaryTypeName", "src": "1127:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "src": "1107:33:15" }, "payable": false, "returnParameters": { "id": 3689, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3688, "name": "", "nodeType": "VariableDeclaration", "scope": 3698, "src": "1174:4:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 3687, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1174:4:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "1173:6:15" }, "scope": 3751, "src": "1091:136:15", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 3717, "nodeType": "Block", "src": "1412:76:15", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3709, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3700, "src": "1435:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 3705, "name": "roles", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3654, "src": "1418:5:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string memory => struct Roles.Role storage ref)" } }, "id": 3707, "indexExpression": { "argumentTypes": null, "id": 3706, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3702, "src": "1424:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "1418:12:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage", "typeString": "struct Roles.Role storage ref" } }, "id": 3708, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", "referencedDeclaration": 3774, "src": "1418:16:15", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$3758_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$3758_storage_ptr_$", "typeString": "function (struct Roles.Role storage pointer,address)" } }, "id": 3710, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1418:27:15", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 3711, "nodeType": "ExpressionStatement", "src": "1418:27:15" }, { "eventCall": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3713, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3700, "src": "1466:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 3714, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3702, "src": "1477:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } ], "id": 3712, "name": "RoleAdded", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3660, "src": "1456:9:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$", "typeString": "function (address,string memory)" } }, "id": 3715, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1456:27:15", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 3716, "nodeType": "EmitStatement", "src": "1451:32:15" } ] }, "documentation": "@dev add a role to an address\n@param _operator address\n@param _role the name of the role", "id": 3718, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "addRole", "nodeType": "FunctionDefinition", "parameters": { "id": 3703, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 3700, "name": "_operator", "nodeType": "VariableDeclaration", "scope": 3718, "src": "1364:17:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 3699, "name": "address", "nodeType": "ElementaryTypeName", "src": "1364:7:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 3702, "name": "_role", "nodeType": "VariableDeclaration", "scope": 3718, "src": "1383:12:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string" }, "typeName": { "id": 3701, "name": "string", "nodeType": "ElementaryTypeName", "src": "1383:6:15", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": null, "visibility": "internal" } ], "src": "1363:33:15" }, "payable": false, "returnParameters": { "id": 3704, "nodeType": "ParameterList", "parameters": [], "src": "1412:0:15" }, "scope": 3751, "src": "1347:141:15", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" }, { "body": { "id": 3737, "nodeType": "Block", "src": "1681:81:15", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3729, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3720, "src": "1707:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 3725, "name": "roles", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3654, "src": "1687:5:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_string_memory_$_t_struct$_Role_$3758_storage_$", "typeString": "mapping(string memory => struct Roles.Role storage ref)" } }, "id": 3727, "indexExpression": { "argumentTypes": null, "id": 3726, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3722, "src": "1693:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "1687:12:15", "typeDescriptions": { "typeIdentifier": "t_struct$_Role_$3758_storage", "typeString": "struct Roles.Role storage ref" } }, "id": 3728, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "remove", "nodeType": "MemberAccess", "referencedDeclaration": 3790, "src": "1687:19:15", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$3758_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$3758_storage_ptr_$", "typeString": "function (struct Roles.Role storage pointer,address)" } }, "id": 3730, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1687:30:15", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 3731, "nodeType": "ExpressionStatement", "src": "1687:30:15" }, { "eventCall": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 3733, "name": "_operator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3720, "src": "1740:9:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 3734, "name": "_role", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 3722, "src": "1751:5:15", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_stri