Update tests.

This commit is contained in:
chriseth committed 2021-04-12 13:43:56 +02:00
1 parent 72d0a56a72
commit 2ed17e4b43
6 files changed
+86 -10

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
### 0.8.4 (unreleased)
Important Bugfixes:
* ABI Decoder V2: For two-dimensional arrays and specially crafted data in memory, the result of ``abi.decode`` can depend on data elsewhere in memory. Calldata decoding is not affected.
Language Features:
* Assembly / Yul: Allow hex string literals.
* Possibility to use ``bytes.concat`` with variable number of ``bytes`` and ``bytesNN`` arguments which behaves as a restricted version of `abi.encodePacked` with a more descriptive name.
+11
View File
@@ -1,4 +1,15 @@
[
{
"name": "ABIDecodeTwoDimensionalArrayMemory",
"summary": "If used on memory byte arrays, result of the function ``abi.decode`` can depend on the contents of memory outside of the actual byte array that is decoded.",
"description": "The ABI specification uses pointers to data areas for everything that is dynamically-sized. When decoding data from memory (instead of calldata), the ABI decoder did not properly validate some of these pointers. More specifically, it was possible to use large values for the pointers inside arrays such that computing the offset resulted in an undetected overflow. This could lead to these pointers targeting areas in memory outside of the actual area to be decoded. This way, it was possible for ``abi.decode`` to return different values for the same encoded byte array.",
"introduced": "0.4.16",
"fixed": "0.8.4",
"conditions": {
"ABIEncoderV2": true
},
"severity": "very low"
},
{
"name": "KeccakCaching",
"summary": "The bytecode optimizer incorrectly re-used previously evaluated Keccak-256 hashes. You are unlikely to be affected if you do not compute Keccak-256 hashes in inline assembly.",
+55 -1
View File
@@ -595,6 +595,7 @@
},
"0.4.16": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -615,6 +616,7 @@
},
"0.4.17": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -636,6 +638,7 @@
},
"0.4.18": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -656,6 +659,7 @@
},
"0.4.19": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -699,6 +703,7 @@
},
"0.4.20": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -720,6 +725,7 @@
},
"0.4.21": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -741,6 +747,7 @@
},
"0.4.22": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -762,6 +769,7 @@
},
"0.4.23": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -782,6 +790,7 @@
},
"0.4.24": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -802,6 +811,7 @@
},
"0.4.25": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -820,6 +830,7 @@
},
"0.4.26": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -987,6 +998,7 @@
},
"0.5.0": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1005,6 +1017,7 @@
},
"0.5.1": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1023,6 +1036,7 @@
},
"0.5.10": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1037,6 +1051,7 @@
},
"0.5.11": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1050,6 +1065,7 @@
},
"0.5.12": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1063,6 +1079,7 @@
},
"0.5.13": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1076,6 +1093,7 @@
},
"0.5.14": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1091,6 +1109,7 @@
},
"0.5.15": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1105,6 +1124,7 @@
},
"0.5.16": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1118,6 +1138,7 @@
},
"0.5.17": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1130,6 +1151,7 @@
},
"0.5.2": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1148,6 +1170,7 @@
},
"0.5.3": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1166,6 +1189,7 @@
},
"0.5.4": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1184,6 +1208,7 @@
},
"0.5.5": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1204,6 +1229,7 @@
},
"0.5.6": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1224,6 +1250,7 @@
},
"0.5.7": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1242,6 +1269,7 @@
},
"0.5.8": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1259,6 +1287,7 @@
},
"0.5.9": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1275,6 +1304,7 @@
},
"0.6.0": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1289,6 +1319,7 @@
},
"0.6.1": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1302,6 +1333,7 @@
},
"0.6.10": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1310,6 +1342,7 @@
},
"0.6.11": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1318,6 +1351,7 @@
},
"0.6.12": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1326,6 +1360,7 @@
},
"0.6.2": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1339,6 +1374,7 @@
},
"0.6.3": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1352,6 +1388,7 @@
},
"0.6.4": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1365,6 +1402,7 @@
},
"0.6.5": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1377,6 +1415,7 @@
},
"0.6.6": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1388,6 +1427,7 @@
},
"0.6.7": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1399,6 +1439,7 @@
},
"0.6.8": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1407,6 +1448,7 @@
},
"0.6.9": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1416,6 +1458,7 @@
},
"0.7.0": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1424,6 +1467,7 @@
},
"0.7.1": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup",
@@ -1433,6 +1477,7 @@
},
"0.7.2": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy",
"DynamicArrayCleanup"
@@ -1441,6 +1486,7 @@
},
"0.7.3": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching",
"EmptyByteArrayCopy"
],
@@ -1448,42 +1494,50 @@
},
"0.7.4": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2020-10-19"
},
"0.7.5": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2020-11-18"
},
"0.7.6": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2020-12-16"
},
"0.8.0": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2020-12-16"
},
"0.8.1": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2021-01-27"
},
"0.8.2": {
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory",
"KeccakCaching"
],
"released": "2021-03-02"
},
"0.8.3": {
"bugs": [],
"bugs": [
"ABIDecodeTwoDimensionalArrayMemory"
],
"released": "2021-03-23"
}
}
@@ -1,15 +1,22 @@
{"contracts":{"a.sol":{"A":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3209:1","statements":[{"body":{"nodeType":"YulBlock","src":"126:521:1","statements":[{"nodeType":"YulAssignment","src":"136:90:1","value":{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"218:6:1"}],"functionName":{"name":"array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulIdentifier","src":"161:56:1"},"nodeType":"YulFunctionCall","src":"161:64:1"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"145:15:1"},"nodeType":"YulFunctionCall","src":"145:81:1"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"136:5:1"}]},{"nodeType":"YulVariableDeclaration","src":"235:16:1","value":{"name":"array","nodeType":"YulIdentifier","src":"246:5:1"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"239:3:1","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"267:5:1"},{"name":"length","nodeType":"YulIdentifier","src":"274:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"260:6:1"},"nodeType":"YulFunctionCall","src":"260:21:1"},"nodeType":"YulExpressionStatement","src":"260:21:1"},{"nodeType":"YulAssignment","src":"282:23:1","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"293:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"300:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"289:3:1"},"nodeType":"YulFunctionCall","src":"289:16:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"282:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"314:17:1","value":{"name":"offset","nodeType":"YulIdentifier","src":"325:6:1"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"318:3:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"380:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"389:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"392:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"382:6:1"},"nodeType":"YulFunctionCall","src":"382:12:1"},"nodeType":"YulExpressionStatement","src":"382:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"350:3:1"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"359:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"367:4:1","type":"","value":"0x20"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"355:3:1"},"nodeType":"YulFunctionCall","src":"355:17:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"346:3:1"},"nodeType":"YulFunctionCall","src":"346:27:1"},{"name":"end","nodeType":"YulIdentifier","src":"375:3:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"343:2:1"},"nodeType":"YulFunctionCall","src":"343:36:1"},"nodeType":"YulIf","src":"340:2:1"},{"body":{"nodeType":"YulBlock","src":"465:176:1","statements":[{"nodeType":"YulVariableDeclaration","src":"479:21:1","value":{"name":"src","nodeType":"YulIdentifier","src":"497:3:1"},"variables":[{"name":"elementPos","nodeType":"YulTypedName","src":"483:10:1","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"520:3:1"},{"arguments":[{"name":"elementPos","nodeType":"YulIdentifier","src":"546:10:1"},{"name":"end","nodeType":"YulIdentifier","src":"558:3:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"525:20:1"},"nodeType":"YulFunctionCall","src":"525:37:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"513:6:1"},"nodeType":"YulFunctionCall","src":"513:50:1"},"nodeType":"YulExpressionStatement","src":"513:50:1"},{"nodeType":"YulAssignment","src":"576:21:1","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"587:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"592:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"583:3:1"},"nodeType":"YulFunctionCall","src":"583:14:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"576:3:1"}]},{"nodeType":"YulAssignment","src":"610:21:1","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"621:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"626:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"617:3:1"},"nodeType":"YulFunctionCall","src":"617:14:1"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"610:3:1"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"427:1:1"},{"name":"length","nodeType":"YulIdentifier","src":"430:6:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"424:2:1"},"nodeType":"YulFunctionCall","src":"424:13:1"},"nodeType":"YulForLoop","posLine truncated
{"contracts":{"a.sol":{"A":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3241:1","statements":[{"body":{"nodeType":"YulBlock","src":"126:553:1","statements":[{"nodeType":"YulAssignment","src":"136:90:1","value":{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"218:6:1"}],"functionName":{"name":"array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulIdentifier","src":"161:56:1"},"nodeType":"YulFunctionCall","src":"161:64:1"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"145:15:1"},"nodeType":"YulFunctionCall","src":"145:81:1"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"136:5:1"}]},{"nodeType":"YulVariableDeclaration","src":"235:16:1","value":{"name":"array","nodeType":"YulIdentifier","src":"246:5:1"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"239:3:1","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"268:5:1"},{"name":"length","nodeType":"YulIdentifier","src":"275:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"261:6:1"},"nodeType":"YulFunctionCall","src":"261:21:1"},"nodeType":"YulExpressionStatement","src":"261:21:1"},{"nodeType":"YulAssignment","src":"291:23:1","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"302:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"309:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"298:3:1"},"nodeType":"YulFunctionCall","src":"298:16:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"291:3:1"}]},{"nodeType":"YulVariableDeclaration","src":"324:17:1","value":{"name":"offset","nodeType":"YulIdentifier","src":"335:6:1"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"328:3:1","type":""}]},{"body":{"nodeType":"YulBlock","src":"390:36:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"411:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"414:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"404:6:1"},"nodeType":"YulFunctionCall","src":"404:12:1"},"nodeType":"YulExpressionStatement","src":"404:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"360:3:1"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"369:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"377:4:1","type":"","value":"0x20"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:17:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"356:3:1"},"nodeType":"YulFunctionCall","src":"356:27:1"},{"name":"end","nodeType":"YulIdentifier","src":"385:3:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"353:2:1"},"nodeType":"YulFunctionCall","src":"353:36:1"},"nodeType":"YulIf","src":"350:2:1"},{"body":{"nodeType":"YulBlock","src":"495:178:1","statements":[{"nodeType":"YulVariableDeclaration","src":"510:21:1","value":{"name":"src","nodeType":"YulIdentifier","src":"528:3:1"},"variables":[{"name":"elementPos","nodeType":"YulTypedName","src":"514:10:1","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"552:3:1"},{"arguments":[{"name":"elementPos","nodeType":"YulIdentifier","src":"578:10:1"},{"name":"end","nodeType":"YulIdentifier","src":"590:3:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"557:20:1"},"nodeType":"YulFunctionCall","src":"557:37:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"545:6:1"},"nodeType":"YulFunctionCall","src":"545:50:1"},"nodeType":"YulExpressionStatement","src":"545:50:1"},{"nodeType":"YulAssignment","src":"608:21:1","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"619:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"624:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"615:3:1"},"nodeType":"YulFunctionCall","src":"615:14:1"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"608:3:1"}]},{"nodeType":"YulAssignment","src":"642:21:1","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"653:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"658:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:14:1"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"457:1:1"},{"name":"length","nodeType":"YulIdentifier","src":"460:6:1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"454:2:1"},"nodeType":"YulFunctionCall","src":"454:13:1"},"nodeType":"YulForLoop","posLine truncated
// uint256[]
function abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(offset, length, end) -> array {
array := allocate_memory(array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length))
let dst := array
mstore(array, length) dst := add(array, 0x20)
mstore(array, length)
dst := add(array, 0x20)
let src := offset
if gt(add(src, mul(length, 0x20)), end) { revert(0, 0) }
if gt(add(src, mul(length, 0x20)), end) {
revert(0, 0)
}
for { let i := 0 } lt(i, length) { i := add(i, 1) }
{
let elementPos := src
mstore(dst, abi_decode_t_uint256(elementPos, end))
dst := add(dst, 0x20)
src := add(src, 0x20)
+3 -3
View File
@@ -14,9 +14,9 @@ contract C {
}
// ----
// creation:
// codeDepositCost: 1170600
// executionCost: 1214
// totalCost: 1171814
// codeDepositCost: 1211600
// executionCost: 1261
// totalCost: 1212861
// external:
// a(): 1130
// b(uint256): infinite
@@ -17,9 +17,9 @@ contract C {
// optimize-yul: true
// ----
// creation:
// codeDepositCost: 626600
// executionCost: 657
// totalCost: 627257
// codeDepositCost: 664600
// executionCost: 696
// totalCost: 665296
// external:
// a(): 985
// b(uint256): 2052