From 973cedd028575027576d432afd94aa777ce0808b Mon Sep 17 00:00:00 2001 From: Davit Mandzikyan Date: Thu, 21 Aug 2025 18:44:07 +0400 Subject: [PATCH 1/2] Read contract from commit. --- .../Models/HTLCCommitEventMessage.cs | 2 + .../Activities/EVMBlockchainActivities.cs | 44 +++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/csharp/src/Workflow.Abstractions/Models/HTLCCommitEventMessage.cs b/csharp/src/Workflow.Abstractions/Models/HTLCCommitEventMessage.cs index 19d5b736..d9c21768 100644 --- a/csharp/src/Workflow.Abstractions/Models/HTLCCommitEventMessage.cs +++ b/csharp/src/Workflow.Abstractions/Models/HTLCCommitEventMessage.cs @@ -25,4 +25,6 @@ public class HTLCCommitEventMessage public required string DestinationAsset { get; set; } = null!; public required long TimeLock { get; set; } + + public string? TokenContract { get; set; } } diff --git a/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs b/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs index f5b25c60..16dd4096 100644 --- a/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs +++ b/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs @@ -104,7 +104,7 @@ public virtual async Task GetBatchTransactionAsync(GetBatch } return transaction; - } + } [Activity] public virtual Task BuildTransactionAsync(TransactionBuilderRequest request) @@ -220,8 +220,7 @@ public virtual async Task GetEventsAsync(EventRequest re var (eventType, typedEvent) = decodedEvent.Value; - if (eventType == typeof(EtherTokenCommittedEvent) || - decodedEvent.Value.eventType == typeof(ERC20TokenCommitedEvent)) + if (eventType == typeof(EtherTokenCommittedEvent)) { var commitedEvent = (EtherTokenCommittedEvent)typedEvent; @@ -252,6 +251,45 @@ public virtual async Task GetEventsAsync(EventRequest re result.HTLCCommitEventMessages.Add(message); } + else if (eventType == typeof(ERC20TokenCommitedEvent)) + { + var ercCommitedEvent = (ERC20TokenCommitedEvent)typedEvent; + + var wallet = request.WalletAddresses.Where(x => + FormatAddress(x) == FormatAddress(ercCommitedEvent.Receiver)).FirstOrDefault(); + + if (wallet == null) + { + continue; + } + + var commitTokenContract = ercCommitedEvent.TokenContract; + + if (!request.Network.Tokens.Any(x => x.Contract == commitTokenContract)) + { + continue; + } + + var commitId = ercCommitedEvent.Id.ToHex(prefix: true); + + var message = new HTLCCommitEventMessage + { + TxId = log.TransactionHash, + CommitId = commitId, + Amount = ercCommitedEvent.Amount, + SourceAsset = ercCommitedEvent.SourceAsset, + SenderAddress = ercCommitedEvent.Sender, + SourceNetwork = request.Network.Name, + DestinationAddress = ercCommitedEvent.DestinationAddress, + DestinationNetwork = ercCommitedEvent.DestinationChain, + DestinationAsset = ercCommitedEvent.DestinationAsset, + TimeLock = (long)ercCommitedEvent.Timelock, + ReceiverAddress = FormatAddress(wallet), + TokenContract = commitTokenContract, + }; + + result.HTLCCommitEventMessages.Add(message); + } else if (eventType == typeof(EtherTokenLockAddedEvent)) { var lockAddedEvent = (EtherTokenLockAddedEvent)typedEvent; From a6aa24f0fe1897eb4a98652f82670e2de4621b63 Mon Sep 17 00:00:00 2001 From: Davit Mandzikyan Date: Thu, 21 Aug 2025 20:39:41 +0400 Subject: [PATCH 2/2] Some simplifiing. --- .../Activities/EVMBlockchainActivities.cs | 93 ++++++++----------- 1 file changed, 38 insertions(+), 55 deletions(-) diff --git a/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs b/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs index 16dd4096..6054a795 100644 --- a/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs +++ b/csharp/src/Workflow.EVM/Activities/EVMBlockchainActivities.cs @@ -222,73 +222,32 @@ public virtual async Task GetEventsAsync(EventRequest re if (eventType == typeof(EtherTokenCommittedEvent)) { - var commitedEvent = (EtherTokenCommittedEvent)typedEvent; + var etherEvent = (EtherTokenCommittedEvent)typedEvent; - var wallet = request.WalletAddresses.Where(x => - FormatAddress(x) == FormatAddress(commitedEvent.Receiver)).FirstOrDefault(); + var wallet = request.WalletAddresses + .FirstOrDefault(x => FormatAddress(x) == FormatAddress(etherEvent.Receiver)); if (wallet == null) { continue; } - var commitId = commitedEvent.Id.ToHex(prefix: true); - - var message = new HTLCCommitEventMessage + // ERC20 special handling + if (etherEvent is ERC20TokenCommitedEvent ercEvent) { - TxId = log.TransactionHash, - CommitId = commitId, - Amount = commitedEvent.Amount, - SourceAsset = commitedEvent.SourceAsset, - SenderAddress = commitedEvent.Sender, - SourceNetwork = request.Network.Name, - DestinationAddress = commitedEvent.DestinationAddress, - DestinationNetwork = commitedEvent.DestinationChain, - DestinationAsset = commitedEvent.DestinationAsset, - TimeLock = (long)commitedEvent.Timelock, - ReceiverAddress = FormatAddress(wallet), - }; - - result.HTLCCommitEventMessages.Add(message); - } - else if (eventType == typeof(ERC20TokenCommitedEvent)) - { - var ercCommitedEvent = (ERC20TokenCommitedEvent)typedEvent; + if (!request.Network.Tokens.Any(x => x.Contract == ercEvent.TokenContract)) + { + continue; + } - var wallet = request.WalletAddresses.Where(x => - FormatAddress(x) == FormatAddress(ercCommitedEvent.Receiver)).FirstOrDefault(); - - if (wallet == null) - { - continue; + result.HTLCCommitEventMessages.Add( + MapCommitEvent(ercEvent, wallet, log.TransactionHash, request.Network.Name, ercEvent.TokenContract)); } - - var commitTokenContract = ercCommitedEvent.TokenContract; - - if (!request.Network.Tokens.Any(x => x.Contract == commitTokenContract)) + else { - continue; + result.HTLCCommitEventMessages.Add( + MapCommitEvent(etherEvent, wallet, log.TransactionHash, request.Network.Name)); } - - var commitId = ercCommitedEvent.Id.ToHex(prefix: true); - - var message = new HTLCCommitEventMessage - { - TxId = log.TransactionHash, - CommitId = commitId, - Amount = ercCommitedEvent.Amount, - SourceAsset = ercCommitedEvent.SourceAsset, - SenderAddress = ercCommitedEvent.Sender, - SourceNetwork = request.Network.Name, - DestinationAddress = ercCommitedEvent.DestinationAddress, - DestinationNetwork = ercCommitedEvent.DestinationChain, - DestinationAsset = ercCommitedEvent.DestinationAsset, - TimeLock = (long)ercCommitedEvent.Timelock, - ReceiverAddress = FormatAddress(wallet), - TokenContract = commitTokenContract, - }; - - result.HTLCCommitEventMessages.Add(message); } else if (eventType == typeof(EtherTokenLockAddedEvent)) { @@ -785,4 +744,28 @@ private async Task GetTransactionAsync(DetailedNetworkDto n return transactionModel; } + + private HTLCCommitEventMessage MapCommitEvent( + EtherTokenCommittedEvent evevnt, + string wallet, + string txId, + string networkName, + string? tokenContract = null) + { + return new HTLCCommitEventMessage + { + TxId = txId, + CommitId = evevnt.Id.ToHex(prefix: true), + Amount = evevnt.Amount, + SourceAsset = evevnt.SourceAsset, + SenderAddress = evevnt.Sender, + SourceNetwork = networkName, + DestinationAddress = evevnt.DestinationAddress, + DestinationNetwork = evevnt.DestinationChain, + DestinationAsset = evevnt.DestinationAsset, + TimeLock = (long)evevnt.Timelock, + ReceiverAddress = FormatAddress(wallet), + TokenContract = tokenContract + }; + } }