Repository: lidofinance/lido-python-sdk (language: python)

Issue:
Add empty zhejiang withdrawal credentials



Discussion / hints:

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1f21f3..a7ae187 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 [comment]: <> (## [Unreleased]&#40;https://github.com/lidofinance/lido-python-sdk&#41; - 2021-09-15)
 
+## [3.0.3](https://github.com/lidofinance/lido-python-sdk/pull/86) - 2023-02-12
+### Fixed
+- Node Operators has no keys issue.
+
+## [3.0.0](https://github.com/lidofinance/lido-python-sdk/pull/84) - 2023-02-12
+### Added
+- Support to Zhejiang testnet and new versions of contracts
+
 ## [2.7.0](https://github.com/lidofinance/lido-python-sdk/pull/79) - 2022-12-14
 ### Added
 - Support to ARM for MacOS.
diff --git a/lido_sdk/contract/abi/Lido.json b/lido_sdk/contract/abi/Lido.json
index be9578e..1d68935 100644
--- a/lido_sdk/contract/abi/Lido.json
+++ b/lido_sdk/contract/abi/Lido.json
@@ -68,44 +68,14 @@
     "stateMutability": "nonpayable",
     "type": "function"
   },
-  {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "depositContract",
-        "type": "address"
-      },
-      {
-        "name": "_oracle",
-        "type": "address"
-      },
-      {
-        "name": "_operators",
-        "type": "address"
-      },
-      {
-        "name": "_treasury",
-        "type": "address"
-      },
-      {
-        "name": "_insuranceFund",
-        "type": "address"
-      }
-    ],
-    "name": "initialize",
-    "outputs": [],
-    "payable": false,
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
   {
     "constant": true,
     "inputs": [],
-    "name": "getInsuranceFund",
+    "name": "STAKING_CONTROL_ROLE",
     "outputs": [
       {
         "name": "",
-        "type": "address"
+        "type": "bytes32"
       }
     ],
     "payable": false,
@@ -145,6 +115,20 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "isStakingPaused",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bool"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": false,
     "inputs": [
@@ -175,11 +159,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "getOperators",
+    "name": "TOTAL_BASIS_POINTS",
     "outputs": [
       {
         "name": "",
-        "type": "address"
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -205,6 +189,56 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_maxStakeLimit",
+        "type": "uint256"
+      },
+      {
+        "name": "_stakeLimitIncreasePerBlock",
+        "type": "uint256"
+      }
+    ],
+    "name": "setStakingLimit",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "RESUME_ROLE",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bytes32"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_lidoLocator",
+        "type": "address"
+      },
+      {
+        "name": "_eip712StETH",
+        "type": "address"
+      }
+    ],
+    "name": "finalizeUpgrade_v2",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
@@ -236,11 +270,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "DEPOSIT_SIZE",
+    "name": "DOMAIN_SEPARATOR",
     "outputs": [
       {
         "name": "",
-        "type": "uint256"
+        "type": "bytes32"
       }
     ],
     "payable": false,
@@ -315,11 +349,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "SET_ORACLE",
+    "name": "isStopped",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "bool"
       }
     ],
     "payable": false,
@@ -329,21 +363,48 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "isStopped",
+    "name": "getBufferedEther",
     "outputs": [
       {
         "name": "",
-        "type": "bool"
+        "type": "uint256"
       }
     ],
     "payable": false,
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_lidoLocator",
+        "type": "address"
+      },
+      {
+        "name": "_eip712StETH",
+        "type": "address"
+      }
+    ],
+    "name": "initialize",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [],
+    "name": "receiveELRewards",
+    "outputs": [],
+    "payable": true,
+    "stateMutability": "payable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
-    "name": "MANAGE_WITHDRAWAL_KEY",
+    "name": "getWithdrawalCredentials",
     "outputs": [
       {
         "name": "",
@@ -357,7 +418,7 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "getBufferedEther",
+    "name": "getCurrentStakeLimit",
     "outputs": [
       {
         "name": "",
@@ -371,10 +432,34 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "SIGNATURE_LENGTH",
+    "name": "getStakeLimitFullInfo",
     "outputs": [
       {
-        "name": "",
+        "name": "isStakingPaused",
+        "type": "bool"
+      },
+      {
+        "name": "isStakingLimitSet",
+        "type": "bool"
+      },
+      {
+        "name": "currentStakeLimit",
+        "type": "uint256"
+      },
+      {
+        "name": "maxStakeLimit",
+        "type": "uint256"
+      },
+      {
+        "name": "maxStakeLimitGrowthBlocks",
+        "type": "uint256"
+      },
+      {
+        "name": "prevStakeLimit",
+        "type": "uint256"
+      },
+      {
+        "name": "prevStakeBlockNumber",
         "type": "uint256"
       }
     ],
@@ -383,17 +468,30 @@
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "getWithdrawalCredentials",
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_sender",
+        "type": "address"
+      },
+      {
+        "name": "_recipient",
+        "type": "address"
+      },
+      {
+        "name": "_sharesAmount",
+        "type": "uint256"
+      }
+    ],
+    "name": "transferSharesFrom",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "uint256"
       }
     ],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
