Skip to content

Commit d304c84

Browse files
committed
externalTests: Replace optimizer levels with named presets
1 parent adfa51c commit d304c84

File tree

7 files changed

+92
-76
lines changed

7 files changed

+92
-76
lines changed

scripts/common.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ function safe_kill
211211

212212
function circleci_select_steps
213213
{
214+
# We expect multiple lines in $all_steps, one step per line
214215
local all_steps="$1"
215216
(( $# == 1 )) || assertFail
216217

@@ -222,6 +223,12 @@ function circleci_select_steps
222223
fi
223224
}
224225

226+
function circleci_select_steps_multiarg
227+
{
228+
# We expect multiple arguments, one step per argument.
229+
circleci_select_steps "$(printf '%s\n' "$@")"
230+
}
231+
225232
function circleci_step_selected
226233
{
227234
local selected_steps="$1"

test/externalTests/colony.sh

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,22 @@ function colony_test
3636
local repo="https://github.com/solidity-external-tests/colonyNetwork.git"
3737
local branch=develop_080
3838
local config_file="truffle.js"
39-
# On levels 1 and 2 it compiles but tests run out of gas
40-
local min_optimizer_level=3
41-
local max_optimizer_level=3
39+
local settings_presets=(
40+
#legacy-no-optimize # Compiles but tests run out of gas
41+
#legacy-optimize-evm-only # Compiles but tests run out of gas
42+
legacy-optimize-evm+yul
43+
)
4244

43-
local selected_optimizer_levels
44-
selected_optimizer_levels=$(circleci_select_steps "$(seq "$min_optimizer_level" "$max_optimizer_level")")
45-
print_optimizer_levels_or_exit "$selected_optimizer_levels"
45+
local selected_optimizer_presets
46+
selected_optimizer_presets=$(circleci_select_steps_multiarg "${settings_presets[@]}")
47+
print_optimizer_presets_or_exit "$selected_optimizer_presets"
4648

4749
setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH"
4850
download_project "$repo" "$branch" "$DIR"
4951
[[ $BINARY_TYPE == native ]] && replace_global_solc "$BINARY_PATH"
5052

5153
neutralize_package_json_hooks
52-
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$min_optimizer_level"
54+
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$(first_word "$selected_optimizer_presets")"
5355
yarn install
5456
git submodule update --init
5557

@@ -61,8 +63,8 @@ function colony_test
6163
replace_version_pragmas
6264
[[ $BINARY_TYPE == solcjs ]] && force_solc_modules "${DIR}/solc"
6365

64-
for level in $selected_optimizer_levels; do
65-
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$level" compile_fn test_fn
66+
for preset in $selected_optimizer_presets; do
67+
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$preset" compile_fn test_fn
6668
done
6769
}
6870

test/externalTests/common.sh

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ set -e
2424

2525
CURRENT_EVM_VERSION=london
2626

27-
function print_optimizer_levels_or_exit
27+
function print_optimizer_presets_or_exit
2828
{
29-
local selected_levels="$1"
29+
local selected_presets="$1"
3030

31-
[[ $selected_levels != "" ]] || { printWarning "No steps to run. Exiting."; exit 0; }
31+
[[ $selected_presets != "" ]] || { printWarning "No presets to run. Exiting."; exit 0; }
3232

33-
printLog "Selected optimizer levels: ${selected_levels}"
33+
printLog "Selected settings presets: ${selected_presets}"
3434
}
3535

3636
function verify_input
@@ -141,7 +141,7 @@ function force_truffle_compiler_settings
141141
local config_file="$1"
142142
local binary_type="$2"
143143
local solc_path="$3"
144-
local level="$4"
144+
local preset="$4"
145145
local evm_version="${5:-"$CURRENT_EVM_VERSION"}"
146146

147147
[[ $binary_type == native || $binary_type == solcjs ]] || assertFail
@@ -153,14 +153,16 @@ function force_truffle_compiler_settings
153153
echo "Config file: $config_file"
154154
echo "Binary type: $binary_type"
155155
echo "Compiler path: $solc_path"
156-
echo "Optimization level: $level"
157-
echo "Optimizer settings: $(optimizer_settings_for_level "$level")"
156+
echo "Settings preset: ${preset}"
157+
echo "Settings: $(settings_from_preset "$preset" "$evm_version")"
158158
echo "EVM version: $evm_version"
159+
echo "Compiler version: ${SOLCVERSION_SHORT}"
160+
echo "Compiler version (full): ${SOLCVERSION}"
159161
echo "-------------------------------------"
160162

161163
# Forcing the settings should always work by just overwriting the solc object. Forcing them by using a
162164
# dedicated settings objects should only be the fallback.
163-
echo "module.exports['compilers'] = $(truffle_compiler_settings "$solc_path" "$level" "$evm_version");" >> "$config_file"
165+
echo "module.exports['compilers'] = $(truffle_compiler_settings "$solc_path" "$preset" "$evm_version");" >> "$config_file"
164166
}
165167

166168
function force_hardhat_compiler_binary
@@ -180,22 +182,22 @@ function force_hardhat_compiler_binary
180182
function force_hardhat_compiler_settings
181183
{
182184
local config_file="$1"
183-
local level="$2"
185+
local preset="$2"
184186
local evm_version="${3:-"$CURRENT_EVM_VERSION"}"
185187

186188
printLog "Configuring Hardhat..."
187189
echo "-------------------------------------"
188190
echo "Config file: ${config_file}"
189-
echo "Optimization level: ${level}"
190-
echo "Optimizer settings: $(optimizer_settings_for_level "$level")"
191+
echo "Settings preset: ${preset}"
192+
echo "Settings: $(settings_from_preset "$preset" "$evm_version")"
191193
echo "EVM version: ${evm_version}"
192194
echo "Compiler version: ${SOLCVERSION_SHORT}"
193195
echo "Compiler version (full): ${SOLCVERSION}"
194196
echo "-------------------------------------"
195197

196198
{
197199
echo -n 'module.exports["solidity"] = '
198-
hardhat_compiler_settings "$SOLCVERSION_SHORT" "$level" "$evm_version"
200+
hardhat_compiler_settings "$SOLCVERSION_SHORT" "$preset" "$evm_version"
199201
} >> "$config_file"
200202
}
201203

@@ -242,16 +244,17 @@ function run_test
242244
$test_fn
243245
}
244246

