From 8831dfa460866b65f000bc19ff16acf3f8893a2b Mon Sep 17 00:00:00 2001 From: Albert Date: Wed, 27 Mar 2024 18:48:13 +0800 Subject: [PATCH] feat: update comment --- slither.db.json | 1 + src/ProxyAdminMultiSig.sol | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 slither.db.json diff --git a/slither.db.json b/slither.db.json new file mode 100644 index 0000000..5c6cc0a --- /dev/null +++ b/slither.db.json @@ -0,0 +1 @@ +[{"elements": [{"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}, {"type": "node", "name": "IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation)", "source_mapping": {"start": 4095, "length": 55, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [121], "starting_column": 13, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation)", "source_mapping": {"start": 4304, "length": 53, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [124], "starting_column": 13, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data)", "source_mapping": {"start": 4520, "length": 68, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [127], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_proposals[proposalId].status = Const.STATUS_EXECUTED", "source_mapping": {"start": 4826, "length": 53, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [135], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_proposals"}}], "description": "Reentrancy in ProxyAdminMultiSig.executeProposal(uint256) (src/ProxyAdminMultiSig.sol#114-136):\n\tExternal calls:\n\t- IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation) (src/ProxyAdminMultiSig.sol#121)\n\t- IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation) (src/ProxyAdminMultiSig.sol#124)\n\t- IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data) (src/ProxyAdminMultiSig.sol#127)\n\tState variables written after the call(s):\n\t- _proposals[proposalId].status = Const.STATUS_EXECUTED (src/ProxyAdminMultiSig.sol#135)\n\tProxyAdminMultiSig._proposals (src/ProxyAdminMultiSig.sol#31) can be used in cross function reentrancies:\n\t- ProxyAdminMultiSig._hasApproved(address,uint256) (src/ProxyAdminMultiSig.sol#220-231)\n\t- ProxyAdminMultiSig.approveProposal(uint256) (src/ProxyAdminMultiSig.sol#98-111)\n\t- ProxyAdminMultiSig.deleteProposal(uint256) (src/ProxyAdminMultiSig.sol#139-148)\n\t- ProxyAdminMultiSig.executeProposal(uint256) (src/ProxyAdminMultiSig.sol#114-136)\n\t- ProxyAdminMultiSig.getAllProposals(uint256,uint256) (src/ProxyAdminMultiSig.sol#162-172)\n\t- ProxyAdminMultiSig.getPendingProposals() (src/ProxyAdminMultiSig.sol#151-159)\n\t- ProxyAdminMultiSig.propose(address,string,address,bytes) (src/ProxyAdminMultiSig.sol#71-95)\n", "markdown": "Reentrancy in [ProxyAdminMultiSig.executeProposal(uint256)](src/ProxyAdminMultiSig.sol#L114-L136):\n\tExternal calls:\n\t- [IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation)](src/ProxyAdminMultiSig.sol#L121)\n\t- [IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation)](src/ProxyAdminMultiSig.sol#L124)\n\t- [IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data)](src/ProxyAdminMultiSig.sol#L127)\n\tState variables written after the call(s):\n\t- [_proposals[proposalId].status = Const.STATUS_EXECUTED](src/ProxyAdminMultiSig.sol#L135)\n\t[ProxyAdminMultiSig._proposals](src/ProxyAdminMultiSig.sol#L31) can be used in cross function reentrancies:\n\t- [ProxyAdminMultiSig._hasApproved(address,uint256)](src/ProxyAdminMultiSig.sol#L220-L231)\n\t- [ProxyAdminMultiSig.approveProposal(uint256)](src/ProxyAdminMultiSig.sol#L98-L111)\n\t- [ProxyAdminMultiSig.deleteProposal(uint256)](src/ProxyAdminMultiSig.sol#L139-L148)\n\t- [ProxyAdminMultiSig.executeProposal(uint256)](src/ProxyAdminMultiSig.sol#L114-L136)\n\t- [ProxyAdminMultiSig.getAllProposals(uint256,uint256)](src/ProxyAdminMultiSig.sol#L162-L172)\n\t- [ProxyAdminMultiSig.getPendingProposals()](src/ProxyAdminMultiSig.sol#L151-L159)\n\t- [ProxyAdminMultiSig.propose(address,string,address,bytes)](src/ProxyAdminMultiSig.sol#L71-L95)\n", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L114-L136", "id": "076e45afd87cbc5362661095f76d96e47f08bd1341bad44ef05b246f17a909b5", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}, {"type": "node", "name": "IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation)", "source_mapping": {"start": 4095, "length": 55, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [121], "starting_column": 13, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation)", "source_mapping": {"start": 4304, "length": 53, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [124], "starting_column": 13, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data)", "source_mapping": {"start": 4520, "length": 68, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [127], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation)", "source_mapping": {"start": 4095, "length": 55, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [121], "starting_column": 13, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation)", "source_mapping": {"start": 4304, "length": 53, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [124], "starting_column": 13, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data)", "source_mapping": {"start": 4520, "length": 68, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [127], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_deletePendingProposalId(proposalId)", "source_mapping": {"start": 4780, "length": 36, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [134], "starting_column": 9, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "executeProposal", "source_mapping": {"start": 3811, "length": 1075, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "executeProposal(uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_pendingProposalIds"}}, {"type": "node", "name": "_pendingProposalIds[index] = _pendingProposalIds[lastIndex]", "source_mapping": {"start": 7113, "length": 59, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [199], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "_deletePendingProposalId", "source_mapping": {"start": 6716, "length": 563, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "_deletePendingProposalId(uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_pendingProposalIds"}}, {"type": "node", "name": "_pendingProposalIds.pop()", "source_mapping": {"start": 7237, "length": 25, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [203], "starting_column": 13, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "function", "name": "_deletePendingProposalId", "source_mapping": {"start": 6716, "length": 563, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "_deletePendingProposalId(uint256)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "_pendingProposalIds"}}], "description": "Reentrancy in ProxyAdminMultiSig.executeProposal(uint256) (src/ProxyAdminMultiSig.sol#114-136):\n\tExternal calls:\n\t- IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation) (src/ProxyAdminMultiSig.sol#121)\n\t- IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation) (src/ProxyAdminMultiSig.sol#124)\n\t- IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data) (src/ProxyAdminMultiSig.sol#127)\n\tState variables written after the call(s):\n\t- _deletePendingProposalId(proposalId) (src/ProxyAdminMultiSig.sol#134)\n\t\t- _pendingProposalIds[index] = _pendingProposalIds[lastIndex] (src/ProxyAdminMultiSig.sol#199)\n\t\t- _pendingProposalIds.pop() (src/ProxyAdminMultiSig.sol#203)\n", "markdown": "Reentrancy in [ProxyAdminMultiSig.executeProposal(uint256)](src/ProxyAdminMultiSig.sol#L114-L136):\n\tExternal calls:\n\t- [IProxy(p.proxy).changeAdmin(p.newAdminOrImplementation)](src/ProxyAdminMultiSig.sol#L121)\n\t- [IProxy(p.proxy).upgradeTo(p.newAdminOrImplementation)](src/ProxyAdminMultiSig.sol#L124)\n\t- [IProxy(p.proxy).upgradeToAndCall(p.newAdminOrImplementation,p.data)](src/ProxyAdminMultiSig.sol#L127)\n\tState variables written after the call(s):\n\t- [_deletePendingProposalId(proposalId)](src/ProxyAdminMultiSig.sol#L134)\n\t\t- [_pendingProposalIds[index] = _pendingProposalIds[lastIndex]](src/ProxyAdminMultiSig.sol#L199)\n\t\t- [_pendingProposalIds.pop()](src/ProxyAdminMultiSig.sol#L203)\n", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L114-L136", "id": "c22b6c10e08b3f965dc7cf4bd0f643434b787c8c5028c6bb1c068abc3d39c3f2", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "pragma", "name": "0.8.20", "source_mapping": {"start": 75, "length": 23, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".20"]}}], "description": "Pragma version0.8.20 (src/ProxyAdminMultiSig.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.20](src/ProxyAdminMultiSig.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L3", "id": "a7e4ef1326204dccae5165857260ab48541ddd775c5f1bff983ebd28ffe460c2", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.20", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IErrors.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/interfaces/IErrors.sol", "filename_short": "src/interfaces/IErrors.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".20"]}}], "description": "Pragma version0.8.20 (src/interfaces/IErrors.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.20](src/interfaces/IErrors.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IErrors.sol#L2", "id": "bf0d777551a91fd653d8afcae051f5e4ff06f5be316fb15c6f91dfc04a9fb985", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.20", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/interfaces/IProxy.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/interfaces/IProxy.sol", "filename_short": "src/interfaces/IProxy.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".20"]}}], "description": "Pragma version0.8.20 (src/interfaces/IProxy.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.20](src/interfaces/IProxy.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/interfaces/IProxy.sol#L2", "id": "f01f3880f463bb6512edc17d230431812a6a407f0dbd6d41fe7ad3320137f294", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.20", "source_mapping": {"start": 33, "length": 23, "filename_relative": "src/libraries/Const.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/libraries/Const.sol", "filename_short": "src/libraries/Const.sol", "is_dependency": false, "lines": [3], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".20"]}}], "description": "Pragma version0.8.20 (src/libraries/Const.sol#3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.20](src/libraries/Const.sol#L3) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/libraries/Const.sol#L3", "id": "074bdbdb72fcae6ecf70b55bb4ce7e84b9bdd1f06bf63cdc4eded73296032486", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "pragma", "name": "0.8.20", "source_mapping": {"start": 32, "length": 23, "filename_relative": "src/libraries/Events.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/libraries/Events.sol", "filename_short": "src/libraries/Events.sol", "is_dependency": false, "lines": [2], "starting_column": 1, "ending_column": 24}, "type_specific_fields": {"directive": ["solidity", "0.8", ".20"]}}], "description": "Pragma version0.8.20 (src/libraries/Events.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "markdown": "Pragma version[0.8.20](src/libraries/Events.sol#L2) necessitates a version too recent to be trusted. Consider deploying with 0.8.18.\n", "first_markdown_element": "src/libraries/Events.sol#L2", "id": "ea7bff461516d359f6fe3926b790bd156870eea84d141a021da8de6a226e2bc1", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [], "description": "solc-0.8.20 is not recommended for deployment\n", "markdown": "solc-0.8.20 is not recommended for deployment\n", "first_markdown_element": "", "id": "5994d07edbbb82fc2013b486f41a2fa69898d896bb171a7f7c8bd767eb5b6521", "check": "solc-version", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "i < _pendingProposalIds.length", "source_mapping": {"start": 8642, "length": 30, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [241], "starting_column": 29, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "_getPendingProposalIndex", "source_mapping": {"start": 8491, "length": 325, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [239, 240, 241, 242, 243, 244, 245, 246, 247], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}, "signature": "_getPendingProposalIndex(uint256)"}}}}], "description": "Loop condition i < _pendingProposalIds.length (src/ProxyAdminMultiSig.sol#241) should use cached array length instead of referencing `length` member of the storage array.\n ", "markdown": "Loop condition [i < _pendingProposalIds.length](src/ProxyAdminMultiSig.sol#L241) should use cached array length instead of referencing `length` member of the storage array.\n ", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L241", "id": "3a03db745472d1f614c5e93d1979f3bcd1089d87e1200b951d785e2acaa0aaa4", "check": "cache-array-length", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_ownersCount", "source_mapping": {"start": 778, "length": 29, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [26], "starting_column": 5, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}}}], "description": "ProxyAdminMultiSig._ownersCount (src/ProxyAdminMultiSig.sol#26) should be immutable \n", "markdown": "[ProxyAdminMultiSig._ownersCount](src/ProxyAdminMultiSig.sol#L26) should be immutable \n", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L26", "id": "eddc3386aabf15fef8896e0876ca0ee512b96ac02fce0b15abff2e7942767d2c", "check": "immutable-states", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_threshold", "source_mapping": {"start": 813, "length": 27, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [27], "starting_column": 5, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "contract", "name": "ProxyAdminMultiSig", "source_mapping": {"start": 291, "length": 8963, "filename_relative": "src/ProxyAdminMultiSig.sol", "filename_absolute": "/Users/zhuliting/github/upgrade-via-multisigwallet/src/ProxyAdminMultiSig.sol", "filename_short": "src/ProxyAdminMultiSig.sol", "is_dependency": false, "lines": [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262], "starting_column": 1, "ending_column": 2}}}}], "description": "ProxyAdminMultiSig._threshold (src/ProxyAdminMultiSig.sol#27) should be immutable \n", "markdown": "[ProxyAdminMultiSig._threshold](src/ProxyAdminMultiSig.sol#L27) should be immutable \n", "first_markdown_element": "src/ProxyAdminMultiSig.sol#L27", "id": "915b72670e07ab4291ce272cdb96a2711290995e7e191f9f36dd869015fee314", "check": "immutable-states", "impact": "Optimization", "confidence": "High"}] \ No newline at end of file diff --git a/src/ProxyAdminMultiSig.sol b/src/ProxyAdminMultiSig.sol index 2705e08..d6bf7c1 100644 --- a/src/ProxyAdminMultiSig.sol +++ b/src/ProxyAdminMultiSig.sol @@ -188,6 +188,7 @@ contract ProxyAdminMultiSig is IErrors { return owner != Const.SENTINEL_OWNER && _owners[owner] != address(0); } + /// @dev delete a pending proposal by proposalId function _deletePendingProposalId(uint256 proposalId) internal { // find index to be deleted uint256 index = _getPendingProposalIndex(proposalId); @@ -204,6 +205,7 @@ contract ProxyAdminMultiSig is IErrors { } } + /// @dev get all owners function _getOwners() internal view returns (address[] memory) { address[] memory array = new address[](_ownersCount); @@ -217,6 +219,7 @@ contract ProxyAdminMultiSig is IErrors { return array; } + /// @dev check if an owner has approved a proposal function _hasApproved(address owner, uint256 proposalId) internal view returns (bool) { uint256 index = MAX_UINT256; address[] memory approvals = _proposals[proposalId].approvals; @@ -230,6 +233,7 @@ contract ProxyAdminMultiSig is IErrors { return index != MAX_UINT256; } + /// @dev check if a proposal is pending function _isPendingProposal(uint256 proposalId) internal view returns (bool) { uint256 index = _getPendingProposalIndex(proposalId); return index != MAX_UINT256; @@ -246,16 +250,12 @@ contract ProxyAdminMultiSig is IErrors { } } - /** - * @dev Returns the smallest of two numbers. - */ + /// @dev Returns the smallest of two numbers. function _min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } - /** - * @dev Returns true if the two strings are equal. - */ + /// @devReturns true if the two strings are equal. function _equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); }