@@ -415,6 +513,15 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [],
+    "name": "resumeStaking",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
@@ -437,6 +544,15 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [],
+    "name": "receiveWithdrawals",
+    "outputs": [],
+    "payable": true,
+    "stateMutability": "payable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [
@@ -457,32 +573,37 @@
     "type": "function"
   },
   {
-    "constant": false,
+    "constant": true,
     "inputs": [
       {
-        "name": "_oracle",
+        "name": "token",
         "type": "address"
       }
     ],
-    "name": "setOracle",
-    "outputs": [],
+    "name": "allowRecoverability",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bool"
+      }
+    ],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
     "constant": true,
     "inputs": [
       {
-        "name": "token",
+        "name": "owner",
         "type": "address"
       }
     ],
-    "name": "allowRecoverability",
+    "name": "nonces",
     "outputs": [
       {
         "name": "",
-        "type": "bool"
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -520,7 +641,7 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "getInitializationBlock",
+    "name": "getContractVersion",
     "outputs": [
       {
         "name": "",
@@ -532,51 +653,38 @@
     "type": "function"
   },
   {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "_treasuryFeeBasisPoints",
-        "type": "uint16"
-      },
-      {
-        "name": "_insuranceFeeBasisPoints",
-        "type": "uint16"
-      },
+    "constant": true,
+    "inputs": [],
+    "name": "getInitializationBlock",
+    "outputs": [
       {
-        "name": "_operatorsFeeBasisPoints",
-        "type": "uint16"
+        "name": "",
+        "type": "uint256"
       }
     ],
-    "name": "setFeeDistribution",
-    "outputs": [],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
     "constant": false,
     "inputs": [
       {
-        "name": "_feeBasisPoints",
-        "type": "uint16"
+        "name": "_recipient",
+        "type": "address"
+      },
+      {
+        "name": "_sharesAmount",
+        "type": "uint256"
       }
     ],
-    "name": "setFee",
-    "outputs": [],
-    "payable": false,
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
-  {
-    "constant": false,
-    "inputs": [
+    "name": "transferShares",
+    "outputs": [
       {
-        "name": "_maxDeposits",
+        "name": "",
         "type": "uint256"
       }
     ],
-    "name": "depositBufferedEther",
-    "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
     "type": "function"
@@ -595,25 +703,11 @@
     "stateMutability": "pure",
     "type": "function"
   },
-  {
-    "constant": true,
-    "inputs": [],
-    "name": "MANAGE_FEE",
-    "outputs": [
-      {
-        "name": "",
-        "type": "bytes32"
-      }
-    ],
-    "payable": false,
-    "stateMutability": "view",
-    "type": "function"
-  },
   {
     "constant": false,
     "inputs": [
       {
-        "name": "_token",
+        "name": "",
         "type": "address"
       }
     ],
@@ -625,27 +719,13 @@
   },
   {
     "constant": true,
-    "inputs": [],
-    "name": "SET_TREASURY",
-    "outputs": [
+    "inputs": [
       {
-        "name": "",
-        "type": "bytes32"
-      }
-    ],
-    "payable": false,
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "constant": true,
-    "inputs": [
-      {
-        "name": "_sender",
-        "type": "address"
-      },
-      {
-        "name": "_role",
+        "name": "_sender",
+        "type": "address"
+      },
+      {
+        "name": "_role",
         "type": "bytes32"
       },
       {
@@ -683,20 +763,6 @@
     "stateMutability": "payable",
     "type": "function"
   },
-  {
-    "constant": true,
-    "inputs": [],
-    "name": "WITHDRAWAL_CREDENTIALS_LENGTH",
-    "outputs": [
-      {
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "payable": false,
-    "stateMutability": "view",
-    "type": "function"
-  },
   {
     "constant": false,
     "inputs": [
@@ -734,38 +800,6 @@
     "stateMutability": "view",
     "type": "function"
   },
-  {
-    "constant": true,
-    "inputs": [],
-    "name": "PUBKEY_LENGTH",
-    "outputs": [
-      {
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "payable": false,
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "_amount",
-        "type": "uint256"
-      },
-      {
-        "name": "_pubkeyHash",
-        "type": "bytes32"
-      }
-    ],
-    "name": "withdraw",
-    "outputs": [],
-    "payable": false,
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
   {
     "constant": false,
     "inputs": [
@@ -790,17 +824,25 @@
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "getDepositContract",
-    "outputs": [
+    "constant": false,
+    "inputs": [
       {
-        "name": "",
-        "type": "address"
+        "name": "_maxDepositsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "_stakingModuleId",
+        "type": "uint256"
+      },
+      {
+        "name": "_depositCalldata",
+        "type": "bytes"
       }
     ],
+    "name": "deposit",
+    "outputs": [],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
@@ -826,40 +868,89 @@
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "BURN_ROLE",
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_reportTimestamp",
+        "type": "uint256"
+      },
+      {
+        "name": "_timeElapsed",
+        "type": "uint256"
+      },
+      {
+        "name": "_clValidators",
+        "type": "uint256"
+      },
+      {
+        "name": "_clBalance",
+        "type": "uint256"
+      },
+      {
+        "name": "_withdrawalVaultBalance",
+        "type": "uint256"
+      },
+      {
+        "name": "_elRewardsVaultBalance",
+        "type": "uint256"
+      },
+      {
+        "name": "_lastFinalizableRequestId",
+        "type": "uint256"
+      },
+      {
+        "name": "_simulatedShareRate",
+        "type": "uint256"
+      }
+    ],
+    "name": "handleOracleReport",
     "outputs": [
       {
-        "name": "",
-        "type": "bytes32"
+        "name": "totalPooledEther",
+        "type": "uint256"
+      },
+      {
+        "name": "totalShares",
+        "type": "uint256"
+      },
+      {
+        "name": "withdrawals",
+        "type": "uint256"
+      },
+      {
+        "name": "elRewards",
+        "type": "uint256"
       }
     ],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
     "constant": false,
-    "inputs": [
-      {
-        "name": "_insuranceFund",
-        "type": "address"
-      }
-    ],
-    "name": "setInsuranceFund",
+    "inputs": [],
+    "name": "removeStakingLimit",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [],
+    "name": "receiveStakingRouterDepositRemainder",
+    "outputs": [],
+    "payable": true,
+    "stateMutability": "payable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
     "name": "getFee",
     "outputs": [
       {
-        "name": "feeBasisPoints",
+        "name": "totalFee",
         "type": "uint16"
       }
     ],
@@ -870,11 +961,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "SET_INSURANCE_FUND",
+    "name": "kernel",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "address"
       }
     ],
     "payable": false,
@@ -884,11 +975,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "kernel",
+    "name": "getTotalShares",
     "outputs": [
       {
         "name": "",
-        "type": "address"
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -896,17 +987,41 @@
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "getTotalShares",
-    "outputs": [
+    "constant": false,
+    "inputs": [
       {
-        "name": "",
+        "name": "_owner",
+        "type": "address"
+      },
+      {
+        "name": "_spender",
+        "type": "address"
+      },
+      {
+        "name": "_value",
         "type": "uint256"
+      },
+      {
+        "name": "_deadline",
+        "type": "uint256"
+      },
+      {
+        "name": "_v",
+        "type": "uint8"
+      },
+      {
+        "name": "_r",
+        "type": "bytes32"
+      },
+      {
+        "name": "_s",
+        "type": "bytes32"
       }
     ],
+    "name": "permit",
+    "outputs": [],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
@@ -947,78 +1062,70 @@
     "type": "function"
   },
   {
-    "constant": false,
-    "inputs": [
+    "constant": true,
+    "inputs": [],
+    "name": "getLidoLocator",
+    "outputs": [
       {
-        "name": "_withdrawalCredentials",
-        "type": "bytes32"
+        "name": "",
+        "type": "address"
       }
     ],
-    "name": "setWithdrawalCredentials",
-    "outputs": [],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
-    "constant": false,
+    "constant": true,
     "inputs": [],
-    "name": "depositBufferedEther",
-    "outputs": [],
+    "name": "canDeposit",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bool"
+      }
+    ],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "_account",
-        "type": "address"
-      },
-      {
-        "name": "_sharesAmount",
-        "type": "uint256"
-      }
-    ],
-    "name": "burnShares",
+    "constant": true,
+    "inputs": [],
+    "name": "STAKING_PAUSE_ROLE",
     "outputs": [
       {
-        "name": "newTotalShares",
-        "type": "uint256"
+        "name": "",
+        "type": "bytes32"
       }
     ],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
-    "constant": false,
+    "constant": true,
     "inputs": [
       {
-        "name": "_treasury",
+        "name": "_account",
         "type": "address"
       }
     ],
-    "name": "setTreasury",
-    "outputs": [],
+    "name": "sharesOf",
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256"
+      }
+    ],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
     "constant": false,
-    "inputs": [
-      {
-        "name": "_beaconValidators",
-        "type": "uint256"
-      },
-      {
-        "name": "_beaconBalance",
-        "type": "uint256"
-      }
-    ],
-    "name": "pushBeacon",
+    "inputs": [],
+    "name": "pauseStaking",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
@@ -1026,13 +1133,8 @@
   },
   {
     "constant": true,
-    "inputs": [
-      {
-        "name": "_account",
-        "type": "address"
-      }
-    ],
-    "name": "sharesOf",
+    "inputs": [],
+    "name": "getTotalELRewardsCollected",
     "outputs": [
       {
         "name": "",
@@ -1048,31 +1150,76 @@
     "stateMutability": "payable",
     "type": "fallback"
   },
+  {
+    "anonymous": false,
+    "inputs": [],
+    "name": "StakingPaused",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [],
+    "name": "StakingResumed",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "maxStakeLimit",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "stakeLimitIncreasePerBlock",
+        "type": "uint256"
+      }
+    ],
+    "name": "StakingLimitSet",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [],
+    "name": "StakingLimitRemoved",
+    "type": "event"
+  },
   {
     "anonymous": false,
     "inputs": [
       {
         "indexed": true,
-        "name": "executor",
-        "type": "address"
+        "name": "reportTimestamp",
+        "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "script",
-        "type": "bytes"
+        "name": "preCLBalance",
+        "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "input",
-        "type": "bytes"
+        "name": "postCLBalance",
+        "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "returnData",
-        "type": "bytes"
+        "name": "withdrawalsWithdrawn",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "executionLayerRewardsWithdrawn",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "postBufferedEther",
+        "type": "uint256"
       }
     ],
-    "name": "ScriptResult",
+    "name": "ETHDistributed",
     "type": "event"
   },
   {
@@ -1080,55 +1227,77 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "vault",
-        "type": "address"
+        "name": "reportTimestamp",
+        "type": "uint256"
       },
       {
-        "indexed": true,
-        "name": "token",
-        "type": "address"
+        "indexed": false,
+        "name": "timeElapsed",
+        "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "amount",
+        "name": "preTotalShares",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "preTotalEther",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "postTotalShares",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "postTotalEther",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "sharesMintedAsFees",
         "type": "uint256"
       }
     ],
-    "name": "RecoverToVault",
+    "name": "TokenRebased",
     "type": "event"
   },
   {
     "anonymous": false,
-    "inputs": [],
-    "name": "Stopped",
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "lidoLocator",
+        "type": "address"
+      }
+    ],
+    "name": "LidoLocatorSet",
     "type": "event"
   },
   {
     "anonymous": false,
-    "inputs": [],
-    "name": "Resumed",
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "amount",
+        "type": "uint256"
+      }
+    ],
+    "name": "ELRewardsReceived",
     "type": "event"
   },
   {
     "anonymous": false,
     "inputs": [
-      {
-        "indexed": true,
-        "name": "from",
-        "type": "address"
-      },
-      {
-        "indexed": true,
-        "name": "to",
-        "type": "address"
-      },
       {
         "indexed": false,
-        "name": "value",
+        "name": "amount",
         "type": "uint256"
       }
     ],
-    "name": "Transfer",
+    "name": "WithdrawalsReceived",
     "type": "event"
   },
   {
@@ -1136,21 +1305,33 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "owner",
+        "name": "sender",
         "type": "address"
       },
       {
-        "indexed": true,
-        "name": "spender",
-        "type": "address"
+        "indexed": false,
+        "name": "amount",
+        "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "value",
+        "name": "referral",
+        "type": "address"
+      }
+    ],
+    "name": "Submitted",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "amount",
         "type": "uint256"
       }
     ],