245-
function optimizer_settings_for_level
247+
function settings_from_preset
246248
{
247-
local level="$1"
249+
local preset="$1"
250+
local evm_version="$2"
248251

249-
case "$level" in
250-
1) echo "{enabled: false}" ;;
251-
2) echo "{enabled: true, details: {yul: false}}" ;;
252-
3) echo "{enabled: true, details: {yul: true}}" ;;
252+
case "$preset" in
253+
legacy-no-optimize) echo "{evmVersion: '${evm_version}', optimizer: {enabled: false}}" ;;
254+
legacy-optimize-evm-only) echo "{evmVersion: '${evm_version}', optimizer: {enabled: true, details: {yul: false}}}" ;;
255+
legacy-optimize-evm+yul) echo "{evmVersion: '${evm_version}', optimizer: {enabled: true, details: {yul: true}}}" ;;
253256
*)
254-
fail "Optimizer level not found. Please define OPTIMIZER_LEVEL=[1, 2, 3]"
257+
fail "Unknown settings preset: '${preset}'."
255258
;;
256259
esac
257260
}
@@ -269,16 +272,13 @@ function replace_global_solc
269272
function truffle_compiler_settings
270273
{
271274
local solc_path="$1"
272-
local level="$2"
275+
local preset="$2"
273276
local evm_version="$3"
274277

275278
echo "{"
276279
echo " solc: {"
277280
echo " version: \"${solc_path}\","
278-
echo " settings: {"
279-
echo " optimizer: $(optimizer_settings_for_level "$level"),"
280-
echo " evmVersion: \"${evm_version}\""
281-
echo " }"
281+
echo " settings: $(settings_from_preset "$preset" "$evm_version")"
282282
echo " }"
283283
echo "}"
284284
}
@@ -310,15 +310,12 @@ function hardhat_solc_build_subtask {
310310

311311
function hardhat_compiler_settings {
312312
local solc_version="$1"
313-
local level="$2"
313+
local preset="$2"
314314
local evm_version="$3"
315315

316316
echo "{"
317317
echo " version: '${solc_version}',"
318-
echo " settings: {"
319-
echo " optimizer: $(optimizer_settings_for_level "$level"),"
320-
echo " evmVersion: '${evm_version}'"
321-
echo " }"
318+
echo " settings: $(settings_from_preset "$preset" "$evm_version")"
322319
echo "}"
323320
}
324321

@@ -345,24 +342,24 @@ function truffle_run_test
345342
local config_file="$1"
346343
local binary_type="$2"
347344
local solc_path="$3"
348-
local optimizer_level="$4"
345+
local preset="$4"
349346
local compile_fn="$5"
350347
local test_fn="$6"
351348

352349
truffle_clean
353-
force_truffle_compiler_settings "$config_file" "$binary_type" "$solc_path" "$optimizer_level"
350+
force_truffle_compiler_settings "$config_file" "$binary_type" "$solc_path" "$preset"
354351
compile_and_run_test compile_fn test_fn truffle_verify_compiler_version
355352
}
356353

