In the current design, the
depositCalldata argument is the data might be necessary to prepare the deposit data by the staking module. Depending on the staking module implementation, it might be empty (
NodeOperatorsRegistry) or contain complete deposit data (hypothetical staking module implementation that uses offchain storage for the deposit data). But for any staking module, the following is
ALWAYS true: passed
depositCalldata MUST NOT affect the deposit data set of the staking module (This requirement was explicitly added in the comments of the
IStakingModule.obtainDepositData() method in the commit
https://github.com/lidofinance/lido-dao/pull/729/commits/4c80206e016967989bb948ce0c42b9a009edf88b). In other words, the call of
StakingModule.obtainDepositData() with different valid
depositCalldata for the same
StakingModule.nonce leads to the same unambiguous set of deposited validators. For example, the offchain staking module might store a hash of the expected
depositCalldata onchain to validate it and reject any call with unexpected
depositCalldata.