/* * Copyright ConsenSys AG. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * SPDX-License-Identifier: Apache-2.0 */ pragma solidity >=0.6.0 <0.9.0; contract AdminList { event AdminAdded( bool adminAdded, address account, string message ); event AdminRemoved( bool adminRemoved, address account ); address[] public allowlist; mapping (address => uint256) private indexOf; //1 based indexing. 0 means non-existent function size() internal view returns (uint256) { return allowlist.length; } function exists(address _account) internal view returns (bool) { return indexOf[_account] != 0; } function add(address _account) internal returns (bool) { if (indexOf[_account] == 0) { allowlist.push(_account); indexOf[_account] = allowlist.length; return true; } return false; } function addAll(address[] memory accounts) internal returns (bool) { bool allAdded = true; for (uint i = 0; i 0 && index <= allowlist.length) { //1-based indexing //move last address into index being vacated (unless we are dealing with last index) if (index != allowlist.length) { address lastAccount = allowlist[allowlist.length - 1]; allowlist[index - 1] = lastAccount; indexOf[lastAccount] = index; } //shrink array allowlist.pop(); indexOf[_account] = 0; return true; } return false; } }