@@ -212,7 +212,7 @@ class ELUpdater(
212212
213213 val withdrawals = rewardWithdrawal ++ nativeTransferWithdrawals
214214
215- val (depositedTransactions, addedAssets, updateAssetRegistryTransaction, _ , nativeTransfersViaDeposits, assetTransfers) =
215+ val (depositedTransactions, addedAssets, updateAssetRegistryTransaction, transferTransactions , nativeTransfersViaDeposits, assetTransfers) =
216216 prepareTransactions(epochInfo.number, chainContractOptions, lastAssetRegistryIndex + 1 , chainContractClient.getAssetRegistrySize, transfers)
217217
218218 val prevRandao = calculateRandao(epochInfo.hitSource, parentBlock.hash)
@@ -237,7 +237,9 @@ class ELUpdater(
237237 nextBlockUnixTs = nextBlockUnixTs,
238238 lastC2ETransferIndex = transfers.lastOption.fold(lastC2ETransferIndex)(_.index),
239239 lastElWithdrawalIndex = lastElWithdrawalIndex + withdrawals.size,
240- lastAssetRegistryIndex = addedAssets.lastOption.fold(lastAssetRegistryIndex)(_.index)
240+ lastAssetRegistryIndex = addedAssets.lastOption.fold(lastAssetRegistryIndex)(_.index),
241+ transfers = transfers,
242+ transferTransactions = transferTransactions
241243 )
242244 }
243245 } else {
@@ -268,7 +270,9 @@ class ELUpdater(
268270 nextBlockUnixTs = nextBlockUnixTs,
269271 lastC2ETransferIndex = transfers.lastOption.fold(lastC2ETransferIndex)(_.index),
270272 lastElWithdrawalIndex = lastElWithdrawalIndex + withdrawals.size,
271- lastAssetRegistryIndex = addedAssets.lastOption.fold(lastAssetRegistryIndex)(_.index)
273+ lastAssetRegistryIndex = addedAssets.lastOption.fold(lastAssetRegistryIndex)(_.index),
274+ transfers = transfers,
275+ transferTransactions = transferTransactions
272276 )
273277 }
274278 }
@@ -336,6 +340,8 @@ class ELUpdater(
336340 scheduler.scheduleOnceLabeled(" tryToForgeNextBlock" , (miningData.nextBlockUnixTs - currentUnixTs).seconds)(
337341 tryToForgeNextBlock(
338342 miningData.payload,
343+ miningData.transfers,
344+ miningData.transferTransactions,
339345 parentBlock.hash,
340346 miningData.nextBlockUnixTs,
341347 newState.options.startEpochChainFunction(epochInfo.number, parentBlock.hash, epochInfo.hitSource, nodeChainInfo.toOption),
@@ -353,6 +359,8 @@ class ELUpdater(
353359
354360 private def tryToForgeNextBlock (
355361 payloadOrId : PayloadId | JsObject ,
362+ transfers : Seq [ContractTransfer ],
363+ transferTransactions : Seq [DepositedTransaction ],
356364 referenceHash : BlockHash ,
357365 timestamp : Long ,
358366 contractFunction : ContractFunction ,
@@ -373,7 +381,15 @@ class ELUpdater(
373381 waitForRefApprovalOnCl match {
374382 case Some (waitingTime) =>
375383 scheduler.scheduleOnceLabeled(" waitForApproval" , waitingTime) {
376- tryToForgeNextBlock(payloadOrId, referenceHash, timestamp, contractFunction, chainContractOptions)
384+ tryToForgeNextBlock(
385+ payloadOrId,
386+ transfers,
387+ transferTransactions,
388+ referenceHash,
389+ timestamp,
390+ contractFunction,
391+ chainContractOptions
392+ )
377393 }
378394 case _ =>
379395 val getAndApplyPayloadResult = for {
@@ -414,6 +430,11 @@ class ELUpdater(
414430 hash = ecBlock.hash,
415431 addresses = chainContractOptions.bridgeAddresses(epochInfo.number)
416432 )
433+
434+ failedTransfers = getFailedTransfers(ecBlockLogs, transfers.zip(transferTransactions))
435+
436+ failedTransferIndexes = failedTransfers.map(_.index)
437+ failedTransfersRootHash = BridgeMerkleTree .getFailedTransfersRootHash(failedTransferIndexes)
417438 transfersRootHash <- BridgeMerkleTree .getE2CTransfersRootHash(ecBlockLogs)
418439 // A forged block can be invalid for some reason. In this case we won't send it and its confirmation transaction to the network.
419440 expectedContractBlock = ContractBlock (
@@ -478,6 +499,8 @@ class ELUpdater(
478499 scheduler.scheduleOnceLabeled(" forgeSecond" , (nextBlockUnixTs - time.correctedTime() / 1000 ).min(1 ).seconds)(
479500 tryToForgeNextBlock(
480501 payloadOrId = nextMiningData.payload,
502+ nextMiningData.transfers, // TODO: nextMiningData.transfers or transfers
503+ nextMiningData.transferTransactions, // TODO: nextMiningData.transferTransactions or transferTransactions
481504 referenceHash = ecBlock.hash,
482505 timestamp = nextBlockUnixTs,
483506 contractFunction = chainContractOptions.appendFunction(epochInfo.number, ecBlock.hash),
@@ -1880,7 +1903,9 @@ object ELUpdater {
18801903 nextBlockUnixTs : Long ,
18811904 lastC2ETransferIndex : WithdrawalIndex ,
18821905 lastElWithdrawalIndex : WithdrawalIndex ,
1883- lastAssetRegistryIndex : Int
1906+ lastAssetRegistryIndex : Int ,
1907+ transfers : Seq [ContractTransfer ],
1908+ transferTransactions : Seq [DepositedTransaction ]
18841909 )
18851910
18861911 private case class BlockForValidation (contractBlock : ContractBlock , ecBlock : EcBlock ) {
0 commit comments