-    "name": "Approval",
+    "name": "Unbuffered",
     "type": "event"
   },
   {
@@ -1158,45 +1339,72 @@
     "inputs": [
       {
         "indexed": false,
-        "name": "feeBasisPoints",
-        "type": "uint16"
+        "name": "amount",
+        "type": "uint256"
       }
     ],
-    "name": "FeeSet",
+    "name": "StakingRouterDepositRemainderReceived",
     "type": "event"
   },
   {
     "anonymous": false,
     "inputs": [
+      {
+        "indexed": true,
+        "name": "executor",
+        "type": "address"
+      },
       {
         "indexed": false,
-        "name": "treasuryFeeBasisPoints",
-        "type": "uint16"
+        "name": "script",
+        "type": "bytes"
       },
       {
         "indexed": false,
-        "name": "insuranceFeeBasisPoints",
-        "type": "uint16"
+        "name": "input",
+        "type": "bytes"
       },
       {
         "indexed": false,
-        "name": "operatorsFeeBasisPoints",
-        "type": "uint16"
+        "name": "returnData",
+        "type": "bytes"
       }
     ],
-    "name": "FeeDistributionSet",
+    "name": "ScriptResult",
     "type": "event"
   },
   {
     "anonymous": false,
     "inputs": [
+      {
+        "indexed": true,
+        "name": "vault",
+        "type": "address"
+      },
+      {
+        "indexed": true,
+        "name": "token",
+        "type": "address"
+      },
       {
         "indexed": false,
-        "name": "withdrawalCredentials",
-        "type": "bytes32"
+        "name": "amount",
+        "type": "uint256"
+      }
+    ],
+    "name": "RecoverToVault",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "eip712StETH",
+        "type": "address"
       }
     ],
