From c0aac9a74cadc4f6830ffc3e9d91b619a0fd625d Mon Sep 17 00:00:00 2001 From: Nikita Panin Date: Sun, 10 Nov 2024 19:00:16 +0100 Subject: [PATCH 1/7] Update Dockerfile --- Dockerfile | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Dockerfile b/Dockerfile index a7185181..bd0f8fe1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -238,6 +238,23 @@ RUN if [ "$TARGETARCH" = "arm64" ]; then \ git clean -d -x -f; \ fi +RUN if [ "$TARGETARCH" = "arm64" ]; then \ + # build solc-v0.8.19 + git checkout v0.8.19; \ + # the compiler throws warnings when compiling this version, and the warnings are treated as errors. + # we disable treating the warnings as errors, unless the build doesn't succeed + grep -rl '\-Werror' ./cmake/EthCompilerSettings.cmake | xargs sed -i 's/\-Werror/\-Wno\-error/g'; \ + # there is no sudo in the container, but we are under root so we do not need it + grep -rl 'sudo make install' ./scripts/build.sh | xargs sed -i 's/sudo make install/make install/g'; \ + # build solc faster + grep -rl 'make -j2' ./scripts/build.sh | xargs sed -i 's/make -j2/make -j4/g'; \ + ./scripts/build.sh; \ + mv /usr/local/bin/solc /root/.solcx/solc-v0.8.19; \ + git checkout .; \ + git checkout develop; \ + git clean -d -x -f; \ + fi + RUN if [ "$TARGETARCH" = "arm64" ]; then \ # manually install vyper mkdir /root/.vvm; \ @@ -288,6 +305,7 @@ RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.8.4 --version | gr RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.8.6 --version | grep 'Version: 0.8.6+commit.11564f7e' || (echo "Incorrect solc-v0.8.6 version" && exit 1) fi RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.7.6 --version | grep 'Version: 0.7.6+commit.7338295f' || (echo "Incorrect solc-v0.7.6 version" && exit 1) fi RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.8.15 --version | grep 'Version: 0.8.15+commit.e14f2714' || (echo "Incorrect solc-v0.8.15 version" && exit 1) fi +RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.8.19 --version | grep 'Version: 0.8.19+commit.7dd6d404' || (echo "Incorrect solc-v0.8.19 version" && exit 1) fi RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.8.24 --version | grep 'Version: 0.8.24+commit.e11b9ed9' || (echo "Incorrect solc-v0.8.24 version" && exit 1) fi RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.solcx/solc-v0.6.11 --version | grep 'Version: 0.6.11+commit.5ef660b1' || (echo "Incorrect solc-v0.6.11 version" && exit 1) fi RUN if [ "$TARGETARCH" = "arm64" ]; then /root/.vvm/vyper-0.3.7 --version | grep '0.3.7+' || (echo "Incorrect vyper-0.3.7 version" && exit 1) fi From 287b3459b785ee77e806b690f925ce1be9241ebf Mon Sep 17 00:00:00 2001 From: Nikita Panin Date: Sun, 10 Nov 2024 19:13:26 +0100 Subject: [PATCH 2/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b04310..a67ba203 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ git clone git@github.com:lidofinance/scripts.git cd scripts docker build -t scenv . ``` -Note: *If you are running on an arm64 processor (including Apple Silicon) - you will have to wait up to 2 hours while the Solidity compilers compile.* +Note: *If you are running on an arm64 processor (including Apple Silicon) - you will have to wait up to 4 hours while the Solidity compilers compile.* #### Step 2. Set up the ENV VARs, for example: - `WEB3_INFURA_PROJECT_ID` - **mandatory** for the execution of tests From 8bb06ae5c21c36b913e65492b201d3443c11d5c5 Mon Sep 17 00:00:00 2001 From: skhomuti Date: Tue, 12 Nov 2024 16:27:49 +0700 Subject: [PATCH 3/7] fix unstable shares check in csm claim --- tests/regression/test_csm.py | 34 ++++++++++++++++++---------------- utils/test/csm_helpers.py | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/tests/regression/test_csm.py b/tests/regression/test_csm.py index dd6fa7d1..6b5ffe6f 100644 --- a/tests/regression/test_csm.py +++ b/tests/regression/test_csm.py @@ -74,14 +74,13 @@ def ref_slot(): return ref_slot -@pytest.fixture -def distribute_reward_tree(deposits_to_csm, fee_oracle, fee_distributor, node_operator, ref_slot): - consensus_version = fee_oracle.getConsensusVersion() - oracle_version = fee_oracle.getContractVersion() +def distribute_reward_tree(node_operator, ref_slot): + consensus_version = contracts.cs_fee_oracle.getConsensusVersion() + oracle_version = contracts.cs_fee_oracle.getContractVersion() rewards = ETH(0.05) oracle_report(cl_diff=rewards) - distributed_shares = contracts.lido.sharesOf(fee_distributor) + distributed_shares = contracts.lido.sharesOf(contracts.cs_fee_distributor) assert distributed_shares > 0 report, report_hash, tree = prepare_csm_report({node_operator: distributed_shares}, ref_slot) @@ -93,7 +92,7 @@ def distribute_reward_tree(deposits_to_csm, fee_oracle, fee_distributor, node_op contracts.csm_hash_consensus, ) - fee_oracle.submitReportData(report, oracle_version, {"from": submitter}) + contracts.cs_fee_oracle.submitReportData(report, oracle_version, {"from": submitter}) return tree @@ -316,20 +315,23 @@ def test_csm_wsteth_bond(csm, accounting, node_operator): @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_steth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree - shares = tree.values[0]["value"][1] - proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) +def test_csm_claim_rewards_steth(csm, node_operator, ref_slot): reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] shares_before = contracts.lido.sharesOf(reward_address) + accounting_shares_before = contracts.lido.sharesOf(contracts.cs_accounting) + + tree = distribute_reward_tree(node_operator, ref_slot).tree + shares = tree.values[0]["value"][1] + proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) csm.claimRewardsStETH(node_operator, ETH(1), shares, proof, {"from": reward_address}) - # subtract 10 to avoid rounding errors - assert contracts.lido.sharesOf(reward_address) > shares_before + shares - 10 + shares_after = contracts.lido.sharesOf(reward_address) + accounting_shares_after = contracts.lido.sharesOf(contracts.cs_accounting) + assert shares_after == shares_before + (accounting_shares_before + shares - accounting_shares_after) @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_wsteth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree +def test_csm_claim_rewards_wsteth(csm, node_operator, ref_slot): + tree = distribute_reward_tree(node_operator, ref_slot).tree shares = tree.values[0]["value"][1] proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] @@ -339,8 +341,8 @@ def test_csm_claim_rewards_wsteth(csm, distribute_reward_tree, node_operator, fe assert contracts.wsteth.balanceOf(reward_address) > wsteth_before @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_eth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree +def test_csm_claim_rewards_eth(csm, node_operator, ref_slot): + tree = distribute_reward_tree(node_operator, ref_slot).tree shares = tree.values[0]["value"][1] proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] diff --git a/utils/test/csm_helpers.py b/utils/test/csm_helpers.py index 4435680d..eb374780 100644 --- a/utils/test/csm_helpers.py +++ b/utils/test/csm_helpers.py @@ -136,7 +136,7 @@ def csm_add_node_operator(csm, accounting, node_operator, proof, keys_count=5, c signatures_batch = random_signatures_batch(keys_count) value = accounting.getBondAmountByKeysCount['uint256,uint256'](keys_count, curve_id) - set_balance_in_wei(node_operator, value + ETH(1)) + set_balance_in_wei(node_operator, value + ETH(10)) csm.addNodeOperatorETH( keys_count, From 7be86295a1b87db41683e9544390caf063fb7c12 Mon Sep 17 00:00:00 2001 From: skhomuti Date: Tue, 12 Nov 2024 16:27:49 +0700 Subject: [PATCH 4/7] fix unstable shares check in csm claim --- tests/regression/test_csm.py | 34 ++++++++++++++++++---------------- utils/test/csm_helpers.py | 2 +- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/tests/regression/test_csm.py b/tests/regression/test_csm.py index dd6fa7d1..6b5ffe6f 100644 --- a/tests/regression/test_csm.py +++ b/tests/regression/test_csm.py @@ -74,14 +74,13 @@ def ref_slot(): return ref_slot -@pytest.fixture -def distribute_reward_tree(deposits_to_csm, fee_oracle, fee_distributor, node_operator, ref_slot): - consensus_version = fee_oracle.getConsensusVersion() - oracle_version = fee_oracle.getContractVersion() +def distribute_reward_tree(node_operator, ref_slot): + consensus_version = contracts.cs_fee_oracle.getConsensusVersion() + oracle_version = contracts.cs_fee_oracle.getContractVersion() rewards = ETH(0.05) oracle_report(cl_diff=rewards) - distributed_shares = contracts.lido.sharesOf(fee_distributor) + distributed_shares = contracts.lido.sharesOf(contracts.cs_fee_distributor) assert distributed_shares > 0 report, report_hash, tree = prepare_csm_report({node_operator: distributed_shares}, ref_slot) @@ -93,7 +92,7 @@ def distribute_reward_tree(deposits_to_csm, fee_oracle, fee_distributor, node_op contracts.csm_hash_consensus, ) - fee_oracle.submitReportData(report, oracle_version, {"from": submitter}) + contracts.cs_fee_oracle.submitReportData(report, oracle_version, {"from": submitter}) return tree @@ -316,20 +315,23 @@ def test_csm_wsteth_bond(csm, accounting, node_operator): @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_steth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree - shares = tree.values[0]["value"][1] - proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) +def test_csm_claim_rewards_steth(csm, node_operator, ref_slot): reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] shares_before = contracts.lido.sharesOf(reward_address) + accounting_shares_before = contracts.lido.sharesOf(contracts.cs_accounting) + + tree = distribute_reward_tree(node_operator, ref_slot).tree + shares = tree.values[0]["value"][1] + proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) csm.claimRewardsStETH(node_operator, ETH(1), shares, proof, {"from": reward_address}) - # subtract 10 to avoid rounding errors - assert contracts.lido.sharesOf(reward_address) > shares_before + shares - 10 + shares_after = contracts.lido.sharesOf(reward_address) + accounting_shares_after = contracts.lido.sharesOf(contracts.cs_accounting) + assert shares_after == shares_before + (accounting_shares_before + shares - accounting_shares_after) @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_wsteth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree +def test_csm_claim_rewards_wsteth(csm, node_operator, ref_slot): + tree = distribute_reward_tree(node_operator, ref_slot).tree shares = tree.values[0]["value"][1] proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] @@ -339,8 +341,8 @@ def test_csm_claim_rewards_wsteth(csm, distribute_reward_tree, node_operator, fe assert contracts.wsteth.balanceOf(reward_address) > wsteth_before @pytest.mark.usefixtures("deposits_to_csm") -def test_csm_claim_rewards_eth(csm, distribute_reward_tree, node_operator, fee_distributor): - tree = distribute_reward_tree.tree +def test_csm_claim_rewards_eth(csm, node_operator, ref_slot): + tree = distribute_reward_tree(node_operator, ref_slot).tree shares = tree.values[0]["value"][1] proof = list(tree.get_proof(tree.find(tree.leaf((node_operator, shares))))) reward_address = csm.getNodeOperator(node_operator)["rewardAddress"] diff --git a/utils/test/csm_helpers.py b/utils/test/csm_helpers.py index 4435680d..eb374780 100644 --- a/utils/test/csm_helpers.py +++ b/utils/test/csm_helpers.py @@ -136,7 +136,7 @@ def csm_add_node_operator(csm, accounting, node_operator, proof, keys_count=5, c signatures_batch = random_signatures_batch(keys_count) value = accounting.getBondAmountByKeysCount['uint256,uint256'](keys_count, curve_id) - set_balance_in_wei(node_operator, value + ETH(1)) + set_balance_in_wei(node_operator, value + ETH(10)) csm.addNodeOperatorETH( keys_count, From d587fc756b3e1709e61b1d364b4c83b9b9c32053 Mon Sep 17 00:00:00 2001 From: Nikita P Date: Tue, 12 Nov 2024 18:39:24 +0000 Subject: [PATCH 5/7] fix: not enough eth to make transaction --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 922e2263..111798ad 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -29,7 +29,7 @@ def shared_setup(fn_isolation): @pytest.fixture(scope="session", autouse=True) def network_gas_price(): - network.gas_price("2 gwei") + network.gas_price("99999999 gwei") @pytest.fixture(scope="function") def deployer(): @@ -260,7 +260,7 @@ def add_balance_check_middleware(): # TODO: Such implicit manipulation of the balances may lead to hard-debugging errors in the future. # Better to return back balance after request is done. def ensure_balance(address): - if web3.eth.get_balance(address) < ETH(1): + if web3.eth.get_balance(address) < ETH(1000000): set_balance(address, 1000000) def balance_check_middleware(make_request, web3): From 63cc9fe67bd6d6c37b8b1a6fb60ca5bfa04457cc Mon Sep 17 00:00:00 2001 From: Nikita P Date: Tue, 12 Nov 2024 18:40:42 +0000 Subject: [PATCH 6/7] fix: revert gas price --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 111798ad..5e017bee 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -29,7 +29,7 @@ def shared_setup(fn_isolation): @pytest.fixture(scope="session", autouse=True) def network_gas_price(): - network.gas_price("99999999 gwei") + network.gas_price("2 gwei") @pytest.fixture(scope="function") def deployer(): From b895c8d7daa20b4646645dec885e0c2323e2614d Mon Sep 17 00:00:00 2001 From: Nikita P Date: Tue, 12 Nov 2024 21:50:56 +0000 Subject: [PATCH 7/7] fix: eth check --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 5e017bee..b4ca025e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -260,7 +260,7 @@ def add_balance_check_middleware(): # TODO: Such implicit manipulation of the balances may lead to hard-debugging errors in the future. # Better to return back balance after request is done. def ensure_balance(address): - if web3.eth.get_balance(address) < ETH(1000000): + if web3.eth.get_balance(address) < ETH(10): set_balance(address, 1000000) def balance_check_middleware(make_request, web3):