@openzeppelin/upgrades-core 1.20.6 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/artifacts/build-info.json +117 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +4 -0
- package/dist/provider.js.map +1 -1
- package/dist/src-decoder.js +1 -1
- package/dist/src-decoder.js.map +1 -1
- package/dist/validate/query.d.ts.map +1 -1
- package/dist/validate/query.js +12 -8
- package/dist/validate/query.js.map +1 -1
- package/dist/validate/run.d.ts +5 -0
- package/dist/validate/run.d.ts.map +1 -1
- package/dist/validate/run.js +140 -26
- package/dist/validate/run.js.map +1 -1
- package/dist/validate/run.test.d.ts +2 -0
- package/dist/validate/run.test.d.ts.map +1 -0
- package/dist/validate/run.test.js +43 -0
- package/dist/validate/run.test.js.map +1 -0
- package/dist/validate-ignore-errors.test.d.ts +2 -0
- package/dist/validate-ignore-errors.test.d.ts.map +1 -0
- package/dist/validate-ignore-errors.test.js +123 -0
- package/dist/validate-ignore-errors.test.js.map +1 -0
- package/package.json +2 -2
- package/src/provider.ts +4 -0
- package/src/src-decoder.ts +1 -1
- package/src/validate/query.ts +15 -11
- package/src/validate/run.test.ts +49 -0
- package/src/validate/run.ts +220 -31
- package/src/validate-ignore-errors.test.ts +137 -0
|
@@ -60,6 +60,123 @@
|
|
|
60
60
|
"contracts/import.sol": {
|
|
61
61
|
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\";\nimport \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\";\nimport \"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\";\nimport \"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\";\n\n// Kept for backwards compatibility with older versions of Hardhat and Truffle plugins.\ncontract AdminUpgradeabilityProxy is TransparentUpgradeableProxy {\n constructor(address logic, address admin, bytes memory data) payable TransparentUpgradeableProxy(logic, admin, data) {}\n}\n"
|
|
62
62
|
},
|
|
63
|
+
"contracts/test/ignore-errors/AllowChild.sol": {
|
|
64
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./AllowParent.sol\";\n\ncontract AllowChild is AllowParent {\n function shouldBeAllowed(bytes memory data) public {\n internalDelegateCall(data);\n }\n}\n"
|
|
65
|
+
},
|
|
66
|
+
"contracts/test/ignore-errors/AllowChildCallTransitive.sol": {
|
|
67
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./AllowReachableParentCall.sol\";\n\ncontract AllowChildCallTransitive is AllowReachableParentCall {\n function myfunction(bytes memory data) internal {\n allowed(data);\n }\n}\n"
|
|
68
|
+
},
|
|
69
|
+
"contracts/test/ignore-errors/AllowChildInheritedTransitive.sol": {
|
|
70
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveAllowReachable.sol\";\n\ncontract AllowChildInheritedTransitive is TransitiveAllowReachable {\n}\n"
|
|
71
|
+
},
|
|
72
|
+
"contracts/test/ignore-errors/AllowChildSelfReachable.sol": {
|
|
73
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./AllowParentSelfReachable.sol\";\n\ncontract AllowChildSelfReachable is AllowParentSelfReachable {\n function shouldBeAllowed(bytes memory data) public {\n internalDelegateCall(data);\n }\n}\n"
|
|
74
|
+
},
|
|
75
|
+
"contracts/test/ignore-errors/AllowParent.sol": {
|
|
76
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\n/**\n * allow causes the delegatecall to be ignored for all functions in this contract\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\ncontract AllowParent {\n function internalDelegateCall(\n bytes memory data\n ) internal returns (bytes memory) {\n (, bytes memory returndata) = address(this).delegatecall(data);\n return returndata;\n }\n}"
|
|
77
|
+
},
|
|
78
|
+
"contracts/test/ignore-errors/AllowParentSelfReachable.sol": {
|
|
79
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\n/**\n * allow-reachable causes the delegatecall to be ignored for all functions in this contract, including its own lexical scope\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\ncontract AllowParentSelfReachable {\n function internalDelegateCall(\n bytes memory data\n ) internal returns (bytes memory) {\n (, bytes memory returndata) = address(this).delegatecall(data);\n return returndata;\n }\n}"
|
|
80
|
+
},
|
|
81
|
+
"contracts/test/ignore-errors/AllowReachable.sol": {
|
|
82
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveRiskyLibrary.sol\";\n\n// allow-reachable causes the delegatecall in a transitive function to be ignored\ncontract AllowReachable {\n /// @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n function unsafe(bytes memory data) public {\n TransitiveRiskyLibrary.internalDelegateCall(address(this), data);\n }\n}\n"
|
|
83
|
+
},
|
|
84
|
+
"contracts/test/ignore-errors/AllowReachableParent.sol": {
|
|
85
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveUnsafeParent.sol\";\n\n/**\n * allow-reachable causes the delegatecall in a parent function to be ignored\n *\n * this is actually unsafe but only allowed here for testing purposes!\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\ncontract AllowReachableParent is TransitiveUnsafeParent {\n}\n"
|
|
86
|
+
},
|
|
87
|
+
"contracts/test/ignore-errors/AllowReachableParentCall.sol": {
|
|
88
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyParentContract.sol\";\n\n/**\n * allow-reachable causes the delegatecall to be ignored for all reachable functions from this contract\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\ncontract AllowReachableParentCall is RiskyParentContract {\n function allowed(bytes memory data) internal {\n internalDelegateCall(address(this), data);\n }\n}"
|
|
89
|
+
},
|
|
90
|
+
"contracts/test/ignore-errors/Constructors.sol": {
|
|
91
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nabstract contract UnsafeParent {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor(bytes memory data) {\n msg.sender.delegatecall(data);\n }\n}\n\ncontract UnsafeChild1 is UnsafeParent {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() UnsafeParent('') {}\n\n function foo1(uint x) public {}\n}\n\ncontract UnsafeChild2 is UnsafeParent('') {\n function foo2(uint x) public {}\n}\n\nabstract contract UnsafeParentNoArgs {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n msg.sender.delegatecall('');\n }\n}\n\ncontract UnsafeChild3 is UnsafeParentNoArgs {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() UnsafeParentNoArgs() {}\n\n function foo3(uint x) public {}\n}\n\ncontract UnsafeChild4 is UnsafeParentNoArgs {\n function foo4(uint x) public {}\n}\n\n/**\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract AllowParentNoArgs {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n msg.sender.delegatecall('');\n }\n}\n\ncontract AllowChild5 is AllowParentNoArgs {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() AllowParentNoArgs() {}\n\n function foo5(uint x) public {}\n}\n\ncontract AllowChild6 is AllowParentNoArgs {\n function foo6(uint x) public {}\n}\n\n/**\n * allow has no effect because the delegatecall is in a parent function\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\ncontract UnsafeAllowChild7 is UnsafeParentNoArgs {\n function foo7(uint x) public {}\n}\n\n/**\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\ncontract AllowReachableChild8 is UnsafeParentNoArgs {\n function foo8(uint x) public {}\n}\n\nabstract contract UnsafeFunctions {\n function unsafe() internal {\n msg.sender.delegatecall('');\n }\n}\n\ncontract UnsafeChild9 is UnsafeFunctions {\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n unsafe();\n }\n\n function foo9(uint x) public {}\n}"
|
|
92
|
+
},
|
|
93
|
+
"contracts/test/ignore-errors/Modifiers.sol": {
|
|
94
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nabstract contract UnsafeParentModifier {\n modifier unsafe(bytes memory data) {\n _;\n msg.sender.delegatecall(data);\n }\n}\n\n// TODO: do not throw an error in this case\n// contract ModifierNotUsed is UnsafeParentModifier {\n// function foo() public {}\n// }\n\ncontract ModifierUsed is UnsafeParentModifier {\n function foo() public unsafe('') {}\n}\n"
|
|
95
|
+
},
|
|
96
|
+
"contracts/test/ignore-errors/RiskyFreeFunctions.sol": {
|
|
97
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nfunction isContract(address account) view returns (bool) {\n return account.code.length > 0;\n}\n\nfunction freeDelegateCall(\n address target,\n bytes memory data\n) returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n}\n"
|
|
98
|
+
},
|
|
99
|
+
"contracts/test/ignore-errors/RiskyLibrary.sol": {
|
|
100
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nlibrary RiskyLibrary {\n function isContract(address account) internal view returns (bool) {\n return account.code.length > 0;\n }\n\n function internalDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n function privateDelegateCall(\n address target,\n bytes memory data\n ) private returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n function publicDelegateCall(\n address target,\n bytes memory data\n ) public returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n function externalDelegateCall(\n address target,\n bytes memory data\n ) external returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n}"
|
|
101
|
+
},
|
|
102
|
+
"contracts/test/ignore-errors/RiskyParentContract.sol": {
|
|
103
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\ncontract RiskyParentContract {\n function isContract(address account) internal view returns (bool) {\n return account.code.length > 0;\n }\n\n function internalDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n function privateDelegateCall(\n address target,\n bytes memory data\n ) private returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n}"
|
|
104
|
+
},
|
|
105
|
+
"contracts/test/ignore-errors/SafeContract.sol": {
|
|
106
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\ncontract SafeContract {\n}\n"
|
|
107
|
+
},
|
|
108
|
+
"contracts/test/ignore-errors/SafeContractWithFreeFunctionCall.sol": {
|
|
109
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyFreeFunctions.sol\" as RiskyFreeFunctions;\n\ncontract SafeContractWithFreeFunctionCall {\n function safe() public view returns (bool) {\n return RiskyFreeFunctions.isContract(address(this));\n }\n}\n"
|
|
110
|
+
},
|
|
111
|
+
"contracts/test/ignore-errors/SafeContractWithLibraryCall.sol": {
|
|
112
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\ncontract SafeContractWithLibraryCall {\n function safe() public view returns (bool) {\n return RiskyLibrary.isContract(address(this));\n }\n}\n"
|
|
113
|
+
},
|
|
114
|
+
"contracts/test/ignore-errors/SafeContractWithLibraryImport.sol": {
|
|
115
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\ncontract SafeContractWithLibraryImport {\n\n}\n"
|
|
116
|
+
},
|
|
117
|
+
"contracts/test/ignore-errors/SafeContractWithLibraryUsingFor.sol": {
|
|
118
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\ncontract SafeContractWithLibraryUsingFor {\n using RiskyLibrary for address;\n\n function safe() public view returns (bool) {\n return address(this).isContract();\n }\n}\n"
|
|
119
|
+
},
|
|
120
|
+
"contracts/test/ignore-errors/SafeContractWithParentCall.sol": {
|
|
121
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyParentContract.sol\";\n\ncontract SafeContractWithParentCall is RiskyParentContract {\n function safe() public view returns (bool) {\n return isContract(address(this));\n }\n}\n"
|
|
122
|
+
},
|
|
123
|
+
"contracts/test/ignore-errors/SafeContractWithTransitiveLibraryCall.sol": {
|
|
124
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveRiskyLibrary.sol\";\n\ncontract SafeContractWithTransitiveLibraryCall {\n function safe() public view returns (bool) {\n return TransitiveRiskyLibrary.isContract(address(this));\n }\n}\n"
|
|
125
|
+
},
|
|
126
|
+
"contracts/test/ignore-errors/SafeRecursion.sol": {
|
|
127
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyParentContract.sol\";\n\ncontract SafeRecursion is RiskyParentContract {\n function safe(uint256 i) public view returns (bool) {\n if (++i == 10) {\n return isContract(address(this));\n } else {\n return safe(i);\n }\n }\n}\n"
|
|
128
|
+
},
|
|
129
|
+
"contracts/test/ignore-errors/TransitiveAllowReachable.sol": {
|
|
130
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\n/**\n * allow delegatecalls on all of this contract's functions and reachable code\n *\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\ncontract TransitiveAllowReachable {\n function internalDelegateCall(\n bytes memory data\n ) external returns (bytes memory) {\n return RiskyLibrary.internalDelegateCall(address(this), data);\n }\n}"
|
|
131
|
+
},
|
|
132
|
+
"contracts/test/ignore-errors/TransitiveRiskyLibrary.sol": {
|
|
133
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\nlibrary TransitiveRiskyLibrary {\n function isContract(address account) internal view returns (bool) {\n return RiskyLibrary.isContract(account);\n }\n\n function internalDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return RiskyLibrary.internalDelegateCall(target, data);\n }\n}"
|
|
134
|
+
},
|
|
135
|
+
"contracts/test/ignore-errors/TransitiveUnsafeParent.sol": {
|
|
136
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./UnsafeParentContract.sol\";\n\ncontract TransitiveUnsafeParent is UnsafeParentContract {\n}"
|
|
137
|
+
},
|
|
138
|
+
"contracts/test/ignore-errors/UnsafeAllow.sol": {
|
|
139
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveRiskyLibrary.sol\";\n\n// allow has no effect because the delegatecall is in a transitive function\ncontract UnsafeAllow {\n /// @custom:oz-upgrades-unsafe-allow delegatecall\n function unsafe(address target, bytes memory data) public {\n TransitiveRiskyLibrary.internalDelegateCall(target, data);\n }\n}\n"
|
|
140
|
+
},
|
|
141
|
+
"contracts/test/ignore-errors/UnsafeAllowParent.sol": {
|
|
142
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveUnsafeParent.sol\";\n\n/**\n * allow has no effect because the delegatecall is in a parent function\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\ncontract UnsafeAllowParent is TransitiveUnsafeParent {\n}\n"
|
|
143
|
+
},
|
|
144
|
+
"contracts/test/ignore-errors/UnsafeAllowReachableDifferentOpcode.sol": {
|
|
145
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveRiskyLibrary.sol\";\n\n// allow-reachable has no effect because the transitive function has a different opcode\ncontract UnsafeAllowReachableDifferentOpcode {\n /// @custom:oz-upgrades-unsafe-allow-reachable selfdestruct\n function unsafe(bytes memory data) public {\n TransitiveRiskyLibrary.internalDelegateCall(address(this), data);\n }\n}\n"
|
|
146
|
+
},
|
|
147
|
+
"contracts/test/ignore-errors/UnsafeAllowReachableParentDifferentOpcode.sol": {
|
|
148
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveUnsafeParent.sol\";\n\n/**\n * allow-reachable has no effect because the parent function has a different opcode\n *\n * @custom:oz-upgrades-unsafe-allow-reachable selfdestruct\n */\ncontract UnsafeAllowReachableParentDifferentOpcode is TransitiveUnsafeParent {\n}\n"
|
|
149
|
+
},
|
|
150
|
+
"contracts/test/ignore-errors/UnsafeContract.sol": {
|
|
151
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\ncontract UnsafeContract {\n function externalDelegateCall(\n address target,\n bytes memory data\n ) external returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n}\n"
|
|
152
|
+
},
|
|
153
|
+
"contracts/test/ignore-errors/UnsafeContractWithFreeFunctionCall.sol": {
|
|
154
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyFreeFunctions.sol\" as RiskyFreeFunctions;\n\ncontract UnsafeContractWithFreeFunctionCall {\n function unsafe(address target, bytes memory data) public {\n RiskyFreeFunctions.freeDelegateCall(target, data);\n }\n}\n"
|
|
155
|
+
},
|
|
156
|
+
"contracts/test/ignore-errors/UnsafeContractWithInheritedParent.sol": {
|
|
157
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./UnsafeParentContract.sol\";\n\ncontract UnsafeContractWithInheritedParent is UnsafeParentContract {\n}\n"
|
|
158
|
+
},
|
|
159
|
+
"contracts/test/ignore-errors/UnsafeContractWithInheritedTransitiveParent.sol": {
|
|
160
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveUnsafeParent.sol\";\n\ncontract UnsafeContractWithInheritedTransitiveParent is TransitiveUnsafeParent {\n}\n"
|
|
161
|
+
},
|
|
162
|
+
"contracts/test/ignore-errors/UnsafeContractWithLibraryCall.sol": {
|
|
163
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\ncontract UnsafeContractWithLibraryCall {\n function unsafe(address target, bytes memory data) public {\n RiskyLibrary.internalDelegateCall(target, data);\n }\n}\n"
|
|
164
|
+
},
|
|
165
|
+
"contracts/test/ignore-errors/UnsafeContractWithLibraryUsingFor.sol": {
|
|
166
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyLibrary.sol\";\n\ncontract UnsafeContractWithLibraryUsingFor {\n using RiskyLibrary for address;\n\n function unsafe(address target, bytes memory data) public {\n target.internalDelegateCall(data);\n }\n}\n"
|
|
167
|
+
},
|
|
168
|
+
"contracts/test/ignore-errors/UnsafeContractWithParentCall.sol": {
|
|
169
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyParentContract.sol\";\n\ncontract UnsafeContractWithParentCall is RiskyParentContract {\n function unsafe(address target, bytes memory data) public {\n internalDelegateCall(target, data);\n }\n}\n"
|
|
170
|
+
},
|
|
171
|
+
"contracts/test/ignore-errors/UnsafeContractWithTransitiveLibraryCall.sol": {
|
|
172
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./TransitiveRiskyLibrary.sol\";\n\ncontract UnsafeContractWithTransitiveLibraryCall {\n function unsafe(address target, bytes memory data) public {\n TransitiveRiskyLibrary.internalDelegateCall(target, data);\n }\n}\n"
|
|
173
|
+
},
|
|
174
|
+
"contracts/test/ignore-errors/UnsafeParentContract.sol": {
|
|
175
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\ncontract UnsafeParentContract {\n function isContract(address account) internal view returns (bool) {\n return account.code.length > 0;\n }\n\n function internalDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n function privateDelegateCall(\n address target,\n bytes memory data\n ) private returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n // unsafe!\n function publicDelegateCall(\n address target,\n bytes memory data\n ) public returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n\n // unsafe!\n function externalDelegateCall(\n address target,\n bytes memory data\n ) external returns (bytes memory) {\n (, bytes memory returndata) = target.delegatecall(data);\n return returndata;\n }\n}"
|
|
176
|
+
},
|
|
177
|
+
"contracts/test/ignore-errors/UnsafeRecursion.sol": {
|
|
178
|
+
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"./RiskyParentContract.sol\";\n\ncontract UnsafeRecursion is RiskyParentContract {\n function unsafe(uint256 i, address target, bytes memory data) public returns (bytes memory) {\n if (++i == 10) {\n return internalDelegateCall(target, data);\n } else {\n return unsafe(i, target, data);\n }\n }\n}\n"
|
|
179
|
+
},
|
|
63
180
|
"contracts/test/Memory08.sol": {
|
|
64
181
|
"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.9;\n\ncontract Memory08 {\n mapping(string => address) a;\n mapping(bytes => address) b;\n}\n\ncontract Memory08Bad {\n mapping(bytes => address) a;\n mapping(string => address) b;\n}\n"
|
|
65
182
|
},
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
|
@@ -62,10 +62,14 @@ exports.networkNames = Object.freeze({
|
|
|
62
62
|
4: 'rinkeby',
|
|
63
63
|
5: 'goerli',
|
|
64
64
|
42: 'kovan',
|
|
65
|
+
56: 'bsc',
|
|
66
|
+
97: 'bsc-testnet',
|
|
65
67
|
137: 'polygon',
|
|
66
68
|
80001: 'polygon-mumbai',
|
|
67
69
|
43113: 'avalanche-fuji',
|
|
68
70
|
43114: 'avalanche',
|
|
71
|
+
42220: 'celo',
|
|
72
|
+
44787: 'celo-alfajores',
|
|
69
73
|
});
|
|
70
74
|
async function isDevelopmentNetwork(provider) {
|
|
71
75
|
const chainId = await getChainId(provider);
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/src-decoder.js
CHANGED
|
@@ -16,7 +16,7 @@ function solcInputOutputDecoder(solcInput, solcOutput, basePath = '.') {
|
|
|
16
16
|
if (sourcePath === undefined) {
|
|
17
17
|
throw new Error(`Source file not available`);
|
|
18
18
|
}
|
|
19
|
-
const content = solcInput.sources[sourcePath]
|
|
19
|
+
const content = solcInput.sources[sourcePath]?.content;
|
|
20
20
|
const name = path_1.default.relative(basePath, sourcePath);
|
|
21
21
|
if (content === undefined) {
|
|
22
22
|
throw new Error(`Content for ${name} not available`);
|
package/dist/src-decoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src-decoder.js","sourceRoot":"","sources":["../src/src-decoder.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAUxB,SAAgB,sBAAsB,CAAC,SAAoB,EAAE,UAAsB,EAAE,QAAQ,GAAG,GAAG;IACjG,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,SAAS,SAAS,CAAC,QAAgB;QACjC,IAAI,QAAQ,IAAI,OAAO,EAAE;YACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC1B;aAAM;YACL,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;aAC9C;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"src-decoder.js","sourceRoot":"","sources":["../src/src-decoder.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAUxB,SAAgB,sBAAsB,CAAC,SAAoB,EAAE,UAAsB,EAAE,QAAQ,GAAG,GAAG;IACjG,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,SAAS,SAAS,CAAC,QAAgB;QACjC,IAAI,QAAQ,IAAI,OAAO,EAAE;YACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC1B;aAAM;YACL,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;aAC9C;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;YACvD,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,gBAAgB,CAAC,CAAC;aACtD;YACD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SAChD;IACH,CAAC;IAED,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;QACjB,MAAM,CAAC,KAAK,EAAE,AAAD,EAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACzD,OAAO,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC;AA1BD,wDA0BC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAiB,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAA2B,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CASvG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAkB5F;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAqBnH;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAItF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,aAAa,CAiBvG;AAED,wBAAiB,iCAAiC,CAChD,IAAI,EAAE,cAAc,EACpB,sBAAsB,EAAE,MAAM,GAC7B,SAAS,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAUxC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBlF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,iBAAsB,GAAG,eAAe,EAAE,CAiBjH;AA0BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAG7E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAS9F"}
|
package/dist/validate/query.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.inferProxyKind = exports.isUpgradeSafe = exports.getErrors = exports.getUnlinkedBytecode = exports.findVersionWithoutMetadataMatches = exports.unfoldStorageLayout = exports.getStorageLayout = exports.getContractNameAndRunValidation = exports.getContractVersion = exports.assertUpgradeSafe = void 0;
|
|
4
4
|
const version_1 = require("../version");
|
|
5
|
+
const run_1 = require("./run");
|
|
5
6
|
const link_refs_1 = require("../link-refs");
|
|
6
7
|
const overrides_1 = require("./overrides");
|
|
7
8
|
const error_1 = require("./error");
|
|
@@ -125,7 +126,7 @@ function getErrors(data, version, opts = {}) {
|
|
|
125
126
|
const dataV3 = (0, data_1.normalizeValidationData)(data);
|
|
126
127
|
const [fullContractName, runValidation] = getContractNameAndRunValidation(dataV3, version);
|
|
127
128
|
const c = runValidation[fullContractName];
|
|
128
|
-
const errors =
|
|
129
|
+
const errors = getAllErrors(runValidation, fullContractName);
|
|
129
130
|
const selfAndInheritedMethods = getAllMethods(runValidation, fullContractName);
|
|
130
131
|
if (!selfAndInheritedMethods.includes(upgradeToSignature)) {
|
|
131
132
|
errors.push({
|
|
@@ -136,20 +137,23 @@ function getErrors(data, version, opts = {}) {
|
|
|
136
137
|
return (0, overrides_1.processExceptions)(fullContractName, errors, opts);
|
|
137
138
|
}
|
|
138
139
|
exports.getErrors = getErrors;
|
|
140
|
+
function getAllErrors(runValidation, fullContractName) {
|
|
141
|
+
// add self's opcode errors only, since opcode errors already include parents
|
|
142
|
+
const opcodeErrors = runValidation[fullContractName].errors.filter(error => (0, run_1.isOpcodeError)(error));
|
|
143
|
+
// add other errors from self and inherited contracts
|
|
144
|
+
const otherErrors = getUsedContracts(fullContractName, runValidation)
|
|
145
|
+
.flatMap(name => runValidation[name].errors)
|
|
146
|
+
.filter(error => !(0, run_1.isOpcodeError)(error));
|
|
147
|
+
return [...opcodeErrors, ...otherErrors];
|
|
148
|
+
}
|
|
139
149
|
function getAllMethods(runValidation, fullContractName) {
|
|
140
150
|
const c = runValidation[fullContractName];
|
|
141
151
|
return c.methods.concat(...c.inherit.map(name => runValidation[name].methods));
|
|
142
152
|
}
|
|
143
|
-
function
|
|
153
|
+
function getUsedContracts(contractName, runValidation) {
|
|
144
154
|
const c = runValidation[contractName];
|
|
145
155
|
// Add current contract and all of its parents
|
|
146
156
|
const res = new Set([contractName, ...c.inherit]);
|
|
147
|
-
// Add used libraries transitively until no more are found
|
|
148
|
-
for (const c1 of res) {
|
|
149
|
-
for (const c2 of runValidation[c1].libraries) {
|
|
150
|
-
res.add(c2);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
157
|
return Array.from(res);
|
|
154
158
|
}
|
|
155
159
|
function isUpgradeSafe(data, version) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":";;;AAAA,wCAAiD;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"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"}
|
package/dist/validate/run.d.ts
CHANGED
|
@@ -32,9 +32,14 @@ interface ValidationErrorConstructor extends ValidationErrorBase {
|
|
|
32
32
|
interface ValidationErrorOpcode extends ValidationErrorBase {
|
|
33
33
|
kind: 'delegatecall' | 'selfdestruct';
|
|
34
34
|
}
|
|
35
|
+
export declare function isOpcodeError(error: ValidationErrorBase): error is ValidationErrorOpcode;
|
|
35
36
|
interface ValidationErrorUpgradeability extends ValidationErrorBase {
|
|
36
37
|
kind: 'missing-public-upgradeto';
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Get args from the doc string matching the given tag
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAnnotationArgs(doc: string, tag: string): string[];
|
|
38
43
|
export declare function validate(solcOutput: SolcOutput, decodeSrc: SrcDecoder, solcVersion?: string): ValidationRunData;
|
|
39
44
|
export {};
|
|
40
45
|
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,UAAU,mNAUN,CAAC;AAEX,MAAM,MAAM,eAAe,GACvB,0BAA0B,GAC1B,qBAAqB,GACrB,uBAAuB,GACvB,6BAA6B,CAAC;AAElC,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,UAAU,uBAAwB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,mBAAmB,GACnB,iBAAiB,CAAC;CACvB;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC;CACvC;AAED,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,IAAI,EAAE,0BAA0B,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,UAAU,mNAUN,CAAC;AAEX,MAAM,MAAM,eAAe,GACvB,0BAA0B,GAC1B,qBAAqB,GACrB,uBAAuB,GACvB,6BAA6B,CAAC;AAElC,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,UAAU,uBAAwB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,mBAAmB,GACnB,iBAAiB,CAAC;CACvB;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC;CACvC;AAkBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAExF;AAED,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAwBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAqBzD;AAeD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA6E/G"}
|
package/dist/validate/run.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validate = void 0;
|
|
3
|
+
exports.validate = exports.getAnnotationArgs = exports.isOpcodeError = void 0;
|
|
4
4
|
const utils_1 = require("solidity-ast/utils");
|
|
5
5
|
const ast_dereferencer_1 = require("../ast-dereferencer");
|
|
6
6
|
const is_nullish_1 = require("../utils/is-nullish");
|
|
@@ -19,6 +19,20 @@ const errorKinds = [
|
|
|
19
19
|
'selfdestruct',
|
|
20
20
|
'missing-public-upgradeto',
|
|
21
21
|
];
|
|
22
|
+
const OPCODES = {
|
|
23
|
+
delegatecall: {
|
|
24
|
+
kind: 'delegatecall',
|
|
25
|
+
pattern: /^t_function_baredelegatecall_/,
|
|
26
|
+
},
|
|
27
|
+
selfdestruct: {
|
|
28
|
+
kind: 'selfdestruct',
|
|
29
|
+
pattern: /^t_function_selfdestruct_/,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
function isOpcodeError(error) {
|
|
33
|
+
return error.kind === 'delegatecall' || error.kind === 'selfdestruct';
|
|
34
|
+
}
|
|
35
|
+
exports.isOpcodeError = isOpcodeError;
|
|
22
36
|
function* execall(re, text) {
|
|
23
37
|
re = new RegExp(re, re.flags + (re.sticky ? '' : 'y'));
|
|
24
38
|
while (true) {
|
|
@@ -31,28 +45,43 @@ function* execall(re, text) {
|
|
|
31
45
|
}
|
|
32
46
|
}
|
|
33
47
|
}
|
|
34
|
-
function getAllowed(node) {
|
|
48
|
+
function getAllowed(node, reachable) {
|
|
35
49
|
if ('documentation' in node) {
|
|
50
|
+
const tag = `oz-upgrades-unsafe-allow${reachable ? '-reachable' : ''}`;
|
|
36
51
|
const doc = typeof node.documentation === 'string' ? node.documentation : node.documentation?.text ?? '';
|
|
37
|
-
|
|
38
|
-
for (const { groups } of execall(/^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s@\w+)[^])*)/m, doc)) {
|
|
39
|
-
if (groups && groups.title === 'custom' && groups.tag === 'oz-upgrades-unsafe-allow') {
|
|
40
|
-
result.push(...groups.args.split(/\s+/));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
result.forEach(arg => {
|
|
44
|
-
if (!errorKinds.includes(arg)) {
|
|
45
|
-
throw new Error(`NatSpec: oz-upgrades-unsafe-allow argument not recognized: ${arg}`);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
return result;
|
|
52
|
+
return getAnnotationArgs(doc, tag);
|
|
49
53
|
}
|
|
50
54
|
else {
|
|
51
55
|
return [];
|
|
52
56
|
}
|
|
53
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Get args from the doc string matching the given tag
|
|
60
|
+
*/
|
|
61
|
+
function getAnnotationArgs(doc, tag) {
|
|
62
|
+
const result = [];
|
|
63
|
+
for (const { groups } of execall(/^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s*@\w+)[^])*)/m, doc)) {
|
|
64
|
+
if (groups && groups.title === 'custom' && groups.tag === tag) {
|
|
65
|
+
const trimmedArgs = groups.args.trim();
|
|
66
|
+
if (trimmedArgs.length > 0) {
|
|
67
|
+
result.push(...trimmedArgs.split(/\s+/));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
result.forEach(arg => {
|
|
72
|
+
if (!errorKinds.includes(arg)) {
|
|
73
|
+
throw new Error(`NatSpec: ${tag} argument not recognized: ${arg}`);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
exports.getAnnotationArgs = getAnnotationArgs;
|
|
79
|
+
function skipCheckReachable(error, node) {
|
|
80
|
+
return getAllowed(node, true).includes(error);
|
|
81
|
+
}
|
|
54
82
|
function skipCheck(error, node) {
|
|
55
|
-
|
|
83
|
+
// skip both allow and allow-reachable errors in the lexical scope
|
|
84
|
+
return getAllowed(node, false).includes(error) || getAllowed(node, true).includes(error);
|
|
56
85
|
}
|
|
57
86
|
function getFullyQualifiedName(source, contractName) {
|
|
58
87
|
return `${source}:${contractName}`;
|
|
@@ -63,6 +92,8 @@ function validate(solcOutput, decodeSrc, solcVersion) {
|
|
|
63
92
|
const inheritIds = {};
|
|
64
93
|
const libraryIds = {};
|
|
65
94
|
const deref = (0, ast_dereferencer_1.astDereferencer)(solcOutput);
|
|
95
|
+
const delegateCallCache = initOpcodeCache();
|
|
96
|
+
const selfDestructCache = initOpcodeCache();
|
|
66
97
|
for (const source in solcOutput.contracts) {
|
|
67
98
|
for (const contractName in solcOutput.contracts[source]) {
|
|
68
99
|
const bytecode = solcOutput.contracts[source][contractName].evm.bytecode;
|
|
@@ -94,7 +125,7 @@ function validate(solcOutput, decodeSrc, solcVersion) {
|
|
|
94
125
|
validation[key].src = decodeSrc(contractDef);
|
|
95
126
|
validation[key].errors = [
|
|
96
127
|
...getConstructorErrors(contractDef, decodeSrc),
|
|
97
|
-
...getOpcodeErrors(contractDef, decodeSrc),
|
|
128
|
+
...getOpcodeErrors(contractDef, deref, decodeSrc, delegateCallCache, selfDestructCache),
|
|
98
129
|
...getStateVariableErrors(contractDef, decodeSrc),
|
|
99
130
|
// TODO: add linked libraries support
|
|
100
131
|
// https://github.com/OpenZeppelin/openzeppelin-upgrades/issues/52
|
|
@@ -127,26 +158,109 @@ function* getConstructorErrors(contractDef, decodeSrc) {
|
|
|
127
158
|
}
|
|
128
159
|
}
|
|
129
160
|
}
|
|
130
|
-
function
|
|
131
|
-
|
|
161
|
+
function initOpcodeCache() {
|
|
162
|
+
return {
|
|
163
|
+
mainContractErrors: new Map(),
|
|
164
|
+
inheritedContractErrors: new Map(),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function* getOpcodeErrors(contractDef, deref, decodeSrc, delegateCallCache, selfDestructCache) {
|
|
168
|
+
yield* getContractOpcodeErrors(contractDef, deref, decodeSrc, OPCODES.delegatecall, 'main', delegateCallCache);
|
|
169
|
+
yield* getContractOpcodeErrors(contractDef, deref, decodeSrc, OPCODES.selfdestruct, 'main', selfDestructCache);
|
|
170
|
+
}
|
|
171
|
+
function* getContractOpcodeErrors(contractDef, deref, decodeSrc, opcode, scope, cache) {
|
|
172
|
+
const cached = getCachedOpcodes(contractDef.id, scope, cache);
|
|
173
|
+
if (cached !== undefined) {
|
|
174
|
+
yield* cached;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const errors = [];
|
|
178
|
+
setCachedOpcodes(contractDef.id, scope, cache, errors);
|
|
179
|
+
errors.push(...getFunctionOpcodeErrors(contractDef, deref, decodeSrc, opcode, scope, cache), ...getInheritedContractOpcodeErrors(contractDef, deref, decodeSrc, opcode, cache));
|
|
180
|
+
yield* errors;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function getCachedOpcodes(key, scope, cache) {
|
|
184
|
+
return scope === 'main' ? cache.mainContractErrors.get(key) : cache.inheritedContractErrors.get(key);
|
|
185
|
+
}
|
|
186
|
+
function* getFunctionOpcodeErrors(contractOrFunctionDef, deref, decodeSrc, opcode, scope, cache) {
|
|
187
|
+
const parentContractDef = getParentDefinition(deref, contractOrFunctionDef);
|
|
188
|
+
if (parentContractDef === undefined || !skipCheck(opcode.kind, parentContractDef)) {
|
|
189
|
+
yield* getDirectFunctionOpcodeErrors(contractOrFunctionDef, decodeSrc, opcode, scope);
|
|
190
|
+
}
|
|
191
|
+
if (parentContractDef === undefined || !skipCheckReachable(opcode.kind, parentContractDef)) {
|
|
192
|
+
yield* getReferencedFunctionOpcodeErrors(contractOrFunctionDef, deref, decodeSrc, opcode, scope, cache);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function* getDirectFunctionOpcodeErrors(contractOrFunctionDef, decodeSrc, opcode, scope) {
|
|
196
|
+
for (const fnCall of (0, utils_1.findAll)('FunctionCall', contractOrFunctionDef, node => skipCheck(opcode.kind, node) || (scope === 'inherited' && isInternalFunction(node)))) {
|
|
132
197
|
const fn = fnCall.expression;
|
|
133
|
-
if (fn.typeDescriptions.typeIdentifier?.match(
|
|
198
|
+
if (fn.typeDescriptions.typeIdentifier?.match(opcode.pattern)) {
|
|
134
199
|
yield {
|
|
135
|
-
kind:
|
|
200
|
+
kind: opcode.kind,
|
|
136
201
|
src: decodeSrc(fnCall),
|
|
137
202
|
};
|
|
138
203
|
}
|
|
139
204
|
}
|
|
140
|
-
|
|
205
|
+
}
|
|
206
|
+
function* getReferencedFunctionOpcodeErrors(contractOrFunctionDef, deref, decodeSrc, opcode, scope, cache) {
|
|
207
|
+
for (const fnCall of (0, utils_1.findAll)('FunctionCall', contractOrFunctionDef, node => skipCheckReachable(opcode.kind, node) || (scope === 'inherited' && isInternalFunction(node)))) {
|
|
141
208
|
const fn = fnCall.expression;
|
|
142
|
-
if (fn.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
209
|
+
if ('referencedDeclaration' in fn && fn.referencedDeclaration && fn.referencedDeclaration > 0) {
|
|
210
|
+
// non-positive references refer to built-in functions
|
|
211
|
+
const referencedNode = tryDerefFunction(deref, fn.referencedDeclaration);
|
|
212
|
+
if (referencedNode !== undefined) {
|
|
213
|
+
const cached = getCachedOpcodes(referencedNode.id, scope, cache);
|
|
214
|
+
if (cached !== undefined) {
|
|
215
|
+
yield* cached;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
const errors = [];
|
|
219
|
+
setCachedOpcodes(referencedNode.id, scope, cache, errors);
|
|
220
|
+
errors.push(...getFunctionOpcodeErrors(referencedNode, deref, decodeSrc, opcode, scope, cache));
|
|
221
|
+
yield* errors;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
147
224
|
}
|
|
148
225
|
}
|
|
149
226
|
}
|
|
227
|
+
function setCachedOpcodes(key, scope, cache, errors) {
|
|
228
|
+
if (scope === 'main') {
|
|
229
|
+
cache.mainContractErrors.set(key, errors);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
cache.inheritedContractErrors.set(key, errors);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function tryDerefFunction(deref, referencedDeclaration) {
|
|
236
|
+
try {
|
|
237
|
+
return deref(['FunctionDefinition'], referencedDeclaration);
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
if (!e.message.includes('No node with id')) {
|
|
241
|
+
throw e;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function* getInheritedContractOpcodeErrors(contractDef, deref, decodeSrc, opcode, cache) {
|
|
246
|
+
if (!skipCheckReachable(opcode.kind, contractDef)) {
|
|
247
|
+
for (const base of contractDef.baseContracts) {
|
|
248
|
+
const referencedContract = deref('ContractDefinition', base.baseName.referencedDeclaration);
|
|
249
|
+
yield* getContractOpcodeErrors(referencedContract, deref, decodeSrc, opcode, 'inherited', cache);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function getParentDefinition(deref, contractOrFunctionDef) {
|
|
254
|
+
const parentNode = deref(['ContractDefinition', 'SourceUnit'], contractOrFunctionDef.scope);
|
|
255
|
+
if (parentNode.nodeType === 'ContractDefinition') {
|
|
256
|
+
return parentNode;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function isInternalFunction(node) {
|
|
260
|
+
return (node.nodeType === 'FunctionDefinition' &&
|
|
261
|
+
node.kind !== 'constructor' && // do not consider constructors as internal, because they are always called by children contracts' constructors
|
|
262
|
+
(node.visibility === 'internal' || node.visibility === 'private'));
|
|
263
|
+
}
|
|
150
264
|
function* getStateVariableErrors(contractDef, decodeSrc) {
|
|
151
265
|
for (const varDecl of contractDef.nodes) {
|
|
152
266
|
if ((0, utils_1.isNodeType)('VariableDeclaration', varDecl)) {
|