-    "name": "WithdrawalCredentialsSet",
+    "name": "EIP712StETHInitialized",
     "type": "event"
   },
   {
@@ -1204,33 +1412,60 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "sender",
+        "name": "from",
         "type": "address"
       },
       {
-        "indexed": false,
-        "name": "amount",
-        "type": "uint256"
+        "indexed": true,
+        "name": "to",
+        "type": "address"
       },
       {
         "indexed": false,
-        "name": "referral",
-        "type": "address"
+        "name": "sharesValue",
+        "type": "uint256"
       }
     ],
-    "name": "Submitted",
+    "name": "TransferShares",
     "type": "event"
   },
   {
     "anonymous": false,
     "inputs": [
+      {
+        "indexed": true,
+        "name": "account",
+        "type": "address"
+      },
       {
         "indexed": false,
-        "name": "amount",
+        "name": "preRebaseTokenAmount",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "postRebaseTokenAmount",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "sharesAmount",
         "type": "uint256"
       }
     ],
-    "name": "Unbuffered",
+    "name": "SharesBurnt",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [],
+    "name": "Stopped",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [],
+    "name": "Resumed",
     "type": "event"
   },
   {
@@ -1238,31 +1473,55 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "sender",
+        "name": "from",
         "type": "address"
       },
       {
-        "indexed": false,
-        "name": "tokenAmount",
-        "type": "uint256"
+        "indexed": true,
+        "name": "to",
+        "type": "address"
       },
       {
         "indexed": false,
-        "name": "sentFromBuffer",
+        "name": "value",
         "type": "uint256"
+      }
+    ],
+    "name": "Transfer",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "owner",
+        "type": "address"
       },
       {
         "indexed": true,
-        "name": "pubkeyHash",
-        "type": "bytes32"
+        "name": "spender",
+        "type": "address"
       },
       {
         "indexed": false,
-        "name": "etherAmount",
+        "name": "value",
+        "type": "uint256"
+      }
+    ],
+    "name": "Approval",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "version",
         "type": "uint256"
       }
     ],
-    "name": "Withdrawal",
+    "name": "ContractVersionSet",
     "type": "event"
   }
