diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb4b2ee..6c83abc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -221,20 +221,20 @@ jobs: version: nightly - name: Compile foundry - run: forge clean && forge build --build-info --force + run: forge clean && forge build --build-info --force --skip "*/test/**" "*/scripts/**" + + - name: "Install Slither" + run: "python3 -m pip install slither-analyzer" - name: "Run Slither analysis" - uses: "crytic/slither-action@v0.3.2" - id: "slither" - with: - ignore-compile: true - fail-on: "none" - sarif: "results.sarif" + id: slither + run: + slither . --ignore-compile --sarif results.sarif --fail-none - name: "Upload SARIF file to GitHub code scanning" uses: "github/codeql-action/upload-sarif@v2" with: - sarif_file: ${{ steps.slither.outputs.sarif }} + sarif_file: results.sarif - name: "Add Slither summary" run: | diff --git a/.gitmodules b/.gitmodules index 2a230a9..2bfde6f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "lib/LayerZero"] path = lib/LayerZero url = https://github.com/LayerZero-Labs/LayerZero +[submodule "lib/angle-transmuter"] + path = lib/angle-transmuter + url = https://github.com/AngleProtocol/angle-transmuter diff --git a/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol b/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol new file mode 100644 index 0000000..7612547 --- /dev/null +++ b/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity ^0.8.12; + +import "./utils/OFTCore.sol"; +import "../../interfaces/IAgTokenSideChainMultiBridge.sol"; +import "oz-upgradeable/security/PausableUpgradeable.sol"; +import "oz-upgradeable/token/ERC20/ERC20Upgradeable.sol"; + +/// @title LayerZeroBridgeTokenERC20 +/// @author Angle Core Team, forked from https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/oft/OFT.sol +/// @notice Contract to be deployed on a L2/sidechain for bridging a token (ANGLE for instance) using +/// a bridge intermediate token and LayerZero +contract LayerZeroBridgeTokenERC20 is OFTCore, ERC20Upgradeable, PausableUpgradeable { + /// @notice Address of the bridgeable token + IAgTokenSideChainMultiBridge public canonicalToken; + + // =================================== ERRORS ================================== + + error InvalidAllowance(); + + // ================================ CONSTRUCTOR ================================ + + /// @notice Initializes the contract + /// @param _name Name of the token corresponding to this contract + /// @param _symbol Symbol of the token corresponding to this contract + /// @param _lzEndpoint Layer zero endpoint to pass messages + /// @param _coreBorrow Address of the `CoreBorrow` contract used for access control + /// @param _canonicalToken Address of the bridgeable token + function initialize( + string memory _name, + string memory _symbol, + address _lzEndpoint, + address _coreBorrow, + address _canonicalToken + ) external initializer { + if (_canonicalToken == address(0)) revert ZeroAddress(); + __ERC20_init_unchained(_name, _symbol); + __LzAppUpgradeable_init(_lzEndpoint, _coreBorrow); + + canonicalToken = IAgTokenSideChainMultiBridge(_canonicalToken); + _approve(address(this), _canonicalToken, type(uint256).max); + } + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() initializer {} + + // ===================== EXTERNAL PERMISSIONLESS FUNCTIONS ===================== + + /// @inheritdoc OFTCore + function sendWithPermit( + uint16 _dstChainId, + bytes memory _toAddress, + uint256 _amount, + address payable _refundAddress, + address _zroPaymentAddress, + bytes memory _adapterParams, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public payable override { + canonicalToken.permit(msg.sender, address(this), _amount, deadline, v, r, s); + send(_dstChainId, _toAddress, _amount, _refundAddress, _zroPaymentAddress, _adapterParams); + } + + /// @inheritdoc OFTCore + function withdraw(uint256 amount, address recipient) external override returns (uint256 amountMinted) { + // Does not check allowances as transfers from `msg.sender` + _transfer(msg.sender, address(this), amount); + amountMinted = canonicalToken.swapIn(address(this), amount, recipient); + uint256 leftover = balanceOf(address(this)); + if (leftover > 0) { + _transfer(address(this), msg.sender, leftover); + } + } + + // ============================= INTERNAL FUNCTIONS ============================ + + /// @inheritdoc OFTCore + function _debitFrom( + uint16, + bytes memory, + uint256 _amount + ) internal override whenNotPaused returns (uint256 amountSwapped) { + // No need to use safeTransferFrom as we know this implementation reverts on failure + canonicalToken.transferFrom(msg.sender, address(this), _amount); + + // Swap canonical for this bridge token. There may be some fees + amountSwapped = canonicalToken.swapOut(address(this), _amount, address(this)); + _burn(address(this), amountSwapped); + } + + /// @inheritdoc OFTCore + function _debitCreditFrom(uint16, bytes memory, uint256 _amount) internal override whenNotPaused returns (uint256) { + _burn(msg.sender, _amount); + return _amount; + } + + /// @inheritdoc OFTCore + function _creditTo( + uint16, + address _toAddress, + uint256 _amount + ) internal override whenNotPaused returns (uint256 amountMinted) { + _mint(address(this), _amount); + amountMinted = canonicalToken.swapIn(address(this), _amount, _toAddress); + uint256 leftover = balanceOf(address(this)); + if (leftover > 0) { + _transfer(address(this), _toAddress, leftover); + } + } + + // =============================== VIEW FUNCTIONS ============================== + + /// @inheritdoc ERC165Upgradeable + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return + interfaceId == type(IOFT).interfaceId || + interfaceId == type(IERC20).interfaceId || + super.supportsInterface(interfaceId); + } + + // ============================ GOVERNANCE FUNCTIONS =========================== + + /// @notice Mints the intermediate contract to the `canonicalToken` + /// @dev Used to increase the bridging capacity + function mint(uint256 amount) external onlyGovernorOrGuardian { + _mint(address(canonicalToken), amount); + } + + /// @notice Burns the intermediate contract from the `canonicalToken` + /// @dev Used to decrease the bridging capacity + function burn(uint256 amount) external onlyGovernorOrGuardian { + _burn(address(canonicalToken), amount); + } + + /// @notice Increases allowance of the `canonicalToken` + function setupAllowance() public onlyGovernorOrGuardian { + _approve(address(this), address(canonicalToken), type(uint256).max); + } + + /// @notice Pauses bridging through the contract + /// @param pause Future pause status + function pauseSendTokens(bool pause) external onlyGovernorOrGuardian { + pause ? _pause() : _unpause(); + } + + uint256[49] private __gap; +} diff --git a/contracts/interfaces/ICoreBorrow.sol b/contracts/interfaces/ICoreBorrow.sol index fabca63..16853b8 100644 --- a/contracts/interfaces/ICoreBorrow.sol +++ b/contracts/interfaces/ICoreBorrow.sol @@ -25,4 +25,16 @@ interface ICoreBorrow { /// @dev Governance should make sure when adding a governor to also give this governor the guardian /// role by calling the `addGovernor` function function isGovernorOrGuardian(address admin) external view returns (bool); + + /// @notice Adds a governor in the protocol + /// @param governor Address to grant the role to + /// @dev It is necessary to call this function to grant a governor role to make sure + /// all governors also have the guardian role + function addGovernor(address governor) external; + + /// @notice Revokes a governor from the protocol + /// @param governor Address to remove the role to + /// @dev It is necessary to call this function to remove a governor role to make sure + /// the address also loses its guardian role + function removeGovernor(address governor) external; } diff --git a/contracts/mock/MockCoreBorrow.sol b/contracts/mock/MockCoreBorrow.sol index b67ce73..562950a 100644 --- a/contracts/mock/MockCoreBorrow.sol +++ b/contracts/mock/MockCoreBorrow.sol @@ -50,4 +50,12 @@ contract MockCoreBorrow is ICoreBorrow { function setFlashLoanModule(ITreasury _treasury, address _flashLoanModule) external { _treasury.setFlashLoanModule(_flashLoanModule); } + + function addGovernor(address governor) external override { + governors[governor] = true; + } + + function removeGovernor(address governor) external override { + governors[governor] = false; + } } diff --git a/foundry.toml b/foundry.toml index 07fba83..60ea031 100644 --- a/foundry.toml +++ b/foundry.toml @@ -12,6 +12,7 @@ optimizer = true optimizer_runs = 1000 solc_version = "0.8.22" ffi = true +fs_permissions = [{ access = "read-write", path = "./scripts"}] [fuzz] runs = 10000 @@ -32,6 +33,10 @@ celo = "${ETH_NODE_URI_CELO}" polygonzkevm = "${ETH_NODE_URI_POLYGONZKEVM}" bsc = "${ETH_NODE_URI_BSC}" base = "${ETH_NODE_URI_BASE}" +linea = "${ETH_NODE_URI_LINEA}" +mantle = "${ETH_NODE_URI_MANTLE}" +mode = "${ETH_NODE_URI_MODE}" +blast = "${ETH_NODE_URI_BLAST}" [etherscan] arbitrum = { key = "${ARBITRUM_ETHERSCAN_API_KEY}" } @@ -44,12 +49,13 @@ celo = { key = "${CELO_ETHERSCAN_API_KEY}", url = "https://api.celoscan.io/api" base = { key = "${BASE_ETHERSCAN_API_KEY}", url = "https://api.basescan.org/api" } polygonzkevm = { key = "${POLYGONZKEVM_ETHERSCAN_API_KEY}", url = "https://api-zkevm.polygonscan.com/api" } bsc = { key = "${BSC_ETHERSCAN_API_KEY}"} +linea = { key = "${LINEA_ETHERSCAN_API_KEY}"} +blast = { key = "${BLAST_ETHERSCAN_API_KEY}", url = "https://api.blastscan.io/api" } [profile.dev] optimizer = true -via_ir = false -src = "test" gas_reports = ["*"] +via_ir=true [profile.dev.fuzz] runs = 2000 @@ -60,9 +66,9 @@ depth = 1 fail_on_revert = false [profile.ci] -src = "test" -via_ir = false +optimizer = true gas_reports = ["*"] +via_ir=true [profile.ci.fuzz] runs = 100 diff --git a/lib/angle-transmuter b/lib/angle-transmuter new file mode 160000 index 0000000..d592dd9 --- /dev/null +++ b/lib/angle-transmuter @@ -0,0 +1 @@ +Subproject commit d592dd9106c97bd8864532bb3001bba5afa511db diff --git a/lib/forge-std b/lib/forge-std index bb4ceea..5475f85 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef +Subproject commit 5475f852e3f530d7e25dfb4596aa1f9baa8ffdfc diff --git a/lib/utils b/lib/utils index 41388c6..5c7f37e 160000 --- a/lib/utils +++ b/lib/utils @@ -1 +1 @@ -Subproject commit 41388c6ea9c45b05b92155356d6e700802fdb566 +Subproject commit 5c7f37e653c3a7effadc3110c06790be4793d86b diff --git a/package.json b/package.json index b7d42e4..965805a 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "ci:coverage": "forge coverage --report lcov && yarn lcov:clean", - "coverage": "FOUNDRY_PROFILE=dev forge coverage --report lcov && yarn lcov:clean && yarn lcov:generate-html", + "ci:coverage": "forge coverage --report lcov --ir-minimum && yarn lcov:clean", + "coverage": "FOUNDRY_PROFILE=dev forge coverage --report lcov --ir-minimum && yarn lcov:clean && yarn lcov:generate-html", "compile": "forge build", "compile:dev": "FOUNDRY_PROFILE=dev forge build", "deploy": "forge script --skip test --broadcast --verify --slow -vvvv --rpc-url", diff --git a/remappings.txt b/remappings.txt index c0843c1..c20bbfb 100644 --- a/remappings.txt +++ b/remappings.txt @@ -6,4 +6,6 @@ chainlink/=lib/chainlink/contracts/ utils/=lib/utils/ contracts/=contracts/ chainlink/=lib/chainlink/contracts/ -layer-zero/=lib/LayerZero/contracts/ \ No newline at end of file +layer-zero/=lib/LayerZero/contracts/ +transmuter/=lib/angle-transmuter/contracts/ +test/=test/ \ No newline at end of file diff --git a/scripts/BasicScript.s.sol b/scripts/BasicScript.s.sol deleted file mode 100644 index 539bf0c..0000000 --- a/scripts/BasicScript.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.12; - -import "forge-std/Script.sol"; -import "contracts/mock/MockToken.sol"; -import { console } from "forge-std/console.sol"; - -contract MyScript is Script { - function run() external { - vm.startBroadcast(); - - MockToken token = new MockToken("Name", "SYM", 18); - address _sender = address(uint160(uint256(keccak256(abi.encodePacked("sender"))))); - address _receiver = address(uint160(uint256(keccak256(abi.encodePacked("receiver"))))); - - console.log(address(token)); - - // deal(address(token), _sender, 1 ether); - // vm.prank(_sender); - // token.transfer(_receiver, 1 ether); - - vm.stopBroadcast(); - } -} diff --git a/scripts/DeployAgTokenSideChainMultiBridge.s.sol b/scripts/DeployAgTokenSideChainMultiBridge.s.sol new file mode 100644 index 0000000..e58c80a --- /dev/null +++ b/scripts/DeployAgTokenSideChainMultiBridge.s.sol @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import "forge-std/Script.sol"; +import "./utils/Constants.s.sol"; +import "utils/src/CommonUtils.sol"; +import { AgTokenSideChainMultiBridge } from "contracts/agToken/AgTokenSideChainMultiBridge.sol"; +import { LayerZeroBridgeToken } from "contracts/agToken/layerZero/LayerZeroBridgeToken.sol"; +import { ICoreBorrow } from "contracts/interfaces/ICoreBorrow.sol"; +import { Treasury } from "contracts/treasury/Treasury.sol"; +import { ImmutableCreate2Factory } from "contracts/interfaces/external/create2/ImmutableCreate2Factory.sol"; + +contract DeployAgTokenSideChainMultiBridge is Script, CommonUtils { + using stdJson for string; + + function run() external { + /** TODO complete */ + string memory stableName = vm.envString("STABLE_NAME"); + bool mock = vm.envOr("MOCK", false); + /** END complete */ + + uint256 deployerPrivateKey = vm.deriveKey(vm.envString("MNEMONIC_MAINNET"), "m/44'/60'/0'/0/", 0); + address deployer = vm.addr(deployerPrivateKey); + string memory jsonVanity = vm.readFile(string.concat(JSON_VANITY_PATH, stableName, ".json")); + bytes32 salt = jsonVanity.readBytes32("$.salt"); + bytes memory initCode = jsonVanity.readBytes("$.initCode"); + uint256 chainId = vm.envUint("CHAIN_ID"); + + string memory json; + address proxyAdmin; + address coreBorrow; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + json = vm.readFile(JSON_ADDRESSES_PATH); + if (vm.keyExistsJson(json, ".proxyAdmin")) { + proxyAdmin = vm.parseJsonAddress(json, ".proxyAdmin"); + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + } + if (vm.keyExistsJson(json, ".coreBorrow")) { + coreBorrow = vm.parseJsonAddress(json, ".coreBorrow"); + } else { + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + } + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + } + ILayerZeroEndpoint lzEndpoint = _lzEndPoint(chainId); + address expectedAddress; + if (vm.envExists("EXPECTED_ADDRESS")) { + expectedAddress = vm.envAddress("EXPECTED_ADDRESS"); + } else { + // TODO compute the expected address once one of the address has been deployed + if (keccak256(abi.encodePacked(stableName)) == keccak256("USD")) { + expectedAddress = _chainToContract(CHAIN_ETHEREUM, ContractType.AgUSD); + } + if (keccak256(abi.encodePacked(stableName)) == keccak256("EUR")) { + expectedAddress = address(0x00001063a5d3A9d5f1B03e848fa788aae1d98C5c); + } + } + + vm.startBroadcast(deployerPrivateKey); + + AgTokenSideChainMultiBridge agTokenImpl = new AgTokenSideChainMultiBridge(); + console.log("AgTokenSideChainMultiBridge Implementation deployed at", address(agTokenImpl)); + + ImmutableCreate2Factory create2Factory = ImmutableCreate2Factory(IMMUTABLE_CREATE2_FACTORY_ADDRESS); + address computedAddress = create2Factory.findCreate2Address(salt, initCode); + console.log("AgTokenSideChainMultiBridge Proxy Supposed to deploy: %s", computedAddress); + + require(computedAddress == expectedAddress, "Computed address does not match expected address"); + + AgTokenSideChainMultiBridge agToken = AgTokenSideChainMultiBridge(create2Factory.safeCreate2(salt, initCode)); + TransparentUpgradeableProxy(payable(address(agToken))).upgradeTo(address(agTokenImpl)); + TransparentUpgradeableProxy(payable(address(agToken))).changeAdmin(proxyAdmin); + console.log("AgTokenSideChainMultiBridge Proxy deployed at", address(agToken)); + + Treasury treasuryImpl = new Treasury(); + console.log("Treasury Implementation deployed at", address(treasuryImpl)); + + Treasury treasuryProxy = Treasury( + address( + _deployUpgradeable( + proxyAdmin, + address(treasuryImpl), + abi.encodeWithSelector(Treasury.initialize.selector, coreBorrow, address(agToken)) + ) + ) + ); + console.log("Treasury Proxy deployed at", address(treasuryProxy)); + + agToken.initialize(string.concat(stableName, "A"), string.concat(stableName, "A"), address(treasuryProxy)); + + LayerZeroBridgeToken lzImpl = new LayerZeroBridgeToken(); + console.log("LayerZeroBridgeToken Implementation deployed at", address(lzImpl)); + LayerZeroBridgeToken lzProxy = LayerZeroBridgeToken( + address( + _deployUpgradeable( + proxyAdmin, + address(lzImpl), + abi.encodeWithSelector( + LayerZeroBridgeToken.initialize.selector, + string.concat("LayerZero Bridge ", stableName, "A"), + string.concat("LZ-", stableName, "A"), + address(lzEndpoint), + address(treasuryProxy), + 0 + ) + ) + ) + ); + console.log("LayerZeroBridgeToken Proxy deployed at", address(lzProxy)); + + if (mock) { + uint256 totalLimit = vm.envUint("TOTAL_LIMIT"); + uint256 hourlyLimit = vm.envUint("HOURLY_LIMIT"); + uint256 chainTotalHourlyLimit = vm.envUint("CHAIN_TOTAL_HOURLY_LIMIT"); + agToken.addBridgeToken(address(lzProxy), totalLimit, hourlyLimit, 0, false); + agToken.setChainTotalHourlyLimit(chainTotalHourlyLimit); + lzProxy.setUseCustomAdapterParams(1); + + (uint256[] memory chainIds, address[] memory contracts) = _getConnectedChains(stableName); + + // Set trusted remote from current chain + for (uint256 i = 0; i < contracts.length; i++) { + if (chainIds[i] == chainId) { + continue; + } + + lzProxy.setTrustedRemote(_getLZChainId(chainIds[i]), abi.encodePacked(contracts[i], address(lzProxy))); + } + + // add real governor + if (vm.envOr("FINALIZE", false)) { + ICoreBorrow(coreBorrow).removeGovernor(deployer); + } + } + + string memory json2 = "output"; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + string[] memory keys = vm.parseJsonKeys(json, ""); + for (uint256 i = 0; i < keys.length; i++) { + json2.serialize(keys[i], json.readAddress(string.concat(".", keys[i]))); + } + } + json2.serialize("agToken", address(agToken)); + json2.serialize("treasury", address(treasuryProxy)); + json2 = json2.serialize("lzAgToken", address(lzProxy)); + json2.write(JSON_ADDRESSES_PATH); + + vm.stopBroadcast(); + } +} diff --git a/scripts/DeployAngleSideChainMultiBridge.s.sol b/scripts/DeployAngleSideChainMultiBridge.s.sol new file mode 100644 index 0000000..0f9d43f --- /dev/null +++ b/scripts/DeployAngleSideChainMultiBridge.s.sol @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import "forge-std/Script.sol"; +import "./utils/Constants.s.sol"; +import "utils/src/CommonUtils.sol"; +import { TokenSideChainMultiBridge } from "contracts/agToken/TokenSideChainMultiBridge.sol"; +import { LayerZeroBridgeTokenERC20 } from "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol"; +import { ImmutableCreate2Factory } from "contracts/interfaces/external/create2/ImmutableCreate2Factory.sol"; +import { ICoreBorrow } from "contracts/interfaces/ICoreBorrow.sol"; + +contract DeployAngleSideChainMultiBridge is Script, CommonUtils { + using stdJson for string; + + function run() external { + /** TODO complete */ + uint256 totalLimit = vm.envUint("TOTAL_LIMIT"); + uint256 hourlyLimit = vm.envUint("HOURLY_LIMIT"); + uint256 chainTotalHourlyLimit = vm.envUint("CHAIN_TOTAL_HOURLY_LIMIT"); + bool mock = vm.envOr("MOCK", false); + /** END complete */ + + uint256 deployerPrivateKey = vm.deriveKey(vm.envString("MNEMONIC_MAINNET"), "m/44'/60'/0'/0/", 0); + address deployer = vm.addr(deployerPrivateKey); + string memory symbol = "ANGLE"; + string memory jsonVanity = vm.readFile(string.concat(JSON_VANITY_PATH, "ANGLE", ".json")); + bytes32 salt = jsonVanity.readBytes32("$.salt"); + bytes memory initCode = jsonVanity.readBytes("$.initCode"); + uint256 chainId = vm.envUint("CHAIN_ID"); + vm.startBroadcast(deployerPrivateKey); + + string memory json; + address proxyAdmin; + address coreBorrow; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + json = vm.readFile(JSON_ADDRESSES_PATH); + if (vm.keyExistsJson(json, ".proxyAdmin")) { + proxyAdmin = vm.parseJsonAddress(json, ".proxyAdmin"); + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + } + if (vm.keyExistsJson(json, ".coreBorrow")) { + coreBorrow = vm.parseJsonAddress(json, ".coreBorrow"); + } else { + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + } + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + } + ILayerZeroEndpoint lzEndpoint = _lzEndPoint(chainId); + address expectedAddress; + if (vm.envExists("EXPECTED_ADDRESS")) { + expectedAddress = vm.envAddress("EXPECTED_ADDRESS"); + } else { + expectedAddress = address(0xAaaaAA19ddd491648Db2a31C32f2B2792DeC5015); + // TODO compute the expected address once one of the address has been deployed + } + + TokenSideChainMultiBridge angleImpl = new TokenSideChainMultiBridge(); + console.log("TokenSideChainMultiBridge Implementation deployed at", address(angleImpl)); + + ImmutableCreate2Factory create2Factory = ImmutableCreate2Factory(IMMUTABLE_CREATE2_FACTORY_ADDRESS); + address computedAddress = create2Factory.findCreate2Address(salt, initCode); + console.log("TokenSideChainMultiBridge Proxy Supposed to deploy: %s", computedAddress); + + require(computedAddress == expectedAddress, "Computed address does not match expected address"); + + TokenSideChainMultiBridge angleProxy = TokenSideChainMultiBridge(create2Factory.safeCreate2(salt, initCode)); + TransparentUpgradeableProxy(payable(address(angleProxy))).upgradeTo(address(angleImpl)); + TransparentUpgradeableProxy(payable(address(angleProxy))).changeAdmin(proxyAdmin); + console.log("TokenSideChainMultiBridge Proxy deployed at", address(angleProxy)); + + LayerZeroBridgeTokenERC20 lzImpl = new LayerZeroBridgeTokenERC20(); + console.log("LayerZeroBridgeTokenERC20 Implementation deployed at", address(lzImpl)); + LayerZeroBridgeTokenERC20 lzProxy = LayerZeroBridgeTokenERC20( + address( + _deployUpgradeable( + proxyAdmin, + address(lzImpl), + abi.encodeWithSelector( + LayerZeroBridgeTokenERC20.initialize.selector, + string.concat("LayerZero Bridge ", symbol), + string.concat("LZ-", symbol), + lzEndpoint, + coreBorrow, + address(angleProxy), + 0 + ) + ) + ) + ); + console.log("LayerZeroBridgeTokenERC20 Proxy deployed at", address(lzProxy)); + + angleProxy.initialize( + symbol, + symbol, + ICoreBorrow(coreBorrow), + address(lzProxy), + totalLimit, + hourlyLimit, + 0, + false, + chainTotalHourlyLimit + ); + + if (mock) { + lzProxy.setUseCustomAdapterParams(1); + + (uint256[] memory chainIds, address[] memory contracts) = _getConnectedChains("ANGLE"); + + // Set trusted remote from current chain + for (uint256 i = 0; i < contracts.length; i++) { + if (chainIds[i] == chainId) { + continue; + } + + lzProxy.setTrustedRemote(_getLZChainId(chainIds[i]), abi.encodePacked(contracts[i], address(lzProxy))); + } + + // add real governor + if (vm.envOr("FINALIZE", false)) { + ICoreBorrow(coreBorrow).removeGovernor(deployer); + } + } + + string memory json2 = "output"; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + string[] memory keys = vm.parseJsonKeys(json, ""); + for (uint256 i = 0; i < keys.length; i++) { + json2.serialize(keys[i], json.readAddress(string.concat(".", keys[i]))); + } + } + json2.serialize("angle", address(angleProxy)); + json2 = json2.serialize("lzAngle", address(lzProxy)); + json2.write(JSON_ADDRESSES_PATH); + + vm.stopBroadcast(); + } +} diff --git a/scripts/DeployChain.s.sol b/scripts/DeployChain.s.sol new file mode 100644 index 0000000..63e806e --- /dev/null +++ b/scripts/DeployChain.s.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import "forge-std/Script.sol"; +import "utils/src/CommonUtils.sol"; +import "./utils/Constants.s.sol"; +import { ProxyAdmin } from "contracts/external/ProxyAdmin.sol"; +import { CoreBorrow } from "contracts/coreBorrow/CoreBorrow.sol"; + +contract DeployChain is Script, CommonUtils { + function run() external { + uint256 chainId = vm.envUint("CHAIN_ID"); + + /** TODO complete */ + bool mock = vm.envOr("MOCK", false); + address timelock; + address governor; + address guardian; + if (vm.envExists("TIMELOCK")) { + timelock = vm.envAddress("TIMELOCK"); + } else { + timelock = _chainToContract(chainId, ContractType.Timelock); + } + if (vm.envExists("GOVERNOR")) { + address governor = vm.envAddress("GOVERNOR"); + } else { + address governor = _chainToContract(chainId, ContractType.GovernorMultisig); + } + if (vm.envExists("GUARDIAN")) { + address guardian = vm.envAddress("GUARDIAN"); + } else { + address guardian = _chainToContract(chainId, ContractType.GuardianMultisig); + } + /** END complete */ + + uint256 deployerPrivateKey = vm.deriveKey(vm.envString("MNEMONIC_MAINNET"), "m/44'/60'/0'/0/", 0); + vm.startBroadcast(deployerPrivateKey); + address deployer = vm.addr(deployerPrivateKey); + + ProxyAdmin proxyAdmin = new ProxyAdmin(); + console.log("ProxyAdmin deployed at", address(proxyAdmin)); + + CoreBorrow coreBorrowImpl = new CoreBorrow(); + console.log("CoreBorrow Implementation deployed at", address(coreBorrowImpl)); + + CoreBorrow coreBorrowProxy = CoreBorrow( + address( + _deployUpgradeable( + address(proxyAdmin), + address(coreBorrowImpl), + abi.encodeWithSelector(CoreBorrow.initialize.selector, mock ? deployer : governor, guardian) + ) + ) + ); + console.log("CoreBorrow Proxy deployed at", address(coreBorrowProxy)); + + coreBorrowProxy.addGovernor(timelock); + + if (mock) { + coreBorrowProxy.addGovernor(governor); + } + + proxyAdmin.transferOwnership(governor); + + vm.serializeAddress("", "coreBorrow", address(coreBorrowProxy)); + vm.serializeAddress("", "guardian", guardian); + vm.serializeAddress("", "governor", governor); + string memory json = vm.serializeAddress("", "proxyAdmin", address(proxyAdmin)); + vm.writeJson(json, JSON_ADDRESSES_PATH); + + vm.stopBroadcast(); + } +} diff --git a/scripts/DeploySavings.s.sol b/scripts/DeploySavings.s.sol new file mode 100644 index 0000000..e4d81ab --- /dev/null +++ b/scripts/DeploySavings.s.sol @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import "forge-std/Script.sol"; +import "./utils/Constants.s.sol"; +import "utils/src/CommonUtils.sol"; +import { TokenSideChainMultiBridge } from "contracts/agToken/TokenSideChainMultiBridge.sol"; +import { LayerZeroBridgeTokenERC20 } from "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol"; +import { ImmutableCreate2Factory } from "contracts/interfaces/external/create2/ImmutableCreate2Factory.sol"; +import { ICoreBorrow } from "contracts/interfaces/ICoreBorrow.sol"; +import { Savings, IAccessControlManager, IERC20MetadataUpgradeable } from "transmuter/savings/Savings.sol"; + +contract DeploySavings is Script, CommonUtils { + using stdJson for string; + + function run() external { + /** TODO complete */ + string memory stableName = vm.envString("STABLE_NAME"); + /** END complete */ + + ContractType stableType; + if (keccak256(abi.encodePacked(stableName)) == keccak256("USD")) { + stableType = ContractType.AgUSD; + } + if (keccak256(abi.encodePacked(stableName)) == keccak256("EUR")) { + stableType = ContractType.AgEUR; + } + + uint256 deployerPrivateKey = vm.deriveKey(vm.envString("MNEMONIC_MAINNET"), "m/44'/60'/0'/0/", 0); + string memory jsonVanity = vm.readFile(string.concat(JSON_VANITY_PATH, "Savings", stableName, ".json")); + bytes32 salt = jsonVanity.readBytes32("$.salt"); + bytes memory initCode = jsonVanity.readBytes("$.initCode"); + uint256 chainId = vm.envUint("CHAIN_ID"); + + string memory json; + address proxyAdmin; + address coreBorrow; + address agToken; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + json = vm.readFile(JSON_ADDRESSES_PATH); + if (vm.keyExistsJson(json, ".proxyAdmin")) { + proxyAdmin = vm.parseJsonAddress(json, ".proxyAdmin"); + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + } + if (vm.keyExistsJson(json, ".coreBorrow")) { + coreBorrow = vm.parseJsonAddress(json, ".coreBorrow"); + } else { + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + } + if (vm.keyExistsJson(json, ".agToken")) { + agToken = vm.parseJsonAddress(json, ".agToken"); + } else { + agToken = _chainToContract(chainId, stableType); + } + } else { + proxyAdmin = _chainToContract(chainId, ContractType.ProxyAdmin); + coreBorrow = _chainToContract(chainId, ContractType.CoreBorrow); + agToken = _chainToContract(chainId, stableType); + } + address expectedAddress; + if (vm.envExists("EXPECTED_ADDRESS")) { + expectedAddress = vm.envAddress("EXPECTED_ADDRESS"); + } else { + // TODO compute the expected address once one of the address has been deployed + if (keccak256(abi.encodePacked(stableName)) == keccak256("USD")) { + expectedAddress = _chainToContract(CHAIN_ETHEREUM, ContractType.StUSD); + } + if (keccak256(abi.encodePacked(stableName)) == keccak256("EUR")) { + expectedAddress = _chainToContract(CHAIN_ETHEREUM, ContractType.StEUR); + } + } + + vm.startBroadcast(deployerPrivateKey); + + Savings savingsImpl = new Savings(); + console.log("Savings Implementation deployed at", address(savingsImpl)); + + ImmutableCreate2Factory create2Factory = ImmutableCreate2Factory(IMMUTABLE_CREATE2_FACTORY_ADDRESS); + address computedAddress = create2Factory.findCreate2Address(salt, initCode); + console.log("Savings Proxy Supposed to deploy: %s", computedAddress); + + require(computedAddress == expectedAddress, "Computed address does not match expected address"); + + Savings saving = Savings(create2Factory.safeCreate2(salt, initCode)); + TransparentUpgradeableProxy(payable(address(saving))).upgradeTo(address(savingsImpl)); + TransparentUpgradeableProxy(payable(address(saving))).changeAdmin(proxyAdmin); + console.log("Savings Proxy deployed at", address(saving)); + + IERC20MetadataUpgradeable(agToken).approve(address(saving), 1e18); + Savings(saving).initialize( + IAccessControlManager(coreBorrow), + IERC20MetadataUpgradeable(agToken), + string.concat("Staked ", stableName, "A"), + string.concat("st", stableName), + 1 + ); + + string memory json2 = "output"; + if (vm.isFile(JSON_ADDRESSES_PATH)) { + string[] memory keys = vm.parseJsonKeys(json, ""); + for (uint256 i = 0; i < keys.length; i++) { + json2.serialize(keys[i], json.readAddress(string.concat(".", keys[i]))); + } + } + json2 = json2.serialize("stToken", address(saving)); + json2.write(JSON_ADDRESSES_PATH); + + vm.stopBroadcast(); + } +} diff --git a/scripts/utils/Constants.s.sol b/scripts/utils/Constants.s.sol index f57822c..e4465ad 100644 --- a/scripts/utils/Constants.s.sol +++ b/scripts/utils/Constants.s.sol @@ -9,3 +9,5 @@ import "utils/src/Constants.sol"; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ address constant DEPLOYER = 0xfdA462548Ce04282f4B6D6619823a7C64Fdc0185; +string constant JSON_VANITY_PATH = "scripts/vanity"; +string constant JSON_ADDRESSES_PATH = "scripts/addresses.json"; diff --git a/scripts/utils/VanityAddress.s.sol b/scripts/utils/VanityAddress.s.sol index 6608a0f..8cf5ae6 100644 --- a/scripts/utils/VanityAddress.s.sol +++ b/scripts/utils/VanityAddress.s.sol @@ -13,26 +13,27 @@ import "./Constants.s.sol"; contract VanityAddressScript is Script, VanityAddress { using stdJson for string; - string constant JSON_VANITY_PATH = "./scripts/vanity.json"; - - using stdJson for string; - function run() external { // Deploy diamond + string memory contractName = "ANGLE"; bytes memory initCode = hex"60406080815262000f5f80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a357501617905551610b0a9081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe6080604052600436101561002c575b361561001f575b61001d6104dd565b005b6100276104dd565b610015565b6000803560e01c9081633659cfe614610093575080634f1ef2861461008a5780635c60da1b146100815780638f283970146100785763f851a4400361000e57610073610455565b61000e565b506100736102f0565b5061007361023b565b50610073610157565b3461012c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100ca61012f565b73ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146101235761012090610117610639565b908382526106f3565b80f35b506101206104dd565b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015257565b600080fd5b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761018a61012f565b60243567ffffffffffffffff9182821161015257366023830112156101525781600401359283116101525736602484840101116101525773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461023057600060208480602461021e61021961001d996106aa565b610666565b96828852018387013784010152610833565b50505061001d6104dd565b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff90817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146102e25750807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416905b60405191168152f35b906102eb6104dd565b6102d9565b50346101525760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761032861012f565b73ffffffffffffffffffffffffffffffffffffffff907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610230577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156103d1577fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038181541633146000146104d85754604051911681529050f35b506102eb5b5073ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331461055f577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e1561055b573d90f35b3d90fd5b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff82111761065957604052565b610661610609565b604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761065957604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff81116106e6575b01160190565b6106ee610609565b6106e0565b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906107a7575b610792575050565b6107a49161079e6108d9565b91610957565b50565b50600061078a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906108d157610792575050565b50600161078a565b604051906060820182811067ffffffffffffffff82111761094a575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b610952610609565b6108f5565b9190823b156109a0576000816109959460208394519201905af43d15610998573d90610985610219836106aa565b9182523d6000602084013e610a24565b90565b606090610a24565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610a30575090565b815115610a405750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110610abd575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b818101830151868201604401528593508201610a7c56fea26469706673582212206eca7257d81e920296a8c93c0ac0d93d9bb0927ce3e4cefa34ff129bc0cdbceb64736f6c634300081100330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000"; - string memory json = vm.readFile(JSON_VANITY_PATH); + string memory json = vm.readFile(string.concat(JSON_VANITY_PATH, contractName, ".json")); uint256 initInt = json.readUint(string.concat("$.", "init")); - uint256 iterations = 3000000; + uint256 iterations = 1000000; - (address computed, uint256 found) = minePrefix(initCode, DEPLOYER, 0x000020, initInt, iterations); + (address computed, uint256 found) = minePrefix(initCode, DEPLOYER, 0xAAAAAA, initInt, iterations); console.log("Computed: ", computed); console.log("Found: ", found); // write result to json vanity path json = ""; vm.serializeUint(json, "init", found); - string memory finalJson = vm.serializeAddress(json, "salt", computed); - vm.writeFile(JSON_VANITY_PATH, finalJson); + string memory finalJson = vm.serializeBytes32( + json, + "salt", + bytes32(abi.encodePacked(DEPLOYER, abi.encodePacked(uint96(found)))) + ); + vm.writeFile(string.concat(JSON_VANITY_PATH, contractName, ".json"), finalJson); } } diff --git a/scripts/vanity.json b/scripts/vanity.json deleted file mode 100644 index da1671c..0000000 --- a/scripts/vanity.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "init": 8223543, - "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc01850000000000000000007d7b37" -} diff --git a/scripts/vanityANGLE.json b/scripts/vanityANGLE.json new file mode 100644 index 0000000..ad1ef6e --- /dev/null +++ b/scripts/vanityANGLE.json @@ -0,0 +1,5 @@ +{ + "init": 12814647, + "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc0185000000000000000000c38937", + "initCode": "0x60406080815262000f5f80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a357501617905551610b0a9081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe6080604052600436101561002c575b361561001f575b61001d6104dd565b005b6100276104dd565b610015565b6000803560e01c9081633659cfe614610093575080634f1ef2861461008a5780635c60da1b146100815780638f283970146100785763f851a4400361000e57610073610455565b61000e565b506100736102f0565b5061007361023b565b50610073610157565b3461012c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100ca61012f565b73ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146101235761012090610117610639565b908382526106f3565b80f35b506101206104dd565b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015257565b600080fd5b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761018a61012f565b60243567ffffffffffffffff9182821161015257366023830112156101525781600401359283116101525736602484840101116101525773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461023057600060208480602461021e61021961001d996106aa565b610666565b96828852018387013784010152610833565b50505061001d6104dd565b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff90817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146102e25750807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416905b60405191168152f35b906102eb6104dd565b6102d9565b50346101525760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761032861012f565b73ffffffffffffffffffffffffffffffffffffffff907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610230577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156103d1577fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038181541633146000146104d85754604051911681529050f35b506102eb5b5073ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331461055f577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e1561055b573d90f35b3d90fd5b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff82111761065957604052565b610661610609565b604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761065957604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff81116106e6575b01160190565b6106ee610609565b6106e0565b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906107a7575b610792575050565b6107a49161079e6108d9565b91610957565b50565b50600061078a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906108d157610792575050565b50600161078a565b604051906060820182811067ffffffffffffffff82111761094a575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b610952610609565b6108f5565b9190823b156109a0576000816109959460208394519201905af43d15610998573d90610985610219836106aa565b9182523d6000602084013e610a24565b90565b606090610a24565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610a30575090565b815115610a405750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110610abd575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b818101830151868201604401528593508201610a7c56fea26469706673582212206eca7257d81e920296a8c93c0ac0d93d9bb0927ce3e4cefa34ff129bc0cdbceb64736f6c634300081100330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/scripts/vanityEUR.json b/scripts/vanityEUR.json new file mode 100644 index 0000000..77dcefe --- /dev/null +++ b/scripts/vanityEUR.json @@ -0,0 +1,5 @@ +{ + "init": 17947452, + "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc018500000000000000000111db3c", + "initCode": "0x60406080815262000f5f80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a357501617905551610b0a9081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe6080604052600436101561002c575b361561001f575b61001d6104dd565b005b6100276104dd565b610015565b6000803560e01c9081633659cfe614610093575080634f1ef2861461008a5780635c60da1b146100815780638f283970146100785763f851a4400361000e57610073610455565b61000e565b506100736102f0565b5061007361023b565b50610073610157565b3461012c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100ca61012f565b73ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146101235761012090610117610639565b908382526106f3565b80f35b506101206104dd565b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015257565b600080fd5b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761018a61012f565b60243567ffffffffffffffff9182821161015257366023830112156101525781600401359283116101525736602484840101116101525773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461023057600060208480602461021e61021961001d996106aa565b610666565b96828852018387013784010152610833565b50505061001d6104dd565b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff90817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146102e25750807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416905b60405191168152f35b906102eb6104dd565b6102d9565b50346101525760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761032861012f565b73ffffffffffffffffffffffffffffffffffffffff907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610230577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156103d1577fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038181541633146000146104d85754604051911681529050f35b506102eb5b5073ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331461055f577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e1561055b573d90f35b3d90fd5b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff82111761065957604052565b610661610609565b604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761065957604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff81116106e6575b01160190565b6106ee610609565b6106e0565b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906107a7575b610792575050565b6107a49161079e6108d9565b91610957565b50565b50600061078a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906108d157610792575050565b50600161078a565b604051906060820182811067ffffffffffffffff82111761094a575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b610952610609565b6108f5565b9190823b156109a0576000816109959460208394519201905af43d15610998573d90610985610219836106aa565b9182523d6000602084013e610a24565b90565b606090610a24565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610a30575090565b815115610a405750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110610abd575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b818101830151868201604401528593508201610a7c56fea26469706673582212206eca7257d81e920296a8c93c0ac0d93d9bb0927ce3e4cefa34ff129bc0cdbceb64736f6c634300081100330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/scripts/vanitySavingsEUR.json b/scripts/vanitySavingsEUR.json new file mode 100644 index 0000000..fb461e6 --- /dev/null +++ b/scripts/vanitySavingsEUR.json @@ -0,0 +1,6 @@ +{ + "init": 4427456, + "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc0185000000000000000000438ec0", + "vanityAddress": "0x004626A008B1aCdC4c74ab51644093b155e59A23", + "initCode": "0x60406080815262000cdb80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516108869081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe60806040526004361015610019575b3661037c575b61037c565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e57610326565b610212565b61019e565b6100ef565b346100d15760203660031901126100d1576100856100d4565b6001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354163314600014610014576100ce906100c56104af565b90838252610516565b80f35b80fd5b600435906001600160a01b03821682036100ea57565b600080fd5b60403660031901126100ea576101036100d4565b60243567ffffffffffffffff918282116100ea57366023830112156100ea5781600401359283116100ea5736602484840101116100ea576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461001457600060208480602461018a61018561019c996104fa565b6104d4565b96828852018387013784010152610624565b005b346100ea5760003660031901126100ea576001600160a01b03807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354163314600014610014577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460405191168152602090f35b346100ea5760203660031901126100ea5761022b6100d4565b6001600160a01b03907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156102bc5773ffffffffffffffffffffffffffffffffffffffff1916179055005b608460405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346100ea5760003660031901126100ea576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039080825416331460001461001457905460405191168152602090f35b6001600160a01b03807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146103f0577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e156103ec573d90f35b3d90fd5b60a460405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff8211176104cf57604052565b610480565b6040519190601f01601f1916820167ffffffffffffffff8111838210176104cf57604052565b67ffffffffffffffff81116104cf57601f01601f191660200190565b803b156105ba576001600160a01b0381167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8173ffffffffffffffffffffffffffffffffffffffff198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906105b2575b61059d575050565b6105af916105a96106b2565b91610722565b50565b506000610595565b608460405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156105ba576001600160a01b0381167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8173ffffffffffffffffffffffffffffffffffffffff198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906106aa5761059d575050565b506001610595565b604051906060820182811067ffffffffffffffff8211176104cf57604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b9190823b1561076b576000816107609460208394519201905af43d15610763573d90610750610185836104fa565b9182523d6000602084013e6107d5565b90565b6060906107d5565b608460405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b909190156107e1575090565b8151156107f15750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b828510610837575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061081456fea2646970667358221220cd51d87f687e65d41171d5f157313805c8c9f1c12984f1d6b0d726a20f3df98e64736f6c634300081300330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/scripts/vanitySavingsUSD.json b/scripts/vanitySavingsUSD.json new file mode 100644 index 0000000..c9d7973 --- /dev/null +++ b/scripts/vanitySavingsUSD.json @@ -0,0 +1,6 @@ +{ + "init": 16930517, + "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc01850000000000000000010256d5", + "vanityAddress": "0x0022228a2cc5E7eF0274A7Baa600d44da5aB5776", + "initCode": "0x60406080815262000cdb80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a3575016179055516108869081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe60806040526004361015610019575b3661037c575b61037c565b6000803560e01c9081633659cfe61461006c575080634f1ef286146100675780635c60da1b146100625780638f2839701461005d5763f851a4400361000e57610326565b610212565b61019e565b6100ef565b346100d15760203660031901126100d1576100856100d4565b6001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354163314600014610014576100ce906100c56104af565b90838252610516565b80f35b80fd5b600435906001600160a01b03821682036100ea57565b600080fd5b60403660031901126100ea576101036100d4565b60243567ffffffffffffffff918282116100ea57366023830112156100ea5781600401359283116100ea5736602484840101116100ea576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461001457600060208480602461018a61018561019c996104fa565b6104d4565b96828852018387013784010152610624565b005b346100ea5760003660031901126100ea576001600160a01b03807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354163314600014610014577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460405191168152602090f35b346100ea5760203660031901126100ea5761022b6100d4565b6001600160a01b03907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610014577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156102bc5773ffffffffffffffffffffffffffffffffffffffff1916179055005b608460405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b346100ea5760003660031901126100ea576001600160a01b037fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039080825416331460001461001457905460405191168152602090f35b6001600160a01b03807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146103f0577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e156103ec573d90f35b3d90fd5b60a460405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff8211176104cf57604052565b610480565b6040519190601f01601f1916820167ffffffffffffffff8111838210176104cf57604052565b67ffffffffffffffff81116104cf57601f01601f191660200190565b803b156105ba576001600160a01b0381167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8173ffffffffffffffffffffffffffffffffffffffff198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906105b2575b61059d575050565b6105af916105a96106b2565b91610722565b50565b506000610595565b608460405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156105ba576001600160a01b0381167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8173ffffffffffffffffffffffffffffffffffffffff198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906106aa5761059d575050565b506001610595565b604051906060820182811067ffffffffffffffff8211176104cf57604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b9190823b1561076b576000816107609460208394519201905af43d15610763573d90610750610185836104fa565b9182523d6000602084013e6107d5565b90565b6060906107d5565b608460405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b909190156107e1575090565b8151156107f15750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b828510610837575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935061081456fea2646970667358221220d55b5da8b924769f7b438faccab9195abc467b47fdb6d935592c5612e7e7412164736f6c634300081300330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/scripts/vanityUSD.json b/scripts/vanityUSD.json new file mode 100644 index 0000000..57c1b34 --- /dev/null +++ b/scripts/vanityUSD.json @@ -0,0 +1,5 @@ +{ + "init": 8223543, + "salt": "0xfda462548ce04282f4b6d6619823a7c64fdc01850000000000000000007d7b37", + "initCode": "0x60406080815262000f5f80380380620000188162000364565b9283398101906060818303126200035f576200003481620003a0565b9160209262000045848401620003a0565b8584015190936001600160401b0391908282116200035f57019280601f850112156200035f57835193620000836200007d86620003b5565b62000364565b94808652878601928882840101116200035f578288620000a49301620003d1565b823b1562000305577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03199081166001600160a01b0386811691821790935590959194600093909290917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2805115801590620002fd575b620001f5575b50505050507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103937f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f86865493815196818616885216958684820152a18315620001a357501617905551610b0a9081620004558239f35b60849086519062461bcd60e51b82526004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8951946060860190811186821017620002e9578a52602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c89860152660819985a5b195960ca1b8a860152823b156200029657928092819262000280969551915af43d156200028c573d620002706200007d82620003b5565b9081528092893d92013e620003f6565b5038808080806200012d565b60609150620003f6565b895162461bcd60e51b8152600481018a9052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b634e487b7160e01b85526041600452602485fd5b508362000127565b865162461bcd60e51b815260048101879052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200038a57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200035f57565b6001600160401b0381116200038a57601f01601f191660200190565b60005b838110620003e55750506000910152565b8181015183820152602001620003d4565b9091901562000403575090565b815115620004145750805190602001fd5b6044604051809262461bcd60e51b825260206004830152620004468151809281602486015260208686019101620003d1565b601f01601f19168101030190fdfe6080604052600436101561002c575b361561001f575b61001d6104dd565b005b6100276104dd565b610015565b6000803560e01c9081633659cfe614610093575080634f1ef2861461008a5780635c60da1b146100815780638f283970146100785763f851a4400361000e57610073610455565b61000e565b506100736102f0565b5061007361023b565b50610073610157565b3461012c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100ca61012f565b73ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146101235761012090610117610639565b908382526106f3565b80f35b506101206104dd565b80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015257565b600080fd5b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761018a61012f565b60243567ffffffffffffffff9182821161015257366023830112156101525781600401359283116101525736602484840101116101525773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331460001461023057600060208480602461021e61021961001d996106aa565b610666565b96828852018387013784010152610833565b50505061001d6104dd565b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff90817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103541633146000146102e25750807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416905b60405191168152f35b906102eb6104dd565b6102d9565b50346101525760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101525761032861012f565b73ffffffffffffffffffffffffffffffffffffffff907fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610391808354163314600014610230577f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f604084549281519481851686521693846020820152a181156103d1577fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b50346101525760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610152576020600073ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038181541633146000146104d85754604051911681529050f35b506102eb5b5073ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035416331461055f577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e1561055b573d90f35b3d90fd5b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f65740000000000000000000000000000000000000000000000000000000000006084820152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051906020820182811067ffffffffffffffff82111761065957604052565b610661610609565b604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761065957604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff81116106e6575b01160190565b6106ee610609565b6106e0565b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906107a7575b610792575050565b6107a49161079e6108d9565b91610957565b50565b50600061078a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b803b156107af5773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28151158015906108d157610792575050565b50600161078a565b604051906060820182811067ffffffffffffffff82111761094a575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b610952610609565b6108f5565b9190823b156109a0576000816109959460208394519201905af43d15610998573d90610985610219836106aa565b9182523d6000602084013e610a24565b90565b606090610a24565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610a30575090565b815115610a405750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110610abd575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b818101830151868201604401528593508201610a7c56fea26469706673582212206eca7257d81e920296a8c93c0ac0d93d9bb0927ce3e4cefa34ff129bc0cdbceb64736f6c634300081100330000000000000000000000000000000000ffe8b47b3e2130213b802212439497000000000000000000000000fda462548ce04282f4b6d6619823a7c64fdc018500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/slither.config.json b/slither.config.json index 7180139..be1fa4a 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,10 +1,15 @@ { "detectors_to_exclude": "naming-convention,solc-version", - "filter_paths": "(lib|test|external|node_modules|scripts)", + "filter_paths": "(lib|test|scripts|external|node_modules)", "solc_remaps": [ - "ds-test/=lib/ds-test/src/", + "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "oz/=lib/openzeppelin-contracts/contracts/", - "oz-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" + "oz-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "chainlink/=lib/chainlink/contracts/", + "utils/=lib/utils/", + "contracts/=contracts/", + "chainlink/=lib/chainlink/contracts/", + "layer-zero/=lib/LayerZero/contracts/" ] } diff --git a/slither.db.json b/slither.db.json new file mode 100644 index 0000000..c647163 --- /dev/null +++ b/slither.db.json @@ -0,0 +1 @@ +[{"elements": [{"type": "function", "name": "flashLoan", "source_mapping": {"start": 4077, "length": 990, "filename_relative": "contracts/flashloan/FlashAngle.sol", "filename_absolute": "/root/angle/agTokens/contracts/flashloan/FlashAngle.sol", "filename_short": "contracts/flashloan/FlashAngle.sol", "is_dependency": false, "lines": [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "FlashAngle", "source_mapping": {"start": 647, "length": 7114, "filename_relative": "contracts/flashloan/FlashAngle.sol", "filename_absolute": "/root/angle/agTokens/contracts/flashloan/FlashAngle.sol", "filename_short": "contracts/flashloan/FlashAngle.sol", "is_dependency": false, "lines": [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], "starting_column": 1, "ending_column": 2}}, "signature": "flashLoan(IERC3156FlashBorrower,address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(token).safeTransferFrom(address(receiver),address(this),amount + fee)", "source_mapping": {"start": 4855, "length": 78, "filename_relative": "contracts/flashloan/FlashAngle.sol", "filename_absolute": "/root/angle/agTokens/contracts/flashloan/FlashAngle.sol", "filename_short": "contracts/flashloan/FlashAngle.sol", "is_dependency": false, "lines": [116], "starting_column": 9, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "flashLoan", "source_mapping": {"start": 4077, "length": 990, "filename_relative": "contracts/flashloan/FlashAngle.sol", "filename_absolute": "/root/angle/agTokens/contracts/flashloan/FlashAngle.sol", "filename_short": "contracts/flashloan/FlashAngle.sol", "is_dependency": false, "lines": [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "FlashAngle", "source_mapping": {"start": 647, "length": 7114, "filename_relative": "contracts/flashloan/FlashAngle.sol", "filename_absolute": "/root/angle/agTokens/contracts/flashloan/FlashAngle.sol", "filename_short": "contracts/flashloan/FlashAngle.sol", "is_dependency": false, "lines": [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], "starting_column": 1, "ending_column": 2}}, "signature": "flashLoan(IERC3156FlashBorrower,address,uint256,bytes)"}}}}], "description": "FlashAngle.flashLoan(IERC3156FlashBorrower,address,uint256,bytes) (contracts/flashloan/FlashAngle.sol#102-120) uses arbitrary from in transferFrom: IERC20(token).safeTransferFrom(address(receiver),address(this),amount + fee) (contracts/flashloan/FlashAngle.sol#116)\n", "markdown": "[FlashAngle.flashLoan(IERC3156FlashBorrower,address,uint256,bytes)](contracts/flashloan/FlashAngle.sol#L102-L120) uses arbitrary from in transferFrom: [IERC20(token).safeTransferFrom(address(receiver),address(this),amount + fee)](contracts/flashloan/FlashAngle.sol#L116)\n", "first_markdown_element": "contracts/flashloan/FlashAngle.sol#L102-L120", "id": "d43d4fd66f2aa8991dfd7564866e218432ec1c13f8ff94ca4bc135713bb4cfea", "check": "arbitrary-send-erc20", "impact": "High", "confidence": "High"}, {"elements": [{"type": "function", "name": "_withdraw", "source_mapping": {"start": 3150, "length": 254, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [74, 75, 76, 77, 78], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_withdraw(uint256,address,address)"}}, {"type": "node", "name": "canonicalToken.transfer(to,amount)", "source_mapping": {"start": 3339, "length": 35, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [76], "starting_column": 9, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_withdraw", "source_mapping": {"start": 3150, "length": 254, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [74, 75, 76, 77, 78], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_withdraw(uint256,address,address)"}}}}], "description": "LayerZeroBridge._withdraw(uint256,address,address) (contracts/agToken/layerZero/LayerZeroBridge.sol#74-78) ignores return value by canonicalToken.transfer(to,amount) (contracts/agToken/layerZero/LayerZeroBridge.sol#76)\n", "markdown": "[LayerZeroBridge._withdraw(uint256,address,address)](contracts/agToken/layerZero/LayerZeroBridge.sol#L74-L78) ignores return value by [canonicalToken.transfer(to,amount)](contracts/agToken/layerZero/LayerZeroBridge.sol#L76)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L74-L78", "id": "35d1c805ca0fdc63ab093511a8b5478dc07669466ddc470a7952db548f7a2e0b", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3438, "length": 306, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [81, 82, 83, 84, 85], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_debitFrom(uint16,bytes,uint256)"}}, {"type": "node", "name": "canonicalToken.transferFrom(msg.sender,address(this),_amount)", "source_mapping": {"start": 3650, "length": 63, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [83], "starting_column": 9, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3438, "length": 306, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [81, 82, 83, 84, 85], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_debitFrom(uint16,bytes,uint256)"}}}}], "description": "LayerZeroBridge._debitFrom(uint16,bytes,uint256) (contracts/agToken/layerZero/LayerZeroBridge.sol#81-85) ignores return value by canonicalToken.transferFrom(msg.sender,address(this),_amount) (contracts/agToken/layerZero/LayerZeroBridge.sol#83)\n", "markdown": "[LayerZeroBridge._debitFrom(uint16,bytes,uint256)](contracts/agToken/layerZero/LayerZeroBridge.sol#L81-L85) ignores return value by [canonicalToken.transferFrom(msg.sender,address(this),_amount)](contracts/agToken/layerZero/LayerZeroBridge.sol#L83)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L81-L85", "id": "a6275d4abe5d861294f00048437f3c00d782d591ecac29a93db15f1921405755", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_creditTo", "source_mapping": {"start": 4000, "length": 562, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_creditTo(uint16,address,uint256)"}}, {"type": "node", "name": "canonicalToken.transfer(_toAddress,balance)", "source_mapping": {"start": 4402, "length": 44, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [100], "starting_column": 31, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_creditTo", "source_mapping": {"start": 4000, "length": 562, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_creditTo(uint16,address,uint256)"}}}}], "description": "LayerZeroBridge._creditTo(uint16,address,uint256) (contracts/agToken/layerZero/LayerZeroBridge.sol#94-105) ignores return value by canonicalToken.transfer(_toAddress,balance) (contracts/agToken/layerZero/LayerZeroBridge.sol#100)\n", "markdown": "[LayerZeroBridge._creditTo(uint16,address,uint256)](contracts/agToken/layerZero/LayerZeroBridge.sol#L94-L105) ignores return value by [canonicalToken.transfer(_toAddress,balance)](contracts/agToken/layerZero/LayerZeroBridge.sol#L100)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L94-L105", "id": "38df382f4ef5c0a4a3bb3a39725fd09b56524cd72934b78301c70f88296885ea", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_creditTo", "source_mapping": {"start": 4000, "length": 562, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_creditTo(uint16,address,uint256)"}}, {"type": "node", "name": "canonicalToken.transfer(_toAddress,_amount)", "source_mapping": {"start": 4477, "length": 44, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [102], "starting_column": 13, "ending_column": 57}, "type_specific_fields": {"parent": {"type": "function", "name": "_creditTo", "source_mapping": {"start": 4000, "length": 562, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_creditTo(uint16,address,uint256)"}}}}], "description": "LayerZeroBridge._creditTo(uint16,address,uint256) (contracts/agToken/layerZero/LayerZeroBridge.sol#94-105) ignores return value by canonicalToken.transfer(_toAddress,_amount) (contracts/agToken/layerZero/LayerZeroBridge.sol#102)\n", "markdown": "[LayerZeroBridge._creditTo(uint16,address,uint256)](contracts/agToken/layerZero/LayerZeroBridge.sol#L94-L105) ignores return value by [canonicalToken.transfer(_toAddress,_amount)](contracts/agToken/layerZero/LayerZeroBridge.sol#L102)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L94-L105", "id": "d2d327174a70218df2cb013a7eca8ab60654bb975a321a788737a55c51ca115c", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3379, "length": 531, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "is_dependency": false, "lines": [82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}, "signature": "_debitFrom(uint16,bytes,uint256)"}}, {"type": "node", "name": "canonicalToken.transferFrom(msg.sender,address(this),_amount)", "source_mapping": {"start": 3635, "length": 63, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "is_dependency": false, "lines": [88], "starting_column": 9, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3379, "length": 531, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "is_dependency": false, "lines": [82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}, "signature": "_debitFrom(uint16,bytes,uint256)"}}}}], "description": "LayerZeroBridgeToken._debitFrom(uint16,bytes,uint256) (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#82-93) ignores return value by canonicalToken.transferFrom(msg.sender,address(this),_amount) (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#88)\n", "markdown": "[LayerZeroBridgeToken._debitFrom(uint16,bytes,uint256)](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L82-L93) ignores return value by [canonicalToken.transferFrom(msg.sender,address(this),_amount)](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L88)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L82-L93", "id": "85907602d1467c8bf443e18c65798f928cd415564b6277e0407aa9330c6f0463", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3254, "length": 531, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "lines": [81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_debitFrom(uint16,bytes,uint256)"}}, {"type": "node", "name": "canonicalToken.transferFrom(msg.sender,address(this),_amount)", "source_mapping": {"start": 3510, "length": 63, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "lines": [87], "starting_column": 9, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3254, "length": 531, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "lines": [81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_debitFrom(uint16,bytes,uint256)"}}}}], "description": "LayerZeroBridgeTokenERC20._debitFrom(uint16,bytes,uint256) (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#81-92) ignores return value by canonicalToken.transferFrom(msg.sender,address(this),_amount) (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#87)\n", "markdown": "[LayerZeroBridgeTokenERC20._debitFrom(uint16,bytes,uint256)](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L81-L92) ignores return value by [canonicalToken.transferFrom(msg.sender,address(this),_amount)](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L87)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L81-L92", "id": "9d3c0c3993f968c205bc59c04193a353b139ae4d3a0e20ff6ef1b20a7953c4de", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}, {"type": "node", "name": "stablecoin.transfer(_surplusManager,governanceAllocation)", "source_mapping": {"start": 10470, "length": 58, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [187], "starting_column": 9, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}}}], "description": "Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188) ignores return value by stablecoin.transfer(_surplusManager,governanceAllocation) (contracts/treasury/Treasury.sol#187)\n", "markdown": "[Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188) ignores return value by [stablecoin.transfer(_surplusManager,governanceAllocation)](contracts/treasury/Treasury.sol#L187)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L178-L188", "id": "68014835e799b9d4893ed73b4f691c7a916382b032797920aba4e233eefe2cde", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}, {"type": "node", "name": "stablecoin.transfer(to,amountToRecover)", "source_mapping": {"start": 19450, "length": 40, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [346], "starting_column": 13, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}}], "description": "Treasury.recoverERC20(address,address,uint256) (contracts/treasury/Treasury.sol#338-351) ignores return value by stablecoin.transfer(to,amountToRecover) (contracts/treasury/Treasury.sol#346)\n", "markdown": "[Treasury.recoverERC20(address,address,uint256)](contracts/treasury/Treasury.sol#L338-L351) ignores return value by [stablecoin.transfer(to,amountToRecover)](contracts/treasury/Treasury.sol#L346)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L338-L351", "id": "92fd2c67475fa7ccb4221843e1a09f2b90ab2116ecbf51f580533cca653badf0", "check": "unchecked-transfer", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "reverts", "source_mapping": {"start": 577, "length": 19, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [20], "starting_column": 5, "ending_column": 24}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}, {"type": "function", "name": "swapIn", "source_mapping": {"start": 1892, "length": 366, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [69, 70, 71, 72, 73, 74, 75, 76, 77], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}, {"type": "function", "name": "swapOut", "source_mapping": {"start": 2264, "length": 332, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [79, 80, 81, 82, 83, 84, 85, 86], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "swapOut(address,uint256,address)"}}], "description": "MockTokenPermit.reverts (contracts/mock/MockTokenPermit.sol#20) is never initialized. It is used in:\n\t- MockTokenPermit.swapIn(address,uint256,address) (contracts/mock/MockTokenPermit.sol#69-77)\n\t- MockTokenPermit.swapOut(address,uint256,address) (contracts/mock/MockTokenPermit.sol#79-86)\n", "markdown": "[MockTokenPermit.reverts](contracts/mock/MockTokenPermit.sol#L20) is never initialized. It is used in:\n\t- [MockTokenPermit.swapIn(address,uint256,address)](contracts/mock/MockTokenPermit.sol#L69-L77)\n\t- [MockTokenPermit.swapOut(address,uint256,address)](contracts/mock/MockTokenPermit.sol#L79-L86)\n", "first_markdown_element": "contracts/mock/MockTokenPermit.sol#L20", "id": "085ae729708408a5001a72d3de5f3fd4414846239ecf04dc6812ad0d3d169596", "check": "uninitialized-state", "impact": "High", "confidence": "High"}, {"elements": [{"type": "contract", "name": "MockLayerZero", "source_mapping": {"start": 119, "length": 1879, "filename_relative": "contracts/mock/MockLayerZero.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockLayerZero.sol", "filename_short": "contracts/mock/MockLayerZero.sol", "is_dependency": false, "lines": [7, 8, 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], "starting_column": 1, "ending_column": 2}}, {"type": "function", "name": "send", "source_mapping": {"start": 449, "length": 214, "filename_relative": "contracts/mock/MockLayerZero.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockLayerZero.sol", "filename_short": "contracts/mock/MockLayerZero.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockLayerZero", "source_mapping": {"start": 119, "length": 1879, "filename_relative": "contracts/mock/MockLayerZero.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockLayerZero.sol", "filename_short": "contracts/mock/MockLayerZero.sol", "is_dependency": false, "lines": [7, 8, 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], "starting_column": 1, "ending_column": 2}}, "signature": "send(uint16,bytes,bytes,address,address,bytes)"}}], "description": "Contract locking ether found:\n\tContract MockLayerZero (contracts/mock/MockLayerZero.sol#7-76) has payable functions:\n\t - MockLayerZero.send(uint16,bytes,bytes,address,address,bytes) (contracts/mock/MockLayerZero.sol#18-27)\n\tBut does not have a function to withdraw the ether\n", "markdown": "Contract locking ether found:\n\tContract [MockLayerZero](contracts/mock/MockLayerZero.sol#L7-L76) has payable functions:\n\t - [MockLayerZero.send(uint16,bytes,bytes,address,address,bytes)](contracts/mock/MockLayerZero.sol#L18-L27)\n\tBut does not have a function to withdraw the ether\n", "first_markdown_element": "contracts/mock/MockLayerZero.sol#L7-L76", "id": "0d75ea4f74cba55249fec4811f080087e98f9b32771ff5f7956e296601778c58", "check": "locked-ether", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList)", "source_mapping": {"start": 11777, "length": 76, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [210], "starting_column": 9, "ending_column": 85}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()", "source_mapping": {"start": 13096, "length": 85, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [232], "starting_column": 13, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 11995, "length": 74, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [213], "starting_column": 13, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "badDebt"}}, {"type": "node", "name": "badDebt = badDebtValue", "source_mapping": {"start": 15285, "length": 22, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [266], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "badDebt"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}, {"type": "node", "name": "surplusBuffer = surplusBufferValue", "source_mapping": {"start": 15241, "length": 34, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}], "description": "Reentrancy in Treasury._fetchSurplusFromAll() (contracts/treasury/Treasury.sol#209-215):\n\tExternal calls:\n\t- (surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList) (contracts/treasury/Treasury.sol#210)\n\t\t- (newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury() (contracts/treasury/Treasury.sol#232)\n\t- surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#213)\n\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tState variables written after the call(s):\n\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n\t\t- badDebt = badDebtValue (contracts/treasury/Treasury.sol#266)\n\tTreasury.badDebt (contracts/treasury/Treasury.sol#77) can be used in cross function reentrancies:\n\t- Treasury._fetchSurplusFromList(address[]) (contracts/treasury/Treasury.sol#223-236)\n\t- Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270)\n\t- Treasury.badDebt (contracts/treasury/Treasury.sol#77)\n\t- Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168)\n\t- Treasury.updateBadDebt(uint256) (contracts/treasury/Treasury.sol#199-204)\n\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n\t\t- surplusBuffer = surplusBufferValue (contracts/treasury/Treasury.sol#265)\n\tTreasury.surplusBuffer (contracts/treasury/Treasury.sol#81) can be used in cross function reentrancies:\n\t- Treasury._fetchSurplusFromList(address[]) (contracts/treasury/Treasury.sol#223-236)\n\t- Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270)\n\t- Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168)\n\t- Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188)\n\t- Treasury.recoverERC20(address,address,uint256) (contracts/treasury/Treasury.sol#338-351)\n\t- Treasury.surplusBuffer (contracts/treasury/Treasury.sol#81)\n", "markdown": "Reentrancy in [Treasury._fetchSurplusFromAll()](contracts/treasury/Treasury.sol#L209-L215):\n\tExternal calls:\n\t- [(surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList)](contracts/treasury/Treasury.sol#L210)\n\t\t- [(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()](contracts/treasury/Treasury.sol#L232)\n\t- [surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L213)\n\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tState variables written after the call(s):\n\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n\t\t- [badDebt = badDebtValue](contracts/treasury/Treasury.sol#L266)\n\t[Treasury.badDebt](contracts/treasury/Treasury.sol#L77) can be used in cross function reentrancies:\n\t- [Treasury._fetchSurplusFromList(address[])](contracts/treasury/Treasury.sol#L223-L236)\n\t- [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270)\n\t- [Treasury.badDebt](contracts/treasury/Treasury.sol#L77)\n\t- [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168)\n\t- [Treasury.updateBadDebt(uint256)](contracts/treasury/Treasury.sol#L199-L204)\n\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n\t\t- [surplusBuffer = surplusBufferValue](contracts/treasury/Treasury.sol#L265)\n\t[Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81) can be used in cross function reentrancies:\n\t- [Treasury._fetchSurplusFromList(address[])](contracts/treasury/Treasury.sol#L223-L236)\n\t- [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270)\n\t- [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168)\n\t- [Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188)\n\t- [Treasury.recoverERC20(address,address,uint256)](contracts/treasury/Treasury.sol#L338-L351)\n\t- [Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L209-L215", "id": "302be9e07c2e41185d61d4c81037bc2d9d454a7af934330ca6b02d7045501c7d", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}, {"type": "node", "name": "surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 9242, "length": 97, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [166], "starting_column": 9, "ending_column": 106}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_updateSurplusAndBadDebt(surplusBufferValue,badDebt)", "source_mapping": {"start": 9349, "length": 60, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_updateSurplusAndBadDebt(surplusBufferValue,badDebt)", "source_mapping": {"start": 9349, "length": 60, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}, {"type": "node", "name": "surplusBuffer = surplusBufferValue", "source_mapping": {"start": 15241, "length": 34, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}], "description": "Reentrancy in Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168):\n\tExternal calls:\n\t- surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#166)\n\t- _updateSurplusAndBadDebt(surplusBufferValue,badDebt) (contracts/treasury/Treasury.sol#167)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tState variables written after the call(s):\n\t- _updateSurplusAndBadDebt(surplusBufferValue,badDebt) (contracts/treasury/Treasury.sol#167)\n\t\t- surplusBuffer = surplusBufferValue (contracts/treasury/Treasury.sol#265)\n\tTreasury.surplusBuffer (contracts/treasury/Treasury.sol#81) can be used in cross function reentrancies:\n\t- Treasury._fetchSurplusFromList(address[]) (contracts/treasury/Treasury.sol#223-236)\n\t- Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270)\n\t- Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168)\n\t- Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188)\n\t- Treasury.recoverERC20(address,address,uint256) (contracts/treasury/Treasury.sol#338-351)\n\t- Treasury.surplusBuffer (contracts/treasury/Treasury.sol#81)\n", "markdown": "Reentrancy in [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168):\n\tExternal calls:\n\t- [surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L166)\n\t- [_updateSurplusAndBadDebt(surplusBufferValue,badDebt)](contracts/treasury/Treasury.sol#L167)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tState variables written after the call(s):\n\t- [_updateSurplusAndBadDebt(surplusBufferValue,badDebt)](contracts/treasury/Treasury.sol#L167)\n\t\t- [surplusBuffer = surplusBufferValue](contracts/treasury/Treasury.sol#L265)\n\t[Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81) can be used in cross function reentrancies:\n\t- [Treasury._fetchSurplusFromList(address[])](contracts/treasury/Treasury.sol#L223-L236)\n\t- [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270)\n\t- [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168)\n\t- [Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188)\n\t- [Treasury.recoverERC20(address,address,uint256)](contracts/treasury/Treasury.sol#L338-L351)\n\t- [Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L165-L168", "id": "201109129ae85f8012ca29e8efc086743e34a27c4681ec92addd7b4e14a972c6", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}, {"type": "node", "name": "(surplusBufferValue,None) = _fetchSurplusFromAll()", "source_mapping": {"start": 10255, "length": 55, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [183], "starting_column": 9, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 11995, "length": 74, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [213], "starting_column": 13, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()", "source_mapping": {"start": 13096, "length": 85, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [232], "starting_column": 13, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "surplusBuffer = 0", "source_mapping": {"start": 10320, "length": 17, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [184], "starting_column": 9, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}], "description": "Reentrancy in Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188):\n\tExternal calls:\n\t- (surplusBufferValue,None) = _fetchSurplusFromAll() (contracts/treasury/Treasury.sol#183)\n\t\t- surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#213)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\t\t- (newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury() (contracts/treasury/Treasury.sol#232)\n\tState variables written after the call(s):\n\t- surplusBuffer = 0 (contracts/treasury/Treasury.sol#184)\n\tTreasury.surplusBuffer (contracts/treasury/Treasury.sol#81) can be used in cross function reentrancies:\n\t- Treasury._fetchSurplusFromList(address[]) (contracts/treasury/Treasury.sol#223-236)\n\t- Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270)\n\t- Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168)\n\t- Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188)\n\t- Treasury.recoverERC20(address,address,uint256) (contracts/treasury/Treasury.sol#338-351)\n\t- Treasury.surplusBuffer (contracts/treasury/Treasury.sol#81)\n", "markdown": "Reentrancy in [Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188):\n\tExternal calls:\n\t- [(surplusBufferValue,None) = _fetchSurplusFromAll()](contracts/treasury/Treasury.sol#L183)\n\t\t- [surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L213)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\t\t- [(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()](contracts/treasury/Treasury.sol#L232)\n\tState variables written after the call(s):\n\t- [surplusBuffer = 0](contracts/treasury/Treasury.sol#L184)\n\t[Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81) can be used in cross function reentrancies:\n\t- [Treasury._fetchSurplusFromList(address[])](contracts/treasury/Treasury.sol#L223-L236)\n\t- [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270)\n\t- [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168)\n\t- [Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188)\n\t- [Treasury.recoverERC20(address,address,uint256)](contracts/treasury/Treasury.sol#L338-L351)\n\t- [Treasury.surplusBuffer](contracts/treasury/Treasury.sol#L81)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L178-L188", "id": "08deec89b9b2253e84f5c1f9737172fd75392b113de62f0131e76a281eef2671", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_bridge", "source_mapping": {"start": 14355, "length": 28, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [317], "starting_column": 9, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_addBridgeToken", "source_mapping": {"start": 14026, "length": 691, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenSideChainMultiBridge", "source_mapping": {"start": 661, "length": 14294, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_addBridgeToken(address,uint256,uint256,uint64,bool)"}}}}], "description": "TokenSideChainMultiBridge._addBridgeToken(address,uint256,uint256,uint64,bool)._bridge (contracts/agToken/TokenSideChainMultiBridge.sol#317) is a local variable never initialized\n", "markdown": "[TokenSideChainMultiBridge._addBridgeToken(address,uint256,uint256,uint64,bool)._bridge](contracts/agToken/TokenSideChainMultiBridge.sol#L317) is a local variable never initialized\n", "first_markdown_element": "contracts/agToken/TokenSideChainMultiBridge.sol#L317", "id": "1d05d4d34601ac6366563ee4d4ddc82259aa02ffd0580f7a13f509a53df19337", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_bridge", "source_mapping": {"start": 8975, "length": 28, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [194], "starting_column": 9, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "addBridgeToken", "source_mapping": {"start": 8634, "length": 703, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenSideChainMultiBridge", "source_mapping": {"start": 461, "length": 12193, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "addBridgeToken(address,uint256,uint256,uint64,bool)"}}}}], "description": "AgTokenSideChainMultiBridge.addBridgeToken(address,uint256,uint256,uint64,bool)._bridge (contracts/agToken/AgTokenSideChainMultiBridge.sol#194) is a local variable never initialized\n", "markdown": "[AgTokenSideChainMultiBridge.addBridgeToken(address,uint256,uint256,uint64,bool)._bridge](contracts/agToken/AgTokenSideChainMultiBridge.sol#L194) is a local variable never initialized\n", "first_markdown_element": "contracts/agToken/AgTokenSideChainMultiBridge.sol#L194", "id": "1dac1fa9e8506b0283681c132cbe7bbdc5d0f8cc535a0ef111d28e18761609f2", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_bridge", "source_mapping": {"start": 14559, "length": 28, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [345], "starting_column": 9, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "addBridgeToken", "source_mapping": {"start": 14218, "length": 703, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "addBridgeToken(address,uint256,uint256,uint64,bool)"}}}}], "description": "TokenPolygonUpgradeable.addBridgeToken(address,uint256,uint256,uint64,bool)._bridge (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#345) is a local variable never initialized\n", "markdown": "[TokenPolygonUpgradeable.addBridgeToken(address,uint256,uint256,uint64,bool)._bridge](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L345) is a local variable never initialized\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L345", "id": "0c5598acfa9c6722f39bc7cae6be38064ff22ceddb7ad75b2cccea279bdc7575", "check": "uninitialized-local", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "estimateSendFee", "source_mapping": {"start": 6964, "length": 461, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "estimateSendFee(uint16,bytes,uint256,bool,bytes)"}}, {"type": "node", "name": "lzEndpoint.estimateFees(_dstChainId,address(this),payload,_useZro,_adapterParams)", "source_mapping": {"start": 7326, "length": 92, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [181], "starting_column": 9, "ending_column": 101}, "type_specific_fields": {"parent": {"type": "function", "name": "estimateSendFee", "source_mapping": {"start": 6964, "length": 461, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "estimateSendFee(uint16,bytes,uint256,bool,bytes)"}}}}], "description": "OFTCore.estimateSendFee(uint16,bytes,uint256,bool,bytes) (contracts/agToken/layerZero/utils/OFTCore.sol#172-182) ignores return value by lzEndpoint.estimateFees(_dstChainId,address(this),payload,_useZro,_adapterParams) (contracts/agToken/layerZero/utils/OFTCore.sol#181)\n", "markdown": "[OFTCore.estimateSendFee(uint16,bytes,uint256,bool,bytes)](contracts/agToken/layerZero/utils/OFTCore.sol#L172-L182) ignores return value by [lzEndpoint.estimateFees(_dstChainId,address(this),payload,_useZro,_adapterParams)](contracts/agToken/layerZero/utils/OFTCore.sol#L181)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/OFTCore.sol#L172-L182", "id": "76643a2834a83fc57405a2112887f954cb00f0e5406465bd0238486169d724e9", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "onFlashLoan", "source_mapping": {"start": 377, "length": 535, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockFlashLoanReceiver", "source_mapping": {"start": 198, "length": 716, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], "starting_column": 1, "ending_column": 2}}, "signature": "onFlashLoan(address,address,uint256,uint256,bytes)"}}, {"type": "node", "name": "IERC20(token).approve(msg.sender,amount + fee)", "source_mapping": {"start": 564, "length": 47, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [23], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "onFlashLoan", "source_mapping": {"start": 377, "length": 535, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockFlashLoanReceiver", "source_mapping": {"start": 198, "length": 716, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], "starting_column": 1, "ending_column": 2}}, "signature": "onFlashLoan(address,address,uint256,uint256,bytes)"}}}}], "description": "MockFlashLoanReceiver.onFlashLoan(address,address,uint256,uint256,bytes) (contracts/mock/MockFlashLoanReceiver.sol#16-29) ignores return value by IERC20(token).approve(msg.sender,amount + fee) (contracts/mock/MockFlashLoanReceiver.sol#23)\n", "markdown": "[MockFlashLoanReceiver.onFlashLoan(address,address,uint256,uint256,bytes)](contracts/mock/MockFlashLoanReceiver.sol#L16-L29) ignores return value by [IERC20(token).approve(msg.sender,amount + fee)](contracts/mock/MockFlashLoanReceiver.sol#L23)\n", "first_markdown_element": "contracts/mock/MockFlashLoanReceiver.sol#L16-L29", "id": "554c823aa38edffa99b451ee0fa6435f9c329500ebc42f96f78bf50bb87c10e7", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "onFlashLoan", "source_mapping": {"start": 377, "length": 535, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockFlashLoanReceiver", "source_mapping": {"start": 198, "length": 716, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], "starting_column": 1, "ending_column": 2}}, "signature": "onFlashLoan(address,address,uint256,uint256,bytes)"}}, {"type": "node", "name": "IERC3156FlashLender(msg.sender).flashLoan(IERC3156FlashBorrower(address(this)),token,amount,data)", "source_mapping": {"start": 722, "length": 100, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [26], "starting_column": 13, "ending_column": 113}, "type_specific_fields": {"parent": {"type": "function", "name": "onFlashLoan", "source_mapping": {"start": 377, "length": 535, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockFlashLoanReceiver", "source_mapping": {"start": 198, "length": 716, "filename_relative": "contracts/mock/MockFlashLoanReceiver.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockFlashLoanReceiver.sol", "filename_short": "contracts/mock/MockFlashLoanReceiver.sol", "is_dependency": false, "lines": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], "starting_column": 1, "ending_column": 2}}, "signature": "onFlashLoan(address,address,uint256,uint256,bytes)"}}}}], "description": "MockFlashLoanReceiver.onFlashLoan(address,address,uint256,uint256,bytes) (contracts/mock/MockFlashLoanReceiver.sol#16-29) ignores return value by IERC3156FlashLender(msg.sender).flashLoan(IERC3156FlashBorrower(address(this)),token,amount,data) (contracts/mock/MockFlashLoanReceiver.sol#26)\n", "markdown": "[MockFlashLoanReceiver.onFlashLoan(address,address,uint256,uint256,bytes)](contracts/mock/MockFlashLoanReceiver.sol#L16-L29) ignores return value by [IERC3156FlashLender(msg.sender).flashLoan(IERC3156FlashBorrower(address(this)),token,amount,data)](contracts/mock/MockFlashLoanReceiver.sol#L26)\n", "first_markdown_element": "contracts/mock/MockFlashLoanReceiver.sol#L16-L29", "id": "d544a66b86d5898dd791f41b9c0c49b31e7dd3f2f2cce24fad4a3862885fd842", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "accrueInterestToTreasuryVaultManager", "source_mapping": {"start": 2462, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "accrueInterestToTreasuryVaultManager(IVaultManager)"}}, {"type": "node", "name": "_vaultManager.accrueInterestToTreasury()", "source_mapping": {"start": 2583, "length": 47, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [83], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "accrueInterestToTreasuryVaultManager", "source_mapping": {"start": 2462, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "accrueInterestToTreasuryVaultManager(IVaultManager)"}}}}], "description": "MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager) (contracts/mock/MockTreasury.sol#82-84) ignores return value by _vaultManager.accrueInterestToTreasury() (contracts/mock/MockTreasury.sol#83)\n", "markdown": "[MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager)](contracts/mock/MockTreasury.sol#L82-L84) ignores return value by [_vaultManager.accrueInterestToTreasury()](contracts/mock/MockTreasury.sol#L83)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L82-L84", "id": "63348d5a5cbbafb93d02b52eb75538dbef133b07af04e8faeb73ee308669969f", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_name", "source_mapping": {"start": 1069, "length": 19, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [36], "starting_column": 9, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "function", "name": "initialize", "source_mapping": {"start": 1040, "length": 383, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "initialize(string,string,address,address)"}}}}, {"type": "variable", "name": "_name", "source_mapping": {"start": 1855, "length": 20, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [44], "starting_column": 5, "ending_column": 25}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20UpgradeableCustom", "source_mapping": {"start": 1573, "length": 11703, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}}}], "description": "TokenPolygonUpgradeable.initialize(string,string,address,address)._name (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#36) shadows:\n\t- ERC20UpgradeableCustom._name (contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#44) (state variable)\n", "markdown": "[TokenPolygonUpgradeable.initialize(string,string,address,address)._name](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L36) shadows:\n\t- [ERC20UpgradeableCustom._name](contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#L44) (state variable)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L36", "id": "c640925c9d1af05f2e1d0f4e4917e3fd966c62e1134a0228a0072a2b057eb921", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_symbol", "source_mapping": {"start": 1098, "length": 21, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [37], "starting_column": 9, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "function", "name": "initialize", "source_mapping": {"start": 1040, "length": 383, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "initialize(string,string,address,address)"}}}}, {"type": "variable", "name": "_symbol", "source_mapping": {"start": 1881, "length": 22, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [45], "starting_column": 5, "ending_column": 27}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20UpgradeableCustom", "source_mapping": {"start": 1573, "length": 11703, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}}}], "description": "TokenPolygonUpgradeable.initialize(string,string,address,address)._symbol (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#37) shadows:\n\t- ERC20UpgradeableCustom._symbol (contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#45) (state variable)\n", "markdown": "[TokenPolygonUpgradeable.initialize(string,string,address,address)._symbol](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L37) shadows:\n\t- [ERC20UpgradeableCustom._symbol](contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#L45) (state variable)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L37", "id": "6e5c37ae180ecefabc3c7461b1e5a6760f7473eef40d0358dae3662d68665128", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "treasury", "source_mapping": {"start": 1456, "length": 18, "filename_relative": "contracts/interfaces/IOracle.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IOracle.sol", "filename_short": "contracts/interfaces/IOracle.sol", "is_dependency": false, "lines": [30], "starting_column": 48, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "treasury", "source_mapping": {"start": 1413, "length": 63, "filename_relative": "contracts/interfaces/IOracle.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IOracle.sol", "filename_short": "contracts/interfaces/IOracle.sol", "is_dependency": false, "lines": [30], "starting_column": 5, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "contract", "name": "IOracle", "source_mapping": {"start": 371, "length": 1287, "filename_relative": "contracts/interfaces/IOracle.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IOracle.sol", "filename_short": "contracts/interfaces/IOracle.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], "starting_column": 1, "ending_column": 2}}, "signature": "treasury()"}}}}, {"type": "function", "name": "treasury", "source_mapping": {"start": 1413, "length": 63, "filename_relative": "contracts/interfaces/IOracle.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IOracle.sol", "filename_short": "contracts/interfaces/IOracle.sol", "is_dependency": false, "lines": [30], "starting_column": 5, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "contract", "name": "IOracle", "source_mapping": {"start": 371, "length": 1287, "filename_relative": "contracts/interfaces/IOracle.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IOracle.sol", "filename_short": "contracts/interfaces/IOracle.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], "starting_column": 1, "ending_column": 2}}, "signature": "treasury()"}}], "description": "IOracle.treasury().treasury (contracts/interfaces/IOracle.sol#30) shadows:\n\t- IOracle.treasury() (contracts/interfaces/IOracle.sol#30) (function)\n", "markdown": "[IOracle.treasury().treasury](contracts/interfaces/IOracle.sol#L30) shadows:\n\t- [IOracle.treasury()](contracts/interfaces/IOracle.sol#L30) (function)\n", "first_markdown_element": "contracts/interfaces/IOracle.sol#L30", "id": "81f17e3ee251fd7434d77d4e3e8be5afcfdcb2be8cb366b0cbb02014d2f0a503", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_precrime", "source_mapping": {"start": 11067, "length": 17, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [268], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setPrecrime", "source_mapping": {"start": 11046, "length": 109, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "setPrecrime(address)"}}}}, {"type": "node", "name": "precrime = _precrime", "source_mapping": {"start": 11128, "length": 20, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [269], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setPrecrime", "source_mapping": {"start": 11046, "length": 109, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "setPrecrime(address)"}}}}], "description": "NonblockingLzApp.setPrecrime(address)._precrime (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#268) lacks a zero-check on :\n\t\t- precrime = _precrime (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#269)\n", "markdown": "[NonblockingLzApp.setPrecrime(address)._precrime](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L268) lacks a zero-check on :\n\t\t- [precrime = _precrime](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L269)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L268", "id": "0cb72c9b6ccdefcfe5cdd649209358a3e6b6bb10a4b5044fe9d2ea34f198c118", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_treasury", "source_mapping": {"start": 3890, "length": 17, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [108], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 3869, "length": 140, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [108, 109, 110, 111], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgEUR", "source_mapping": {"start": 492, "length": 3519, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "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, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}, {"type": "node", "name": "treasury = _treasury", "source_mapping": {"start": 3941, "length": 20, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [109], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 3869, "length": 140, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [108, 109, 110, 111], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgEUR", "source_mapping": {"start": 492, "length": 3519, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "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, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "AgEUR.setTreasury(address)._treasury (contracts/agToken/AgEUR.sol#108) lacks a zero-check on :\n\t\t- treasury = _treasury (contracts/agToken/AgEUR.sol#109)\n", "markdown": "[AgEUR.setTreasury(address)._treasury](contracts/agToken/AgEUR.sol#L108) lacks a zero-check on :\n\t\t- [treasury = _treasury](contracts/agToken/AgEUR.sol#L109)\n", "first_markdown_element": "contracts/agToken/AgEUR.sol#L108", "id": "d0f8c8282fc714ee13ddd0ec7e25da28111149691798c1024e479553ea117b48", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_treasury", "source_mapping": {"start": 7698, "length": 17, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [147], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 7677, "length": 148, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [147, 148, 149, 150], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgToken", "source_mapping": {"start": 3994, "length": 3833, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}, {"type": "node", "name": "treasury = _treasury", "source_mapping": {"start": 7757, "length": 20, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [148], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 7677, "length": 148, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [147, 148, 149, 150], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgToken", "source_mapping": {"start": 3994, "length": 3833, "filename_relative": "contracts/agToken/AgToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgToken.sol", "filename_short": "contracts/agToken/AgToken.sol", "is_dependency": false, "lines": [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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "AgToken.setTreasury(address)._treasury (contracts/agToken/AgToken.sol#147) lacks a zero-check on :\n\t\t- treasury = _treasury (contracts/agToken/AgToken.sol#148)\n", "markdown": "[AgToken.setTreasury(address)._treasury](contracts/agToken/AgToken.sol#L147) lacks a zero-check on :\n\t\t- [treasury = _treasury](contracts/agToken/AgToken.sol#L148)\n", "first_markdown_element": "contracts/agToken/AgToken.sol#L147", "id": "da3b70eaacb709057acfdad5ef1345783fa7cb3493cf74cedc9b7529c76bf9b8", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_treasury", "source_mapping": {"start": 8866, "length": 17, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [222], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 8845, "length": 140, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [222, 223, 224, 225], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}, {"type": "node", "name": "treasury = _treasury", "source_mapping": {"start": 8917, "length": 20, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [223], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 8845, "length": 140, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [222, 223, 224, 225], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "TokenPolygonUpgradeable.setTreasury(address)._treasury (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#222) lacks a zero-check on :\n\t\t- treasury = _treasury (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#223)\n", "markdown": "[TokenPolygonUpgradeable.setTreasury(address)._treasury](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L222) lacks a zero-check on :\n\t\t- [treasury = _treasury](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L223)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L222", "id": "1a59a505651c8ee25988ac08359786692a3d350e262ac9240ba6885bc26055ae", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_treasury", "source_mapping": {"start": 1405, "length": 17, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [51], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 1384, "length": 84, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [51, 52, 53], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockToken", "source_mapping": {"start": 98, "length": 1372, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [7, 8, 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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}, {"type": "node", "name": "treasury = _treasury", "source_mapping": {"start": 1441, "length": 20, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 1384, "length": 84, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [51, 52, 53], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockToken", "source_mapping": {"start": 98, "length": 1372, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [7, 8, 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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "MockToken.setTreasury(address)._treasury (contracts/mock/MockToken.sol#51) lacks a zero-check on :\n\t\t- treasury = _treasury (contracts/mock/MockToken.sol#52)\n", "markdown": "[MockToken.setTreasury(address)._treasury](contracts/mock/MockToken.sol#L51) lacks a zero-check on :\n\t\t- [treasury = _treasury](contracts/mock/MockToken.sol#L52)\n", "first_markdown_element": "contracts/mock/MockToken.sol#L51", "id": "dcd69b6937324b11a44af8019c42ae469fbdd9b1f1e4a050d92f0bf3a39cb82c", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_treasury", "source_mapping": {"start": 1623, "length": 17, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [57], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 1602, "length": 84, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [57, 58, 59], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}, {"type": "node", "name": "treasury = _treasury", "source_mapping": {"start": 1659, "length": 20, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [58], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 1602, "length": 84, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [57, 58, 59], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "MockTokenPermit.setTreasury(address)._treasury (contracts/mock/MockTokenPermit.sol#57) lacks a zero-check on :\n\t\t- treasury = _treasury (contracts/mock/MockTokenPermit.sol#58)\n", "markdown": "[MockTokenPermit.setTreasury(address)._treasury](contracts/mock/MockTokenPermit.sol#L57) lacks a zero-check on :\n\t\t- [treasury = _treasury](contracts/mock/MockTokenPermit.sol#L58)\n", "first_markdown_element": "contracts/mock/MockTokenPermit.sol#L57", "id": "1580cb5174391f76176d2d5c7ec2bcb98b47886faca19c446ef9c430adb0a1a3", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_governor", "source_mapping": {"start": 519, "length": 17, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [20], "starting_column": 9, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "node", "name": "governor = _governor", "source_mapping": {"start": 712, "length": 20, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [27], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "MockTreasury.constructor(IAgToken,address,address,address,address,address)._governor (contracts/mock/MockTreasury.sol#20) lacks a zero-check on :\n\t\t- governor = _governor (contracts/mock/MockTreasury.sol#27)\n", "markdown": "[MockTreasury.constructor(IAgToken,address,address,address,address,address)._governor](contracts/mock/MockTreasury.sol#L20) lacks a zero-check on :\n\t\t- [governor = _governor](contracts/mock/MockTreasury.sol#L27)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L20", "id": "63063307c23dc49d0bcd911e08024afeaa7aed781ea6b8ad7a0bcd7b62b71876", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_guardian", "source_mapping": {"start": 546, "length": 17, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [21], "starting_column": 9, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "node", "name": "guardian = _guardian", "source_mapping": {"start": 742, "length": 20, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [28], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "MockTreasury.constructor(IAgToken,address,address,address,address,address)._guardian (contracts/mock/MockTreasury.sol#21) lacks a zero-check on :\n\t\t- guardian = _guardian (contracts/mock/MockTreasury.sol#28)\n", "markdown": "[MockTreasury.constructor(IAgToken,address,address,address,address,address)._guardian](contracts/mock/MockTreasury.sol#L21) lacks a zero-check on :\n\t\t- [guardian = _guardian](contracts/mock/MockTreasury.sol#L28)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L21", "id": "81e1ad68a18098c92decb1b2257b5371a178e3906b7697f6fd7854d2e4481d5d", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager1", "source_mapping": {"start": 573, "length": 22, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [22], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "node", "name": "vaultManager1 = _vaultManager1", "source_mapping": {"start": 772, "length": 30, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [29], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager1 (contracts/mock/MockTreasury.sol#22) lacks a zero-check on :\n\t\t- vaultManager1 = _vaultManager1 (contracts/mock/MockTreasury.sol#29)\n", "markdown": "[MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager1](contracts/mock/MockTreasury.sol#L22) lacks a zero-check on :\n\t\t- [vaultManager1 = _vaultManager1](contracts/mock/MockTreasury.sol#L29)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L22", "id": "8026d1fb0bf23fc41a4576b764b21496aed4809b069a638aa64c6d45a6ebdf20", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager2", "source_mapping": {"start": 605, "length": 22, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [23], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "node", "name": "vaultManager2 = _vaultManager2", "source_mapping": {"start": 812, "length": 30, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [30], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager2 (contracts/mock/MockTreasury.sol#23) lacks a zero-check on :\n\t\t- vaultManager2 = _vaultManager2 (contracts/mock/MockTreasury.sol#30)\n", "markdown": "[MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager2](contracts/mock/MockTreasury.sol#L23) lacks a zero-check on :\n\t\t- [vaultManager2 = _vaultManager2](contracts/mock/MockTreasury.sol#L30)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L23", "id": "497b3b8cb247ff701623a92af701d2947113a7b62a4fb2010308cbd57338d727", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_flashLoanModule", "source_mapping": {"start": 637, "length": 24, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [24], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "node", "name": "flashLoanModule = _flashLoanModule", "source_mapping": {"start": 852, "length": 34, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [31], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "MockTreasury.constructor(IAgToken,address,address,address,address,address)._flashLoanModule (contracts/mock/MockTreasury.sol#24) lacks a zero-check on :\n\t\t- flashLoanModule = _flashLoanModule (contracts/mock/MockTreasury.sol#31)\n", "markdown": "[MockTreasury.constructor(IAgToken,address,address,address,address,address)._flashLoanModule](contracts/mock/MockTreasury.sol#L24) lacks a zero-check on :\n\t\t- [flashLoanModule = _flashLoanModule](contracts/mock/MockTreasury.sol#L31)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L24", "id": "9fdc8152337d96a71652d4525b80300c07a63c32bfb48490d5a675eb411bdfcb", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_flashLoanModule", "source_mapping": {"start": 1484, "length": 24, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [50], "starting_column": 33, "ending_column": 57}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 1456, "length": 123, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [50, 51, 52], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}}, {"type": "node", "name": "flashLoanModule = _flashLoanModule", "source_mapping": {"start": 1538, "length": 34, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [51], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 1456, "length": 123, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [50, 51, 52], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}}], "description": "MockTreasury.setFlashLoanModule(address)._flashLoanModule (contracts/mock/MockTreasury.sol#50) lacks a zero-check on :\n\t\t- flashLoanModule = _flashLoanModule (contracts/mock/MockTreasury.sol#51)\n", "markdown": "[MockTreasury.setFlashLoanModule(address)._flashLoanModule](contracts/mock/MockTreasury.sol#L50) lacks a zero-check on :\n\t\t- [flashLoanModule = _flashLoanModule](contracts/mock/MockTreasury.sol#L51)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L50", "id": "108cd6a26996705bf07388fd3fc67d247c5b0696a3e0853f8f89c35fadc629f7", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_governor", "source_mapping": {"start": 1606, "length": 17, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [54], "starting_column": 26, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setGovernor", "source_mapping": {"start": 1585, "length": 86, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setGovernor(address)"}}}}, {"type": "node", "name": "governor = _governor", "source_mapping": {"start": 1644, "length": 20, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [55], "starting_column": 9, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "function", "name": "setGovernor", "source_mapping": {"start": 1585, "length": 86, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setGovernor(address)"}}}}], "description": "MockTreasury.setGovernor(address)._governor (contracts/mock/MockTreasury.sol#54) lacks a zero-check on :\n\t\t- governor = _governor (contracts/mock/MockTreasury.sol#55)\n", "markdown": "[MockTreasury.setGovernor(address)._governor](contracts/mock/MockTreasury.sol#L54) lacks a zero-check on :\n\t\t- [governor = _governor](contracts/mock/MockTreasury.sol#L55)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L54", "id": "d1c526bf4edf10a6c57fb6af80312362836a7156c7343958864ff475ef6a2f6b", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1702, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58], "starting_column": 30, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager", "source_mapping": {"start": 1677, "length": 103, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager(address)"}}}}, {"type": "node", "name": "vaultManager1 = _vaultManager", "source_mapping": {"start": 1744, "length": 29, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager", "source_mapping": {"start": 1677, "length": 103, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager(address)"}}}}], "description": "MockTreasury.setVaultManager(address)._vaultManager (contracts/mock/MockTreasury.sol#58) lacks a zero-check on :\n\t\t- vaultManager1 = _vaultManager (contracts/mock/MockTreasury.sol#59)\n", "markdown": "[MockTreasury.setVaultManager(address)._vaultManager](contracts/mock/MockTreasury.sol#L58) lacks a zero-check on :\n\t\t- [vaultManager1 = _vaultManager](contracts/mock/MockTreasury.sol#L59)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L58", "id": "40345f6cb01f3791888c49dcf6cb5760108d73d5eb6249726e688a6fe1fb69b9", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1812, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62], "starting_column": 31, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager2", "source_mapping": {"start": 1786, "length": 104, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager2(address)"}}}}, {"type": "node", "name": "vaultManager2 = _vaultManager", "source_mapping": {"start": 1854, "length": 29, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [63], "starting_column": 9, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager2", "source_mapping": {"start": 1786, "length": 104, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager2(address)"}}}}], "description": "MockTreasury.setVaultManager2(address)._vaultManager (contracts/mock/MockTreasury.sol#62) lacks a zero-check on :\n\t\t- vaultManager2 = _vaultManager (contracts/mock/MockTreasury.sol#63)\n", "markdown": "[MockTreasury.setVaultManager2(address)._vaultManager](contracts/mock/MockTreasury.sol#L62) lacks a zero-check on :\n\t\t- [vaultManager2 = _vaultManager](contracts/mock/MockTreasury.sol#L63)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L62", "id": "6d178dc10512d8e8cea7e11a1f21c3903b0d423fccae648ccd1276f19cdc1ae2", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}, {"type": "node", "name": "ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)", "source_mapping": {"start": 9548, "length": 91, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [164], "starting_column": 13, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}}], "description": "CoreBorrow.setFlashLoanModule(address) (contracts/coreBorrow/CoreBorrow.sol#158-168) has external calls inside a loop: ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule) (contracts/coreBorrow/CoreBorrow.sol#164)\n", "markdown": "[CoreBorrow.setFlashLoanModule(address)](contracts/coreBorrow/CoreBorrow.sol#L158-L168) has external calls inside a loop: [ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)](contracts/coreBorrow/CoreBorrow.sol#L164)\n", "first_markdown_element": "contracts/coreBorrow/CoreBorrow.sol#L158-L168", "id": "20cafabc5dce14227097f618b7995704fea93b34e40bd07137953690fb414028", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setCore", "source_mapping": {"start": 10193, "length": 552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setCore(ICoreBorrow)"}}, {"type": "node", "name": "success = _core.isGovernor(getRoleMember(GOVERNOR_ROLE,i))", "source_mapping": {"start": 10399, "length": 59, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [180], "starting_column": 13, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "setCore", "source_mapping": {"start": 10193, "length": 552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setCore(ICoreBorrow)"}}}}], "description": "CoreBorrow.setCore(ICoreBorrow) (contracts/coreBorrow/CoreBorrow.sol#176-187) has external calls inside a loop: success = _core.isGovernor(getRoleMember(GOVERNOR_ROLE,i)) (contracts/coreBorrow/CoreBorrow.sol#180)\n", "markdown": "[CoreBorrow.setCore(ICoreBorrow)](contracts/coreBorrow/CoreBorrow.sol#L176-L187) has external calls inside a loop: [success = _core.isGovernor(getRoleMember(GOVERNOR_ROLE,i))](contracts/coreBorrow/CoreBorrow.sol#L180)\n", "first_markdown_element": "contracts/coreBorrow/CoreBorrow.sol#L176-L187", "id": "f1fccab2e9b56b70d215bc39c452105c9bc85dcd75ea0921bb906da0d7951607", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setTreasury", "source_mapping": {"start": 19994, "length": 677, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}, {"type": "node", "name": "IVaultManager(vaultManagerList[i]).setTreasury(_treasury)", "source_mapping": {"start": 20486, "length": 57, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [364], "starting_column": 13, "ending_column": 70}, "type_specific_fields": {"parent": {"type": "function", "name": "setTreasury", "source_mapping": {"start": 19994, "length": 677, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "setTreasury(address)"}}}}], "description": "Treasury.setTreasury(address) (contracts/treasury/Treasury.sol#357-368) has external calls inside a loop: IVaultManager(vaultManagerList[i]).setTreasury(_treasury) (contracts/treasury/Treasury.sol#364)\n", "markdown": "[Treasury.setTreasury(address)](contracts/treasury/Treasury.sol#L357-L368) has external calls inside a loop: [IVaultManager(vaultManagerList[i]).setTreasury(_treasury)](contracts/treasury/Treasury.sol#L364)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L357-L368", "id": "a5c74d515c8edbcccf38d1808025b953ff00be9cab3d9cf5ed8b1e0dd044c5b7", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}, {"type": "node", "name": "this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload)", "source_mapping": {"start": 6535, "length": 322, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [155, 156, 157, 158, 159, 160, 161], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload)", "source_mapping": {"start": 6535, "length": 322, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [155, 156, 157, 158, 159, 160, 161], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(bytes)(_payload)", "source_mapping": {"start": 6700, "length": 70, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [159], "starting_column": 13, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "failedMessages"}}], "description": "Reentrancy in NonblockingLzApp._blockingLzReceive(uint16,bytes,uint64,bytes) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#148-162):\n\tExternal calls:\n\t- this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#155-161)\n\tState variables written after the call(s):\n\t- failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(bytes)(_payload) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#159)\n", "markdown": "Reentrancy in [NonblockingLzApp._blockingLzReceive(uint16,bytes,uint64,bytes)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L148-L162):\n\tExternal calls:\n\t- [this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L155-L161)\n\tState variables written after the call(s):\n\t- [failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(bytes)(_payload)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L159)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L148-L162", "id": "c2614c6c4558eee27d9c69e5c200de086d52bde5c78a209a37094df6b524edcd", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "badDebt = badDebtValue", "source_mapping": {"start": 15285, "length": 22, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [266], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "badDebt"}}, {"type": "node", "name": "surplusBuffer = surplusBufferValue", "source_mapping": {"start": 15241, "length": 34, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "surplusBuffer"}}], "description": "Reentrancy in Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270):\n\tExternal calls:\n\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tState variables written after the call(s):\n\t- badDebt = badDebtValue (contracts/treasury/Treasury.sol#266)\n\t- surplusBuffer = surplusBufferValue (contracts/treasury/Treasury.sol#265)\n", "markdown": "Reentrancy in [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270):\n\tExternal calls:\n\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tState variables written after the call(s):\n\t- [badDebt = badDebtValue](contracts/treasury/Treasury.sol#L266)\n\t- [surplusBuffer = surplusBufferValue](contracts/treasury/Treasury.sol#L265)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L248-L270", "id": "b9f5b66c8f19e955069ec61357a3367f899ca7a22c309e46d05396e9b4bd9e04", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}, {"type": "node", "name": "ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)", "source_mapping": {"start": 9548, "length": 91, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [164], "starting_column": 13, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)", "source_mapping": {"start": 9548, "length": 91, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [164], "starting_column": 13, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "flashLoanModule = _flashLoanModule", "source_mapping": {"start": 9659, "length": 34, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [166], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "flashLoanModule"}}], "description": "Reentrancy in CoreBorrow.setFlashLoanModule(address) (contracts/coreBorrow/CoreBorrow.sol#158-168):\n\tExternal calls:\n\t- ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule) (contracts/coreBorrow/CoreBorrow.sol#164)\n\tState variables written after the call(s):\n\t- flashLoanModule = _flashLoanModule (contracts/coreBorrow/CoreBorrow.sol#166)\n", "markdown": "Reentrancy in [CoreBorrow.setFlashLoanModule(address)](contracts/coreBorrow/CoreBorrow.sol#L158-L168):\n\tExternal calls:\n\t- [ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)](contracts/coreBorrow/CoreBorrow.sol#L164)\n\tState variables written after the call(s):\n\t- [flashLoanModule = _flashLoanModule](contracts/coreBorrow/CoreBorrow.sol#L166)\n", "first_markdown_element": "contracts/coreBorrow/CoreBorrow.sol#L158-L168", "id": "19a120334385870867ce4279a17bf798ceed64bc6deb4f96edcf4112f0cba8ec", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}, {"type": "node", "name": "IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount)", "source_mapping": {"start": 11972, "length": 71, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [292], "starting_column": 9, "ending_column": 80}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount)", "source_mapping": {"start": 11972, "length": 71, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [292], "starting_column": 9, "ending_column": 80}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_mint(to,canonicalOut)", "source_mapping": {"start": 12250, "length": 23, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [298], "starting_column": 9, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_balances"}}, {"type": "node", "name": "_balances[account] += amount", "source_mapping": {"start": 9041, "length": 28, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [259], "starting_column": 9, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_mint", "source_mapping": {"start": 8798, "length": 389, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20UpgradeableCustom", "source_mapping": {"start": 1573, "length": 11703, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_mint(address,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_balances"}}, {"type": "node", "name": "_mint(to,canonicalOut)", "source_mapping": {"start": 12250, "length": 23, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [298], "starting_column": 9, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_totalSupply"}}, {"type": "node", "name": "_totalSupply += amount", "source_mapping": {"start": 9009, "length": 22, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [258], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_mint", "source_mapping": {"start": 8798, "length": 389, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20UpgradeableCustom", "source_mapping": {"start": 1573, "length": 11703, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_mint(address,uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_totalSupply"}}], "description": "Reentrancy in TokenPolygonUpgradeable.swapIn(address,uint256,address) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#266-300):\n\tExternal calls:\n\t- IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#292)\n\tState variables written after the call(s):\n\t- _mint(to,canonicalOut) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#298)\n\t\t- _balances[account] += amount (contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#259)\n\t- _mint(to,canonicalOut) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#298)\n\t\t- _totalSupply += amount (contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#258)\n", "markdown": "Reentrancy in [TokenPolygonUpgradeable.swapIn(address,uint256,address)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L266-L300):\n\tExternal calls:\n\t- [IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L292)\n\tState variables written after the call(s):\n\t- [_mint(to,canonicalOut)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L298)\n\t\t- [_balances[account] += amount](contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#L259)\n\t- [_mint(to,canonicalOut)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L298)\n\t\t- [_totalSupply += amount](contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#L258)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L266-L300", "id": "444a09f306554c46f2bc7d8ca5866f00590b54a208c0db9bc444d6be60877e5a", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}, {"type": "node", "name": "stablecoin.burnSelf(amount,address(this))", "source_mapping": {"start": 11339, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [200], "starting_column": 9, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(amount,address(this))", "source_mapping": {"start": 11339, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [200], "starting_column": 9, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "badDebt = badDebtValue", "source_mapping": {"start": 11432, "length": 22, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [202], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "badDebt"}}], "description": "Reentrancy in Treasury.updateBadDebt(uint256) (contracts/treasury/Treasury.sol#199-204):\n\tExternal calls:\n\t- stablecoin.burnSelf(amount,address(this)) (contracts/treasury/Treasury.sol#200)\n\tState variables written after the call(s):\n\t- badDebt = badDebtValue (contracts/treasury/Treasury.sol#202)\n", "markdown": "Reentrancy in [Treasury.updateBadDebt(uint256)](contracts/treasury/Treasury.sol#L199-L204):\n\tExternal calls:\n\t- [stablecoin.burnSelf(amount,address(this))](contracts/treasury/Treasury.sol#L200)\n\tState variables written after the call(s):\n\t- [badDebt = badDebtValue](contracts/treasury/Treasury.sol#L202)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L199-L204", "id": "5dcd166183973800db2d3349673a31162ea0d4806b78bee95a4968901e099504", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}, {"type": "node", "name": "this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload)", "source_mapping": {"start": 6535, "length": 322, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [155, 156, 157, 158, 159, 160, 161], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "MessageFailed(_srcChainId,_srcAddress,_nonce,_payload)", "source_mapping": {"start": 6784, "length": 62, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [160], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_blockingLzReceive", "source_mapping": {"start": 6323, "length": 540, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_blockingLzReceive(uint16,bytes,uint64,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in NonblockingLzApp._blockingLzReceive(uint16,bytes,uint64,bytes) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#148-162):\n\tExternal calls:\n\t- this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#155-161)\n\tEvent emitted after the call(s):\n\t- MessageFailed(_srcChainId,_srcAddress,_nonce,_payload) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#160)\n", "markdown": "Reentrancy in [NonblockingLzApp._blockingLzReceive(uint16,bytes,uint64,bytes)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L148-L162):\n\tExternal calls:\n\t- [this.nonblockingLzReceive(_srcChainId,_srcAddress,_nonce,_payload)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L155-L161)\n\tEvent emitted after the call(s):\n\t- [MessageFailed(_srcChainId,_srcAddress,_nonce,_payload)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L160)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L148-L162", "id": "5fc30bb48a82d0f76be8cea7a27e7335037719e1ef27af38e760cbc8edcccde9", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList)", "source_mapping": {"start": 11777, "length": 76, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [210], "starting_column": 9, "ending_column": 85}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()", "source_mapping": {"start": 13096, "length": 85, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [232], "starting_column": 13, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 11995, "length": 74, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [213], "starting_column": 13, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "BadDebtUpdated(badDebtValue)", "source_mapping": {"start": 15372, "length": 33, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [268], "starting_column": 9, "ending_column": 42}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "SurplusBufferUpdated(surplusBufferValue)", "source_mapping": {"start": 15317, "length": 45, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [267], "starting_column": 9, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)", "source_mapping": {"start": 12079, "length": 95, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [214], "starting_column": 9, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury._fetchSurplusFromAll() (contracts/treasury/Treasury.sol#209-215):\n\tExternal calls:\n\t- (surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList) (contracts/treasury/Treasury.sol#210)\n\t\t- (newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury() (contracts/treasury/Treasury.sol#232)\n\t- surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#213)\n\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tEvent emitted after the call(s):\n\t- BadDebtUpdated(badDebtValue) (contracts/treasury/Treasury.sol#268)\n\t\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n\t- SurplusBufferUpdated(surplusBufferValue) (contracts/treasury/Treasury.sol#267)\n\t\t- (surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue) (contracts/treasury/Treasury.sol#214)\n", "markdown": "Reentrancy in [Treasury._fetchSurplusFromAll()](contracts/treasury/Treasury.sol#L209-L215):\n\tExternal calls:\n\t- [(surplusBufferValue,badDebtValue) = _fetchSurplusFromList(vaultManagerList)](contracts/treasury/Treasury.sol#L210)\n\t\t- [(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()](contracts/treasury/Treasury.sol#L232)\n\t- [surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L213)\n\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tEvent emitted after the call(s):\n\t- [BadDebtUpdated(badDebtValue)](contracts/treasury/Treasury.sol#L268)\n\t\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n\t- [SurplusBufferUpdated(surplusBufferValue)](contracts/treasury/Treasury.sol#L267)\n\t\t- [(surplusBufferValue,badDebtValue) = _updateSurplusAndBadDebt(surplusBufferValue,badDebtValue)](contracts/treasury/Treasury.sol#L214)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L209-L215", "id": "444167fe67fb0768efc1f878c1cd8f5dc62e0234a127f1aa808b9548f81d66ae", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_send", "source_mapping": {"start": 3715, "length": 551, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_send(uint16,bytes,uint256,address,address,bytes)"}}, {"type": "node", "name": "_lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 4018, "length": 81, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [100], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "_send", "source_mapping": {"start": 3715, "length": 551, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_send(uint16,bytes,uint256,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 7729, "length": 207, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_lzSend", "source_mapping": {"start": 7337, "length": 606, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_lzSend(uint16,bytes,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)", "source_mapping": {"start": 4190, "length": 69, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [103], "starting_column": 9, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "_send", "source_mapping": {"start": 3715, "length": 551, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_send(uint16,bytes,uint256,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in OFTCore._send(uint16,bytes,uint256,address,address,bytes) (contracts/agToken/layerZero/utils/OFTCore.sol#91-104):\n\tExternal calls:\n\t- _lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/OFTCore.sol#100)\n\t\t- lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#180-187)\n\tEvent emitted after the call(s):\n\t- SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce) (contracts/agToken/layerZero/utils/OFTCore.sol#103)\n", "markdown": "Reentrancy in [OFTCore._send(uint16,bytes,uint256,address,address,bytes)](contracts/agToken/layerZero/utils/OFTCore.sol#L91-L104):\n\tExternal calls:\n\t- [_lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/OFTCore.sol#L100)\n\t\t- [lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L180-L187)\n\tEvent emitted after the call(s):\n\t- [SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)](contracts/agToken/layerZero/utils/OFTCore.sol#L103)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/OFTCore.sol#L91-L104", "id": "0058642e2429ed983b154ea9738e6e2d9bb3547dc639f0ff0f283f6afd00563a", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "BadDebtUpdated(badDebtValue)", "source_mapping": {"start": 15372, "length": 33, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [268], "starting_column": 9, "ending_column": 42}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "SurplusBufferUpdated(surplusBufferValue)", "source_mapping": {"start": 15317, "length": 45, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [267], "starting_column": 9, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury._updateSurplusAndBadDebt(uint256,uint256) (contracts/treasury/Treasury.sol#248-270):\n\tExternal calls:\n\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tEvent emitted after the call(s):\n\t- BadDebtUpdated(badDebtValue) (contracts/treasury/Treasury.sol#268)\n\t- SurplusBufferUpdated(surplusBufferValue) (contracts/treasury/Treasury.sol#267)\n", "markdown": "Reentrancy in [Treasury._updateSurplusAndBadDebt(uint256,uint256)](contracts/treasury/Treasury.sol#L248-L270):\n\tExternal calls:\n\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tEvent emitted after the call(s):\n\t- [BadDebtUpdated(badDebtValue)](contracts/treasury/Treasury.sol#L268)\n\t- [SurplusBufferUpdated(surplusBufferValue)](contracts/treasury/Treasury.sol#L267)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L248-L270", "id": "b40be9dc438df1dfba63aaf6a05a6cb57e3c7398a44efc179f97651447003867", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}, {"type": "node", "name": "surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 9242, "length": 97, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [166], "starting_column": 9, "ending_column": 106}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_updateSurplusAndBadDebt(surplusBufferValue,badDebt)", "source_mapping": {"start": 9349, "length": 60, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "BadDebtUpdated(badDebtValue)", "source_mapping": {"start": 15372, "length": 33, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [268], "starting_column": 9, "ending_column": 42}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "_updateSurplusAndBadDebt(surplusBufferValue,badDebt)", "source_mapping": {"start": 9349, "length": 60, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "SurplusBufferUpdated(surplusBufferValue)", "source_mapping": {"start": 15317, "length": 45, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [267], "starting_column": 9, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "_updateSurplusAndBadDebt(surplusBufferValue,badDebt)", "source_mapping": {"start": 9349, "length": 60, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "fetchSurplusFromFlashLoan", "source_mapping": {"start": 9159, "length": 257, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "fetchSurplusFromFlashLoan()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury.fetchSurplusFromFlashLoan() (contracts/treasury/Treasury.sol#165-168):\n\tExternal calls:\n\t- surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#166)\n\t- _updateSurplusAndBadDebt(surplusBufferValue,badDebt) (contracts/treasury/Treasury.sol#167)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\tEvent emitted after the call(s):\n\t- BadDebtUpdated(badDebtValue) (contracts/treasury/Treasury.sol#268)\n\t\t- _updateSurplusAndBadDebt(surplusBufferValue,badDebt) (contracts/treasury/Treasury.sol#167)\n\t- SurplusBufferUpdated(surplusBufferValue) (contracts/treasury/Treasury.sol#267)\n\t\t- _updateSurplusAndBadDebt(surplusBufferValue,badDebt) (contracts/treasury/Treasury.sol#167)\n", "markdown": "Reentrancy in [Treasury.fetchSurplusFromFlashLoan()](contracts/treasury/Treasury.sol#L165-L168):\n\tExternal calls:\n\t- [surplusBufferValue = surplusBuffer + flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L166)\n\t- [_updateSurplusAndBadDebt(surplusBufferValue,badDebt)](contracts/treasury/Treasury.sol#L167)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\tEvent emitted after the call(s):\n\t- [BadDebtUpdated(badDebtValue)](contracts/treasury/Treasury.sol#L268)\n\t\t- [_updateSurplusAndBadDebt(surplusBufferValue,badDebt)](contracts/treasury/Treasury.sol#L167)\n\t- [SurplusBufferUpdated(surplusBufferValue)](contracts/treasury/Treasury.sol#L267)\n\t\t- [_updateSurplusAndBadDebt(surplusBufferValue,badDebt)](contracts/treasury/Treasury.sol#L167)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L165-L168", "id": "4925f099e80b9531930daf0bcb40ee419d02c2f8a0e1fe9259779c457cb3ebf1", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}, {"type": "node", "name": "(surplusBufferValue,None) = _fetchSurplusFromAll()", "source_mapping": {"start": 10255, "length": 55, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [183], "starting_column": 9, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 11995, "length": 74, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [213], "starting_column": 13, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()", "source_mapping": {"start": 13096, "length": 85, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [232], "starting_column": 13, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "SurplusBufferUpdated(0)", "source_mapping": {"start": 10347, "length": 28, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [185], "starting_column": 9, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "pushSurplus", "source_mapping": {"start": 10035, "length": 500, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "pushSurplus()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury.pushSurplus() (contracts/treasury/Treasury.sol#178-188):\n\tExternal calls:\n\t- (surplusBufferValue,None) = _fetchSurplusFromAll() (contracts/treasury/Treasury.sol#183)\n\t\t- surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#213)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\t\t- (newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury() (contracts/treasury/Treasury.sol#232)\n\tEvent emitted after the call(s):\n\t- SurplusBufferUpdated(0) (contracts/treasury/Treasury.sol#185)\n", "markdown": "Reentrancy in [Treasury.pushSurplus()](contracts/treasury/Treasury.sol#L178-L188):\n\tExternal calls:\n\t- [(surplusBufferValue,None) = _fetchSurplusFromAll()](contracts/treasury/Treasury.sol#L183)\n\t\t- [surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L213)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\t\t- [(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()](contracts/treasury/Treasury.sol#L232)\n\tEvent emitted after the call(s):\n\t- [SurplusBufferUpdated(0)](contracts/treasury/Treasury.sol#L185)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L178-L188", "id": "17bd2470df7b7317b77d3118c3d96aace01370cf18ac9e045167932fb19a7619", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverERC20", "source_mapping": {"start": 10379, "length": 233, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenSideChainMultiBridge", "source_mapping": {"start": 461, "length": 12193, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}, {"type": "node", "name": "IERC20(tokenAddress).safeTransfer(to,amountToRecover)", "source_mapping": {"start": 10492, "length": 54, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [227], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 10379, "length": 233, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenSideChainMultiBridge", "source_mapping": {"start": 461, "length": 12193, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "Recovered(tokenAddress,to,amountToRecover)", "source_mapping": {"start": 10556, "length": 49, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [228], "starting_column": 9, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 10379, "length": 233, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [226, 227, 228, 229], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenSideChainMultiBridge", "source_mapping": {"start": 461, "length": 12193, "filename_relative": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgTokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/AgTokenSideChainMultiBridge.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in AgTokenSideChainMultiBridge.recoverERC20(address,address,uint256) (contracts/agToken/AgTokenSideChainMultiBridge.sol#226-229):\n\tExternal calls:\n\t- IERC20(tokenAddress).safeTransfer(to,amountToRecover) (contracts/agToken/AgTokenSideChainMultiBridge.sol#227)\n\tEvent emitted after the call(s):\n\t- Recovered(tokenAddress,to,amountToRecover) (contracts/agToken/AgTokenSideChainMultiBridge.sol#228)\n", "markdown": "Reentrancy in [AgTokenSideChainMultiBridge.recoverERC20(address,address,uint256)](contracts/agToken/AgTokenSideChainMultiBridge.sol#L226-L229):\n\tExternal calls:\n\t- [IERC20(tokenAddress).safeTransfer(to,amountToRecover)](contracts/agToken/AgTokenSideChainMultiBridge.sol#L227)\n\tEvent emitted after the call(s):\n\t- [Recovered(tokenAddress,to,amountToRecover)](contracts/agToken/AgTokenSideChainMultiBridge.sol#L228)\n", "first_markdown_element": "contracts/agToken/AgTokenSideChainMultiBridge.sol#L226-L229", "id": "73442f4fb3f741dce82a0ad8a76537753de203e190639e9b389d1260f464a9f3", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverERC20", "source_mapping": {"start": 11638, "length": 233, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [258, 259, 260, 261], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenSideChainMultiBridge", "source_mapping": {"start": 661, "length": 14294, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}, {"type": "node", "name": "IERC20(tokenAddress).safeTransfer(to,amountToRecover)", "source_mapping": {"start": 11751, "length": 54, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [259], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 11638, "length": 233, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [258, 259, 260, 261], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenSideChainMultiBridge", "source_mapping": {"start": 661, "length": 14294, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "Recovered(tokenAddress,to,amountToRecover)", "source_mapping": {"start": 11815, "length": 49, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [260], "starting_column": 9, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 11638, "length": 233, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [258, 259, 260, 261], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenSideChainMultiBridge", "source_mapping": {"start": 661, "length": 14294, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in TokenSideChainMultiBridge.recoverERC20(address,address,uint256) (contracts/agToken/TokenSideChainMultiBridge.sol#258-261):\n\tExternal calls:\n\t- IERC20(tokenAddress).safeTransfer(to,amountToRecover) (contracts/agToken/TokenSideChainMultiBridge.sol#259)\n\tEvent emitted after the call(s):\n\t- Recovered(tokenAddress,to,amountToRecover) (contracts/agToken/TokenSideChainMultiBridge.sol#260)\n", "markdown": "Reentrancy in [TokenSideChainMultiBridge.recoverERC20(address,address,uint256)](contracts/agToken/TokenSideChainMultiBridge.sol#L258-L261):\n\tExternal calls:\n\t- [IERC20(tokenAddress).safeTransfer(to,amountToRecover)](contracts/agToken/TokenSideChainMultiBridge.sol#L259)\n\tEvent emitted after the call(s):\n\t- [Recovered(tokenAddress,to,amountToRecover)](contracts/agToken/TokenSideChainMultiBridge.sol#L260)\n", "first_markdown_element": "contracts/agToken/TokenSideChainMultiBridge.sol#L258-L261", "id": "4b0607c1b8c54ddbaec3ffc985453c0c3c74a6ac8e6844028b01aaaddc8aee70", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverERC20", "source_mapping": {"start": 15963, "length": 233, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [377, 378, 379, 380], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}, {"type": "node", "name": "IERC20(tokenAddress).safeTransfer(to,amountToRecover)", "source_mapping": {"start": 16076, "length": 54, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [378], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 15963, "length": 233, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [377, 378, 379, 380], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "Recovered(tokenAddress,to,amountToRecover)", "source_mapping": {"start": 16140, "length": 49, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [379], "starting_column": 9, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 15963, "length": 233, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [377, 378, 379, 380], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in TokenPolygonUpgradeable.recoverERC20(address,address,uint256) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#377-380):\n\tExternal calls:\n\t- IERC20(tokenAddress).safeTransfer(to,amountToRecover) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#378)\n\tEvent emitted after the call(s):\n\t- Recovered(tokenAddress,to,amountToRecover) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#379)\n", "markdown": "Reentrancy in [TokenPolygonUpgradeable.recoverERC20(address,address,uint256)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L377-L380):\n\tExternal calls:\n\t- [IERC20(tokenAddress).safeTransfer(to,amountToRecover)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L378)\n\tEvent emitted after the call(s):\n\t- [Recovered(tokenAddress,to,amountToRecover)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L379)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L377-L380", "id": "4b27c5e82e0471245dd99e12f43dd824d485221ec31927496294b10c646bc8cc", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}, {"type": "node", "name": "_fetchSurplusFromAll()", "source_mapping": {"start": 19121, "length": 22, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [341], "starting_column": 13, "ending_column": 35}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)", "source_mapping": {"start": 11995, "length": 74, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [213], "starting_column": 13, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromAll", "source_mapping": {"start": 11667, "length": 514, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [209, 210, 211, 212, 213, 214, 215], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromAll()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "stablecoin.burnSelf(toBurn,address(this))", "source_mapping": {"start": 14743, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [258], "starting_column": 13, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateSurplusAndBadDebt", "source_mapping": {"start": 14137, "length": 1326, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_updateSurplusAndBadDebt(uint256,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()", "source_mapping": {"start": 13096, "length": 85, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [232], "starting_column": 13, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "stablecoin.transfer(to,amountToRecover)", "source_mapping": {"start": 19450, "length": 40, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [346], "starting_column": 13, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(tokenAddress).safeTransfer(to,amountToRecover)", "source_mapping": {"start": 19521, "length": 54, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [348], "starting_column": 13, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "Recovered(tokenAddress,to,amountToRecover)", "source_mapping": {"start": 19595, "length": 49, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [350], "starting_column": 9, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverERC20", "source_mapping": {"start": 18874, "length": 777, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "recoverERC20(address,address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury.recoverERC20(address,address,uint256) (contracts/treasury/Treasury.sol#338-351):\n\tExternal calls:\n\t- _fetchSurplusFromAll() (contracts/treasury/Treasury.sol#341)\n\t\t- surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin) (contracts/treasury/Treasury.sol#213)\n\t\t- stablecoin.burnSelf(toBurn,address(this)) (contracts/treasury/Treasury.sol#258)\n\t\t- (newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury() (contracts/treasury/Treasury.sol#232)\n\t- stablecoin.transfer(to,amountToRecover) (contracts/treasury/Treasury.sol#346)\n\t- IERC20(tokenAddress).safeTransfer(to,amountToRecover) (contracts/treasury/Treasury.sol#348)\n\tEvent emitted after the call(s):\n\t- Recovered(tokenAddress,to,amountToRecover) (contracts/treasury/Treasury.sol#350)\n", "markdown": "Reentrancy in [Treasury.recoverERC20(address,address,uint256)](contracts/treasury/Treasury.sol#L338-L351):\n\tExternal calls:\n\t- [_fetchSurplusFromAll()](contracts/treasury/Treasury.sol#L341)\n\t\t- [surplusBufferValue += flashLoanModule.accrueInterestToTreasury(stablecoin)](contracts/treasury/Treasury.sol#L213)\n\t\t- [stablecoin.burnSelf(toBurn,address(this))](contracts/treasury/Treasury.sol#L258)\n\t\t- [(newSurplus,newBadDebt) = IVaultManager(vaultManagers[i]).accrueInterestToTreasury()](contracts/treasury/Treasury.sol#L232)\n\t- [stablecoin.transfer(to,amountToRecover)](contracts/treasury/Treasury.sol#L346)\n\t- [IERC20(tokenAddress).safeTransfer(to,amountToRecover)](contracts/treasury/Treasury.sol#L348)\n\tEvent emitted after the call(s):\n\t- [Recovered(tokenAddress,to,amountToRecover)](contracts/treasury/Treasury.sol#L350)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L338-L351", "id": "ce7a2cc7e557078d4f2b9cb4162ee25fe35a023f6f7c367cd44aab9aaa87f6f4", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "send", "source_mapping": {"start": 1371, "length": 707, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "send(uint16,bytes,uint256,address,address,bytes)"}}, {"type": "node", "name": "_lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 1830, "length": 81, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "send", "source_mapping": {"start": 1371, "length": 707, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "send(uint16,bytes,uint256,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 7729, "length": 207, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_lzSend", "source_mapping": {"start": 7337, "length": 606, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_lzSend(uint16,bytes,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)", "source_mapping": {"start": 2002, "length": 69, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [55], "starting_column": 9, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "send", "source_mapping": {"start": 1371, "length": 707, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "send(uint16,bytes,uint256,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in OFTCore.send(uint16,bytes,uint256,address,address,bytes) (contracts/agToken/layerZero/utils/OFTCore.sol#40-56):\n\tExternal calls:\n\t- _lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/OFTCore.sol#52)\n\t\t- lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#180-187)\n\tEvent emitted after the call(s):\n\t- SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce) (contracts/agToken/layerZero/utils/OFTCore.sol#55)\n", "markdown": "Reentrancy in [OFTCore.send(uint16,bytes,uint256,address,address,bytes)](contracts/agToken/layerZero/utils/OFTCore.sol#L40-L56):\n\tExternal calls:\n\t- [_lzSend(_dstChainId,payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/OFTCore.sol#L52)\n\t\t- [lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L180-L187)\n\tEvent emitted after the call(s):\n\t- [SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)](contracts/agToken/layerZero/utils/OFTCore.sol#L55)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/OFTCore.sol#L40-L56", "id": "4591edb5665bf1ceb16be8e673b50e44e8f1608331fbe6457dd88f62700026ea", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "sendWithPermit", "source_mapping": {"start": 1684, "length": 550, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)"}}, {"type": "node", "name": "IERC20Permit(address(canonicalToken)).permit(msg.sender,address(this),_amount,deadline,v,r,s)", "source_mapping": {"start": 2028, "length": 99, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 108}, "type_specific_fields": {"parent": {"type": "function", "name": "sendWithPermit", "source_mapping": {"start": 1684, "length": 550, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 2137, "length": 90, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [53], "starting_column": 9, "ending_column": 99}, "type_specific_fields": {"parent": {"type": "function", "name": "sendWithPermit", "source_mapping": {"start": 1684, "length": 550, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "canonicalToken.transferFrom(msg.sender,address(this),_amount)", "source_mapping": {"start": 3650, "length": 63, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [83], "starting_column": 9, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "_debitFrom", "source_mapping": {"start": 3438, "length": 306, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [81, 82, 83, 84, 85], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "_debitFrom(uint16,bytes,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 7729, "length": 207, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_lzSend", "source_mapping": {"start": 7337, "length": 606, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_lzSend(uint16,bytes,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 2137, "length": 90, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [53], "starting_column": 9, "ending_column": 99}, "type_specific_fields": {"parent": {"type": "function", "name": "sendWithPermit", "source_mapping": {"start": 1684, "length": 550, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 7729, "length": 207, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_lzSend", "source_mapping": {"start": 7337, "length": 606, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_lzSend(uint16,bytes,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)", "source_mapping": {"start": 2002, "length": 69, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [55], "starting_column": 9, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "send", "source_mapping": {"start": 1371, "length": 707, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "send(uint16,bytes,uint256,address,address,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)", "source_mapping": {"start": 2137, "length": 90, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [53], "starting_column": 9, "ending_column": 99}, "type_specific_fields": {"parent": {"type": "function", "name": "sendWithPermit", "source_mapping": {"start": 1684, "length": 550, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LayerZeroBridge.sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32) (contracts/agToken/layerZero/LayerZeroBridge.sol#40-54):\n\tExternal calls:\n\t- IERC20Permit(address(canonicalToken)).permit(msg.sender,address(this),_amount,deadline,v,r,s) (contracts/agToken/layerZero/LayerZeroBridge.sol#52)\n\t- send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/LayerZeroBridge.sol#53)\n\t\t- canonicalToken.transferFrom(msg.sender,address(this),_amount) (contracts/agToken/layerZero/LayerZeroBridge.sol#83)\n\t\t- lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#180-187)\n\tExternal calls sending eth:\n\t- send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/LayerZeroBridge.sol#53)\n\t\t- lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#180-187)\n\tEvent emitted after the call(s):\n\t- SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce) (contracts/agToken/layerZero/utils/OFTCore.sol#55)\n\t\t- send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams) (contracts/agToken/layerZero/LayerZeroBridge.sol#53)\n", "markdown": "Reentrancy in [LayerZeroBridge.sendWithPermit(uint16,bytes,uint256,address,address,bytes,uint256,uint8,bytes32,bytes32)](contracts/agToken/layerZero/LayerZeroBridge.sol#L40-L54):\n\tExternal calls:\n\t- [IERC20Permit(address(canonicalToken)).permit(msg.sender,address(this),_amount,deadline,v,r,s)](contracts/agToken/layerZero/LayerZeroBridge.sol#L52)\n\t- [send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/LayerZeroBridge.sol#L53)\n\t\t- [canonicalToken.transferFrom(msg.sender,address(this),_amount)](contracts/agToken/layerZero/LayerZeroBridge.sol#L83)\n\t\t- [lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L180-L187)\n\tExternal calls sending eth:\n\t- [send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/LayerZeroBridge.sol#L53)\n\t\t- [lzEndpoint.send{value: msg.value}(_dstChainId,trustedRemote,_payload,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L180-L187)\n\tEvent emitted after the call(s):\n\t- [SendToChain(msg.sender,_dstChainId,_toAddress,_amount,nonce)](contracts/agToken/layerZero/utils/OFTCore.sol#L55)\n\t\t- [send(_dstChainId,_toAddress,_amount,_refundAddress,_zroPaymentAddress,_adapterParams)](contracts/agToken/layerZero/LayerZeroBridge.sol#L53)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L40-L54", "id": "021f66a357df5283974b2f3500eca018a81d2f6b65f3cb312913715b85c6e7a5", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setCore", "source_mapping": {"start": 10193, "length": 552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setCore(ICoreBorrow)"}}, {"type": "node", "name": "IFlashAngle(_flashLoanModule).setCore(address(_core))", "source_mapping": {"start": 10643, "length": 53, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [185], "starting_column": 45, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "setCore", "source_mapping": {"start": 10193, "length": 552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setCore(ICoreBorrow)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "CoreUpdated(address(_core))", "source_mapping": {"start": 10706, "length": 32, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [186], "starting_column": 9, "ending_column": 41}, "type_specific_fields": {"parent": {"type": "function", "name": "setCore", "source_mapping": {"start": 10193, "length": 552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setCore(ICoreBorrow)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in CoreBorrow.setCore(ICoreBorrow) (contracts/coreBorrow/CoreBorrow.sol#176-187):\n\tExternal calls:\n\t- IFlashAngle(_flashLoanModule).setCore(address(_core)) (contracts/coreBorrow/CoreBorrow.sol#185)\n\tEvent emitted after the call(s):\n\t- CoreUpdated(address(_core)) (contracts/coreBorrow/CoreBorrow.sol#186)\n", "markdown": "Reentrancy in [CoreBorrow.setCore(ICoreBorrow)](contracts/coreBorrow/CoreBorrow.sol#L176-L187):\n\tExternal calls:\n\t- [IFlashAngle(_flashLoanModule).setCore(address(_core))](contracts/coreBorrow/CoreBorrow.sol#L185)\n\tEvent emitted after the call(s):\n\t- [CoreUpdated(address(_core))](contracts/coreBorrow/CoreBorrow.sol#L186)\n", "first_markdown_element": "contracts/coreBorrow/CoreBorrow.sol#L176-L187", "id": "3700161edf8c4c9d40bb59e740cde4dd62167d20436d84267c1a914a3a3b02af", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}, {"type": "node", "name": "ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)", "source_mapping": {"start": 9548, "length": 91, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [164], "starting_column": 13, "ending_column": 104}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "FlashLoanModuleUpdated(_flashLoanModule)", "source_mapping": {"start": 9703, "length": 45, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [167], "starting_column": 9, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "setFlashLoanModule", "source_mapping": {"start": 9176, "length": 579, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "lines": [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "CoreBorrow", "source_mapping": {"start": 4195, "length": 6552, "filename_relative": "contracts/coreBorrow/CoreBorrow.sol", "filename_absolute": "/root/angle/agTokens/contracts/coreBorrow/CoreBorrow.sol", "filename_short": "contracts/coreBorrow/CoreBorrow.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setFlashLoanModule(address)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in CoreBorrow.setFlashLoanModule(address) (contracts/coreBorrow/CoreBorrow.sol#158-168):\n\tExternal calls:\n\t- ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule) (contracts/coreBorrow/CoreBorrow.sol#164)\n\tEvent emitted after the call(s):\n\t- FlashLoanModuleUpdated(_flashLoanModule) (contracts/coreBorrow/CoreBorrow.sol#167)\n", "markdown": "Reentrancy in [CoreBorrow.setFlashLoanModule(address)](contracts/coreBorrow/CoreBorrow.sol#L158-L168):\n\tExternal calls:\n\t- [ITreasury(getRoleMember(FLASHLOANER_TREASURY_ROLE,i)).setFlashLoanModule(_flashLoanModule)](contracts/coreBorrow/CoreBorrow.sol#L164)\n\tEvent emitted after the call(s):\n\t- [FlashLoanModuleUpdated(_flashLoanModule)](contracts/coreBorrow/CoreBorrow.sol#L167)\n", "first_markdown_element": "contracts/coreBorrow/CoreBorrow.sol#L158-L168", "id": "2873de2440239f7bd0221b84e7aaa2b5522e4cf27132654aa8b6a49f02b72932", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}, {"type": "node", "name": "IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount)", "source_mapping": {"start": 11972, "length": 71, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [292], "starting_column": 9, "ending_column": 80}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "Transfer(address(0),account,amount)", "source_mapping": {"start": 9079, "length": 42, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [260], "starting_column": 9, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "_mint", "source_mapping": {"start": 8798, "length": 389, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20UpgradeableCustom", "source_mapping": {"start": 1573, "length": 11703, "filename_relative": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "filename_short": "contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_mint(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "_mint(to,canonicalOut)", "source_mapping": {"start": 12250, "length": 23, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [298], "starting_column": 9, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "swapIn", "source_mapping": {"start": 10786, "length": 1523, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeable", "source_mapping": {"start": 604, "length": 17634, "filename_relative": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "filename_short": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol", "is_dependency": false, "lines": [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, 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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424], "starting_column": 1, "ending_column": 2}}, "signature": "swapIn(address,uint256,address)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in TokenPolygonUpgradeable.swapIn(address,uint256,address) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#266-300):\n\tExternal calls:\n\t- IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#292)\n\tEvent emitted after the call(s):\n\t- Transfer(address(0),account,amount) (contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#260)\n\t\t- _mint(to,canonicalOut) (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#298)\n", "markdown": "Reentrancy in [TokenPolygonUpgradeable.swapIn(address,uint256,address)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L266-L300):\n\tExternal calls:\n\t- [IERC20(bridgeToken).safeTransferFrom(msg.sender,address(this),amount)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L292)\n\tEvent emitted after the call(s):\n\t- [Transfer(address(0),account,amount)](contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#L260)\n\t\t- [_mint(to,canonicalOut)](contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L298)\n", "first_markdown_element": "contracts/agToken/polygon/TokenPolygonUpgradeable.sol#L266-L300", "id": "1cdb011b775150cab318dda7086402728bed8a3d0035155909e9e963ce4a14bb", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}, {"type": "node", "name": "stablecoin.burnSelf(amount,address(this))", "source_mapping": {"start": 11339, "length": 42, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [200], "starting_column": 9, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "BadDebtUpdated(badDebtValue)", "source_mapping": {"start": 11464, "length": 33, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [203], "starting_column": 9, "ending_column": 42}, "type_specific_fields": {"parent": {"type": "function", "name": "updateBadDebt", "source_mapping": {"start": 11250, "length": 254, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [199, 200, 201, 202, 203, 204], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "updateBadDebt(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Treasury.updateBadDebt(uint256) (contracts/treasury/Treasury.sol#199-204):\n\tExternal calls:\n\t- stablecoin.burnSelf(amount,address(this)) (contracts/treasury/Treasury.sol#200)\n\tEvent emitted after the call(s):\n\t- BadDebtUpdated(badDebtValue) (contracts/treasury/Treasury.sol#203)\n", "markdown": "Reentrancy in [Treasury.updateBadDebt(uint256)](contracts/treasury/Treasury.sol#L199-L204):\n\tExternal calls:\n\t- [stablecoin.burnSelf(amount,address(this))](contracts/treasury/Treasury.sol#L200)\n\tEvent emitted after the call(s):\n\t- [BadDebtUpdated(badDebtValue)](contracts/treasury/Treasury.sol#L203)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L199-L204", "id": "c30906116c2f7a7e41131581cc481ab1543a8d1eee8c5ae6b1957e9b2935e15d", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getGasLimit", "source_mapping": {"start": 8440, "length": 292, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [202, 203, 204, 205, 206, 207, 208], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_getGasLimit(bytes)"}}, {"type": "node", "name": "", "source_mapping": {"start": 8651, "length": 75, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [205, 206, 207], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_getGasLimit", "source_mapping": {"start": 8440, "length": 292, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "lines": [202, 203, 204, 205, 206, 207, 208], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "NonblockingLzApp", "source_mapping": {"start": 515, "length": 11085, "filename_relative": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "filename_short": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_getGasLimit(bytes)"}}}}], "description": "NonblockingLzApp._getGasLimit(bytes) (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#202-208) uses assembly\n\t- INLINE ASM (contracts/agToken/layerZero/utils/NonblockingLzApp.sol#205-207)\n", "markdown": "[NonblockingLzApp._getGasLimit(bytes)](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L202-L208) uses assembly\n\t- [INLINE ASM](contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L205-L207)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/NonblockingLzApp.sol#L202-L208", "id": "f02c57a10e993a7540d352dd8a6409c4cf237a438e3510528d018778985a460f", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_nonblockingLzReceive", "source_mapping": {"start": 4309, "length": 616, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_nonblockingLzReceive(uint16,bytes,uint64,bytes)"}}, {"type": "node", "name": "", "source_mapping": {"start": 4698, "length": 76, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "_nonblockingLzReceive", "source_mapping": {"start": 4309, "length": 616, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OFTCore", "source_mapping": {"start": 513, "length": 6946, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "_nonblockingLzReceive(uint16,bytes,uint64,bytes)"}}}}], "description": "OFTCore._nonblockingLzReceive(uint16,bytes,uint64,bytes) (contracts/agToken/layerZero/utils/OFTCore.sol#107-123) uses assembly\n\t- INLINE ASM (contracts/agToken/layerZero/utils/OFTCore.sol#117-119)\n", "markdown": "[OFTCore._nonblockingLzReceive(uint16,bytes,uint64,bytes)](contracts/agToken/layerZero/utils/OFTCore.sol#L107-L123) uses assembly\n\t- [INLINE ASM](contracts/agToken/layerZero/utils/OFTCore.sol#L117-L119)\n", "first_markdown_element": "contracts/agToken/layerZero/utils/OFTCore.sol#L107-L123", "id": "cad3c47e0f49e81019e889a2ffb1143523f56ce0a2e4f756127ffb044994a88f", "check": "assembly", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "6 different versions of Solidity are used:\n\t- Version constraint ^0.8.12 is used by:\n \t\t- contracts/agToken/AgEUR.sol#3\n\t\t- contracts/agToken/AgToken.sol#3\n\t\t- contracts/agToken/AgTokenSideChainMultiBridge.sol#3\n\t\t- contracts/agToken/TokenSideChainMultiBridge.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridge.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridgeToken.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#3\n\t\t- contracts/agToken/layerZero/utils/IOFTCore.sol#3\n\t\t- contracts/agToken/layerZero/utils/NonblockingLzApp.sol#3\n\t\t- contracts/agToken/layerZero/utils/OFTCore.sol#3\n\t\t- contracts/agToken/nameable/AgEURNameable.sol#3\n\t\t- contracts/agToken/nameable/AgTokenNameable.sol#3\n\t\t- contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#3\n\t\t- contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#3\n\t\t- contracts/agToken/polygon/TokenPolygonUpgradeable.sol#2\n\t\t- contracts/coreBorrow/CoreBorrow.sol#36\n\t\t- contracts/external/ProxyAdmin.sol#3\n\t\t- contracts/external/TransparentUpgradeableProxy.sol#3\n\t\t- contracts/flashloan/FlashAngle.sol#3\n\t\t- contracts/interfaces/IAgToken.sol#3\n\t\t- contracts/interfaces/IAgTokenSideChainMultiBridge.sol#3\n\t\t- contracts/interfaces/ICoreBorrow.sol#3\n\t\t- contracts/interfaces/IFlashAngle.sol#3\n\t\t- contracts/interfaces/IOracle.sol#3\n\t\t- contracts/interfaces/ITreasury.sol#3\n\t\t- contracts/interfaces/IVaultManager.sol#3\n\t\t- contracts/interfaces/coreModule/IOracleCore.sol#3\n\t\t- contracts/interfaces/coreModule/IPerpetualManager.sol#3\n\t\t- contracts/interfaces/coreModule/IStableMaster.sol#3\n\t\t- contracts/interfaces/external/create2/ImmutableCreate2Factory.sol#3\n\t\t- contracts/mock/MockCoreBorrow.sol#3\n\t\t- contracts/mock/MockFlashLoanModule.sol#3\n\t\t- contracts/mock/MockLayerZero.sol#3\n\t\t- contracts/mock/MockTreasury.sol#3\n\t\t- contracts/treasury/Treasury.sol#36\n\t\t- contracts/utils/Constants.sol#3\n\t- Version constraint ^0.8.0 is used by:\n \t\t- contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#6\n\t\t- lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol#2\n\t\t- lib/openzeppelin-contracts/contracts/access/Ownable.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Context.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Counters.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Strings.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlEnumerableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlEnumerableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/CountersUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/ECDSAUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/draft-EIP712Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/structs/EnumerableSetUpgradeable.sol#4\n\t- Version constraint ^0.8.7 is used by:\n \t\t- contracts/mock/MockFlashLoanReceiver.sol#3\n\t\t- contracts/mock/MockToken.sol#3\n\t\t- contracts/mock/MockTokenPermit.sol#3\n\t- Version constraint >=0.5.0 is used by:\n \t\t- lib/LayerZero/contracts/interfaces/ILayerZeroEndpoint.sol#3\n\t\t- lib/LayerZero/contracts/interfaces/ILayerZeroReceiver.sol#3\n\t\t- lib/LayerZero/contracts/interfaces/ILayerZeroUserApplicationConfig.sol#3\n\t- Version constraint ^0.8.2 is used by:\n \t\t- lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4\n\t- Version constraint ^0.8.1 is used by:\n \t\t- lib/openzeppelin-contracts/contracts/utils/Address.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol#4\n", "markdown": "6 different versions of Solidity are used:\n\t- Version constraint ^0.8.12 is used by:\n \t\t- contracts/agToken/AgEUR.sol#3\n\t\t- contracts/agToken/AgToken.sol#3\n\t\t- contracts/agToken/AgTokenSideChainMultiBridge.sol#3\n\t\t- contracts/agToken/TokenSideChainMultiBridge.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridge.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridgeToken.sol#3\n\t\t- contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#3\n\t\t- contracts/agToken/layerZero/utils/IOFTCore.sol#3\n\t\t- contracts/agToken/layerZero/utils/NonblockingLzApp.sol#3\n\t\t- contracts/agToken/layerZero/utils/OFTCore.sol#3\n\t\t- contracts/agToken/nameable/AgEURNameable.sol#3\n\t\t- contracts/agToken/nameable/AgTokenNameable.sol#3\n\t\t- contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#3\n\t\t- contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#3\n\t\t- contracts/agToken/polygon/TokenPolygonUpgradeable.sol#2\n\t\t- contracts/coreBorrow/CoreBorrow.sol#36\n\t\t- contracts/external/ProxyAdmin.sol#3\n\t\t- contracts/external/TransparentUpgradeableProxy.sol#3\n\t\t- contracts/flashloan/FlashAngle.sol#3\n\t\t- contracts/interfaces/IAgToken.sol#3\n\t\t- contracts/interfaces/IAgTokenSideChainMultiBridge.sol#3\n\t\t- contracts/interfaces/ICoreBorrow.sol#3\n\t\t- contracts/interfaces/IFlashAngle.sol#3\n\t\t- contracts/interfaces/IOracle.sol#3\n\t\t- contracts/interfaces/ITreasury.sol#3\n\t\t- contracts/interfaces/IVaultManager.sol#3\n\t\t- contracts/interfaces/coreModule/IOracleCore.sol#3\n\t\t- contracts/interfaces/coreModule/IPerpetualManager.sol#3\n\t\t- contracts/interfaces/coreModule/IStableMaster.sol#3\n\t\t- contracts/interfaces/external/create2/ImmutableCreate2Factory.sol#3\n\t\t- contracts/mock/MockCoreBorrow.sol#3\n\t\t- contracts/mock/MockFlashLoanModule.sol#3\n\t\t- contracts/mock/MockLayerZero.sol#3\n\t\t- contracts/mock/MockTreasury.sol#3\n\t\t- contracts/treasury/Treasury.sol#36\n\t\t- contracts/utils/Constants.sol#3\n\t- Version constraint ^0.8.0 is used by:\n \t\t- contracts/agToken/polygon/utils/ERC20UpgradeableCustom.sol#6\n\t\t- lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol#2\n\t\t- lib/openzeppelin-contracts/contracts/access/Ownable.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/Proxy.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Permit.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Context.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Counters.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/Strings.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol#4\n\t\t- lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlEnumerableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlEnumerableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/CountersUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/ECDSAUpgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/draft-EIP712Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/structs/EnumerableSetUpgradeable.sol#4\n\t- Version constraint ^0.8.7 is used by:\n \t\t- contracts/mock/MockFlashLoanReceiver.sol#3\n\t\t- contracts/mock/MockToken.sol#3\n\t\t- contracts/mock/MockTokenPermit.sol#3\n\t- Version constraint >=0.5.0 is used by:\n \t\t- lib/LayerZero/contracts/interfaces/ILayerZeroEndpoint.sol#3\n\t\t- lib/LayerZero/contracts/interfaces/ILayerZeroReceiver.sol#3\n\t\t- lib/LayerZero/contracts/interfaces/ILayerZeroUserApplicationConfig.sol#3\n\t- Version constraint ^0.8.2 is used by:\n \t\t- lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4\n\t- Version constraint ^0.8.1 is used by:\n \t\t- lib/openzeppelin-contracts/contracts/utils/Address.sol#4\n\t\t- lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol#4\n", "first_markdown_element": "", "id": "ade9dc08425c3cd7ee43c6806d12c8ac4838776a4ebce47f7a285eb7f5726774", "check": "pragma", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "TokenSideChainMultiBridge", "source_mapping": {"start": 661, "length": 14294, "filename_relative": "contracts/agToken/TokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/TokenSideChainMultiBridge.sol", "filename_short": "contracts/agToken/TokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [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, 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], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IAgTokenSideChainMultiBridge", "source_mapping": {"start": 444, "length": 1116, "filename_relative": "contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "filename_short": "contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": 2}}], "description": "TokenSideChainMultiBridge (contracts/agToken/TokenSideChainMultiBridge.sol#17-333) should inherit from IAgTokenSideChainMultiBridge (contracts/interfaces/IAgTokenSideChainMultiBridge.sol#12-28)\n", "markdown": "[TokenSideChainMultiBridge](contracts/agToken/TokenSideChainMultiBridge.sol#L17-L333) should inherit from [IAgTokenSideChainMultiBridge](contracts/interfaces/IAgTokenSideChainMultiBridge.sol#L12-L28)\n", "first_markdown_element": "contracts/agToken/TokenSideChainMultiBridge.sol#L17-L333", "id": "48dcf974a94ce6e93aa61cc474e3b6e6d5a4f0491304e23cfae35a9fd0ceff69", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IOFT", "source_mapping": {"start": 4753, "length": 37, "filename_relative": "contracts/agToken/layerZero/utils/IOFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/IOFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/IOFTCore.sol", "is_dependency": false, "lines": [110], "starting_column": 1, "ending_column": 38}}], "description": "LayerZeroBridgeToken (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#13-151) should inherit from IOFT (contracts/agToken/layerZero/utils/IOFTCore.sol#110)\n", "markdown": "[LayerZeroBridgeToken](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L13-L151) should inherit from [IOFT](contracts/agToken/layerZero/utils/IOFTCore.sol#L110)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L13-L151", "id": "f6e8e9980dd9513f57ffe6adc9fa9130842f69e1fd2eb15d67ee05d1dbd425d4", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IOFT", "source_mapping": {"start": 4753, "length": 37, "filename_relative": "contracts/agToken/layerZero/utils/IOFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/IOFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/IOFTCore.sol", "is_dependency": false, "lines": [110], "starting_column": 1, "ending_column": 38}}], "description": "LayerZeroBridgeTokenERC20 (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#14-150) should inherit from IOFT (contracts/agToken/layerZero/utils/IOFTCore.sol#110)\n", "markdown": "[LayerZeroBridgeTokenERC20](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L14-L150) should inherit from [IOFT](contracts/agToken/layerZero/utils/IOFTCore.sol#L110)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L14-L150", "id": "16c91487c9c5ce174e8960b1c5b6baf97a06fa5db549dacdf9450f1c7b08cee7", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, {"type": "contract", "name": "IAgTokenSideChainMultiBridge", "source_mapping": {"start": 444, "length": 1116, "filename_relative": "contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "filename_short": "contracts/interfaces/IAgTokenSideChainMultiBridge.sol", "is_dependency": false, "lines": [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": 2}}], "description": "MockTokenPermit (contracts/mock/MockTokenPermit.sol#9-87) should inherit from IAgTokenSideChainMultiBridge (contracts/interfaces/IAgTokenSideChainMultiBridge.sol#12-28)\n", "markdown": "[MockTokenPermit](contracts/mock/MockTokenPermit.sol#L9-L87) should inherit from [IAgTokenSideChainMultiBridge](contracts/interfaces/IAgTokenSideChainMultiBridge.sol#L12-L28)\n", "first_markdown_element": "contracts/mock/MockTokenPermit.sol#L9-L87", "id": "2b9db624e8654c64949052fb15652bbf26868d180718260c9856cbaac22d0329", "check": "missing-inheritance", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1494, "length": 21, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 1470, "length": 76, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 5, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "contract", "name": "ITreasury", "source_mapping": {"start": 366, "length": 1623, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable ITreasury.isVaultManager(address)._vaultManager (contracts/interfaces/ITreasury.sol#35) is too similar to MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13)\n", "markdown": "Variable [ITreasury.isVaultManager(address)._vaultManager](contracts/interfaces/ITreasury.sol#L35) is too similar to [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13)\n", "first_markdown_element": "contracts/interfaces/ITreasury.sol#L35", "id": "0798f3a16e0e0274ca9d026de0136397b3122c2922f48369f171b4ced15c45ad", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1198, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [42], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 1174, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [42, 43, 44], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.isVaultManager(address)._vaultManager (contracts/mock/MockTreasury.sol#42) is too similar to MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13)\n", "markdown": "Variable [MockTreasury.isVaultManager(address)._vaultManager](contracts/mock/MockTreasury.sol#L42) is too similar to [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L42", "id": "1a3a6e36b4f1a39939c2116354db056e06efd99a383b5766bdfd39f530c1fe82", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1812, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62], "starting_column": 31, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager2", "source_mapping": {"start": 1786, "length": 104, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager2(address)"}}}}, {"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.setVaultManager2(address)._vaultManager (contracts/mock/MockTreasury.sol#62) is too similar to MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13)\n", "markdown": "Variable [MockTreasury.setVaultManager2(address)._vaultManager](contracts/mock/MockTreasury.sol#L62) is too similar to [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L62", "id": "725bc44ad20e42c04ccb0c8bad2d98ba0bded9ae4eaff85dbeac2508ba198463", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1702, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58], "starting_column": 30, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager", "source_mapping": {"start": 1677, "length": 103, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.setVaultManager(address)._vaultManager (contracts/mock/MockTreasury.sol#58) is too similar to MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13)\n", "markdown": "Variable [MockTreasury.setVaultManager(address)._vaultManager](contracts/mock/MockTreasury.sol#L58) is too similar to [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L58", "id": "6955bc4f33351907e78f784bbbb3cadcaea682922df57d4a7b07b3c7088cda53", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1198, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [42], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 1174, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [42, 43, 44], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.isVaultManager(address)._vaultManager (contracts/mock/MockTreasury.sol#42) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [MockTreasury.isVaultManager(address)._vaultManager](contracts/mock/MockTreasury.sol#L42) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L42", "id": "4951e135114a38f6c7bde41c6aeac18e1f4cbafa6622d6422bad873777d9ede7", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1494, "length": 21, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 1470, "length": 76, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 5, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "contract", "name": "ITreasury", "source_mapping": {"start": 366, "length": 1623, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable ITreasury.isVaultManager(address)._vaultManager (contracts/interfaces/ITreasury.sol#35) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [ITreasury.isVaultManager(address)._vaultManager](contracts/interfaces/ITreasury.sol#L35) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/interfaces/ITreasury.sol#L35", "id": "ddfbe3063930a0fb40e8222f4bbb6253a4f0894e02391ae95c70a91c5e2d73ea", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1812, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62], "starting_column": 31, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager2", "source_mapping": {"start": 1786, "length": 104, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [62, 63, 64], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager2(address)"}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.setVaultManager2(address)._vaultManager (contracts/mock/MockTreasury.sol#62) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [MockTreasury.setVaultManager2(address)._vaultManager](contracts/mock/MockTreasury.sol#L62) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L62", "id": "d93fa630b931e9908d740de72ba7fec902c16a0ec4921967ae7d6097e03da68f", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1702, "length": 21, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58], "starting_column": 30, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "setVaultManager", "source_mapping": {"start": 1677, "length": 103, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "setVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.setVaultManager(address)._vaultManager (contracts/mock/MockTreasury.sol#58) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [MockTreasury.setVaultManager(address)._vaultManager](contracts/mock/MockTreasury.sol#L58) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L58", "id": "c4a40a63bf40146bbd11f491b7259d79455487e95733f92e1a6bc1cf8a0b81fd", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager1", "source_mapping": {"start": 573, "length": 22, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [22], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}, {"type": "variable", "name": "_vaultManager2", "source_mapping": {"start": 605, "length": 22, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [23], "starting_column": 9, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "constructor", "source_mapping": {"start": 468, "length": 425, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "constructor(IAgToken,address,address,address,address,address)"}}}}], "description": "Variable MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager1 (contracts/mock/MockTreasury.sol#22) is too similar to MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager2 (contracts/mock/MockTreasury.sol#23)\n", "markdown": "Variable [MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager1](contracts/mock/MockTreasury.sol#L22) is too similar to [MockTreasury.constructor(IAgToken,address,address,address,address,address)._vaultManager2](contracts/mock/MockTreasury.sol#L23)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L22", "id": "4d52e864b1d5501ddc4ff5e303221c5912c632edc144f37bda104eddcf23ddef", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 2508, "length": 27, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82], "starting_column": 51, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "accrueInterestToTreasuryVaultManager", "source_mapping": {"start": 2462, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "accrueInterestToTreasuryVaultManager(IVaultManager)"}}}}, {"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager)._vaultManager (contracts/mock/MockTreasury.sol#82) is too similar to MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13)\n", "markdown": "Variable [MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager)._vaultManager](contracts/mock/MockTreasury.sol#L82) is too similar to [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L82", "id": "41f1ee8127dd9fdd77997c491bb89c742046ee9f3c1b9e406a512f46fd88fcce", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "vaultManager1", "source_mapping": {"start": 324, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [13], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.vaultManager1 (contracts/mock/MockTreasury.sol#13) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [MockTreasury.vaultManager1](contracts/mock/MockTreasury.sol#L13) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L13", "id": "fc9a579e47227087c25908d38a0731ff4de0e09c3461511558b7905ced8cc3bb", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 2508, "length": 27, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82], "starting_column": 51, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "accrueInterestToTreasuryVaultManager", "source_mapping": {"start": 2462, "length": 175, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "accrueInterestToTreasuryVaultManager(IVaultManager)"}}}}, {"type": "variable", "name": "vaultManager2", "source_mapping": {"start": 358, "length": 28, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager)._vaultManager (contracts/mock/MockTreasury.sol#82) is too similar to MockTreasury.vaultManager2 (contracts/mock/MockTreasury.sol#14)\n", "markdown": "Variable [MockTreasury.accrueInterestToTreasuryVaultManager(IVaultManager)._vaultManager](contracts/mock/MockTreasury.sol#L82) is too similar to [MockTreasury.vaultManager2](contracts/mock/MockTreasury.sol#L14)\n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L82", "id": "0f0745bf316f3d4310de13e2583edfa7b7e06ae2547dbebd71f4ccbbafc14758", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 8062, "length": 21, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [145], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 8038, "length": 135, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [145, 146, 147], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManagers", "source_mapping": {"start": 12729, "length": 30, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [224], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}}], "description": "Variable Treasury.isVaultManager(address)._vaultManager (contracts/treasury/Treasury.sol#145) is too similar to Treasury._fetchSurplusFromList(address[]).vaultManagers (contracts/treasury/Treasury.sol#224)\n", "markdown": "Variable [Treasury.isVaultManager(address)._vaultManager](contracts/treasury/Treasury.sol#L145) is too similar to [Treasury._fetchSurplusFromList(address[]).vaultManagers](contracts/treasury/Treasury.sol#L224)\n", "first_markdown_element": "contracts/treasury/Treasury.sol#L145", "id": "8b1d3333ffeafb58fed1b512891d83fceb9a377769c25acfecf2a751fcc37f98", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_vaultManager", "source_mapping": {"start": 1494, "length": 21, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 29, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "isVaultManager", "source_mapping": {"start": 1470, "length": 76, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "lines": [35], "starting_column": 5, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "contract", "name": "ITreasury", "source_mapping": {"start": 366, "length": 1623, "filename_relative": "contracts/interfaces/ITreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/interfaces/ITreasury.sol", "filename_short": "contracts/interfaces/ITreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}, "signature": "isVaultManager(address)"}}}}, {"type": "variable", "name": "vaultManagers", "source_mapping": {"start": 12729, "length": 30, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [224], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "_fetchSurplusFromList", "source_mapping": {"start": 12689, "length": 595, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Treasury", "source_mapping": {"start": 4151, "length": 18639, "filename_relative": "contracts/treasury/Treasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/treasury/Treasury.sol", "filename_short": "contracts/treasury/Treasury.sol", "is_dependency": false, "lines": [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, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413], "starting_column": 1, "ending_column": 2}}, "signature": "_fetchSurplusFromList(address[])"}}}}], "description": "Variable ITreasury.isVaultManager(address)._vaultManager (contracts/interfaces/ITreasury.sol#35) is too similar to Treasury._fetchSurplusFromList(address[]).vaultManagers (contracts/treasury/Treasury.sol#224)\n", "markdown": "Variable [ITreasury.isVaultManager(address)._vaultManager](contracts/interfaces/ITreasury.sol#L35) is too similar to [Treasury._fetchSurplusFromList(address[]).vaultManagers](contracts/treasury/Treasury.sol#L224)\n", "first_markdown_element": "contracts/interfaces/ITreasury.sol#L35", "id": "aa1507a087c78025318954cade73f6d7969815bebf6e878f517666c0573c7d6b", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "EXTRA_GAS = 200000", "source_mapping": {"start": 645, "length": 42, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [16], "starting_column": 5, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "slitherConstructorConstantVariables()"}}}}], "description": "LayerZeroBridge.slitherConstructorConstantVariables() (contracts/agToken/layerZero/LayerZeroBridge.sol#12-130) uses literals with too many digits:\n\t- EXTRA_GAS = 200000 (contracts/agToken/layerZero/utils/OFTCore.sol#16)\n", "markdown": "[LayerZeroBridge.slitherConstructorConstantVariables()](contracts/agToken/layerZero/LayerZeroBridge.sol#L12-L130) uses literals with too many digits:\n\t- [EXTRA_GAS = 200000](contracts/agToken/layerZero/utils/OFTCore.sol#L16)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L12-L130", "id": "74acb752e453185cd9375a109e8486deea974c7d98ab1b5bf1c0960522e1f655", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "EXTRA_GAS = 200000", "source_mapping": {"start": 645, "length": 42, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [16], "starting_column": 5, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}}}], "description": "LayerZeroBridgeToken.slitherConstructorConstantVariables() (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#13-151) uses literals with too many digits:\n\t- EXTRA_GAS = 200000 (contracts/agToken/layerZero/utils/OFTCore.sol#16)\n", "markdown": "[LayerZeroBridgeToken.slitherConstructorConstantVariables()](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L13-L151) uses literals with too many digits:\n\t- [EXTRA_GAS = 200000](contracts/agToken/layerZero/utils/OFTCore.sol#L16)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L13-L151", "id": "5c369907588534e1b35b597ef0d0a08242109e711453a8275d39401424572b17", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "EXTRA_GAS = 200000", "source_mapping": {"start": 645, "length": 42, "filename_relative": "contracts/agToken/layerZero/utils/OFTCore.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/utils/OFTCore.sol", "filename_short": "contracts/agToken/layerZero/utils/OFTCore.sol", "is_dependency": false, "lines": [16], "starting_column": 5, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}}}], "description": "LayerZeroBridgeTokenERC20.slitherConstructorConstantVariables() (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#14-150) uses literals with too many digits:\n\t- EXTRA_GAS = 200000 (contracts/agToken/layerZero/utils/OFTCore.sol#16)\n", "markdown": "[LayerZeroBridgeTokenERC20.slitherConstructorConstantVariables()](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L14-L150) uses literals with too many digits:\n\t- [EXTRA_GAS = 200000](contracts/agToken/layerZero/utils/OFTCore.sol#L16)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L14-L150", "id": "771df941fc27915962e623b37fd12d291c32ba843f352539c2444c563453325d", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [], "description": "The following unused import(s) in contracts/agToken/AgEUR.sol should be removed: \n\t-import \"../interfaces/coreModule/IStableMaster.sol\"; (contracts/agToken/AgEUR.sol#6)\n", "markdown": "The following unused import(s) in contracts/agToken/AgEUR.sol should be removed: \n\t-import \"../interfaces/coreModule/IStableMaster.sol\"; (contracts/agToken/AgEUR.sol#6)\n", "first_markdown_element": "", "id": "6e9ae41ea54a33bc5c157c25b34328bb1f3591e51144afd4a9807589ad7f46f9", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "The following unused import(s) in contracts/interfaces/ITreasury.sol should be removed: \n\t-import \"./ICoreBorrow.sol\"; (contracts/interfaces/ITreasury.sol#6)\n", "markdown": "The following unused import(s) in contracts/interfaces/ITreasury.sol should be removed: \n\t-import \"./ICoreBorrow.sol\"; (contracts/interfaces/ITreasury.sol#6)\n", "first_markdown_element": "", "id": "03c6ee8824928bc7c58c9bfdc11787da50f1e552e1386393d06e4f5da09cbad2", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "The following unused import(s) in contracts/agToken/polygon/TokenPolygonUpgradeable.sol should be removed: \n\t-import \"../../interfaces/IAgToken.sol\"; (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#11)\n", "markdown": "The following unused import(s) in contracts/agToken/polygon/TokenPolygonUpgradeable.sol should be removed: \n\t-import \"../../interfaces/IAgToken.sol\"; (contracts/agToken/polygon/TokenPolygonUpgradeable.sol#11)\n", "first_markdown_element": "", "id": "cd0599c604685d461215b68713b2178a349a3ee1158f80b79dac3e27688fe343", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "The following unused import(s) in contracts/interfaces/IVaultManager.sol should be removed: \n\t-import \"oz/interfaces/IERC721Metadata.sol\"; (contracts/interfaces/IVaultManager.sol#5)\n", "markdown": "The following unused import(s) in contracts/interfaces/IVaultManager.sol should be removed: \n\t-import \"oz/interfaces/IERC721Metadata.sol\"; (contracts/interfaces/IVaultManager.sol#5)\n", "first_markdown_element": "", "id": "8fc306fcc61d550f1a6a113ee7369e72dd03bc598965e2543d03a50c457d3759", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "The following unused import(s) in lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol should be removed: \n\t-import \"../token/ERC721/extensions/IERC721Metadata.sol\"; (lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol#6)\n", "markdown": "The following unused import(s) in lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol should be removed: \n\t-import \"../token/ERC721/extensions/IERC721Metadata.sol\"; (lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol#6)\n", "first_markdown_element": "", "id": "fae15f1df0975d4b50ead08194f5c4bdb8ab0cdd6d4febce061e86238bebde1f", "check": "unused-import", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 5528, "length": 25, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.sol", "is_dependency": false, "lines": [129], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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": "LayerZeroBridge", "source_mapping": {"start": 486, "length": 5070, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridge.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridge.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, 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}}], "description": "LayerZeroBridge.__gap (contracts/agToken/layerZero/LayerZeroBridge.sol#129) is never used in LayerZeroBridge (contracts/agToken/layerZero/LayerZeroBridge.sol#12-130)\n", "markdown": "[LayerZeroBridge.__gap](contracts/agToken/layerZero/LayerZeroBridge.sol#L129) is never used in [LayerZeroBridge](contracts/agToken/layerZero/LayerZeroBridge.sol#L12-L130)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridge.sol#L129", "id": "88fbe63fd5c135f03b8b38e2164c023e73a6a05daf5c55a7745cd8b49c64e05a", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 6007, "length": 25, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "is_dependency": false, "lines": [150], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "LayerZeroBridgeToken", "source_mapping": {"start": 556, "length": 5479, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeToken.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeToken.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], "starting_column": 1, "ending_column": 2}}], "description": "LayerZeroBridgeToken.__gap (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#150) is never used in LayerZeroBridgeToken (contracts/agToken/layerZero/LayerZeroBridgeToken.sol#13-151)\n", "markdown": "[LayerZeroBridgeToken.__gap](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L150) is never used in [LayerZeroBridgeToken](contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L13-L151)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeToken.sol#L150", "id": "4e739ba8b31355755680ee101a5b0ce121de193051daaaa0e7395cf639b4d9ca", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 5881, "length": 25, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "lines": [149], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "LayerZeroBridgeTokenERC20", "source_mapping": {"start": 586, "length": 5323, "filename_relative": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "filename_short": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol", "is_dependency": false, "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, 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], "starting_column": 1, "ending_column": 2}}], "description": "LayerZeroBridgeTokenERC20.__gap (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#149) is never used in LayerZeroBridgeTokenERC20 (contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#14-150)\n", "markdown": "[LayerZeroBridgeTokenERC20.__gap](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L149) is never used in [LayerZeroBridgeTokenERC20](contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L14-L150)\n", "first_markdown_element": "contracts/agToken/layerZero/LayerZeroBridgeTokenERC20.sol#L149", "id": "7cc1a0bf4a2b22e3c3cf05c9293e84cb2c9b5bbc8202b094544ed77464294f8a", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gapNameable", "source_mapping": {"start": 443, "length": 33, "filename_relative": "contracts/agToken/nameable/AgEURNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgEURNameable.sol", "filename_short": "contracts/agToken/nameable/AgEURNameable.sol", "is_dependency": false, "lines": [20], "starting_column": 5, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgEURNameable", "source_mapping": {"start": 141, "length": 832, "filename_relative": "contracts/agToken/nameable/AgEURNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgEURNameable.sol", "filename_short": "contracts/agToken/nameable/AgEURNameable.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "AgEURNameable", "source_mapping": {"start": 141, "length": 832, "filename_relative": "contracts/agToken/nameable/AgEURNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgEURNameable.sol", "filename_short": "contracts/agToken/nameable/AgEURNameable.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}], "description": "AgEURNameable.__gapNameable (contracts/agToken/nameable/AgEURNameable.sol#20) is never used in AgEURNameable (contracts/agToken/nameable/AgEURNameable.sol#9-37)\n", "markdown": "[AgEURNameable.__gapNameable](contracts/agToken/nameable/AgEURNameable.sol#L20) is never used in [AgEURNameable](contracts/agToken/nameable/AgEURNameable.sol#L9-L37)\n", "first_markdown_element": "contracts/agToken/nameable/AgEURNameable.sol#L20", "id": "1cb56fe67c25146fbeffd3fd913dca4a9a7174709888b7233d217385e2a41c81", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gapNameable", "source_mapping": {"start": 476, "length": 33, "filename_relative": "contracts/agToken/nameable/AgTokenNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenNameable.sol", "is_dependency": false, "lines": [21], "starting_column": 5, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenNameable", "source_mapping": {"start": 145, "length": 861, "filename_relative": "contracts/agToken/nameable/AgTokenNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenNameable.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "AgTokenNameable", "source_mapping": {"start": 145, "length": 861, "filename_relative": "contracts/agToken/nameable/AgTokenNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenNameable.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}], "description": "AgTokenNameable.__gapNameable (contracts/agToken/nameable/AgTokenNameable.sol#21) is never used in AgTokenNameable (contracts/agToken/nameable/AgTokenNameable.sol#9-38)\n", "markdown": "[AgTokenNameable.__gapNameable](contracts/agToken/nameable/AgTokenNameable.sol#L21) is never used in [AgTokenNameable](contracts/agToken/nameable/AgTokenNameable.sol#L9-L38)\n", "first_markdown_element": "contracts/agToken/nameable/AgTokenNameable.sol#L21", "id": "edbb100b760184eb63f5d50b7b602a5bcd302c74fe3d74a2d3dde4c8a7c92b35", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gapNameable", "source_mapping": {"start": 327, "length": 33, "filename_relative": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgTokenSideChainMultiBridgeNameable", "source_mapping": {"start": 185, "length": 672, "filename_relative": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "is_dependency": false, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "AgTokenSideChainMultiBridgeNameable", "source_mapping": {"start": 185, "length": 672, "filename_relative": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "filename_short": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol", "is_dependency": false, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "starting_column": 1, "ending_column": 2}}], "description": "AgTokenSideChainMultiBridgeNameable.__gapNameable (contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#14) is never used in AgTokenSideChainMultiBridgeNameable (contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#9-31)\n", "markdown": "[AgTokenSideChainMultiBridgeNameable.__gapNameable](contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#L14) is never used in [AgTokenSideChainMultiBridgeNameable](contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#L9-L31)\n", "first_markdown_element": "contracts/agToken/nameable/AgTokenSideChainMultiBridgeNameable.sol#L14", "id": "fac571967c3bb88a37153c8a0c89574105b52d5724a02d5f8ffc8c63de2fdeac", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gapNameable", "source_mapping": {"start": 319, "length": 33, "filename_relative": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_short": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenPolygonUpgradeableNameable", "source_mapping": {"start": 185, "length": 676, "filename_relative": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_short": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "is_dependency": false, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "TokenPolygonUpgradeableNameable", "source_mapping": {"start": 185, "length": 676, "filename_relative": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "filename_short": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol", "is_dependency": false, "lines": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "starting_column": 1, "ending_column": 2}}], "description": "TokenPolygonUpgradeableNameable.__gapNameable (contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#14) is never used in TokenPolygonUpgradeableNameable (contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#9-31)\n", "markdown": "[TokenPolygonUpgradeableNameable.__gapNameable](contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#L14) is never used in [TokenPolygonUpgradeableNameable](contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#L9-L31)\n", "first_markdown_element": "contracts/agToken/nameable/TokenPolygonUpgradeableNameable.sol#L14", "id": "2a1708c189628087b2011ddea271f2e9185c2f4e80cf74947208cba0d25ea9c1", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "stableMaster", "source_mapping": {"start": 712, "length": 27, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [18], "starting_column": 5, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgEUR", "source_mapping": {"start": 492, "length": 3519, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "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, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 1, "ending_column": 2}}}}], "description": "AgEUR.stableMaster (contracts/agToken/AgEUR.sol#18) should be constant \n", "markdown": "[AgEUR.stableMaster](contracts/agToken/AgEUR.sol#L18) should be constant \n", "first_markdown_element": "contracts/agToken/AgEUR.sol#L18", "id": "c9dc9e44dc90cf3588582de615954dfc7b0254e8e0b316bcc931a4f4b63ca349", "check": "constable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "treasuryInitialized", "source_mapping": {"start": 1204, "length": 31, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "lines": [30], "starting_column": 5, "ending_column": 36}, "type_specific_fields": {"parent": {"type": "contract", "name": "AgEUR", "source_mapping": {"start": 492, "length": 3519, "filename_relative": "contracts/agToken/AgEUR.sol", "filename_absolute": "/root/angle/agTokens/contracts/agToken/AgEUR.sol", "filename_short": "contracts/agToken/AgEUR.sol", "is_dependency": false, "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, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 1, "ending_column": 2}}}}], "description": "AgEUR.treasuryInitialized (contracts/agToken/AgEUR.sol#30) should be constant \n", "markdown": "[AgEUR.treasuryInitialized](contracts/agToken/AgEUR.sol#L30) should be constant \n", "first_markdown_element": "contracts/agToken/AgEUR.sol#L30", "id": "2f310da47bd1256506bc7928b6a7c4bbf2c6dcc24c22e730ba62740390d22def", "check": "constable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "reverts", "source_mapping": {"start": 577, "length": 19, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [20], "starting_column": 5, "ending_column": 24}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "MockTokenPermit.reverts (contracts/mock/MockTokenPermit.sol#20) should be constant \n", "markdown": "[MockTokenPermit.reverts](contracts/mock/MockTokenPermit.sol#L20) should be constant \n", "first_markdown_element": "contracts/mock/MockTokenPermit.sol#L20", "id": "0c88b72ae2aed9112e781905aa99fffa8381fd0c7be033eb24563dcbcae2d39d", "check": "constable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_decimal", "source_mapping": {"start": 300, "length": 23, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [12], "starting_column": 5, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockToken", "source_mapping": {"start": 98, "length": 1372, "filename_relative": "contracts/mock/MockToken.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockToken.sol", "filename_short": "contracts/mock/MockToken.sol", "is_dependency": false, "lines": [7, 8, 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], "starting_column": 1, "ending_column": 2}}}}], "description": "MockToken._decimal (contracts/mock/MockToken.sol#12) should be immutable \n", "markdown": "[MockToken._decimal](contracts/mock/MockToken.sol#L12) should be immutable \n", "first_markdown_element": "contracts/mock/MockToken.sol#L12", "id": "d04ae3b76427e8d442aa93b67ca6706cd7ee13506ef00bcf9d9c25d92704fe0f", "check": "immutable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_decimal", "source_mapping": {"start": 448, "length": 23, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "lines": [15], "starting_column": 5, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTokenPermit", "source_mapping": {"start": 202, "length": 2396, "filename_relative": "contracts/mock/MockTokenPermit.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTokenPermit.sol", "filename_short": "contracts/mock/MockTokenPermit.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "MockTokenPermit._decimal (contracts/mock/MockTokenPermit.sol#15) should be immutable \n", "markdown": "[MockTokenPermit._decimal](contracts/mock/MockTokenPermit.sol#L15) should be immutable \n", "first_markdown_element": "contracts/mock/MockTokenPermit.sol#L15", "id": "7d38df56cf96afa6f3971ce0bac617c53af1edb4f2ead4eb0f7e3249b00d5357", "check": "immutable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "guardian", "source_mapping": {"start": 295, "length": 23, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "lines": [12], "starting_column": 5, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockTreasury", "source_mapping": {"start": 184, "length": 2455, "filename_relative": "contracts/mock/MockTreasury.sol", "filename_absolute": "/root/angle/agTokens/contracts/mock/MockTreasury.sol", "filename_short": "contracts/mock/MockTreasury.sol", "is_dependency": false, "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], "starting_column": 1, "ending_column": 2}}}}], "description": "MockTreasury.guardian (contracts/mock/MockTreasury.sol#12) should be immutable \n", "markdown": "[MockTreasury.guardian](contracts/mock/MockTreasury.sol#L12) should be immutable \n", "first_markdown_element": "contracts/mock/MockTreasury.sol#L12", "id": "91c68dd14f1ab171771926a27bae8e890acf1dd1a5cf15355ffcf589d9479ad3", "check": "immutable-states", "impact": "Optimization", "confidence": "High"}] \ No newline at end of file diff --git a/utils/forwardUtils.js b/utils/forwardUtils.js index 60e7e28..9edf2e8 100755 --- a/utils/forwardUtils.js +++ b/utils/forwardUtils.js @@ -12,11 +12,11 @@ const extraArgs = process.argv.slice(3).join(' '); exec(`node lib/utils/utils/${command}.js ${extraArgs}`, (error, stdout, stderr) => { if (error) { console.log(error); - return; + process.exit(1); } if (stderr) { console.log(stderr); - return; + process.exit(1); } console.log(stdout); -}); +}); \ No newline at end of file