357354
function hardhat_run_test
358355
{
359356
local config_file="$1"
360-
local optimizer_level="$2"
357+
local preset="$2"
361358
local compile_fn="$3"
362359
local test_fn="$4"
363360

364361
hardhat_clean
365-
force_hardhat_compiler_settings "$config_file" "$optimizer_level"
362+
force_hardhat_compiler_settings "$config_file" "$preset"
366363
compile_and_run_test compile_fn test_fn hardhat_verify_compiler_version
367364
}
368365

test/externalTests/ens.sh

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,15 @@ function ens_test
3636
local repo="https://github.com/ensdomains/ens.git"
3737
local branch=master
3838
local config_file="truffle.js"
39-
local min_optimizer_level=1
40-
local max_optimizer_level=3
39+
local settings_presets=(
40+
legacy-no-optimize
41+
legacy-optimize-evm-only
42+
legacy-optimize-evm+yul
43+
)
4144

42-
local selected_optimizer_levels
43-
selected_optimizer_levels=$(circleci_select_steps "$(seq "$min_optimizer_level" "$max_optimizer_level")")
44-
print_optimizer_levels_or_exit "$selected_optimizer_levels"
45+
local selected_optimizer_presets
46+
selected_optimizer_presets=$(circleci_select_steps_multiarg "${settings_presets[@]}")
47+
print_optimizer_presets_or_exit "$selected_optimizer_presets"
4548

4649
setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH"
4750
download_project "$repo" "$branch" "$DIR"
@@ -52,14 +55,14 @@ function ens_test
5255

5356
neutralize_package_lock
5457
neutralize_package_json_hooks
55-
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$min_optimizer_level"
58+
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$(first_word "$selected_optimizer_presets")"
5659
npm install
5760

5861
replace_version_pragmas
5962
[[ $BINARY_TYPE == solcjs ]] && force_solc_modules "${DIR}/solc"
6063

61-
for level in $selected_optimizer_levels; do
62-
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$level" compile_fn test_fn
64+
for preset in $selected_optimizer_presets; do
65+
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$preset" compile_fn test_fn
6366
done
6467
}
6568

test/externalTests/gnosis-v2.sh

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ function gnosis_safe_test
3636
local repo="https://github.com/solidity-external-tests/safe-contracts.git"
3737
local branch=v2_080
3838
local config_file="truffle-config.js"
39-
# level 1: "Error: while migrating GnosisSafe: Returned error: base fee exceeds gas limit"
40-
local min_optimizer_level=2
41-
local max_optimizer_level=3
39+
local settings_presets=(
40+
#legacy-no-optimize # "Error: while migrating GnosisSafe: Returned error: base fee exceeds gas limit"
41+
legacy-optimize-evm-only
42+
legacy-optimize-evm+yul
43+
)
4244

43-
local selected_optimizer_levels
44-
selected_optimizer_levels=$(circleci_select_steps "$(seq "$min_optimizer_level" "$max_optimizer_level")")
45-
print_optimizer_levels_or_exit "$selected_optimizer_levels"
45+
local selected_optimizer_presets
46+
selected_optimizer_presets=$(circleci_select_steps_multiarg "${settings_presets[@]}")
47+
print_optimizer_presets_or_exit "$selected_optimizer_presets"
4648

4749
setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH"
4850
download_project "$repo" "$branch" "$DIR"
@@ -53,14 +55,14 @@ function gnosis_safe_test
5355