-]
+]
\ No newline at end of file
diff --git a/lido_sdk/contract/abi/NodeOperatorsRegistry.json b/lido_sdk/contract/abi/NodeOperatorsRegistry.json
index a83fb5c..8ee562e 100644
--- a/lido_sdk/contract/abi/NodeOperatorsRegistry.json
+++ b/lido_sdk/contract/abi/NodeOperatorsRegistry.json
@@ -17,42 +17,15 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_name",
-        "type": "string"
-      },
-      {
-        "name": "_rewardAddress",
-        "type": "address"
-      },
-      {
-        "name": "_stakingLimit",
-        "type": "uint64"
-      }
-    ],
-    "name": "addNodeOperator",
-    "outputs": [
-      {
-        "name": "id",
-        "type": "uint256"
-      }
-    ],
-    "payable": false,
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
-  {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
-        "name": "_quantity",
+        "name": "_keysCount",
         "type": "uint256"
       },
       {
-        "name": "_pubkeys",
+        "name": "_publicKeys",
         "type": "bytes"
       },
       {
@@ -66,6 +39,20 @@
     "stateMutability": "nonpayable",
     "type": "function"
   },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "getType",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bytes32"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [
@@ -85,6 +72,24 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_locator",
+        "type": "address"
+      },
+      {
+        "name": "_type",
+        "type": "bytes32"
+      }
+    ],
+    "name": "finalizeUpgrade_v2",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
@@ -100,14 +105,45 @@
     "type": "function"
   },
   {
-    "constant": false,
+    "constant": true,
+    "inputs": [
+      {
+        "name": "_offset",
+        "type": "uint256"
+      },
+      {
+        "name": "_limit",
+        "type": "uint256"
+      }
+    ],
+    "name": "getNodeOperatorIds",
+    "outputs": [
+      {
+        "name": "nodeOperatorIds",
+        "type": "uint256[]"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "constant": true,
     "inputs": [
       {
-        "name": "_numKeys",
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_offset",
+        "type": "uint256"
+      },
+      {
+        "name": "_limit",
         "type": "uint256"
       }
     ],
-    "name": "assignNextSigningKeys",
+    "name": "getSigningKeys",
     "outputs": [
       {
         "name": "pubkeys",
@@ -116,34 +152,51 @@
       {
         "name": "signatures",
         "type": "bytes"
+      },
+      {
+        "name": "used",
+        "type": "bool[]"
       }
     ],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "SIGNATURE_LENGTH",
-    "outputs": [
+    "constant": false,
+    "inputs": [
       {
-        "name": "",
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_fromIndex",
+        "type": "uint256"
+      },
+      {
+        "name": "_keysCount",
         "type": "uint256"
       }
     ],
+    "name": "removeSigningKeysOperatorBH",
+    "outputs": [],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
     "constant": true,
-    "inputs": [],
-    "name": "SET_NODE_OPERATOR_ADDRESS_ROLE",
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      }
+    ],
+    "name": "getNodeOperatorIsActive",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "bool"
       }
     ],
     "payable": false,
@@ -154,7 +207,7 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -185,6 +238,10 @@
       {
         "name": "shares",
         "type": "uint256[]"
+      },
+      {
+        "name": "penalized",
+        "type": "bool[]"
       }
     ],
     "payable": false,
@@ -195,15 +252,51 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_id",
+        "name": "_indexFrom",
+        "type": "uint256"
+      },
+      {
+        "name": "_indexTo",
+        "type": "uint256"
+      }
+    ],
+    "name": "invalidateReadyToDepositKeysRange",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
-        "name": "_active",
+        "name": "_isTargetLimitActive",
         "type": "bool"
+      },
+      {
+        "name": "_targetLimit",
+        "type": "uint64"
+      }
+    ],
+    "name": "updateTargetValidatorsLimits",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_delay",
+        "type": "uint256"
       }
     ],
-    "name": "setNodeOperatorActive",
+    "name": "setStuckPenaltyDelay",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
@@ -212,11 +305,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "SET_NODE_OPERATOR_NAME_ROLE",
+    "name": "getStuckPenaltyDelay",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -227,7 +320,7 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -241,20 +334,61 @@
     "stateMutability": "nonpayable",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_fromIndex",
+        "type": "uint256"
+      },
+      {
+        "name": "_keysCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "removeSigningKeys",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
-    "inputs": [],
-    "name": "ADD_NODE_OPERATOR_ROLE",
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      }
+    ],
+    "name": "isOperatorPenalized",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "bool"
       }
     ],
     "payable": false,
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      }
+    ],
+    "name": "deactivateNodeOperator",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [
@@ -274,19 +408,33 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "STAKING_ROUTER_ROLE",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bytes32"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": false,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
-        "name": "_quantity",
+        "name": "_keysCount",
         "type": "uint256"
       },
       {
-        "name": "_pubkeys",
+        "name": "_publicKeys",
         "type": "bytes"
       },
       {
@@ -314,6 +462,15 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [],
+    "name": "onAllValidatorCountersUpdated",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
@@ -328,6 +485,43 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_name",
+        "type": "string"
+      },
+      {
+        "name": "_rewardAddress",
+        "type": "address"
+      }
+    ],
+    "name": "addNodeOperator",
+    "outputs": [
+      {
+        "name": "id",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "getContractVersion",
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": true,
     "inputs": [],
@@ -346,7 +540,7 @@
     "constant": true,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       }
     ],
