diff --git a/Makefile b/Makefile index a042179..ff015cc 100644 --- a/Makefile +++ b/Makefile @@ -40,3 +40,7 @@ storage-layout: # Lints lint :; forge fmt + +abi: + @echo " > \033[32mGenerating abi...\033[0m" + ./tools/generateABI.sh diff --git a/deploy-config/local.json b/deploy-config/local.json index 573452a..141df59 100644 --- a/deploy-config/local.json +++ b/deploy-config/local.json @@ -2,5 +2,6 @@ "proxyAdminOwner": "0x8AC80fa0993D95C9d6B8Cb494E561E6731038941", "name": "POWER", "symbol": "POWER", - "appAdmin": "0x844e38Fae147aE933b0a930fF8EfDFF3767cEA24" + "appAdmin": "0x844e38Fae147aE933b0a930fF8EfDFF3767cEA24", + "dailyMintLimit": "100000000000000000000000" } \ No newline at end of file diff --git a/deploy-config/rss3.json b/deploy-config/rss3.json index 93dd366..ab05d2e 100644 --- a/deploy-config/rss3.json +++ b/deploy-config/rss3.json @@ -2,5 +2,6 @@ "proxyAdminOwner": "0x8ac80fa0993d95c9d6b8cb494e561e6731038941", "name": "POWER", "symbol": "POWER", - "appAdmin": "0xf496eEeD857aA4709AC4D5B66b6711975623D355" + "appAdmin": "0xf496eEeD857aA4709AC4D5B66b6711975623D355", + "dailyMintLimit": "100000000000000000000000" } diff --git a/deploy-config/testnet.json b/deploy-config/testnet.json index 847f0c0..0709050 100644 --- a/deploy-config/testnet.json +++ b/deploy-config/testnet.json @@ -2,5 +2,6 @@ "proxyAdminOwner": "0x8AC80fa0993D95C9d6B8Cb494E561E6731038941", "name": "POWER", "symbol": "POWER", - "appAdmin": "0x844e38Fae147aE933b0a930fF8EfDFF3767cEA24" + "appAdmin": "0xf57cb2d96f6Cd8415a501cCf2837Ca4274cF5Abc", + "dailyMintLimit": "10000000000000000000000" } diff --git a/deployments/PowerToken.abi b/deployments/PowerToken.abi index c8638a3..ff62d73 100644 --- a/deployments/PowerToken.abi +++ b/deployments/PowerToken.abi @@ -12,6 +12,19 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "APP_USER_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "DEFAULT_ADMIN_ROLE", @@ -38,6 +51,68 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "addUser", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "addUsers", + "inputs": [ + { + "name": "accounts", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "admin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "airdrop", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "taxBasisPoints", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "allowance", @@ -143,6 +218,24 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "dailyMint", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "taxBasisPoints", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "decimals", @@ -156,6 +249,19 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "getDailyMintLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "getRoleAdmin", @@ -278,6 +384,11 @@ "name": "admin_", "type": "address", "internalType": "address" + }, + { + "name": "dailyMintLimit_", + "type": "uint256", + "internalType": "uint256" } ], "outputs": [], @@ -285,17 +396,22 @@ }, { "type": "function", - "name": "migrate", + "name": "mint", "inputs": [ { - "name": "users", - "type": "address[]", - "internalType": "address[]" + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" }, { - "name": "feedIds", - "type": "bytes32[]", - "internalType": "bytes32[]" + "name": "taxBasisPoints", + "type": "uint256", + "internalType": "uint256" } ], "outputs": [], @@ -303,10 +419,10 @@ }, { "type": "function", - "name": "mint", + "name": "mintToTreasury", "inputs": [ { - "name": "to", + "name": "treasuryAdmin", "type": "address", "internalType": "address" }, @@ -332,6 +448,19 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "removeUser", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "renounceRole", @@ -368,6 +497,19 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "setDailyMintLimit", + "inputs": [ + { + "name": "limit", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "supportsInterface", @@ -418,6 +560,11 @@ "name": "feedId", "type": "bytes32", "internalType": "bytes32" + }, + { + "name": "taxBasisPoints", + "type": "uint256", + "internalType": "uint256" } ], "outputs": [], @@ -520,6 +667,25 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "event", + "name": "AirdropTokens", + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, { "type": "event", "name": "Approval", @@ -779,6 +945,28 @@ } ] }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AlreadyMintedToday", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, { "type": "error", "name": "ERC20InsufficientAllowance", @@ -865,11 +1053,21 @@ } ] }, + { + "type": "error", + "name": "ExceedsDailyLimit", + "inputs": [] + }, { "type": "error", "name": "ExceedsMaxSupply", "inputs": [] }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, { "type": "error", "name": "InsufficientBalanceAndPoints", diff --git a/package.json b/package.json index c842d9a..d5ebbb4 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "devDependencies": { "husky": "^8.0.3", "lint-staged": "^14.0.0", - "solhint": "^5.0.2" + "solhint": "^5.0.3" }, "scripts": { "setup": "make clean && make build", @@ -14,6 +14,7 @@ "test": "make foundry-test", "snapshot": "make snapshot", "lint": "make lint", + "abi": "make abi", "solhint": "make solhint", "upgradeable": "make upgradeable", "mythril": "make mythril", diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 24dce08..bdb5083 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -82,7 +82,7 @@ contract Deploy is Deployer { } function deployPowerToken() public broadcast returns (address addr_) { - PowerToken token = new PowerToken(); + PowerToken token = new PowerToken(cfg.appAdmin()); // check states save("PowerToken", address(token)); @@ -93,7 +93,7 @@ contract Deploy is Deployer { function initializePowerToken() public broadcast { PowerToken tokenProxy = PowerToken(mustGetAddress("PowerTokenProxy")); - tokenProxy.initialize(cfg.name(), cfg.symbol(), cfg.appAdmin()); + tokenProxy.initialize(cfg.name(), cfg.symbol(), cfg.appAdmin(), cfg.dailyMintLimit()); // check states require(tokenProxy.hasRole(APP_ADMIN_ROLE, cfg.appAdmin()), "check admin role error"); diff --git a/script/DeployConfig.s.sol b/script/DeployConfig.s.sol index ad710b5..502ec6c 100644 --- a/script/DeployConfig.s.sol +++ b/script/DeployConfig.s.sol @@ -17,6 +17,7 @@ contract DeployConfig is Script { string public symbol; address public proxyAdminOwner; address public appAdmin; + uint256 public dailyMintLimit; constructor(string memory _path) { console.log("DeployConfig: reading file %s", _path); @@ -33,5 +34,6 @@ contract DeployConfig is Script { symbol = stdJson.readString(_json, "$.symbol"); proxyAdminOwner = stdJson.readAddress(_json, "$.proxyAdminOwner"); appAdmin = stdJson.readAddress(_json, "$.appAdmin"); + dailyMintLimit = stdJson.readUint(_json, "$.dailyMintLimit"); } } diff --git a/slither.db.json b/slither.db.json index 458729f..704e473 100644 --- a/slither.db.json +++ b/slither.db.json @@ -1 +1 @@ -[{"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}], "description": "Modifier TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) does not always execute _; or revert\n", "markdown": "Modifier [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) does not always execute _; or revert\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "5f852f236c7948fdd7fb7db2318ca5b18d8d8feadc82c7cc2dba5c7532e9c5af", "check": "incorrect-modifier", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}, {"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-0.8.22 (src/PowerToken.sol#2)\n\t\t-0.8.22 (src/interfaces/IErrors.sol#2)\n\t\t-0.8.22 (src/interfaces/IEvents.sol#2)\n\t\t-0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t\t-0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n", "markdown": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-[^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-[^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-[0.8.22](src/PowerToken.sol#L2)\n\t\t-[0.8.22](src/interfaces/IErrors.sol#L2)\n\t\t-[0.8.22](src/interfaces/IEvents.sol#L2)\n\t\t-[0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t\t-[0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "833d4c0d27308e859790e43d8aaf4d92ec08bfb0e2f8faf9eb9d4619d507962d", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "migrate", "source_mapping": {"start": 1643, "length": 976, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "migrate(address[],bytes32[])"}}, {"type": "node", "name": "delete _pointsBalancesV1[user]", "source_mapping": {"start": 2329, "length": 30, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [66], "starting_column": 13, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "migrate", "source_mapping": {"start": 1643, "length": 976, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "migrate(address[],bytes32[])"}}}}], "description": "PowerToken.migrate(address[],bytes32[]) (src/PowerToken.sol#48-76) has costly operations inside a loop:\n\t- delete _pointsBalancesV1[user] (src/PowerToken.sol#66)\n", "markdown": "[PowerToken.migrate(address[],bytes32[])](src/PowerToken.sol#L48-L76) has costly operations inside a loop:\n\t- [delete _pointsBalancesV1[user]](src/PowerToken.sol#L66)\n", "first_markdown_element": "src/PowerToken.sol#L48-L76", "id": "025e908856ba391948c15b827ac080c0890d391dec9f404e2b5bd0a128166773", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n", "markdown": "Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "31450e2a9ded72e4da1d1a317a5587f13319e58b11d71cabd6ed095ac760c772", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}], "description": "Version constraint ^0.8.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n", "markdown": "Version constraint ^0.8.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4", "id": "b56159e50f9b77faa52a4f04491cd9b23a630604640a98dbf81af4e4a2999612", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}], "description": "Version constraint ^0.8.1 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n", "markdown": "Version constraint ^0.8.1 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L4", "id": "7187ed79e08d846c778cb7911c3886616fc90fff6d6770bba43a9bf016dc19b1", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n", "markdown": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4", "id": "c973f868117d16124aa76a0a50caff0f1f2188df07edb10da3df778311e6a6f0", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Version constraint 0.8.22 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication.\nIt is used by:\n\t- 0.8.22 (src/PowerToken.sol#2)\n\t- 0.8.22 (src/interfaces/IErrors.sol#2)\n\t- 0.8.22 (src/interfaces/IEvents.sol#2)\n\t- 0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t- 0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n", "markdown": "Version constraint 0.8.22 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication.\nIt is used by:\n\t- [0.8.22](src/PowerToken.sol#L2)\n\t- [0.8.22](src/interfaces/IErrors.sol#L2)\n\t- [0.8.22](src/interfaces/IEvents.sol#L2)\n\t- [0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t- [0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "906834249e2417e11f183abd25ea7fc53012ba93e7bd3af7b26fbf50fdfa487d", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}, {"type": "node", "name": "(success,None) = recipient.call{value: amount}()", "source_mapping": {"start": 2812, "length": 52, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [67], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}}}], "description": "Low level call in Address.sendValue(address,uint256) (lib/openzeppelin-contracts/contracts/utils/Address.sol#64-69):\n\t- (success,None) = recipient.call{value: amount}() (lib/openzeppelin-contracts/contracts/utils/Address.sol#67)\n", "markdown": "Low level call in [Address.sendValue(address,uint256)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69):\n\t- [(success,None) = recipient.call{value: amount}()](lib/openzeppelin-contracts/contracts/utils/Address.sol#L67)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69", "id": "600e60f72250fe75d9cd2f143865c5d96c5a0dad6381d8102e93f61fbbd94bea", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "MAX_SUPPLY = 1000000000000000000000000000", "source_mapping": {"start": 776, "length": 53, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}}}], "description": "PowerToken.slitherConstructorConstantVariables() (src/PowerToken.sol#13-147) uses literals with too many digits:\n\t- MAX_SUPPLY = 1000000000000000000000000000 (src/PowerToken.sol#24)\n", "markdown": "[PowerToken.slitherConstructorConstantVariables()](src/PowerToken.sol#L13-L147) uses literals with too many digits:\n\t- [MAX_SUPPLY = 1000000000000000000000000000](src/PowerToken.sol#L24)\n", "first_markdown_element": "src/PowerToken.sol#L13-L147", "id": "65dde3f8ec82437db46e79cfdd16f8722a4c172f0d457f4f8ddb14748d7ded90", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [], "description": "The following unused import(s) in src/PowerToken.sol should be removed:\n\t-import {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\"; (src/PowerToken.sol#9)\n", "markdown": "The following unused import(s) in src/PowerToken.sol should be removed:\n\t-import {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\"; (src/PowerToken.sol#9)\n", "first_markdown_element": "", "id": "9d72931b2d6f16931b1e1da097eefc08d832f9be202af9a09ea8fba0d9362fa9", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "admin", "source_mapping": {"start": 2897, "length": 96, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "admin()"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.admin() (src/upgradeability/TransparentUpgradeableProxy.sol#62-64) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.admin()](src/upgradeability/TransparentUpgradeableProxy.sol#L62-L64) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L62-L64", "id": "858af63f62423e3072a8e44a12dc50ab58d0dc575e56569fca31e67148872335", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "implementation", "source_mapping": {"start": 3453, "length": 129, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "implementation()"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.implementation() (src/upgradeability/TransparentUpgradeableProxy.sol#75-77) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.implementation()](src/upgradeability/TransparentUpgradeableProxy.sol#L75-L77) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L75-L77", "id": "85c581823b6de16e39e3cbdeeebf4ebb941a5fb268330eaacac3806dd04668b6", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "changeAdmin", "source_mapping": {"start": 3787, "length": 103, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [86, 87, 88], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "changeAdmin(address)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.changeAdmin(address) (src/upgradeability/TransparentUpgradeableProxy.sol#86-88) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.changeAdmin(address)](src/upgradeability/TransparentUpgradeableProxy.sol#L86-L88) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L86-L88", "id": "81966beaf527b30e704a0ff38c551fa8e31786612e7191fd8a5249156a3d6334", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "upgradeTo", "source_mapping": {"start": 4050, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "upgradeTo(address)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.upgradeTo(address) (src/upgradeability/TransparentUpgradeableProxy.sol#95-97) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.upgradeTo(address)](src/upgradeability/TransparentUpgradeableProxy.sol#L95-L97) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L95-L97", "id": "0af8cc60ef9c2b1138a9c7121d92db3418c118bd004acf879b451c5395cba816", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "upgradeToAndCall", "source_mapping": {"start": 4560, "length": 186, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [106, 107, 108, 109, 110, 111], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "upgradeToAndCall(address,bytes)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.upgradeToAndCall(address,bytes) (src/upgradeability/TransparentUpgradeableProxy.sol#106-111) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.upgradeToAndCall(address,bytes)](src/upgradeability/TransparentUpgradeableProxy.sol#L106-L111) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L106-L111", "id": "fbdb24b92c44b4863bf7654b3abfa1d9b2f8924b96bf1ef895671e5ee18936ba", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "function", "name": "_fallback", "source_mapping": {"start": 2322, "length": 110, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [58, 59, 60, 61], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_fallback()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) calls Proxy._fallback() (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#58-61) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) calls [Proxy._fallback()](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L58-L61) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "282b03a73c1d97a46ca946e2f33c8ecbd9bf584fe50b4b1ad28dd1e9f0946d73", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "newPoints", "source_mapping": {"start": 1911, "length": 17, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [57], "starting_column": 9, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "tip", "source_mapping": {"start": 1633, "length": 1149, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 450, "length": 3048, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109], "starting_column": 1, "ending_column": 2}}, "signature": "tip(uint256,address,bytes32)"}}}}], "description": "PowerToken.tip(uint256,address,bytes32).newPoints (src/PowerToken.sol#57) is a local variable never initialized\n", "markdown": "[PowerToken.tip(uint256,address,bytes32).newPoints](src/PowerToken.sol#L57) is a local variable never initialized\n", "first_markdown_element": "src/PowerToken.sol#L57", "id": "e30a64edec6f6cf03ba3165b935ca125dc3c3b51d39411335f4d96b3c44a4382", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "amountToTransfer", "source_mapping": {"start": 1939, "length": 24, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "tip", "source_mapping": {"start": 1633, "length": 1149, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 450, "length": 3048, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109], "starting_column": 1, "ending_column": 2}}, "signature": "tip(uint256,address,bytes32)"}}}}], "description": "PowerToken.tip(uint256,address,bytes32).amountToTransfer (src/PowerToken.sol#59) is a local variable never initialized\n", "markdown": "[PowerToken.tip(uint256,address,bytes32).amountToTransfer](src/PowerToken.sol#L59) is a local variable never initialized\n", "first_markdown_element": "src/PowerToken.sol#L59", "id": "fe8826c99bb337b9af320e400ac4dad54f3d3833489d6a775144023ed0c25409", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_grantRole", "source_mapping": {"start": 3217, "length": 348, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77, 78, 79], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_grantRole(bytes32,address)"}}, {"type": "node", "name": "$._roleMembers[role].add(account)", "source_mapping": {"start": 3491, "length": 33, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [76], "starting_column": 13, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "_grantRole", "source_mapping": {"start": 3217, "length": 348, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77, 78, 79], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_grantRole(bytes32,address)"}}}}], "description": "AccessControlEnumerableUpgradeable._grantRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#72-79) ignores return value by $._roleMembers[role].add(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#76)\n", "markdown": "[AccessControlEnumerableUpgradeable._grantRole(bytes32,address)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L72-L79) ignores return value by [$._roleMembers[role].add(account)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L76)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L72-L79", "id": "83e34f41ea90795f2a3efc9c29928181d5807716dc9d1e9b3155e8f40977294a", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_revokeRole", "source_mapping": {"start": 3668, "length": 353, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [84, 85, 86, 87, 88, 89, 90, 91], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_revokeRole(bytes32,address)"}}, {"type": "node", "name": "$._roleMembers[role].remove(account)", "source_mapping": {"start": 3944, "length": 36, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [88], "starting_column": 13, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "_revokeRole", "source_mapping": {"start": 3668, "length": 353, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [84, 85, 86, 87, 88, 89, 90, 91], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_revokeRole(bytes32,address)"}}}}], "description": "AccessControlEnumerableUpgradeable._revokeRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#84-91) ignores return value by $._roleMembers[role].remove(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#88)\n", "markdown": "[AccessControlEnumerableUpgradeable._revokeRole(bytes32,address)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L84-L91) ignores return value by [$._roleMembers[role].remove(account)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L88)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L84-L91", "id": "9528a2bd068bba390cbddb5fddc1ba6e37923b7ec12597b6b340cc19cdacc75f", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_upgradeToAndCall", "source_mapping": {"start": 2057, "length": 265, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [59, 60, 61, 62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeToAndCall(address,bytes,bool)"}}, {"type": "node", "name": "Address.functionDelegateCall(newImplementation,data)", "source_mapping": {"start": 2252, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [62], "starting_column": 13, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "_upgradeToAndCall", "source_mapping": {"start": 2057, "length": 265, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [59, 60, 61, 62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeToAndCall(address,bytes,bool)"}}}}], "description": "ERC1967Upgrade._upgradeToAndCall(address,bytes,bool) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#59-64) ignores return value by Address.functionDelegateCall(newImplementation,data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#62)\n", "markdown": "[ERC1967Upgrade._upgradeToAndCall(address,bytes,bool)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L59-L64) ignores return value by [Address.functionDelegateCall(newImplementation,data)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L62)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L59-L64", "id": "d31b572854128249d2461e59e74788850c6855554c5e4e2c73dea9ff0e546955", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_upgradeBeaconToAndCall", "source_mapping": {"start": 5728, "length": 313, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [150, 151, 152, 153, 154, 155, 156], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeBeaconToAndCall(address,bytes,bool)"}}, {"type": "node", "name": "Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data)", "source_mapping": {"start": 5953, "length": 71, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [154], "starting_column": 13, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "_upgradeBeaconToAndCall", "source_mapping": {"start": 5728, "length": 313, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [150, 151, 152, 153, 154, 155, 156], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeBeaconToAndCall(address,bytes,bool)"}}}}], "description": "ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#150-156) ignores return value by Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#154)\n", "markdown": "[ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L150-L156) ignores return value by [Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L154)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L150-L156", "id": "c84131ce88bf50fddfe31dea50ca5968ad15e3318e69b3e35dc995d0a01f1cb0", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}], "description": "Modifier TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) does not always execute _; or revert", "markdown": "Modifier [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) does not always execute _; or revert", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "5530811b8f31a92cde9528b8c17ea217ddffa4a1218c85cf7cd615221ec4c0bd", "check": "incorrect-modifier", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}, {"type": "node", "name": "", "source_mapping": {"start": 1018, "length": 819, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "Proxy._delegate(address) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#22-45) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#23-44)\n", "markdown": "[Proxy._delegate(address)](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L22-L45) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L23-L44)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L22-L45", "id": "33cc230cee4ef2fd623b0a07b2d5001d8c036105a8228b9277310a276456c20b", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_revert", "source_mapping": {"start": 8821, "length": 540, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes,string)"}}, {"type": "node", "name": "", "source_mapping": {"start": 9152, "length": 142, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [236, 237, 238, 239], "starting_column": 13, "ending_column": 14}, "type_specific_fields": {"parent": {"type": "function", "name": "_revert", "source_mapping": {"start": 8821, "length": 540, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes,string)"}}}}], "description": "Address._revert(bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#231-243) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Address.sol#236-239)\n", "markdown": "[Address._revert(bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L231-L243) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/Address.sol#L236-L239)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L231-L243", "id": "202587d026bc154cc0001a634101f20caa34ef114975710d739f5c8c36d92e7c", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getAddressSlot", "source_mapping": {"start": 1859, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [62, 63, 64, 65, 66, 67], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getAddressSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 1996, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [64, 65, 66], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getAddressSlot", "source_mapping": {"start": 1859, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [62, 63, 64, 65, 66, 67], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getAddressSlot(bytes32)"}}}}], "description": "StorageSlot.getAddressSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#62-67) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#64-66)\n", "markdown": "[StorageSlot.getAddressSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L62-L67) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L64-L66)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L62-L67", "id": "be79897c96a1ad4e7485364e6bf0b216927ccdec167bc4a7ee5ff7c0ef6c58d6", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBooleanSlot", "source_mapping": {"start": 2147, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBooleanSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2284, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [74, 75, 76], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBooleanSlot", "source_mapping": {"start": 2147, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBooleanSlot(bytes32)"}}}}], "description": "StorageSlot.getBooleanSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#72-77) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#74-76)\n", "markdown": "[StorageSlot.getBooleanSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L72-L77) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L74-L76)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L72-L77", "id": "0d7f6fe7e8c5456972a36f626bacb29d62be6b99b66682169037f665ac8a92cd", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytes32Slot", "source_mapping": {"start": 2435, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytes32Slot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2572, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [84, 85, 86], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytes32Slot", "source_mapping": {"start": 2435, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytes32Slot(bytes32)"}}}}], "description": "StorageSlot.getBytes32Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#82-87) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#84-86)\n", "markdown": "[StorageSlot.getBytes32Slot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L82-L87) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L84-L86)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L82-L87", "id": "3bbe15ec30e3defe6433fe40e470546c08efe18d159fac6e7e045bee0ffe704f", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getUint256Slot", "source_mapping": {"start": 2723, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [92, 93, 94, 95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getUint256Slot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2860, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [94, 95, 96], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getUint256Slot", "source_mapping": {"start": 2723, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [92, 93, 94, 95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getUint256Slot(bytes32)"}}}}], "description": "StorageSlot.getUint256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#92-97) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#94-96)\n", "markdown": "[StorageSlot.getUint256Slot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L92-L97) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L94-L96)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L92-L97", "id": "e0999a78e2a4800028a800b8f94e81bd4b1fcbb9c2c0021af31da78c22e747e4", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3010, "length": 188, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [102, 103, 104, 105, 106, 107], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3145, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [104, 105, 106], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3010, "length": 188, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [102, 103, 104, 105, 106, 107], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(bytes32)"}}}}], "description": "StorageSlot.getStringSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#102-107) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#104-106)\n", "markdown": "[StorageSlot.getStringSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L102-L107) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L104-L106)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L102-L107", "id": "aa109531561bb7c474af38c302b5e97d1a5d82d1277f986f6974185512a77c54", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3310, "length": 202, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [112, 113, 114, 115, 116, 117], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(string)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3453, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [114, 115, 116], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3310, "length": 202, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [112, 113, 114, 115, 116, 117], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(string)"}}}}], "description": "StorageSlot.getStringSlot(string) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#112-117) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#114-116)\n", "markdown": "[StorageSlot.getStringSlot(string)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L112-L117) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L114-L116)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L112-L117", "id": "277394614196fa9d2a2210b3b3d6e5d01cdff4e0f9062edfaaa0708d20fb45c4", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3608, "length": 186, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [122, 123, 124, 125, 126, 127], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3741, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [124, 125, 126], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3608, "length": 186, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [122, 123, 124, 125, 126, 127], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes32)"}}}}], "description": "StorageSlot.getBytesSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#122-127) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#124-126)\n", "markdown": "[StorageSlot.getBytesSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L122-L127) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L124-L126)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L122-L127", "id": "ef0ce36b4f40431be76718e44256f3639ad3d3fd35d174658f3e92e0c85632fc", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3904, "length": 199, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes)"}}, {"type": "node", "name": "", "source_mapping": {"start": 4044, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [134, 135, 136], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3904, "length": 199, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes)"}}}}], "description": "StorageSlot.getBytesSlot(bytes) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#132-137) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#134-136)\n", "markdown": "[StorageSlot.getBytesSlot(bytes)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L132-L137) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L134-L136)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L132-L137", "id": "316ed7d8a2c06e360b9b61f71d043203da6763fc4045f24d8e722a8aac442ebc", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getAccessControlStorage", "source_mapping": {"start": 2787, "length": 177, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 2887, "length": 71, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [68, 69, 70], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAccessControlStorage", "source_mapping": {"start": 2787, "length": 177, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlStorage()"}}}}], "description": "AccessControlUpgradeable._getAccessControlStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#67-71) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#68-70)\n", "markdown": "[AccessControlUpgradeable._getAccessControlStorage()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L67-L71) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L68-L70)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L67-L71", "id": "feb1b112432398f517a6ab9498fbf47ee9b18f7231f726720e343a8e968f4cb9", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getAccessControlEnumerableStorage", "source_mapping": {"start": 1250, "length": 207, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlEnumerableStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 1370, "length": 81, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [26, 27, 28], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAccessControlEnumerableStorage", "source_mapping": {"start": 1250, "length": 207, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlEnumerableStorage()"}}}}], "description": "AccessControlEnumerableUpgradeable._getAccessControlEnumerableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#25-29) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#26-28)\n", "markdown": "[AccessControlEnumerableUpgradeable._getAccessControlEnumerableStorage()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L25-L29) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L26-L28)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L25-L29", "id": "a7062757af5bcd35de30901b68c2103b68910d97eab291ff4d1a240bd926aeb5", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getInitializableStorage", "source_mapping": {"start": 8737, "length": 170, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [223, 224, 225, 226, 227], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Initializable", "source_mapping": {"start": 2349, "length": 6560, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228], "starting_column": 1, "ending_column": 2}}, "signature": "_getInitializableStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 8837, "length": 64, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [224, 225, 226], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getInitializableStorage", "source_mapping": {"start": 8737, "length": 170, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [223, 224, 225, 226, 227], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Initializable", "source_mapping": {"start": 2349, "length": 6560, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228], "starting_column": 1, "ending_column": 2}}, "signature": "_getInitializableStorage()"}}}}], "description": "Initializable._getInitializableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#223-227) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#224-226)\n", "markdown": "[Initializable._getInitializableStorage()](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L223-L227) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L224-L226)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L223-L227", "id": "911d8d3c1b30e2cb09b79e470476efb16b9731e2b07d7bcc9f7deedbbe99b8b3", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getERC20Storage", "source_mapping": {"start": 2242, "length": 153, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [51, 52, 53, 54, 55], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "_getERC20Storage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 2326, "length": 63, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [52, 53, 54], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getERC20Storage", "source_mapping": {"start": 2242, "length": 153, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [51, 52, 53, 54, 55], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "_getERC20Storage()"}}}}], "description": "ERC20Upgradeable._getERC20Storage() (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#51-55) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#52-54)\n", "markdown": "[ERC20Upgradeable._getERC20Storage()](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L51-L55) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L52-L54)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L51-L55", "id": "1828414e2f8ae209901a6752845058f324fa3d4457156d35ce59f3e2deacbd25", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 7776, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.Bytes32Set)"}}, {"type": "node", "name": "", "source_mapping": {"start": 7998, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [224, 225, 226], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 7776, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.Bytes32Set)"}}}}], "description": "EnumerableSet.values(EnumerableSet.Bytes32Set) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#219-229) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#224-226)\n", "markdown": "[EnumerableSet.values(EnumerableSet.Bytes32Set)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L219-L229) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L224-L226)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L219-L229", "id": "e28450e79a3e4a686a65b30f49cd00fd738ebcfe2771156fbe2e9366b9658704", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 10270, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.AddressSet)"}}, {"type": "node", "name": "", "source_mapping": {"start": 10492, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [298, 299, 300], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 10270, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.AddressSet)"}}}}], "description": "EnumerableSet.values(EnumerableSet.AddressSet) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#293-303) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#298-300)\n", "markdown": "[EnumerableSet.values(EnumerableSet.AddressSet)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L293-L303) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L298-L300)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L293-L303", "id": "1b31e6e17a9cc23e925f64a765c61771d24598c86b2e252eb491a81cd3670f54", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 12671, "length": 297, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.UintSet)"}}, {"type": "node", "name": "", "source_mapping": {"start": 12890, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [372, 373, 374], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 12671, "length": 297, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.UintSet)"}}}}], "description": "EnumerableSet.values(EnumerableSet.UintSet) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#367-377) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#372-374)\n", "markdown": "[EnumerableSet.values(EnumerableSet.UintSet)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L367-L377) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L372-L374)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L367-L377", "id": "b3ec8675f01bf42c2e89e7d6168c5669c90f0f9eeb4b1f9223957506b46db59c", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}, {"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Different versions of Solidity are used:\n\t- Version used: ['0.8.22', '^0.8.0', '^0.8.1', '^0.8.2', '^0.8.20']\n\t- 0.8.22 (src/PowerToken.sol#2)\n\t- 0.8.22 (src/interfaces/IErrors.sol#2)\n\t- 0.8.22 (src/interfaces/IEvents.sol#2)\n\t- 0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t- 0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n\t- ^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- ^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n", "markdown": "Different versions of Solidity are used:\n\t- Version used: ['0.8.22', '^0.8.0', '^0.8.1', '^0.8.2', '^0.8.20']\n\t- [0.8.22](src/PowerToken.sol#L2)\n\t- [0.8.22](src/interfaces/IErrors.sol#L2)\n\t- [0.8.22](src/interfaces/IEvents.sol#L2)\n\t- [0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t- [0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n\t- [^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- [^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "b9934e107a92cfab45cb65c18f8c8c973b9a651340eae70c62c042ccb626b4ba", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_admin", "source_mapping": {"start": 4807, "length": 93, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [116, 117, 118], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "_admin()"}}], "description": "TransparentUpgradeableProxy._admin() (src/upgradeability/TransparentUpgradeableProxy.sol#116-118) is never used and should be removed\n", "markdown": "[TransparentUpgradeableProxy._admin()](src/upgradeability/TransparentUpgradeableProxy.sol#L116-L118) is never used and should be removed\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L116-L118", "id": "43666b6a0b32a3c2fdfac7caa3388ea05984e7c9e1c3630723a690abfee4b734", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "726ddea96981d94ba10d3af2c3aeff02489c17b3ecb50d228d9af12039303f8c", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4", "id": "bb841581212eddeca7133fbfa44e364b7e14cd91b25ca41f94c5552c67a4bbf7", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4", "id": "563c74c739bb56f9b679a9a0f0ac210f3ccb6ae00a2674fd5d0b7727d4b1b9e8", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}], "description": "Pragma version^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4", "id": "02eed3449244fedd146c91b5ff871589873168b674af31a84b7ca0193b77f096", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4", "id": "8f26620bba00ded99b510717e5d54782f6c43f77daa0eece6a354df854cbe914", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4", "id": "04012c49d27fdd4f11a0a128ce5d5bb6fcdc1b85b6ff689e30bc4fdd18da090e", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}], "description": "Pragma version^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L4", "id": "84365357528b0c8be3876e3ef8d18e1e9f211531691821a5e44345b7ca12c310", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5", "id": "c02696983ea1394e52785c70123ff4b0c98f8cf8e5d24a0afe41ec23382376a5", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4", "id": "281ef0eed482aa12236a7129d185118f4910a128955f8eb96554ce4b3c92e2b8", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4", "id": "4d2e76747f698d6faec39d670af4a7b28cd4da81611f9f15a31150977495288c", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4", "id": "b34871432b0e8b787c13df477d488fb4ab851efb8c989d88d791b0ec0166bfba", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4", "id": "8b478dd257baf28de26e2e8fec40fc0744ef79012be8f3677fdefe2b8221c9c5", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4", "id": "e319d8e6500736a0a5b6ff90db42dbf9e32ef7b91a721e7b52fa8005ee7aa547", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4", "id": "d7dfffd72f2359d2bf8c7b8ad9110a345d6d461aa984add20c4cf0b2e4cc3aad", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4", "id": "7995b1a1f2648e7437dbe5580e91bd043b60ec7dd94159772736936d368e1df1", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4", "id": "6b30c8b9c01ae6bff73bd245255a11c00b4a17eb415ee760183a1f3d61b057c4", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3", "id": "f82024db9393d3e2a9fadbcfc0ff029b7e2f79aae0fb434087209e1b33be7c61", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4", "id": "9fb4c602bb97dbe1a57c7d5d3d7fa9e8f0d03816af5fff05e396f31b403464e9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4", "id": "03bc06ddc08c7d607d9d83b273dfb7be8fced9c0100c8f338d16524ad3c43f84", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4", "id": "f2cba9bc39673c539f1eacdf1a684ceddffec4381dc6ad02f6fb4a7bad6e01fe", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5", "id": "e1daa51a780eb75c966c966b28e1a9738ab658b4529269221199634f7320a04e", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/PowerToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/PowerToken.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "55aa2259bd9a0b87448813f2fdce8ad6e2df3ebaace8cd98dc51321a24c0f1a9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IErrors.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IErrors.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IErrors.sol#L2", "id": "82b31939098787d830395e05e66c6246c823ffd4a663eca0ca79c0d8e9dd0fe9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IEvents.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IEvents.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IEvents.sol#L2", "id": "e3e0b84f1f3e4d96a9c20c9cbc6b911e5b4e4139bbba2102f1cbad6820176576", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IPowerToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IPowerToken.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IPowerToken.sol#L2", "id": "d0db62958bad6cf4adc9c479f177799f367152633c9fc776b5c190bdd3f93073", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L3", "id": "d938d61fa27e4f7901060cf93974fb3d5a165c4c643236969be5a4d2e8033653", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "solc-0.8.22 is not recommended for deployment\n", "markdown": "solc-0.8.22 is not recommended for deployment\n", "first_markdown_element": "", "id": "2584eed3f1a6c37118da98709458a611a90fc5486a349e6fad8b5af8d201ac98", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}, {"type": "node", "name": "(success) = recipient.call{value: amount}()", "source_mapping": {"start": 2812, "length": 52, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [67], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}}}], "description": "Low level call in Address.sendValue(address,uint256) (lib/openzeppelin-contracts/contracts/utils/Address.sol#64-69):\n\t- (success) = recipient.call{value: amount}() (lib/openzeppelin-contracts/contracts/utils/Address.sol#67)\n", "markdown": "Low level call in [Address.sendValue(address,uint256)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69):\n\t- [(success) = recipient.call{value: amount}()](lib/openzeppelin-contracts/contracts/utils/Address.sol#L67)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69", "id": "5c75205a7d43f30e3a1e272f93f17822d0b339b8f6815cfa4e1585323cff1305", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionCallWithValue", "source_mapping": {"start": 5165, "length": 446, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionCallWithValue(address,bytes,uint256,string)"}}, {"type": "node", "name": "(success,returndata) = target.call{value: value}(data)", "source_mapping": {"start": 5445, "length": 73, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [135], "starting_column": 9, "ending_column": 82}, "type_specific_fields": {"parent": {"type": "function", "name": "functionCallWithValue", "source_mapping": {"start": 5165, "length": 446, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionCallWithValue(address,bytes,uint256,string)"}}}}], "description": "Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#128-137):\n\t- (success,returndata) = target.call{value: value}(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#135)\n", "markdown": "Low level call in [Address.functionCallWithValue(address,bytes,uint256,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L128-L137):\n\t- [(success,returndata) = target.call{value: value}(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L135)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L128-L137", "id": "117f0e40fe1352d1526a3c30c36971a0228cffa749da9528fa1d65423334e755", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionStaticCall", "source_mapping": {"start": 6169, "length": 326, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionStaticCall(address,bytes,string)"}}, {"type": "node", "name": "(success,returndata) = target.staticcall(data)", "source_mapping": {"start": 6337, "length": 65, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [160], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "functionStaticCall", "source_mapping": {"start": 6169, "length": 326, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionStaticCall(address,bytes,string)"}}}}], "description": "Low level call in Address.functionStaticCall(address,bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#155-162):\n\t- (success,returndata) = target.staticcall(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#160)\n", "markdown": "Low level call in [Address.functionStaticCall(address,bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L155-L162):\n\t- [(success,returndata) = target.staticcall(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L160)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L155-L162", "id": "93eb0561ad76cb924a6646e71a8388be0f653be8a9cd37bdb60e25805d8be051", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionDelegateCall", "source_mapping": {"start": 7058, "length": 325, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionDelegateCall(address,bytes,string)"}}, {"type": "node", "name": "(success,returndata) = target.delegatecall(data)", "source_mapping": {"start": 7223, "length": 67, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [185], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "functionDelegateCall", "source_mapping": {"start": 7058, "length": 325, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionDelegateCall(address,bytes,string)"}}}}], "description": "Low level call in Address.functionDelegateCall(address,bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#180-187):\n\t- (success,returndata) = target.delegatecall(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#185)\n", "markdown": "Low level call in [Address.functionDelegateCall(address,bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L180-L187):\n\t- [(success,returndata) = target.delegatecall(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L185)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L180-L187", "id": "d195a90c4848e59b62bdf1e5bf577abf5a3a0d92ac7dad04aef4ca0c978598bb", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IBeacon", "source_mapping": {"start": 198, "length": 251, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16], "starting_column": 1, "ending_column": 2}}], "description": "TransparentUpgradeableProxy (src/upgradeability/TransparentUpgradeableProxy.sol#28-130) should inherit from IBeacon (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#9-16)\n", "markdown": "[TransparentUpgradeableProxy](src/upgradeability/TransparentUpgradeableProxy.sol#L28-L130) should inherit from [IBeacon](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L9-L16)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L28-L130", "id": "3168c0c9454e01dd85d8b35bcf7920255808756e09e10199820b20f7a9021745", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControl_init", "source_mapping": {"start": 3231, "length": 65, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [82, 83], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControl_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlUpgradeable.__AccessControl_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#82-83) is not in mixedCase\n", "markdown": "Function [AccessControlUpgradeable.__AccessControl_init()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L82-L83) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L82-L83", "id": "a333fa38b5f96027543bfa2131aac6765059644ab6c7dae2f8d357b5fbaa2f2b", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControl_init_unchained", "source_mapping": {"start": 3302, "length": 75, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [85, 86], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControl_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlUpgradeable.__AccessControl_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#85-86) is not in mixedCase\n", "markdown": "Function [AccessControlUpgradeable.__AccessControl_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L85-L86) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L85-L86", "id": "226e7d5af64c132f41abf0df79c0723e2a9ee53e2961f745732ce61ab1360dbe", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "AccessControlStorageLocation", "source_mapping": {"start": 2658, "length": 122, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [65], "starting_column": 5, "ending_column": 127}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant AccessControlUpgradeable.AccessControlStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#65) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [AccessControlUpgradeable.AccessControlStorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L65) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L65", "id": "0c5e75082cb1ae4de268786ea31269d9fb4bcf024dfd1f9d96c81678bd55bc7d", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControlEnumerable_init", "source_mapping": {"start": 1463, "length": 75, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControlEnumerable_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#31-32) is not in mixedCase\n", "markdown": "Function [AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L31-L32) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L31-L32", "id": "ef5d0800c6abeec9cf95ba22a2b5356b466e7266ac453d3ed2d8d6715e2a485d", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControlEnumerable_init_unchained", "source_mapping": {"start": 1544, "length": 85, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [34, 35], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControlEnumerable_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#34-35) is not in mixedCase\n", "markdown": "Function [AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L34-L35) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L34-L35", "id": "c5433a1d1949676dc711bcf3160f2439533f345ad44396e69fa216e8565cad1e", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "AccessControlEnumerableStorageLocation", "source_mapping": {"start": 1111, "length": 132, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [23], "starting_column": 5, "ending_column": 137}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant AccessControlEnumerableUpgradeable.AccessControlEnumerableStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#23) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [AccessControlEnumerableUpgradeable.AccessControlEnumerableStorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L23) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L23", "id": "c20f2c968d71e604a9d7b0f83a281d090cbbd192006592908d9b50aea5b86866", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20_init", "source_mapping": {"start": 2577, "length": 147, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20_init(string,string)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20Upgradeable.__ERC20_init(string,string) (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#63-65) is not in mixedCase\n", "markdown": "Function [ERC20Upgradeable.__ERC20_init(string,string)](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L63-L65) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L63-L65", "id": "8238dcf62f913fda66edd22ee2b08e732cfae65517418f334b31b357d5fb02c5", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20_init_unchained", "source_mapping": {"start": 2730, "length": 216, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20_init_unchained(string,string)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20Upgradeable.__ERC20_init_unchained(string,string) (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#67-71) is not in mixedCase\n", "markdown": "Function [ERC20Upgradeable.__ERC20_init_unchained(string,string)](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L67-L71) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L67-L71", "id": "74c629176a16cccc0c00bada69b465bc625751ea0b6a6c34a6948576e5a63d53", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "ERC20StorageLocation", "source_mapping": {"start": 2121, "length": 114, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [49], "starting_column": 5, "ending_column": 119}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant ERC20Upgradeable.ERC20StorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#49) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [ERC20Upgradeable.ERC20StorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L49) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L49", "id": "cb30ae3c1a1bfe3cb95184f5fe03e6ce4a5ea625c3b22a19482d198acedacce7", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Context_init", "source_mapping": {"start": 748, "length": 59, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [18, 19], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ContextUpgradeable", "source_mapping": {"start": 688, "length": 505, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "starting_column": 1, "ending_column": 2}}, "signature": "__Context_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ContextUpgradeable.__Context_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#18-19) is not in mixedCase\n", "markdown": "Function [ContextUpgradeable.__Context_init()](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L18-L19) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L18-L19", "id": "ec47067e22967ab37ddb79c5eae4c225b0c9f1e4e15f1452db70b0a6f86103e0", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Context_init_unchained", "source_mapping": {"start": 813, "length": 69, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [21, 22], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ContextUpgradeable", "source_mapping": {"start": 688, "length": 505, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "starting_column": 1, "ending_column": 2}}, "signature": "__Context_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ContextUpgradeable.__Context_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#21-22) is not in mixedCase\n", "markdown": "Function [ContextUpgradeable.__Context_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L21-L22) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L21-L22", "id": "8629c89abc9e568d22212182eb038287fc4f676ff34add41294173d644b25bcb", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC165_init", "source_mapping": {"start": 836, "length": 58, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [22, 23], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC165Upgradeable", "source_mapping": {"start": 768, "length": 414, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC165_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC165Upgradeable.__ERC165_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#22-23) is not in mixedCase\n", "markdown": "Function [ERC165Upgradeable.__ERC165_init()](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L22-L23) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L22-L23", "id": "f226b70c0c428d938e421293c43b68d973d744168b94b568e0deb7b189c26f50", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC165_init_unchained", "source_mapping": {"start": 900, "length": 68, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [25, 26], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC165Upgradeable", "source_mapping": {"start": 768, "length": 414, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC165_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC165Upgradeable.__ERC165_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#25-26) is not in mixedCase\n", "markdown": "Function [ERC165Upgradeable.__ERC165_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L25-L26) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L25-L26", "id": "85d4e6d503145e70d4f27b51c03c2aecc7efa120329a4cf27b34d33cd9a2c942", "check": "naming-convention", "impact": "Informational", "confidence": "High"}] \ No newline at end of file +[{"elements": [{"type": "variable", "name": "admin_", "source_mapping": {"start": 1865, "length": 14, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 23}, "type_specific_fields": {"parent": {"type": "function", "name": "initialize", "source_mapping": {"start": 1772, "length": 394, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 586, "length": 7970, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "initialize(string,string,address,uint256)"}}}}, {"type": "node", "name": "admin = admin_", "source_mapping": {"start": 2102, "length": 14, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [60], "starting_column": 9, "ending_column": 23}, "type_specific_fields": {"parent": {"type": "function", "name": "initialize", "source_mapping": {"start": 1772, "length": 394, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 586, "length": 7970, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "initialize(string,string,address,uint256)"}}}}], "description": "PowerToken.initialize(string,string,address,uint256).admin_ (src/PowerToken.sol#52) lacks a zero-check on :\n\t\t- admin = admin_ (src/PowerToken.sol#60)\n", "markdown": "[PowerToken.initialize(string,string,address,uint256).admin_](src/PowerToken.sol#L52) lacks a zero-check on :\n\t\t- [admin = admin_](src/PowerToken.sol#L60)\n", "first_markdown_element": "src/PowerToken.sol#L52", "id": "ac21e5b7f2c1b13c616f52aa63f89c8c7314eafd1a5d5e95a2b2ca6e87b915a0", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_revert", "source_mapping": {"start": 5743, "length": 516, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 195, "length": 6066, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes)"}}, {"type": "node", "name": "", "source_mapping": {"start": 6046, "length": 142, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [151, 152, 153, 154], "starting_column": 13, "ending_column": 14}, "type_specific_fields": {"parent": {"type": "function", "name": "_revert", "source_mapping": {"start": 5743, "length": 516, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 195, "length": 6066, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes)"}}}}], "description": "Address._revert(bytes) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#146-158) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#151-154)\n", "markdown": "[Address._revert(bytes)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L146-L158) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L151-L154)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L146-L158", "id": "59fe7730bf8cb469e83c04641b2c1db127f1a72aa1ffd641d53dbdfdf296a23a", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}, {"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-0.8.22 (src/PowerToken.sol#2)\n\t\t-0.8.22 (src/interfaces/IErrors.sol#2)\n\t\t-0.8.22 (src/interfaces/IEvents.sol#2)\n\t\t-0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t\t-0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n", "markdown": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-[^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-[^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-[0.8.22](src/PowerToken.sol#L2)\n\t\t-[0.8.22](src/interfaces/IErrors.sol#L2)\n\t\t-[0.8.22](src/interfaces/IEvents.sol#L2)\n\t\t-[0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t\t-[0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "2e80841e49e371d374ce4a40b5871b59c2376922f8fdc9563b5b22d8bb9ad123", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n", "markdown": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4", "id": "08201f138192713191e4cb5b55f38efd34b15b64caeb40ef1d9f1d4b87c01491", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "sendValue", "source_mapping": {"start": 1531, "length": 331, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 195, "length": 6066, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}, {"type": "node", "name": "(success,None) = recipient.call{value: amount}()", "source_mapping": {"start": 1731, "length": 52, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [46], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "sendValue", "source_mapping": {"start": 1531, "length": 331, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 195, "length": 6066, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}}}], "description": "Low level call in Address.sendValue(address,uint256) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#41-50):\n\t- (success,None) = recipient.call{value: amount}() (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#46)\n", "markdown": "Low level call in [Address.sendValue(address,uint256)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L41-L50):\n\t- [(success,None) = recipient.call{value: amount}()](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L46)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol#L41-L50", "id": "e97a07e0eb13c834ba4a3520cd0e5ffac8cd8f7e4c95c38cc6f05f0f9c7e5742", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_pointsBalancesV1", "source_mapping": {"start": 1009, "length": 62, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [29], "starting_column": 5, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 586, "length": 7970, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 586, "length": 7970, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}], "description": "PowerToken._pointsBalancesV1 (src/PowerToken.sol#29) is never used in PowerToken (src/PowerToken.sol#13-262)\n", "markdown": "[PowerToken._pointsBalancesV1](src/PowerToken.sol#L29) is never used in [PowerToken](src/PowerToken.sol#L13-L262)\n", "first_markdown_element": "src/PowerToken.sol#L29", "id": "fe562308094e9b35d945ef97f6cf61ff2213efbb95eadb3d124074b60d1e738d", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}], "description": "Modifier TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) does not always execute _; or revert\n", "markdown": "Modifier [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) does not always execute _; or revert\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "5f852f236c7948fdd7fb7db2318ca5b18d8d8feadc82c7cc2dba5c7532e9c5af", "check": "incorrect-modifier", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}, {"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t\t-^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t\t-^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-0.8.22 (src/PowerToken.sol#2)\n\t\t-0.8.22 (src/interfaces/IErrors.sol#2)\n\t\t-0.8.22 (src/interfaces/IEvents.sol#2)\n\t\t-0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t\t-0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n", "markdown": "5 different versions of Solidity are used:\n\t- Version constraint ^0.8.0 is used by:\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t\t-[^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n\t- Version constraint ^0.8.2 is used by:\n\t\t-[^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n\t- Version constraint ^0.8.1 is used by:\n\t\t-[^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- Version constraint ^0.8.20 is used by:\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t\t-[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n\t- Version constraint 0.8.22 is used by:\n\t\t-[0.8.22](src/PowerToken.sol#L2)\n\t\t-[0.8.22](src/interfaces/IErrors.sol#L2)\n\t\t-[0.8.22](src/interfaces/IEvents.sol#L2)\n\t\t-[0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t\t-[0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "833d4c0d27308e859790e43d8aaf4d92ec08bfb0e2f8faf9eb9d4619d507962d", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "migrate", "source_mapping": {"start": 1643, "length": 976, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "migrate(address[],bytes32[])"}}, {"type": "node", "name": "delete _pointsBalancesV1[user]", "source_mapping": {"start": 2329, "length": 30, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [66], "starting_column": 13, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "migrate", "source_mapping": {"start": 1643, "length": 976, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "migrate(address[],bytes32[])"}}}}], "description": "PowerToken.migrate(address[],bytes32[]) (src/PowerToken.sol#48-76) has costly operations inside a loop:\n\t- delete _pointsBalancesV1[user] (src/PowerToken.sol#66)\n", "markdown": "[PowerToken.migrate(address[],bytes32[])](src/PowerToken.sol#L48-L76) has costly operations inside a loop:\n\t- [delete _pointsBalancesV1[user]](src/PowerToken.sol#L66)\n", "first_markdown_element": "src/PowerToken.sol#L48-L76", "id": "025e908856ba391948c15b827ac080c0890d391dec9f404e2b5bd0a128166773", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n", "markdown": "Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "31450e2a9ded72e4da1d1a317a5587f13319e58b11d71cabd6ed095ac760c772", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}], "description": "Version constraint ^0.8.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n", "markdown": "Version constraint ^0.8.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4", "id": "b56159e50f9b77faa52a4f04491cd9b23a630604640a98dbf81af4e4a2999612", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}], "description": "Version constraint ^0.8.1 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- ^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n", "markdown": "Version constraint ^0.8.1 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- [^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L4", "id": "7187ed79e08d846c778cb7911c3886616fc90fff6d6770bba43a9bf016dc19b1", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n", "markdown": "Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess.\nIt is used by:\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4", "id": "c973f868117d16124aa76a0a50caff0f1f2188df07edb10da3df778311e6a6f0", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Version constraint 0.8.22 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication.\nIt is used by:\n\t- 0.8.22 (src/PowerToken.sol#2)\n\t- 0.8.22 (src/interfaces/IErrors.sol#2)\n\t- 0.8.22 (src/interfaces/IEvents.sol#2)\n\t- 0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t- 0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n", "markdown": "Version constraint 0.8.22 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- VerbatimInvalidDeduplication.\nIt is used by:\n\t- [0.8.22](src/PowerToken.sol#L2)\n\t- [0.8.22](src/interfaces/IErrors.sol#L2)\n\t- [0.8.22](src/interfaces/IEvents.sol#L2)\n\t- [0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t- [0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "906834249e2417e11f183abd25ea7fc53012ba93e7bd3af7b26fbf50fdfa487d", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}, {"type": "node", "name": "(success,None) = recipient.call{value: amount}()", "source_mapping": {"start": 2812, "length": 52, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [67], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}}}], "description": "Low level call in Address.sendValue(address,uint256) (lib/openzeppelin-contracts/contracts/utils/Address.sol#64-69):\n\t- (success,None) = recipient.call{value: amount}() (lib/openzeppelin-contracts/contracts/utils/Address.sol#67)\n", "markdown": "Low level call in [Address.sendValue(address,uint256)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69):\n\t- [(success,None) = recipient.call{value: amount}()](lib/openzeppelin-contracts/contracts/utils/Address.sol#L67)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69", "id": "600e60f72250fe75d9cd2f143865c5d96c5a0dad6381d8102e93f61fbbd94bea", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "MAX_SUPPLY = 1000000000000000000000000000", "source_mapping": {"start": 776, "length": 53, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 521, "length": 4477, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}}}], "description": "PowerToken.slitherConstructorConstantVariables() (src/PowerToken.sol#13-147) uses literals with too many digits:\n\t- MAX_SUPPLY = 1000000000000000000000000000 (src/PowerToken.sol#24)\n", "markdown": "[PowerToken.slitherConstructorConstantVariables()](src/PowerToken.sol#L13-L147) uses literals with too many digits:\n\t- [MAX_SUPPLY = 1000000000000000000000000000](src/PowerToken.sol#L24)\n", "first_markdown_element": "src/PowerToken.sol#L13-L147", "id": "65dde3f8ec82437db46e79cfdd16f8722a4c172f0d457f4f8ddb14748d7ded90", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [], "description": "The following unused import(s) in src/PowerToken.sol should be removed:\n\t-import {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\"; (src/PowerToken.sol#9)\n", "markdown": "The following unused import(s) in src/PowerToken.sol should be removed:\n\t-import {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\"; (src/PowerToken.sol#9)\n", "first_markdown_element": "", "id": "9d72931b2d6f16931b1e1da097eefc08d832f9be202af9a09ea8fba0d9362fa9", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "admin", "source_mapping": {"start": 2897, "length": 96, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "admin()"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.admin() (src/upgradeability/TransparentUpgradeableProxy.sol#62-64) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.admin()](src/upgradeability/TransparentUpgradeableProxy.sol#L62-L64) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L62-L64", "id": "858af63f62423e3072a8e44a12dc50ab58d0dc575e56569fca31e67148872335", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "implementation", "source_mapping": {"start": 3453, "length": 129, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "implementation()"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.implementation() (src/upgradeability/TransparentUpgradeableProxy.sol#75-77) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.implementation()](src/upgradeability/TransparentUpgradeableProxy.sol#L75-L77) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L75-L77", "id": "85c581823b6de16e39e3cbdeeebf4ebb941a5fb268330eaacac3806dd04668b6", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "changeAdmin", "source_mapping": {"start": 3787, "length": 103, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [86, 87, 88], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "changeAdmin(address)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.changeAdmin(address) (src/upgradeability/TransparentUpgradeableProxy.sol#86-88) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.changeAdmin(address)](src/upgradeability/TransparentUpgradeableProxy.sol#L86-L88) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L86-L88", "id": "81966beaf527b30e704a0ff38c551fa8e31786612e7191fd8a5249156a3d6334", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "upgradeTo", "source_mapping": {"start": 4050, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "upgradeTo(address)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.upgradeTo(address) (src/upgradeability/TransparentUpgradeableProxy.sol#95-97) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.upgradeTo(address)](src/upgradeability/TransparentUpgradeableProxy.sol#L95-L97) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L95-L97", "id": "0af8cc60ef9c2b1138a9c7121d92db3418c118bd004acf879b451c5395cba816", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "upgradeToAndCall", "source_mapping": {"start": 4560, "length": 186, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [106, 107, 108, 109, 110, 111], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "upgradeToAndCall(address,bytes)"}}, {"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.upgradeToAndCall(address,bytes) (src/upgradeability/TransparentUpgradeableProxy.sol#106-111) calls TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.upgradeToAndCall(address,bytes)](src/upgradeability/TransparentUpgradeableProxy.sol#L106-L111) calls [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L106-L111", "id": "fbdb24b92c44b4863bf7654b3abfa1d9b2f8924b96bf1ef895671e5ee18936ba", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}, {"type": "function", "name": "_fallback", "source_mapping": {"start": 2322, "length": 110, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [58, 59, 60, 61], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_fallback()"}}, {"type": "node", "name": "return(uint256,uint256)(0,returndatasize()())", "source_mapping": {"start": 1786, "length": 27, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [42], "starting_column": 17, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) calls Proxy._fallback() (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#58-61) which halt the execution return(uint256,uint256)(0,returndatasize()()) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#42)\n", "markdown": "[TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) calls [Proxy._fallback()](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L58-L61) which halt the execution [return(uint256,uint256)(0,returndatasize()())](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L42)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "282b03a73c1d97a46ca946e2f33c8ecbd9bf584fe50b4b1ad28dd1e9f0946d73", "check": "incorrect-return", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "newPoints", "source_mapping": {"start": 1911, "length": 17, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [57], "starting_column": 9, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "tip", "source_mapping": {"start": 1633, "length": 1149, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 450, "length": 3048, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109], "starting_column": 1, "ending_column": 2}}, "signature": "tip(uint256,address,bytes32)"}}}}], "description": "PowerToken.tip(uint256,address,bytes32).newPoints (src/PowerToken.sol#57) is a local variable never initialized\n", "markdown": "[PowerToken.tip(uint256,address,bytes32).newPoints](src/PowerToken.sol#L57) is a local variable never initialized\n", "first_markdown_element": "src/PowerToken.sol#L57", "id": "e30a64edec6f6cf03ba3165b935ca125dc3c3b51d39411335f4d96b3c44a4382", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "amountToTransfer", "source_mapping": {"start": 1939, "length": 24, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "tip", "source_mapping": {"start": 1633, "length": 1149, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PowerToken", "source_mapping": {"start": 450, "length": 3048, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109], "starting_column": 1, "ending_column": 2}}, "signature": "tip(uint256,address,bytes32)"}}}}], "description": "PowerToken.tip(uint256,address,bytes32).amountToTransfer (src/PowerToken.sol#59) is a local variable never initialized\n", "markdown": "[PowerToken.tip(uint256,address,bytes32).amountToTransfer](src/PowerToken.sol#L59) is a local variable never initialized\n", "first_markdown_element": "src/PowerToken.sol#L59", "id": "fe8826c99bb337b9af320e400ac4dad54f3d3833489d6a775144023ed0c25409", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_grantRole", "source_mapping": {"start": 3217, "length": 348, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77, 78, 79], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_grantRole(bytes32,address)"}}, {"type": "node", "name": "$._roleMembers[role].add(account)", "source_mapping": {"start": 3491, "length": 33, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [76], "starting_column": 13, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "_grantRole", "source_mapping": {"start": 3217, "length": 348, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77, 78, 79], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_grantRole(bytes32,address)"}}}}], "description": "AccessControlEnumerableUpgradeable._grantRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#72-79) ignores return value by $._roleMembers[role].add(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#76)\n", "markdown": "[AccessControlEnumerableUpgradeable._grantRole(bytes32,address)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L72-L79) ignores return value by [$._roleMembers[role].add(account)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L76)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L72-L79", "id": "83e34f41ea90795f2a3efc9c29928181d5807716dc9d1e9b3155e8f40977294a", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_revokeRole", "source_mapping": {"start": 3668, "length": 353, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [84, 85, 86, 87, 88, 89, 90, 91], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_revokeRole(bytes32,address)"}}, {"type": "node", "name": "$._roleMembers[role].remove(account)", "source_mapping": {"start": 3944, "length": 36, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [88], "starting_column": 13, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "_revokeRole", "source_mapping": {"start": 3668, "length": 353, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [84, 85, 86, 87, 88, 89, 90, 91], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_revokeRole(bytes32,address)"}}}}], "description": "AccessControlEnumerableUpgradeable._revokeRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#84-91) ignores return value by $._roleMembers[role].remove(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#88)\n", "markdown": "[AccessControlEnumerableUpgradeable._revokeRole(bytes32,address)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L84-L91) ignores return value by [$._roleMembers[role].remove(account)](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L88)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L84-L91", "id": "9528a2bd068bba390cbddb5fddc1ba6e37923b7ec12597b6b340cc19cdacc75f", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_upgradeToAndCall", "source_mapping": {"start": 2057, "length": 265, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [59, 60, 61, 62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeToAndCall(address,bytes,bool)"}}, {"type": "node", "name": "Address.functionDelegateCall(newImplementation,data)", "source_mapping": {"start": 2252, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [62], "starting_column": 13, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "_upgradeToAndCall", "source_mapping": {"start": 2057, "length": 265, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [59, 60, 61, 62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeToAndCall(address,bytes,bool)"}}}}], "description": "ERC1967Upgrade._upgradeToAndCall(address,bytes,bool) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#59-64) ignores return value by Address.functionDelegateCall(newImplementation,data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#62)\n", "markdown": "[ERC1967Upgrade._upgradeToAndCall(address,bytes,bool)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L59-L64) ignores return value by [Address.functionDelegateCall(newImplementation,data)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L62)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L59-L64", "id": "d31b572854128249d2461e59e74788850c6855554c5e4e2c73dea9ff0e546955", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_upgradeBeaconToAndCall", "source_mapping": {"start": 5728, "length": 313, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [150, 151, 152, 153, 154, 155, 156], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeBeaconToAndCall(address,bytes,bool)"}}, {"type": "node", "name": "Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data)", "source_mapping": {"start": 5953, "length": 71, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [154], "starting_column": 13, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "_upgradeBeaconToAndCall", "source_mapping": {"start": 5728, "length": 313, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [150, 151, 152, 153, 154, 155, 156], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC1967Upgrade", "source_mapping": {"start": 517, "length": 5526, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157], "starting_column": 1, "ending_column": 2}}, "signature": "_upgradeBeaconToAndCall(address,bytes,bool)"}}}}], "description": "ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#150-156) ignores return value by Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#154)\n", "markdown": "[ERC1967Upgrade._upgradeBeaconToAndCall(address,bytes,bool)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L150-L156) ignores return value by [Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data)](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L154)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L150-L156", "id": "c84131ce88bf50fddfe31dea50ca5968ad15e3318e69b3e35dc995d0a01f1cb0", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "ifAdmin", "source_mapping": {"start": 2321, "length": 134, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "ifAdmin()"}}], "description": "Modifier TransparentUpgradeableProxy.ifAdmin() (src/upgradeability/TransparentUpgradeableProxy.sol#45-51) does not always execute _; or revert", "markdown": "Modifier [TransparentUpgradeableProxy.ifAdmin()](src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51) does not always execute _; or revert", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L45-L51", "id": "5530811b8f31a92cde9528b8c17ea217ddffa4a1218c85cf7cd615221ec4c0bd", "check": "incorrect-modifier", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}, {"type": "node", "name": "", "source_mapping": {"start": 1018, "length": 819, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_delegate", "source_mapping": {"start": 948, "length": 895, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Proxy", "source_mapping": {"start": 723, "length": 2523, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 1, "ending_column": 2}}, "signature": "_delegate(address)"}}}}], "description": "Proxy._delegate(address) (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#22-45) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#23-44)\n", "markdown": "[Proxy._delegate(address)](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L22-L45) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L23-L44)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L22-L45", "id": "33cc230cee4ef2fd623b0a07b2d5001d8c036105a8228b9277310a276456c20b", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_revert", "source_mapping": {"start": 8821, "length": 540, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes,string)"}}, {"type": "node", "name": "", "source_mapping": {"start": 9152, "length": 142, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [236, 237, 238, 239], "starting_column": 13, "ending_column": 14}, "type_specific_fields": {"parent": {"type": "function", "name": "_revert", "source_mapping": {"start": 8821, "length": 540, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "_revert(bytes,string)"}}}}], "description": "Address._revert(bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#231-243) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Address.sol#236-239)\n", "markdown": "[Address._revert(bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L231-L243) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/Address.sol#L236-L239)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L231-L243", "id": "202587d026bc154cc0001a634101f20caa34ef114975710d739f5c8c36d92e7c", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getAddressSlot", "source_mapping": {"start": 1859, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [62, 63, 64, 65, 66, 67], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getAddressSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 1996, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [64, 65, 66], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getAddressSlot", "source_mapping": {"start": 1859, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [62, 63, 64, 65, 66, 67], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getAddressSlot(bytes32)"}}}}], "description": "StorageSlot.getAddressSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#62-67) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#64-66)\n", "markdown": "[StorageSlot.getAddressSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L62-L67) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L64-L66)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L62-L67", "id": "be79897c96a1ad4e7485364e6bf0b216927ccdec167bc4a7ee5ff7c0ef6c58d6", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBooleanSlot", "source_mapping": {"start": 2147, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBooleanSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2284, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [74, 75, 76], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBooleanSlot", "source_mapping": {"start": 2147, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [72, 73, 74, 75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBooleanSlot(bytes32)"}}}}], "description": "StorageSlot.getBooleanSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#72-77) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#74-76)\n", "markdown": "[StorageSlot.getBooleanSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L72-L77) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L74-L76)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L72-L77", "id": "0d7f6fe7e8c5456972a36f626bacb29d62be6b99b66682169037f665ac8a92cd", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytes32Slot", "source_mapping": {"start": 2435, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytes32Slot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2572, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [84, 85, 86], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytes32Slot", "source_mapping": {"start": 2435, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [82, 83, 84, 85, 86, 87], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytes32Slot(bytes32)"}}}}], "description": "StorageSlot.getBytes32Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#82-87) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#84-86)\n", "markdown": "[StorageSlot.getBytes32Slot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L82-L87) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L84-L86)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L82-L87", "id": "3bbe15ec30e3defe6433fe40e470546c08efe18d159fac6e7e045bee0ffe704f", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getUint256Slot", "source_mapping": {"start": 2723, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [92, 93, 94, 95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getUint256Slot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 2860, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [94, 95, 96], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getUint256Slot", "source_mapping": {"start": 2723, "length": 190, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [92, 93, 94, 95, 96, 97], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getUint256Slot(bytes32)"}}}}], "description": "StorageSlot.getUint256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#92-97) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#94-96)\n", "markdown": "[StorageSlot.getUint256Slot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L92-L97) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L94-L96)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L92-L97", "id": "e0999a78e2a4800028a800b8f94e81bd4b1fcbb9c2c0021af31da78c22e747e4", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3010, "length": 188, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [102, 103, 104, 105, 106, 107], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3145, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [104, 105, 106], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3010, "length": 188, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [102, 103, 104, 105, 106, 107], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(bytes32)"}}}}], "description": "StorageSlot.getStringSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#102-107) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#104-106)\n", "markdown": "[StorageSlot.getStringSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L102-L107) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L104-L106)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L102-L107", "id": "aa109531561bb7c474af38c302b5e97d1a5d82d1277f986f6974185512a77c54", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3310, "length": 202, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [112, 113, 114, 115, 116, 117], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(string)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3453, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [114, 115, 116], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getStringSlot", "source_mapping": {"start": 3310, "length": 202, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [112, 113, 114, 115, 116, 117], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getStringSlot(string)"}}}}], "description": "StorageSlot.getStringSlot(string) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#112-117) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#114-116)\n", "markdown": "[StorageSlot.getStringSlot(string)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L112-L117) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L114-L116)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L112-L117", "id": "277394614196fa9d2a2210b3b3d6e5d01cdff4e0f9062edfaaa0708d20fb45c4", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3608, "length": 186, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [122, 123, 124, 125, 126, 127], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes32)"}}, {"type": "node", "name": "", "source_mapping": {"start": 3741, "length": 47, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [124, 125, 126], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3608, "length": 186, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [122, 123, 124, 125, 126, 127], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes32)"}}}}], "description": "StorageSlot.getBytesSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#122-127) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#124-126)\n", "markdown": "[StorageSlot.getBytesSlot(bytes32)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L122-L127) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L124-L126)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L122-L127", "id": "ef0ce36b4f40431be76718e44256f3639ad3d3fd35d174658f3e92e0c85632fc", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3904, "length": 199, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes)"}}, {"type": "node", "name": "", "source_mapping": {"start": 4044, "length": 53, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [134, 135, 136], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "getBytesSlot", "source_mapping": {"start": 3904, "length": 199, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "StorageSlot", "source_mapping": {"start": 1420, "length": 2685, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138], "starting_column": 1, "ending_column": 2}}, "signature": "getBytesSlot(bytes)"}}}}], "description": "StorageSlot.getBytesSlot(bytes) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#132-137) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#134-136)\n", "markdown": "[StorageSlot.getBytesSlot(bytes)](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L132-L137) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L134-L136)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L132-L137", "id": "316ed7d8a2c06e360b9b61f71d043203da6763fc4045f24d8e722a8aac442ebc", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getAccessControlStorage", "source_mapping": {"start": 2787, "length": 177, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 2887, "length": 71, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [68, 69, 70], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAccessControlStorage", "source_mapping": {"start": 2787, "length": 177, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlStorage()"}}}}], "description": "AccessControlUpgradeable._getAccessControlStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#67-71) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#68-70)\n", "markdown": "[AccessControlUpgradeable._getAccessControlStorage()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L67-L71) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L68-L70)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L67-L71", "id": "feb1b112432398f517a6ab9498fbf47ee9b18f7231f726720e343a8e968f4cb9", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getAccessControlEnumerableStorage", "source_mapping": {"start": 1250, "length": 207, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlEnumerableStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 1370, "length": 81, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [26, 27, 28], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAccessControlEnumerableStorage", "source_mapping": {"start": 1250, "length": 207, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "_getAccessControlEnumerableStorage()"}}}}], "description": "AccessControlEnumerableUpgradeable._getAccessControlEnumerableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#25-29) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#26-28)\n", "markdown": "[AccessControlEnumerableUpgradeable._getAccessControlEnumerableStorage()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L25-L29) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L26-L28)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L25-L29", "id": "a7062757af5bcd35de30901b68c2103b68910d97eab291ff4d1a240bd926aeb5", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getInitializableStorage", "source_mapping": {"start": 8737, "length": 170, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [223, 224, 225, 226, 227], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Initializable", "source_mapping": {"start": 2349, "length": 6560, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228], "starting_column": 1, "ending_column": 2}}, "signature": "_getInitializableStorage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 8837, "length": 64, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [224, 225, 226], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getInitializableStorage", "source_mapping": {"start": 8737, "length": 170, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [223, 224, 225, 226, 227], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Initializable", "source_mapping": {"start": 2349, "length": 6560, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228], "starting_column": 1, "ending_column": 2}}, "signature": "_getInitializableStorage()"}}}}], "description": "Initializable._getInitializableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#223-227) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#224-226)\n", "markdown": "[Initializable._getInitializableStorage()](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L223-L227) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L224-L226)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L223-L227", "id": "911d8d3c1b30e2cb09b79e470476efb16b9731e2b07d7bcc9f7deedbbe99b8b3", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getERC20Storage", "source_mapping": {"start": 2242, "length": 153, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [51, 52, 53, 54, 55], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "_getERC20Storage()"}}, {"type": "node", "name": "", "source_mapping": {"start": 2326, "length": 63, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [52, 53, 54], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getERC20Storage", "source_mapping": {"start": 2242, "length": 153, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [51, 52, 53, 54, 55], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "_getERC20Storage()"}}}}], "description": "ERC20Upgradeable._getERC20Storage() (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#51-55) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#52-54)\n", "markdown": "[ERC20Upgradeable._getERC20Storage()](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L51-L55) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L52-L54)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L51-L55", "id": "1828414e2f8ae209901a6752845058f324fa3d4457156d35ce59f3e2deacbd25", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 7776, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.Bytes32Set)"}}, {"type": "node", "name": "", "source_mapping": {"start": 7998, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [224, 225, 226], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 7776, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.Bytes32Set)"}}}}], "description": "EnumerableSet.values(EnumerableSet.Bytes32Set) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#219-229) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#224-226)\n", "markdown": "[EnumerableSet.values(EnumerableSet.Bytes32Set)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L219-L229) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L224-L226)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L219-L229", "id": "e28450e79a3e4a686a65b30f49cd00fd738ebcfe2771156fbe2e9366b9658704", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 10270, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.AddressSet)"}}, {"type": "node", "name": "", "source_mapping": {"start": 10492, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [298, 299, 300], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 10270, "length": 300, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.AddressSet)"}}}}], "description": "EnumerableSet.values(EnumerableSet.AddressSet) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#293-303) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#298-300)\n", "markdown": "[EnumerableSet.values(EnumerableSet.AddressSet)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L293-L303) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L298-L300)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L293-L303", "id": "1b31e6e17a9cc23e925f64a765c61771d24598c86b2e252eb491a81cd3670f54", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "values", "source_mapping": {"start": 12671, "length": 297, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.UintSet)"}}, {"type": "node", "name": "", "source_mapping": {"start": 12890, "length": 48, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [372, 373, 374], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "values", "source_mapping": {"start": 12671, "length": 297, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "EnumerableSet", "source_mapping": {"start": 1330, "length": 11640, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378], "starting_column": 1, "ending_column": 2}}, "signature": "values(EnumerableSet.UintSet)"}}}}], "description": "EnumerableSet.values(EnumerableSet.UintSet) (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#367-377) uses assembly\n\t- INLINE ASM (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#372-374)\n", "markdown": "[EnumerableSet.values(EnumerableSet.UintSet)](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L367-L377) uses assembly\n\t- [INLINE ASM](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L372-L374)\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L367-L377", "id": "b3ec8675f01bf42c2e89e7d6168c5669c90f0f9eeb4b1f9223957506b46db59c", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}, {"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}, {"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}, {"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Different versions of Solidity are used:\n\t- Version used: ['0.8.22', '^0.8.0', '^0.8.1', '^0.8.2', '^0.8.20']\n\t- 0.8.22 (src/PowerToken.sol#2)\n\t- 0.8.22 (src/interfaces/IErrors.sol#2)\n\t- 0.8.22 (src/interfaces/IEvents.sol#2)\n\t- 0.8.22 (src/interfaces/IPowerToken.sol#2)\n\t- 0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)\n\t- ^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)\n\t- ^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)\n\t- ^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)\n\t- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)\n", "markdown": "Different versions of Solidity are used:\n\t- Version used: ['0.8.22', '^0.8.0', '^0.8.1', '^0.8.2', '^0.8.20']\n\t- [0.8.22](src/PowerToken.sol#L2)\n\t- [0.8.22](src/interfaces/IErrors.sol#L2)\n\t- [0.8.22](src/interfaces/IEvents.sol#L2)\n\t- [0.8.22](src/interfaces/IPowerToken.sol#L2)\n\t- [0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4)\n\t- [^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5)\n\t- [^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4)\n\t- [^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4)\n\t- [^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5)\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "b9934e107a92cfab45cb65c18f8c8c973b9a651340eae70c62c042ccb626b4ba", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_admin", "source_mapping": {"start": 4807, "length": 93, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [116, 117, 118], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, "signature": "_admin()"}}], "description": "TransparentUpgradeableProxy._admin() (src/upgradeability/TransparentUpgradeableProxy.sol#116-118) is never used and should be removed\n", "markdown": "[TransparentUpgradeableProxy._admin()](src/upgradeability/TransparentUpgradeableProxy.sol#L116-L118) is never used and should be removed\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L116-L118", "id": "43666b6a0b32a3c2fdfac7caa3388ea05984e7c9e1c3630723a690abfee4b734", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 107, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#L4", "id": "726ddea96981d94ba10d3af2c3aeff02489c17b3ecb50d228d9af12039303f8c", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 113, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "filename_short": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#L4", "id": "bb841581212eddeca7133fbfa44e364b7e14cd91b25ca41f94c5552c67a4bbf7", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 114, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#L4", "id": "563c74c739bb56f9b679a9a0f0ac210f3ccb6ae00a2674fd5d0b7727d4b1b9e8", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.2", "source_mapping": {"start": 116, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".2"]}}], "description": "Pragma version^0.8.2 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.2](lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#L4", "id": "02eed3449244fedd146c91b5ff871589873168b674af31a84b7ca0193b77f096", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 99, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#L4", "id": "8f26620bba00ded99b510717e5d54782f6c43f77daa0eece6a354df854cbe914", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 93, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L4", "id": "04012c49d27fdd4f11a0a128ce5d5bb6fcdc1b85b6ff689e30bc4fdd18da090e", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.1", "source_mapping": {"start": 101, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".1"]}}], "description": "Pragma version^0.8.1 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4) allows old versions\n", "markdown": "Pragma version[^0.8.1](lib/openzeppelin-contracts/contracts/utils/Address.sol#L4) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L4", "id": "84365357528b0c8be3876e3ef8d18e1e9f211531691821a5e44345b7ca12c310", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.0", "source_mapping": {"start": 193, "length": 23, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".0"]}}], "description": "Pragma version^0.8.0 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5) allows old versions\n", "markdown": "Pragma version[^0.8.0](lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5) allows old versions\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#L5", "id": "c02696983ea1394e52785c70123ff4b0c98f8cf8e5d24a0afe41ec23382376a5", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 108, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L4", "id": "281ef0eed482aa12236a7129d185118f4910a128955f8eb96554ce4b3c92e2b8", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 129, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L4", "id": "4d2e76747f698d6faec39d670af4a7b28cd4da81611f9f15a31150977495288c", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 113, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#L4", "id": "b34871432b0e8b787c13df477d488fb4ab851efb8c989d88d791b0ec0166bfba", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 105, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L4", "id": "8b478dd257baf28de26e2e8fec40fc0744ef79012be8f3677fdefe2b8221c9c5", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 101, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L4", "id": "e319d8e6500736a0a5b6ff90db42dbf9e32ef7b91a721e7b52fa8005ee7aa547", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 114, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L4", "id": "d7dfffd72f2359d2bf8c7b8ad9110a345d6d461aa984add20c4cf0b2e4cc3aad", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 109, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#L4", "id": "7995b1a1f2648e7437dbe5580e91bd043b60ec7dd94159772736936d368e1df1", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 130, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#L4", "id": "6b30c8b9c01ae6bff73bd245255a11c00b4a17eb415ee760183a1f3d61b057c4", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 112, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol", "is_dependency": true, "lines": [3], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol#L3", "id": "f82024db9393d3e2a9fadbcfc0ff029b7e2f79aae0fb434087209e1b33be7c61", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 106, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#L4", "id": "9fb4c602bb97dbe1a57c7d5d3d7fa9e8f0d03816af5fff05e396f31b403464e9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 125, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#L4", "id": "03bc06ddc08c7d607d9d83b273dfb7be8fced9c0100c8f338d16524ad3c43f84", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 115, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol", "is_dependency": true, "lines": [4], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#L4", "id": "f2cba9bc39673c539f1eacdf1a684ceddffec4381dc6ad02f6fb4a7bad6e01fe", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "^0.8.20", "source_mapping": {"start": 205, "length": 24, "filename_relative": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol", "is_dependency": true, "lines": [5], "starting_column": 1, "ending_column": 25}, "type_specific_fields": {"directive": ["solidity", "^", "0.8", ".20"]}}], "description": "Pragma version^0.8.20 (lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[^0.8.20](lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#L5", "id": "e1daa51a780eb75c966c966b28e1a9738ab658b4529269221199634f7320a04e", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/PowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/PowerToken.sol", "filename_short": "src/PowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/PowerToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/PowerToken.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/PowerToken.sol#L2", "id": "55aa2259bd9a0b87448813f2fdce8ad6e2df3ebaace8cd98dc51321a24c0f1a9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IErrors.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IErrors.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IErrors.sol#L2", "id": "82b31939098787d830395e05e66c6246c823ffd4a663eca0ca79c0d8e9dd0fe9", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IEvents.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IEvents.sol", "filename_short": "src/interfaces/IEvents.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IEvents.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IEvents.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IEvents.sol#L2", "id": "e3e0b84f1f3e4d96a9c20c9cbc6b911e5b4e4139bbba2102f1cbad6820176576", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IPowerToken.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/interfaces/IPowerToken.sol", "filename_short": "src/interfaces/IPowerToken.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/interfaces/IPowerToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/interfaces/IPowerToken.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IPowerToken.sol#L2", "id": "d0db62958bad6cf4adc9c479f177799f367152633c9fc776b5c190bdd3f93073", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.22", "source_mapping": {"start": 117, "length": 23, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".22"]}}], "description": "Pragma version0.8.22 (src/upgradeability/TransparentUpgradeableProxy.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.22](src/upgradeability/TransparentUpgradeableProxy.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L3", "id": "d938d61fa27e4f7901060cf93974fb3d5a165c4c643236969be5a4d2e8033653", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "solc-0.8.22 is not recommended for deployment\n", "markdown": "solc-0.8.22 is not recommended for deployment\n", "first_markdown_element": "", "id": "2584eed3f1a6c37118da98709458a611a90fc5486a349e6fad8b5af8d201ac98", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}, {"type": "node", "name": "(success) = recipient.call{value: amount}()", "source_mapping": {"start": 2812, "length": 52, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [67], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "sendValue", "source_mapping": {"start": 2647, "length": 312, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [64, 65, 66, 67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "sendValue(address,uint256)"}}}}], "description": "Low level call in Address.sendValue(address,uint256) (lib/openzeppelin-contracts/contracts/utils/Address.sol#64-69):\n\t- (success) = recipient.call{value: amount}() (lib/openzeppelin-contracts/contracts/utils/Address.sol#67)\n", "markdown": "Low level call in [Address.sendValue(address,uint256)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69):\n\t- [(success) = recipient.call{value: amount}()](lib/openzeppelin-contracts/contracts/utils/Address.sol#L67)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L64-L69", "id": "5c75205a7d43f30e3a1e272f93f17822d0b339b8f6815cfa4e1585323cff1305", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionCallWithValue", "source_mapping": {"start": 5165, "length": 446, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionCallWithValue(address,bytes,uint256,string)"}}, {"type": "node", "name": "(success,returndata) = target.call{value: value}(data)", "source_mapping": {"start": 5445, "length": 73, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [135], "starting_column": 9, "ending_column": 82}, "type_specific_fields": {"parent": {"type": "function", "name": "functionCallWithValue", "source_mapping": {"start": 5165, "length": 446, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionCallWithValue(address,bytes,uint256,string)"}}}}], "description": "Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#128-137):\n\t- (success,returndata) = target.call{value: value}(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#135)\n", "markdown": "Low level call in [Address.functionCallWithValue(address,bytes,uint256,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L128-L137):\n\t- [(success,returndata) = target.call{value: value}(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L135)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L128-L137", "id": "117f0e40fe1352d1526a3c30c36971a0228cffa749da9528fa1d65423334e755", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionStaticCall", "source_mapping": {"start": 6169, "length": 326, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionStaticCall(address,bytes,string)"}}, {"type": "node", "name": "(success,returndata) = target.staticcall(data)", "source_mapping": {"start": 6337, "length": 65, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [160], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "functionStaticCall", "source_mapping": {"start": 6169, "length": 326, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionStaticCall(address,bytes,string)"}}}}], "description": "Low level call in Address.functionStaticCall(address,bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#155-162):\n\t- (success,returndata) = target.staticcall(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#160)\n", "markdown": "Low level call in [Address.functionStaticCall(address,bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L155-L162):\n\t- [(success,returndata) = target.staticcall(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L160)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L155-L162", "id": "93eb0561ad76cb924a6646e71a8388be0f653be8a9cd37bdb60e25805d8be051", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "functionDelegateCall", "source_mapping": {"start": 7058, "length": 325, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionDelegateCall(address,bytes,string)"}}, {"type": "node", "name": "(success,returndata) = target.delegatecall(data)", "source_mapping": {"start": 7223, "length": 67, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [185], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "functionDelegateCall", "source_mapping": {"start": 7058, "length": 325, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Address", "source_mapping": {"start": 194, "length": 9169, "filename_relative": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol", "filename_short": "lib/openzeppelin-contracts/contracts/utils/Address.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 1, "ending_column": 2}}, "signature": "functionDelegateCall(address,bytes,string)"}}}}], "description": "Low level call in Address.functionDelegateCall(address,bytes,string) (lib/openzeppelin-contracts/contracts/utils/Address.sol#180-187):\n\t- (success,returndata) = target.delegatecall(data) (lib/openzeppelin-contracts/contracts/utils/Address.sol#185)\n", "markdown": "Low level call in [Address.functionDelegateCall(address,bytes,string)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L180-L187):\n\t- [(success,returndata) = target.delegatecall(data)](lib/openzeppelin-contracts/contracts/utils/Address.sol#L185)\n", "first_markdown_element": "lib/openzeppelin-contracts/contracts/utils/Address.sol#L180-L187", "id": "d195a90c4848e59b62bdf1e5bf577abf5a3a0d92ac7dad04aef4ca0c978598bb", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "TransparentUpgradeableProxy", "source_mapping": {"start": 1652, "length": 3612, "filename_relative": "src/upgradeability/TransparentUpgradeableProxy.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/src/upgradeability/TransparentUpgradeableProxy.sol", "filename_short": "src/upgradeability/TransparentUpgradeableProxy.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IBeacon", "source_mapping": {"start": 198, "length": 251, "filename_relative": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "filename_short": "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol", "is_dependency": true, "lines": [9, 10, 11, 12, 13, 14, 15, 16], "starting_column": 1, "ending_column": 2}}], "description": "TransparentUpgradeableProxy (src/upgradeability/TransparentUpgradeableProxy.sol#28-130) should inherit from IBeacon (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#9-16)\n", "markdown": "[TransparentUpgradeableProxy](src/upgradeability/TransparentUpgradeableProxy.sol#L28-L130) should inherit from [IBeacon](lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#L9-L16)\n", "first_markdown_element": "src/upgradeability/TransparentUpgradeableProxy.sol#L28-L130", "id": "3168c0c9454e01dd85d8b35bcf7920255808756e09e10199820b20f7a9021745", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControl_init", "source_mapping": {"start": 3231, "length": 65, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [82, 83], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControl_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlUpgradeable.__AccessControl_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#82-83) is not in mixedCase\n", "markdown": "Function [AccessControlUpgradeable.__AccessControl_init()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L82-L83) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L82-L83", "id": "a333fa38b5f96027543bfa2131aac6765059644ab6c7dae2f8d357b5fbaa2f2b", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControl_init_unchained", "source_mapping": {"start": 3302, "length": 75, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [85, 86], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControl_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlUpgradeable.__AccessControl_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#85-86) is not in mixedCase\n", "markdown": "Function [AccessControlUpgradeable.__AccessControl_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L85-L86) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L85-L86", "id": "226e7d5af64c132f41abf0df79c0723e2a9ee53e2961f745732ce61ab1360dbe", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "AccessControlStorageLocation", "source_mapping": {"start": 2658, "length": 122, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [65], "starting_column": 5, "ending_column": 127}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlUpgradeable", "source_mapping": {"start": 2090, "length": 6192, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", "is_dependency": true, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant AccessControlUpgradeable.AccessControlStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#65) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [AccessControlUpgradeable.AccessControlStorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L65) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#L65", "id": "0c5e75082cb1ae4de268786ea31269d9fb4bcf024dfd1f9d96c81678bd55bc7d", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControlEnumerable_init", "source_mapping": {"start": 1463, "length": 75, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControlEnumerable_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#31-32) is not in mixedCase\n", "markdown": "Function [AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L31-L32) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L31-L32", "id": "ef5d0800c6abeec9cf95ba22a2b5356b466e7266ac453d3ed2d8d6715e2a485d", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__AccessControlEnumerable_init_unchained", "source_mapping": {"start": 1544, "length": 85, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [34, 35], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}, "signature": "__AccessControlEnumerable_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#34-35) is not in mixedCase\n", "markdown": "Function [AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L34-L35) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L34-L35", "id": "c5433a1d1949676dc711bcf3160f2439533f345ad44396e69fa216e8565cad1e", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "AccessControlEnumerableStorageLocation", "source_mapping": {"start": 1111, "length": 132, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [23], "starting_column": 5, "ending_column": 137}, "type_specific_fields": {"parent": {"type": "contract", "name": "AccessControlEnumerableUpgradeable", "source_mapping": {"start": 592, "length": 3431, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol", "is_dependency": true, "lines": [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant AccessControlEnumerableUpgradeable.AccessControlEnumerableStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#23) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [AccessControlEnumerableUpgradeable.AccessControlEnumerableStorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L23) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#L23", "id": "c20f2c968d71e604a9d7b0f83a281d090cbbd192006592908d9b50aea5b86866", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20_init", "source_mapping": {"start": 2577, "length": 147, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20_init(string,string)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20Upgradeable.__ERC20_init(string,string) (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#63-65) is not in mixedCase\n", "markdown": "Function [ERC20Upgradeable.__ERC20_init(string,string)](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L63-L65) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L63-L65", "id": "8238dcf62f913fda66edd22ee2b08e732cfae65517418f334b31b357d5fb02c5", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20_init_unchained", "source_mapping": {"start": 2730, "length": 216, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [67, 68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20_init_unchained(string,string)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20Upgradeable.__ERC20_init_unchained(string,string) (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#67-71) is not in mixedCase\n", "markdown": "Function [ERC20Upgradeable.__ERC20_init_unchained(string,string)](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L67-L71) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L67-L71", "id": "74c629176a16cccc0c00bada69b465bc625751ea0b6a6c34a6948576e5a63d53", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "ERC20StorageLocation", "source_mapping": {"start": 2121, "length": 114, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [49], "starting_column": 5, "ending_column": 119}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20Upgradeable", "source_mapping": {"start": 1576, "length": 10896, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", "is_dependency": true, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant ERC20Upgradeable.ERC20StorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#49) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [ERC20Upgradeable.ERC20StorageLocation](lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L49) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#L49", "id": "cb30ae3c1a1bfe3cb95184f5fe03e6ce4a5ea625c3b22a19482d198acedacce7", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Context_init", "source_mapping": {"start": 748, "length": 59, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [18, 19], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ContextUpgradeable", "source_mapping": {"start": 688, "length": 505, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "starting_column": 1, "ending_column": 2}}, "signature": "__Context_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ContextUpgradeable.__Context_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#18-19) is not in mixedCase\n", "markdown": "Function [ContextUpgradeable.__Context_init()](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L18-L19) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L18-L19", "id": "ec47067e22967ab37ddb79c5eae4c225b0c9f1e4e15f1452db70b0a6f86103e0", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Context_init_unchained", "source_mapping": {"start": 813, "length": 69, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [21, 22], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ContextUpgradeable", "source_mapping": {"start": 688, "length": 505, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol", "is_dependency": true, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "starting_column": 1, "ending_column": 2}}, "signature": "__Context_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ContextUpgradeable.__Context_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#21-22) is not in mixedCase\n", "markdown": "Function [ContextUpgradeable.__Context_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L21-L22) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#L21-L22", "id": "8629c89abc9e568d22212182eb038287fc4f676ff34add41294173d644b25bcb", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC165_init", "source_mapping": {"start": 836, "length": 58, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [22, 23], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC165Upgradeable", "source_mapping": {"start": 768, "length": 414, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC165_init()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC165Upgradeable.__ERC165_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#22-23) is not in mixedCase\n", "markdown": "Function [ERC165Upgradeable.__ERC165_init()](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L22-L23) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L22-L23", "id": "f226b70c0c428d938e421293c43b68d973d744168b94b568e0deb7b189c26f50", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC165_init_unchained", "source_mapping": {"start": 900, "length": 68, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [25, 26], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC165Upgradeable", "source_mapping": {"start": 768, "length": 414, "filename_relative": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_absolute": "/Users/zhuliting/github/follow-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "filename_short": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol", "is_dependency": true, "lines": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC165_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC165Upgradeable.__ERC165_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#25-26) is not in mixedCase\n", "markdown": "Function [ERC165Upgradeable.__ERC165_init_unchained()](lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L25-L26) is not in mixedCase\n", "first_markdown_element": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#L25-L26", "id": "85d4e6d503145e70d4f27b51c03c2aecc7efa120329a4cf27b34d33cd9a2c942", "check": "naming-convention", "impact": "Informational", "confidence": "High"}] \ No newline at end of file diff --git a/src/PowerToken.sol b/src/PowerToken.sol index 5f598f7..a883929 100644 --- a/src/PowerToken.sol +++ b/src/PowerToken.sol @@ -8,6 +8,7 @@ import {AccessControlEnumerableUpgradeable} from "@openzeppelin-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol"; import {ERC20Upgradeable} from "@openzeppelin-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; contract PowerToken is IPowerToken, @@ -16,12 +17,17 @@ contract PowerToken is AccessControlEnumerableUpgradeable, ERC20Upgradeable { + using Address for address; + string public constant version = "1.1.0"; bytes32 public constant APP_ADMIN_ROLE = keccak256("APP_ADMIN_ROLE"); + bytes32 public constant APP_USER_ROLE = keccak256("APP_USER_ROLE"); uint256 public constant MAX_SUPPLY = 10_000_000_000 ether; + address public immutable ADMIN; // Admin address who will receive the tax + mapping(address account => uint256) internal _pointsBalancesV1; /// @dev Token balances of the feed, which could be withdrawn to the feed owner. @@ -31,27 +37,47 @@ contract PowerToken is /// Points balances are included in user's balance. mapping(address account => uint256) internal _pointsBalancesV2; - address public admin; // Admin address who will receive the tax + mapping(address account => mapping(uint256 day => bool hasMinted)) internal _dailyMinted; + uint256 internal _dailyMintLimit; + + modifier onlyAdminRole() { + _checkRole(APP_ADMIN_ROLE); + _; + } + + constructor(address admin_) { + ADMIN = admin_; + } /// @inheritdoc IPowerToken - function initialize(string calldata name_, string calldata symbol_, address admin_) - external - override - reinitializer(4) - { + function initialize( + string calldata name_, + string calldata symbol_, + address admin_, + uint256 dailyMintLimit_ + ) external override reinitializer(4) { super.__ERC20_init(name_, symbol_); - _grantRole(DEFAULT_ADMIN_ROLE, admin_); - _grantRole(APP_ADMIN_ROLE, admin_); + if (admin_ != address(0)) { + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(APP_ADMIN_ROLE, admin_); + } + + if (dailyMintLimit_ > 0) { + _dailyMintLimit = dailyMintLimit_; + } + } - admin = admin_; + /// @inheritdoc IPowerToken + function setDailyMintLimit(uint256 limit) external override onlyAdminRole { + _dailyMintLimit = limit; } /// @inheritdoc IPowerToken function mintToTreasury(address treasuryAdmin, uint256 amount) external override - onlyRole(APP_ADMIN_ROLE) + onlyAdminRole { if (amount + totalSupply() > MAX_SUPPLY) revert ExceedsMaxSupply(); _mint(treasuryAdmin, amount); @@ -61,27 +87,37 @@ contract PowerToken is function mint(address to, uint256 amount, uint256 taxBasisPoints) external override - onlyRole(APP_ADMIN_ROLE) + onlyAdminRole { - if (amount > balanceOf(address(this))) revert InsufficientBalanceToTransfer(); + _issuePoints(to, amount, taxBasisPoints); + } - uint256 tax = _getTaxAmount(taxBasisPoints, amount); + /// @inheritdoc IPowerToken + function dailyMint(uint256 amount, uint256 taxBasisPoints) + external + override + onlyRole(APP_USER_ROLE) + { + if (amount > _dailyMintLimit) revert ExceedsDailyLimit(); - _transfer(address(this), admin, tax); + uint256 currentDay = block.timestamp / 1 days; + if (_hasMinted(msg.sender, currentDay)) revert AlreadyMintedToday(msg.sender); + _setMinted(msg.sender, currentDay); - _issuePoints(to, amount - tax); + _issuePoints(msg.sender, amount, taxBasisPoints); } + /// @inheritdoc IPowerToken function airdrop(address to, uint256 amount, uint256 taxBasisPoints) external override - onlyRole(APP_ADMIN_ROLE) + onlyAdminRole { if (amount > balanceOf(address(this))) revert InsufficientBalanceToTransfer(); uint256 tax = _getTaxAmount(taxBasisPoints, amount); - _transfer(address(this), admin, tax); + _transfer(address(this), ADMIN, tax); _transfer(address(this), to, amount - tax); @@ -111,7 +147,7 @@ contract PowerToken is _feedBalances[feedId] += tipAmount; } - _transfer(msg.sender, admin, tax); + _transfer(msg.sender, ADMIN, tax); _transfer(msg.sender, receiver, tipAmount); @@ -119,11 +155,7 @@ contract PowerToken is } /// @inheritdoc IPowerToken - function withdrawByFeedId(address to, bytes32 feedId) - external - override - onlyRole(APP_ADMIN_ROLE) - { + function withdrawByFeedId(address to, bytes32 feedId) external override onlyAdminRole { if (feedId == bytes32(0)) revert PointsInvalidReceiver(bytes32(0)); uint256 amount = _feedBalances[feedId]; @@ -133,6 +165,35 @@ contract PowerToken is emit WithdrawnByFeedId(to, feedId, amount); } + /// @inheritdoc IPowerToken + function addUser(address account) external payable override onlyAdminRole { + _grantRole(APP_USER_ROLE, account); + + if (msg.value > 0) { + Address.sendValue(payable(account), msg.value); + } + } + + /// @inheritdoc IPowerToken + function addUsers(address[] calldata accounts) external payable override onlyAdminRole { + uint256 len = accounts.length; + for (uint256 i = 0; i < len; i++) { + _grantRole(APP_USER_ROLE, accounts[i]); + } + + if (msg.value > 0) { + uint256 value = msg.value / len; + for (uint256 i = 0; i < len; i++) { + Address.sendValue(payable(accounts[i]), value); + } + } + } + + /// @inheritdoc IPowerToken + function removeUser(address account) external override onlyAdminRole { + _revokeRole(APP_USER_ROLE, account); + } + /// @inheritdoc IPowerToken function balanceOfPoints(address owner) external view override returns (uint256) { return _pointsBalancesV2[owner]; @@ -143,6 +204,11 @@ contract PowerToken is return _feedBalances[feedId]; } + /// @inheritdoc IPowerToken + function getDailyMintLimit() external view override returns (uint256) { + return _dailyMintLimit; + } + /// @inheritdoc IERC20 function transfer(address to, uint256 value) public override returns (bool) { _checkTransferBalance(msg.sender, value); @@ -160,12 +226,23 @@ contract PowerToken is /** * @dev Issues points to a specified address by transferring tokens from the token contract. */ - function _issuePoints(address to, uint256 amount) internal { - _pointsBalancesV2[to] += amount; + function _issuePoints(address to, uint256 amount, uint256 taxBasisPoints) internal { + uint256 tax = _getTaxAmount(taxBasisPoints, amount); + _transfer(address(this), ADMIN, tax); - _transfer(address(this), to, amount); + uint256 points = amount - tax; + _pointsBalancesV2[to] += points; + _transfer(address(this), to, points); + + emit DistributePoints(to, points); + } + + function _setMinted(address account, uint256 day) internal { + _dailyMinted[account][day] = true; + } - emit DistributePoints(to, amount); + function _hasMinted(address account, uint256 day) internal view returns (bool) { + return _dailyMinted[account][day]; } /** diff --git a/src/interfaces/IErrors.sol b/src/interfaces/IErrors.sol index 7c46808..2ea5de3 100644 --- a/src/interfaces/IErrors.sol +++ b/src/interfaces/IErrors.sol @@ -19,4 +19,10 @@ interface IErrors { /// @dev Exceeds max supply. error ExceedsMaxSupply(); + + /// @dev Already minted today. + error AlreadyMintedToday(address account); + + /// @dev Exceeds daily limit. + error ExceedsDailyLimit(); } diff --git a/src/interfaces/IPowerToken.sol b/src/interfaces/IPowerToken.sol index f8cd868..75753da 100644 --- a/src/interfaces/IPowerToken.sol +++ b/src/interfaces/IPowerToken.sol @@ -7,8 +7,21 @@ interface IPowerToken { * @param name_ The name of the token. * @param symbol_ The symbol of the token. * @param admin_ The account to be granted with APP_ADMIN_ROLE. + * @param dailyMintLimit_ The token limit for daily mint. */ - function initialize(string calldata name_, string calldata symbol_, address admin_) external; + function initialize( + string calldata name_, + string calldata symbol_, + address admin_, + uint256 dailyMintLimit_ + ) external; + + /** + * @notice Sets the token limit for daily mint. + * @dev The caller must have the APP_ADMIN_ROLE. + * @param limit The new limit to set. + */ + function setDailyMintLimit(uint256 limit) external; /** * @notice Mints tokens to the treasury. @@ -27,6 +40,14 @@ interface IPowerToken { */ function mint(address to, uint256 amount, uint256 taxBasisPoints) external; + /** + * @notice Issues new token points to caller. + * @dev The caller must have the APP_USER_ROLE. + * @param amount The amount of token points to mint. + * @param taxBasisPoints The tax basis points. + */ + function dailyMint(uint256 amount, uint256 taxBasisPoints) external; + /** * @notice Airdrops tokens to the users. * @dev The caller must have the APP_ADMIN_ROLE. @@ -55,6 +76,27 @@ interface IPowerToken { */ function withdrawByFeedId(address to, bytes32 feedId) external; + /** + * @notice Grants the APP_USER_ROLE to the specified account and send native tokens to it. + * @dev The caller must have the APP_ADMIN_ROLE. + * @param account The address to grant the role. + */ + function addUser(address account) external payable; + + /** + * @notice Grants the APP_USER_ROLE to the specified accounts. + * @dev The caller must have the APP_ADMIN_ROLE. + * @param accounts The addresses to grant the role. + */ + function addUsers(address[] calldata accounts) external payable; + + /** + * @notice Revokes the APP_USER_ROLE from the specified account. + * @dev The caller must have the APP_ADMIN_ROLE. + * @param account The address from which to revoke the role. + */ + function removeUser(address account) external; + /** * @notice Return the balance of the feedId * @param feedId The feed id @@ -68,4 +110,10 @@ interface IPowerToken { * @return The amount of the balance */ function balanceOfPoints(address owner) external view returns (uint256); + + /** + * @notice Returns the token limit for daily mint. + * @return The token limit for daily mint. + */ + function getDailyMintLimit() external view returns (uint256); } diff --git a/test/Fork.t.sol b/test/Fork.t.sol index 55930f4..c4a91e3 100644 --- a/test/Fork.t.sol +++ b/test/Fork.t.sol @@ -11,7 +11,7 @@ import {TransparentUpgradeableProxy as Proxy} from import {Utils} from "./helpers/Utils.sol"; contract ForkTest is Utils, IErrors, IEvents { - address public appAdmin = vm.addr(11); + address public appAdmin = 0xf496eEeD857aA4709AC4D5B66b6711975623D355; address public proxyAdminOwner = 0x8AC80fa0993D95C9d6B8Cb494E561E6731038941; bytes32 public initializerSlot = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; @@ -32,11 +32,13 @@ contract ForkTest is Utils, IErrors, IEvents { ); // upgrade and call initialize - PowerToken newImpl = new PowerToken(); + PowerToken newImpl = new PowerToken(appAdmin); vm.prank(proxyAdminOwner); powerProxy.upgradeToAndCall( address(newImpl), - abi.encodeWithSelector(IPowerToken.initialize.selector, "POWER", "POWER", appAdmin) + abi.encodeWithSelector( + IPowerToken.initialize.selector, "POWER", "POWER", address(0), 10_000 ether + ) ); } @@ -54,9 +56,8 @@ contract ForkTest is Utils, IErrors, IEvents { assertEq(token.symbol(), "POWER"); // check admin role - assertEq(token.admin(), appAdmin); + assertEq(token.ADMIN(), appAdmin); assertEq(token.hasRole(keccak256("APP_ADMIN_ROLE"), appAdmin), true); - assertEq(token.hasRole(0x00, appAdmin), true); // check max supply assertEq(token.totalSupply(), token.MAX_SUPPLY()); diff --git a/test/PowerToken.t.sol b/test/PowerToken.t.sol index 12504bf..6d84aca 100644 --- a/test/PowerToken.t.sol +++ b/test/PowerToken.t.sol @@ -6,11 +6,15 @@ import {DeployConfig} from "../script/DeployConfig.s.sol"; import {PowerToken} from "../src/PowerToken.sol"; import {IErrors} from "../src/interfaces/IErrors.sol"; import {IEvents} from "../src/interfaces/IEvents.sol"; +import {IPowerToken} from "../src/interfaces/IPowerToken.sol"; import {TransparentUpgradeableProxy} from "../src/upgradeability/TransparentUpgradeableProxy.sol"; import {Utils} from "./helpers/Utils.sol"; import {ERC20Upgradeable} from "@openzeppelin-upgradeable/token/ERC20/ERC20Upgradeable.sol"; contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { + bytes32 public constant APP_ADMIN_ROLE = keccak256("APP_ADMIN_ROLE"); + bytes32 public constant APP_USER_ROLE = keccak256("APP_USER_ROLE"); + address public constant alice = address(0x123); address public constant bob = address(0x456); address public constant charlie = address(0x789); @@ -32,13 +36,17 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { _cfg = new DeployConfig(path); appAdmin = _cfg.appAdmin(); - PowerToken tokenImpl = new PowerToken(); + PowerToken tokenImpl = new PowerToken(appAdmin); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(tokenImpl), _cfg.proxyAdminOwner(), - abi.encodeWithSignature( - "initialize(string,string,address)", _cfg.name(), _cfg.symbol(), _cfg.appAdmin() + abi.encodeWithSelector( + IPowerToken.initialize.selector, + _cfg.name(), + _cfg.symbol(), + _cfg.appAdmin(), + _cfg.dailyMintLimit() ) ); @@ -76,21 +84,25 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { _token.mintToTreasury(alice, maxSupply + 1); } - function testMintPoints(uint256 amount) public { - amount = bound(amount, 1, 10_000 ether); + function testMintPointsSucceed(uint256 amount, uint256 taxBasisPoints) public { + amount = bound(amount, 1, 10_000); + amount *= 1 ether; + taxBasisPoints = bound(taxBasisPoints, 1, 10_000); + + uint256 expectedTax = (taxBasisPoints * amount) / 10_000; vm.prank(appAdmin); _token.mintToTreasury(address(_token), amount); expectEmit(); - emit DistributePoints(alice, amount); + emit DistributePoints(alice, amount - expectedTax); vm.prank(appAdmin); - _token.mint(alice, amount, 0); + _token.mint(alice, amount, taxBasisPoints); - assertEq(_token.balanceOf(alice), amount); - assertEq(_token.balanceOfPoints(alice), amount); + assertEq(_token.balanceOf(alice), amount - expectedTax); + assertEq(_token.balanceOfPoints(alice), amount - expectedTax); - assertEq(_token.balanceOf(address(this)), 0); + assertEq(_token.balanceOf(appAdmin), expectedTax); } function testMintPointsFail() public { @@ -109,12 +121,85 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { _token.mintToTreasury(address(_token), amount); // case 2: balance is insufficient - vm.expectRevert(abi.encodeWithSelector(InsufficientBalanceToTransfer.selector)); + vm.expectRevert( + abi.encodeWithSelector( + ERC20InsufficientBalance.selector, address(_token), amount, amount + 1 + ) + ); vm.prank(appAdmin); _token.mint(alice, amount + 1, 0); } - function testMintWithTax(uint256 taxBasisPoints) public { + function testDailyMintPoints(uint256 amount) public { + amount = bound(amount, 0, 1000); + amount *= 1 ether; + + vm.prank(appAdmin); + _token.mintToTreasury(address(_token), amount * 2); + + _addUser(alice); + + expectEmit(); + emit DistributePoints(alice, amount); + vm.prank(alice); + _token.dailyMint(amount, 0); + + assertEq(_token.balanceOf(alice), amount); + assertEq(_token.balanceOfPoints(alice), amount); + + assertEq(_token.balanceOf(address(this)), 0); + + // mint after a day + skip(1 days); + vm.prank(alice); + _token.dailyMint(amount, 0); + assertEq(_token.balanceOf(alice), amount * 2); + assertEq(_token.balanceOfPoints(alice), amount * 2); + } + + function testDailyMintPointsFail() public { + // case 1: caller has no `APP_USER_ROLE` permission + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, + address(alice), + keccak256("APP_USER_ROLE") + ) + ); + vm.prank(alice); + _token.dailyMint(1, 0); + + uint256 amount = 10_000 ether; + vm.prank(appAdmin); + _token.mintToTreasury(address(_token), amount); + + // case 2: balance is insufficient + _addUser(alice); + vm.expectRevert( + abi.encodeWithSelector( + ERC20InsufficientBalance.selector, address(_token), amount, amount + 1 + ) + ); + vm.prank(alice); + _token.dailyMint(amount + 1, 0); + + // case 3: ExceedsDailyLimit + _addUser(alice); + amount = _token.getDailyMintLimit() + 1; + vm.expectRevert(abi.encodeWithSelector(ExceedsDailyLimit.selector)); + vm.prank(alice); + _token.dailyMint(amount, 0); + + // case 4: AlreadyMintedToday + vm.prank(alice); + _token.dailyMint(100 ether, 0); + skip(10 hours); + vm.expectRevert(abi.encodeWithSelector(AlreadyMintedToday.selector, alice)); + vm.prank(alice); + _token.dailyMint(100 ether, 0); + } + + function testDailyMintWithTax(uint256 taxBasisPoints) public { uint256 amount = 1000 ether; taxBasisPoints = bound(taxBasisPoints, 1, 10_000); @@ -123,12 +208,115 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { vm.prank(appAdmin); _token.mintToTreasury(address(_token), amount); + _addUser(alice); + expectEmit(); emit Transfer(address(_token), appAdmin, tax); emit Transfer(address(_token), alice, amount - tax); emit DistributePoints(alice, amount - tax); + vm.prank(alice); + _token.dailyMint(amount, taxBasisPoints); + } + + function testAddUserSucceed() public { + uint256 amount = 1000 ether; + vm.deal(appAdmin, amount); + + // add user vm.prank(appAdmin); - _token.mint(alice, amount, taxBasisPoints); + _token.addUser{value: amount}(alice); + + assertEq(_token.hasRole(APP_USER_ROLE, alice), true); + assertEq(alice.balance, amount); + + // daily mint + vm.prank(appAdmin); + _token.mintToTreasury(address(_token), 100 ether); + + vm.prank(alice); + _token.dailyMint(100 ether, 0); + assertEq(_token.balanceOf(alice), 100 ether); + assertEq(_token.balanceOfPoints(alice), 100 ether); + } + + function testAddUserFail() public { + // case 1: caller has no `APP_ADMIN_ROLE` permission + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, + address(this), + keccak256("APP_ADMIN_ROLE") + ) + ); + _token.addUser(alice); + + // alice can't mint daily points + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, alice, keccak256("APP_USER_ROLE") + ) + ); + vm.prank(alice); + _token.dailyMint(100 ether, 0); + } + + function testAddUsers() public { + address[] memory users = new address[](3); + users[0] = alice; + users[1] = bob; + users[2] = charlie; + + vm.prank(appAdmin); + _token.addUsers(users); + + assertEq(_token.hasRole(APP_USER_ROLE, alice), true); + assertEq(_token.hasRole(APP_USER_ROLE, bob), true); + assertEq(_token.hasRole(APP_USER_ROLE, charlie), true); + } + + function testAddUsersFail() public { + // case 1: caller has no `APP_ADMIN_ROLE` permission + address[] memory users = new address[](1); + users[0] = alice; + + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, + address(this), + keccak256("APP_ADMIN_ROLE") + ) + ); + _token.addUsers(users); + } + + function testRemoveUser() public { + vm.startPrank(appAdmin); + _token.addUser(alice); + _token.removeUser(alice); + vm.stopPrank(); + + assertEq(_token.hasRole(APP_USER_ROLE, alice), false); + + // alice can't mint daily points + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, alice, keccak256("APP_USER_ROLE") + ) + ); + vm.prank(alice); + _token.dailyMint(100 ether, 0); + } + + function testRemoveUserFail() public { + // case 1: caller has no `APP_ADMIN_ROLE` permission + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, + address(this), + keccak256("APP_ADMIN_ROLE") + ) + ); + _token.removeUser(alice); } function testAirdrop(uint256 taxBasisPoints) public { @@ -148,8 +336,8 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { _token.airdrop(alice, amount, taxBasisPoints); } - function testTipFeedId(uint256 amount) public { - amount = bound(amount, 1, 10_000 ether); + function testTipFeedIdSucceed(uint256 amount) public { + amount = bound(amount, 1, 1000 ether); uint256 initialPoints = 10 * amount; _mintPoints(alice, initialPoints); @@ -379,6 +567,28 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { _token.transfer(bob, tipAmount + 1); } + function testSetDailyMintLimit(uint256 limit) public { + limit = bound(limit, 1, 100_000); + limit *= 1 ether; + + vm.prank(appAdmin); + _token.setDailyMintLimit(limit); + + assertEq(_token.getDailyMintLimit(), limit); + } + + function testSetDailyMintLimitFail() public { + // case 1: caller has no `APP_ADMIN_ROLE` permission + vm.expectRevert( + abi.encodeWithSelector( + AccessControlUnauthorizedAccount.selector, + address(this), + keccak256("APP_ADMIN_ROLE") + ) + ); + _token.setDailyMintLimit(100 ether); + } + function testTransfer(uint256 amount) public { amount = bound(amount, 1, 100 ether); uint256 tipAmount = bound(amount, 1, amount); @@ -461,11 +671,16 @@ contract PowerTokenTest is Utils, IErrors, IEvents, ERC20Upgradeable { } function _mintPoints(address user, uint256 amount) internal { - vm.prank(appAdmin); + vm.startPrank(appAdmin); _token.mintToTreasury(address(_token), amount); + _token.mint(user, amount, 0); + _token.addUser(user); + vm.stopPrank(); + } + function _addUser(address user) internal { vm.prank(appAdmin); - _token.mint(user, amount, 0); + _token.addUser(user); } function _checkBalanceAndPoints(address user, uint256 balance, uint256 points) internal view { diff --git a/tools/generateABI.sh b/tools/generateABI.sh new file mode 100755 index 0000000..f0ac857 --- /dev/null +++ b/tools/generateABI.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -x + +ABI_DIR=./deployments/ + +forge build --silent + +for contract in PowerToken +do + # extract abi and bin files + forge inspect ${contract} abi > ${ABI_DIR}/${contract}.abi +done diff --git a/tools/storageLayout/PowerToken-storage-layout.txt b/tools/storageLayout/PowerToken-storage-layout.txt index 0efec31..cec5c8a 100644 --- a/tools/storageLayout/PowerToken-storage-layout.txt +++ b/tools/storageLayout/PowerToken-storage-layout.txt @@ -1,5 +1,7 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------|-----------------------------|------|--------|-------|-------------------------------| -| _pointsBalancesV1 | mapping(address => uint256) | 0 | 0 | 32 | src/PowerToken.sol:PowerToken | -| _feedBalances | mapping(bytes32 => uint256) | 1 | 0 | 32 | src/PowerToken.sol:PowerToken | -| _pointsBalancesV2 | mapping(address => uint256) | 2 | 0 | 32 | src/PowerToken.sol:PowerToken | \ No newline at end of file +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------|----------------------------------------------|------|--------|-------|-------------------------------| +| _pointsBalancesV1 | mapping(address => uint256) | 0 | 0 | 32 | src/PowerToken.sol:PowerToken | +| _feedBalances | mapping(bytes32 => uint256) | 1 | 0 | 32 | src/PowerToken.sol:PowerToken | +| _pointsBalancesV2 | mapping(address => uint256) | 2 | 0 | 32 | src/PowerToken.sol:PowerToken | +| _dailyMinted | mapping(address => mapping(uint256 => bool)) | 3 | 0 | 32 | src/PowerToken.sol:PowerToken | +| _dailyMintLimit | uint256 | 4 | 0 | 32 | src/PowerToken.sol:PowerToken | \ No newline at end of file