5456
neutralize_package_lock
5557
neutralize_package_json_hooks
56-
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$min_optimizer_level"
58+
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$(first_word "$selected_optimizer_presets")"
5759
npm install --package-lock
5860

5961
replace_version_pragmas
6062
[[ $BINARY_TYPE == solcjs ]] && force_solc_modules "${DIR}/solc"
6163

62-
for level in $selected_optimizer_levels; do
63-
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$level" compile_fn test_fn
64+
for preset in $selected_optimizer_presets; do
65+
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$preset" compile_fn test_fn
6466
done
6567
}
6668

test/externalTests/gnosis.sh

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ function gnosis_safe_test
3636
local repo="https://github.com/solidity-external-tests/safe-contracts.git"
3737
local branch=development_080
3838
local config_file="truffle-config.js"
39-
# levels 1 and 2: "Stack too deep" error
40-
local min_optimizer_level=3
41-
local max_optimizer_level=3
39+
local settings_presets=(
40+
#legacy-no-optimize # "Stack too deep" error
41+
#legacy-optimize-evm-only # "Stack too deep" error
42+
legacy-optimize-evm+yul
43+
)
4244

43-
local selected_optimizer_levels
44-
selected_optimizer_levels=$(circleci_select_steps "$(seq "$min_optimizer_level" "$max_optimizer_level")")
45-
print_optimizer_levels_or_exit "$selected_optimizer_levels"
45+
local selected_optimizer_presets
46+
selected_optimizer_presets=$(circleci_select_steps_multiarg "${settings_presets[@]}")
47+
print_optimizer_presets_or_exit "$selected_optimizer_presets"
4648

4749
setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH"
4850
download_project "$repo" "$branch" "$DIR"
@@ -52,14 +54,14 @@ function gnosis_safe_test
5254

5355
neutralize_package_lock
5456
neutralize_package_json_hooks
55-
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$min_optimizer_level"
57+
force_truffle_compiler_settings "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$(first_word "$selected_optimizer_presets")"
5658
npm install --package-lock
5759

5860
replace_version_pragmas
5961
[[ $BINARY_TYPE == solcjs ]] && force_solc_modules "${DIR}/solc"
6062

61-
for level in $selected_optimizer_levels; do
62-
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$level" compile_fn test_fn
63+
for preset in $selected_optimizer_presets; do
64+
truffle_run_test "$config_file" "$BINARY_TYPE" "${DIR}/solc" "$preset" compile_fn test_fn
6365
done
6466
}
6567

test/externalTests/zeppelin.sh

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,28 @@ function zeppelin_test
3636
local repo="https://github.com/OpenZeppelin/openzeppelin-contracts.git"
3737
local branch=master
3838
local config_file="hardhat.config.js"
39-
local min_optimizer_level=1
40-
local max_optimizer_level=3
39+
local settings_presets=(
40+
legacy-no-optimize
41+
legacy-optimize-evm-only
42+
legacy-optimize-evm+yul
43+
)
4144

42-
local selected_optimizer_levels
43-
selected_optimizer_levels=$(circleci_select_steps "$(seq "$min_optimizer_level" "$max_optimizer_level")")
44-
print_optimizer_levels_or_exit "$selected_optimizer_levels"
45+
local selected_optimizer_presets
46+
selected_optimizer_presets=$(circleci_select_steps_multiarg "${settings_presets[@]}")
47+
print_optimizer_presets_or_exit "$selected_optimizer_presets"
4548

4649
setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH"
4750
download_project "$repo" "$branch" "$DIR"
4851

4952
neutralize_package_json_hooks
5053
force_hardhat_compiler_binary "$config_file" "$BINARY_TYPE" "$BINARY_PATH"
51-
force_hardhat_compiler_settings "$config_file" "$min_optimizer_level"
54+
force_hardhat_compiler_settings "$config_file" "$(first_word "$selected_optimizer_presets")"
5255
npm install
5356

5457
replace_version_pragmas
5558

56-
for level in $selected_optimizer_levels; do
57-
hardhat_run_test "$config_file" "$level" compile_fn test_fn
59+
for preset in $selected_optimizer_presets; do
60+
hardhat_run_test "$config_file" "$preset" compile_fn test_fn
5861
done
5962
}
6063

0 commit comments

Comments
 (0)