@@ -362,28 +556,65 @@
     "type": "function"
   },
   {
-    "constant": false,
-    "inputs": [
-      {
-        "name": "_id",
-        "type": "uint256"
-      },
+    "constant": true,
+    "inputs": [],
+    "name": "MANAGE_NODE_OPERATOR_ROLE",
+    "outputs": [
       {
-        "name": "_rewardAddress",
-        "type": "address"
+        "name": "",
+        "type": "bytes32"
       }
     ],
-    "name": "setNodeOperatorRewardAddress",
-    "outputs": [],
     "payable": false,
-    "stateMutability": "nonpayable",
+    "stateMutability": "view",
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [
+    "constant": false,
+    "inputs": [],
+    "name": "onWithdrawalCredentialsChanged",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
       {
-        "name": "_id",
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      }
+    ],
+    "name": "activateNodeOperator",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_rewardAddress",
+        "type": "address"
+      }
+    ],
+    "name": "setNodeOperatorRewardAddress",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -426,6 +657,28 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "getStakingModuleSummary",
+    "outputs": [
+      {
+        "name": "totalExitedValidators",
+        "type": "uint256"
+      },
+      {
+        "name": "totalDepositedValidators",
+        "type": "uint256"
+      },
+      {
+        "name": "depositableValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": false,
     "inputs": [
@@ -468,27 +721,31 @@
     "type": "function"
   },
   {
-    "constant": true,
-    "inputs": [],
-    "name": "getEVMScriptRegistry",
-    "outputs": [
+    "constant": false,
+    "inputs": [
       {
-        "name": "",
-        "type": "address"
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_refundedValidatorsCount",
+        "type": "uint256"
       }
     ],
+    "name": "updateRefundedValidatorsCount",
+    "outputs": [],
     "payable": false,
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
     "constant": true,
     "inputs": [],
-    "name": "PUBKEY_LENGTH",
+    "name": "getEVMScriptRegistry",
     "outputs": [
       {
         "name": "",
-        "type": "uint256"
+        "type": "address"
       }
     ],
     "payable": false,
@@ -513,11 +770,11 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
-        "name": "_stakingLimit",
+        "name": "_vettedSigningKeysCount",
         "type": "uint64"
       }
     ],
@@ -531,7 +788,54 @@
     "constant": true,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      }
+    ],
+    "name": "getNodeOperatorSummary",
+    "outputs": [
+      {
+        "name": "isTargetLimitActive",
+        "type": "bool"
+      },
+      {
+        "name": "targetValidatorsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "stuckValidatorsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "refundedValidatorsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "stuckPenaltyEndTimestamp",
+        "type": "uint256"
+      },
+      {
+        "name": "totalExitedValidators",
+        "type": "uint256"
+      },
+      {
+        "name": "totalDepositedValidators",
+        "type": "uint256"
+      },
+      {
+        "name": "depositableValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -558,19 +862,33 @@
     "stateMutability": "view",
     "type": "function"
   },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "MAX_NODE_OPERATOR_NAME_LENGTH",
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
   {
     "constant": false,
     "inputs": [
       {
-        "name": "_id",
-        "type": "uint256"
+        "name": "_locator",
+        "type": "address"
       },
       {
-        "name": "_stoppedIncrement",
-        "type": "uint64"
+        "name": "_type",
+        "type": "bytes32"
       }
     ],
-    "name": "reportStoppedValidators",
+    "name": "initialize",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
@@ -580,12 +898,29 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_lido",
-        "type": "address"
+        "name": "_depositsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "",
+        "type": "bytes"
+      }
+    ],
+    "name": "obtainDepositData",
+    "outputs": [
+      {
+        "name": "depositsCount",
+        "type": "uint256"
+      },
+      {
+        "name": "publicKeys",
+        "type": "bytes"
+      },
+      {
+        "name": "signatures",
+        "type": "bytes"
       }
     ],
-    "name": "initialize",
-    "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
     "type": "function"
@@ -593,11 +928,25 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "REPORT_STOPPED_VALIDATORS_ROLE",
+    "name": "getKeysOpIndex",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "getNonce",
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -621,11 +970,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "SET_NODE_OPERATOR_ACTIVE_ROLE",
+    "name": "getLocator",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "address"
       }
     ],
     "payable": false,
@@ -650,7 +999,7 @@
     "constant": true,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       }
     ],
@@ -683,15 +1032,38 @@
     "constant": false,
     "inputs": [
       {
-        "name": "_operator_id",
+        "name": "_nodeOperatorId",
         "type": "uint256"
       },
       {
-        "name": "_index",
+        "name": "_exitedValidatorsCount",
         "type": "uint256"
       }
     ],
-    "name": "removeSigningKeyOperatorBH",
+    "name": "updateExitedValidatorsCount",
+    "outputs": [
+      {
+        "name": "",
+        "type": "uint256"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": false,
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_stuckValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "updateStuckValidatorsCount",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
@@ -700,11 +1072,11 @@
   {
     "constant": true,
     "inputs": [],
-    "name": "MANAGE_SIGNING_KEYS",
+    "name": "MAX_NODE_OPERATORS_COUNT",
     "outputs": [
       {
         "name": "",
-        "type": "bytes32"
+        "type": "uint256"
       }
     ],
     "payable": false,
@@ -713,68 +1085,78 @@
   },
   {
     "constant": false,
-    "inputs": [],
-    "name": "trimUnusedKeys",
+    "inputs": [
+      {
+        "name": "_nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "name": "_index",
+        "type": "uint256"
+      }
+    ],
+    "name": "removeSigningKeyOperatorBH",
     "outputs": [],
     "payable": false,
     "stateMutability": "nonpayable",
     "type": "function"
   },
   {
-    "anonymous": false,
+    "constant": true,
     "inputs": [
       {
-        "indexed": true,
-        "name": "executor",
-        "type": "address"
-      },
-      {
-        "indexed": false,
-        "name": "script",
-        "type": "bytes"
-      },
-      {
-        "indexed": false,
-        "name": "input",
-        "type": "bytes"
-      },
-      {
-        "indexed": false,
-        "name": "returnData",
-        "type": "bytes"
+        "name": "",
+        "type": "uint256"
       }
     ],
-    "name": "ScriptResult",
-    "type": "event"
+    "name": "handleRewardsMinted",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
   },
   {
-    "anonymous": false,
+    "constant": false,
     "inputs": [
       {
-        "indexed": true,
-        "name": "vault",
-        "type": "address"
+        "name": "_nodeOperatorId",
+        "type": "uint256"
       },
       {
-        "indexed": true,
-        "name": "token",
-        "type": "address"
+        "name": "_exitedValidatorsCount",
+        "type": "uint256"
       },
       {
-        "indexed": false,
-        "name": "amount",
+        "name": "_stuckValidatorsKeysCount",
         "type": "uint256"
       }
     ],
-    "name": "RecoverToVault",
-    "type": "event"
+    "name": "unsafeUpdateValidatorsCount",
+    "outputs": [],
+    "payable": false,
+    "stateMutability": "nonpayable",
+    "type": "function"
+  },
+  {
+    "constant": true,
+    "inputs": [],
+    "name": "MANAGE_SIGNING_KEYS",
+    "outputs": [
+      {
+        "name": "",
+        "type": "bytes32"
+      }
+    ],
+    "payable": false,
+    "stateMutability": "view",
+    "type": "function"
   },
   {
     "anonymous": false,
     "inputs": [
       {
         "indexed": false,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -801,7 +1183,7 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -818,7 +1200,7 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -835,7 +1217,7 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -852,7 +1234,7 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -869,7 +1251,7 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "id",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
@@ -886,16 +1268,52 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "operatorId",
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "pubkey",
-        "type": "bytes"
+        "name": "totalKeysTrimmed",
+        "type": "uint64"
       }
     ],
-    "name": "SigningKeyAdded",
+    "name": "NodeOperatorTotalKeysTrimmed",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "keysOpIndex",
+        "type": "uint256"
+      }
+    ],
+    "name": "KeysOpIndexSet",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "version",
+        "type": "uint256"
+      }
+    ],
+    "name": "ContractVersionSet",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "moduleType",
+        "type": "bytes32"
+      }
+    ],
+    "name": "StakingModuleTypeSet",
     "type": "event"
   },
   {
@@ -903,16 +1321,225 @@
     "inputs": [
       {
         "indexed": true,
-        "name": "operatorId",
+        "name": "rewardAddress",
+        "type": "address"
+      },
+      {
+        "indexed": false,
+        "name": "sharesAmount",
+        "type": "uint256"
+      }
+    ],
+    "name": "RewardsDistributed",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "locatorAddress",
+        "type": "address"
+      }
+    ],
+    "name": "LocatorContractSet",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "approvedValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "VettedSigningKeysCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "depositedValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "DepositedSigningKeysCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
         "type": "uint256"
       },
       {
         "indexed": false,
-        "name": "pubkey",
+        "name": "exitedValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "ExitedSigningKeysCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "totalValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "TotalSigningKeysCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": false,
+        "name": "nonce",
+        "type": "uint256"
+      }
+    ],
+    "name": "NonceChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "stuckValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "StuckValidatorsCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "RefundedValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "RefundedValidatorsCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "nodeOperatorId",
+        "type": "uint256"
+      },
+      {
+        "indexed": false,
+        "name": "targetValidatorsCount",
+        "type": "uint256"
+      }
+    ],
+    "name": "TargetValidatorsCountChanged",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "recipientAddress",
+        "type": "address"
+      },
+      {
+        "indexed": false,
+        "name": "sharesPenalizedAmount",
+        "type": "uint256"
+      }
+    ],
+    "name": "NodeOperatorPenalized",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "executor",
+        "type": "address"
+      },
+      {
+        "indexed": false,
+        "name": "script",
+        "type": "bytes"
+      },
+      {
+        "indexed": false,
+        "name": "input",
+        "type": "bytes"
+      },
+      {
+        "indexed": false,
+        "name": "returnData",
         "type": "bytes"
       }
     ],
-    "name": "SigningKeyRemoved",
+    "name": "ScriptResult",
+    "type": "event"
+  },
+  {
+    "anonymous": false,
+    "inputs": [
+      {
+        "indexed": true,
+        "name": "vault",
+        "type": "address"
+      },
+      {
+        "indexed": true,
+        "name": "token",
+        "type": "address"
+      },
+      {
+        "indexed": false,
+        "name": "amount",
+        "type": "uint256"
+      }
+    ],
+    "name": "RecoverToVault",
     "type": "event"
   }
-]
+]
\ No newline at end of file
diff --git a/lido_sdk/contract/load_contract.py b/lido_sdk/contract/load_contract.py
index 2d20c81..f7117df 100644
--- a/lido_sdk/contract/load_contract.py
+++ b/lido_sdk/contract/load_contract.py
@@ -12,6 +12,7 @@
     Network.Rinkeby: "0xF4242f9d78DB7218Ad72Ee3aE14469DBDE8731eD",
     Network.Kintsugi: "0x3a6a994AC0CC96b6DDbaA99F10769384Fa14227B",
     Network.Kiln: "0x3E50180cf438e185ec52Ade55855718584541476",
+    Network.Zhejiang: "0xEC9ac956D7C7fE5a94919fD23BAc4a42f950A403",
 }
 
 NODE_OPS_ADDRESSES = {
@@ -21,6 +22,7 @@
     Network.Rinkeby: "0x776dFe7Ec5D74526Aa65898B7d77FCfdf15ffBe6",
     Network.Kintsugi: "0xeb7D01f713F59EFfB350D05b7AF66720373D4F41",
     Network.Kiln: "0xb849C5b35DC45277Bad5c6F2c6C77183d842367c",
+    Network.Zhejiang: "0x8a1E2986E52b441058325c315f83C9D4129bDF72",
 }
 
 
diff --git a/lido_sdk/eth_multicall/multicall_address.py b/lido_sdk/eth_multicall/multicall_address.py
index 81f58ed..f4b1675 100644
--- a/lido_sdk/eth_multicall/multicall_address.py
+++ b/lido_sdk/eth_multicall/multicall_address.py
@@ -10,4 +10,5 @@
     Network.Ropsten: "0x53c43764255c17bd724f74c4ef150724ac50a3ed",
     Network.Kintsugi: "0x34cA8B8879C3578FBcDd50D88ECc29eDdBEDE0fD",
     Network.Kiln: "0x7C7080f63Bc44321eDbB0b64D3e8B37aC7edc623",
+    Network.Zhejiang: "0x8BBCF7cCBEE4aaDE9f58D2345Ee7605228974456",
 }
diff --git a/lido_sdk/methods/operators.py b/lido_sdk/methods/operators.py
index 4cc2bfb..1c2724f 100644
--- a/lido_sdk/methods/operators.py
+++ b/lido_sdk/methods/operators.py
@@ -44,12 +44,15 @@ def get_operators_keys(w3: Web3, operators: List[Operator]) -> List[OperatorKey]
     """
     args_list = []
 
-    if len(operators) == 0:
+    if not operators:
         return []
 
     for args in _index_generator(operators):
         args_list.append(args)
 
+    if not args_list:
+        return []
+
     keys = NodeOpsContract.getSigningKey_multicall(w3, args_list)
 
     for key, (operator_index, key_index) in zip(keys, _index_generator(operators)):
diff --git a/lido_sdk/network/type.py b/lido_sdk/network/type.py
index 889a615..a56fb0b 100644
--- a/lido_sdk/network/type.py
+++ b/lido_sdk/network/type.py
@@ -10,6 +10,7 @@ class Network(IntEnum):
     Ropsten = 3
     Kintsugi = 1337702
     Kiln = 1337802
+    Zhejiang = 1337803
 
 
 # Network
@@ -20,6 +21,7 @@ class Network(IntEnum):
     Network.Rinkeby: bytes.fromhex("00000000"),
     Network.Kintsugi: bytes.fromhex("60000069"),
     Network.Kiln: bytes.fromhex("70000069"),
+    Network.Zhejiang: bytes.fromhex("00000069"),
 }
 
 # Existing withdrawal credentials on the chain
@@ -42,4 +44,5 @@ class Network(IntEnum):
     Network.Rinkeby: [],
     Network.Kintsugi: [],
     Network.Kiln: [],
+    Network.Zhejiang: [],
 }
diff --git a/pyproject.toml b/pyproject.toml
index 7335e48..9635da0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "lido-sdk"
-version = "2.7.0"
+version = "3.0.3"
 description = "This library consolidates various functions to efficiently load network data for Lido, validate node operator keys and find key duplicates."
 authors = ["Lido <info@lido.fi>"]
 license = "MIT License"
diff --git a/setup.py b/setup.py
index 0cf0144..9b237dd 100644
--- a/setup.py
+++ b/setup.py
@@ -80,7 +80,7 @@
 # Where the magic happens:
 setup(
     name="lido-sdk",
-    version="2.7.0",
+    version="3.0.3",
     description="This library consolidates various functions to efficiently load network data for Lido,"
                 " validate node  operator keys and find key duplicates.",
     long_description=long_description,


Test patch:
diff --git a/tests/test_lido.py b/tests/test_lido.py
index d009862..92ece21 100644
--- a/tests/test_lido.py
+++ b/tests/test_lido.py
@@ -15,15 +15,7 @@
 from tests.utils import get_mainnet_provider, MockTestCase
 
 
-class OperatorTest(MockTestCase):
-    def setUp(self) -> None:
-        self.mocker.patch(
-            "web3.eth.Eth.chain_id", return_value=1, new_callable=PropertyMock
-        )
-        self.w3 = Web3()
-
-        self.lido = Lido(self.w3)
-
+class LidoE2ETest(MockTestCase):
     def test_main_flow_methods(self):
         w3 = get_mainnet_provider()
         operators_count = get_operators_indexes(w3)[:1]
@@ -38,6 +30,16 @@ def test_main_flow_methods(self):
         self.assertListEqual(invalid_keys, [])
         self.assertListEqual(duplicates, [])
 
+
+class OperatorTest(MockTestCase):
+    def setUp(self) -> None:
+        self.mocker.patch(
+            "web3.eth.Eth.chain_id", return_value=1, new_callable=PropertyMock
+        )
+        self.w3 = Web3()
+
+        self.lido = Lido(self.w3)
+
     def test_get_operators_indexes(self):
         self.mocker.patch(
             "lido_sdk.contract.load_contract.NodeOpsContract.getNodeOperatorsCount",