Repository: hyperledger/firefly
Pull request #1661: docs: update smart contracts async flow diagram
Author: login: VolodymyrBg
Created: 2025-03-13T17:22:46Z | Merged: 2025-03-21T11:37:36Z

## Proposed changes

1. Updated the smart_contracts_async_flow.svg diagram in the custom contracts tutorial to:
- Add the Blockchain Connector component to accurately represent the architecture
- Improve the flow visualization with more detailed steps
- Add color coding for better visual distinction between components
- Include a note about event subscription options
- Make the diagram more comprehensive and modern
2. Removed the TODO comment from the custom_contracts/index.md file

Fixes # <issue_number_here>

<hr>

## Types of changes

<!-- to mark a point done, place an x in square brackets. eg [x]-->
<!-- - [x] done with this task-->
<!----Please delete options that are not relevant. And in order to tick the check box just but x inside them for example [x] like this----->

- [ ] Bug fix 
- [ ] New feature added
- [x] Documentation Update 

<hr>

## Please make sure to follow these points 

<!-- to mark a point done, place an x in square brackets. eg [x]-->
<!-- - [x] done with this task-->
<!----Please delete options that are not relevant. And in order to tick the check box just but x inside them for example [x] like this----->

- [x] I have read the contributing guidelines.
- [x] I have performed a self-review of my own code or work.
- [x] I have commented my code, particularly in hard-to-understand areas.
- [x] My changes generates no new warnings.
- [ ] I have added tests that prove my fix is effective or that my feature works.
- [ ] My changes have sufficient code coverage (unit, integration, e2e tests).

<hr>

## Screenshots (If Applicable)

<hr>


## Other Information

The previous diagram was simplified and didn't accurately represent the role of the Blockchain Connector or the complete flow of events. This update provides a more accurate and detailed representation of how custom contract interactions work in FireFly, which will help developers better understand the asynchronous nature of blockchain transactions.



Diff:
diff --git a/doc-site/docs/images/smart_contracts_async_flow.svg b/doc-site/docs/images/smart_contracts_async_flow.svg
index 89634efa79..c4157d8311 100644
--- a/doc-site/docs/images/smart_contracts_async_flow.svg
+++ b/doc-site/docs/images/smart_contracts_async_flow.svg
@@ -1 +1,95 @@
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="567" height="558"><desc>title%20Smart%20Contracts%20Async%20Flow%0A%0AApp-%3EFireFly%3A%20Invoke%20custom%20contract%0AFireFly-%3EBlockchain%3A%20Submit%20transaction%0ABlockchain-%3EFireFly%3A%20Accepted%0AFireFly-%3EApp%3A%20Accepted%5Cn(Operation%20ID)%0ABlockchain-%3EBlockchain%3A%20Perform%20transaction%0ABlockchain-%3EFireFly%3A%20Emit%20events%0AFireFly-%3EApp%3A%20Emit%20events</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="567" height="558"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="144.77499658567513" y="26.3876361" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Smart Contracts Async Flow</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 40.925164177730466 103.26361593799999 L 40.925164177730466 558.8901325979999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray="13.532121076923076,5.863919133333333"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 238.57374563795182 103.26361593799999 L 238.57374563795182 558.8901325979999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray="13.532121076923076,5.863919133333333"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 406.8952091782513 103.26361593799999 L 406.8952091782513 558.8901325979999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray="13.532121076923076,5.863919133333333"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.795878699999996 55.765870957999994 L 73.05444965546093 55.765870957999994 L 73.05444965546093 103.26361593799999 L 8.795878699999996 103.26361593799999 L 8.795878699999996 55.765870957999994 Z" stroke-miterlimit="10" stroke-width="2.814681184" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="27.882935478999997" y="85.67185853800001" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">App</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 197.09227967926432 55.765870957999994 L 280.0552115966393 55.765870957999994 L 280.0552115966393 103.26361593799999 L 197.09227967926432 103.26361593799999 L 197.09227967926432 55.765870957999994 Z" stroke-miterlimit="10" stroke-width="2.814681184" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="216.17933645826432" y="85.67185853800001" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">FireFly</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 352.3607875921224 55.765870957999994 L 461.4296307643802 55.765870957999994 L 461.4296307643802 103.26361593799999 L 352.3607875921224 103.26361593799999 L 352.3607875921224 55.765870957999994 Z" stroke-miterlimit="10" stroke-width="2.814681184" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="371.4478443711224" y="85.67185853800001" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Blockchain</text></g></g><g><g><g><rect fill="white" stroke="none" x="61.7420771010638" y="138.44713073799997" width="156.01475561355468" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="64.3808407110638" y="154.279712398" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Invoke custom contract</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 40.925164177730466 161.31641535799997 L 224.08986537861847 161.31641535799997" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(238.57374563795182,161.31641535799997) translate(-238.57374563795182,-161.31641535799997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 223.9139478046185 153.9865164413333 L 238.57374563795182 161.31641535799997 L 223.9139478046185 168.64631427466665 Z"/></g></g><g><g><rect fill="white" stroke="none" x="259.39065856128514" y="187.70405145799995" width="126.68763769363281" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="262.02942217128515" y="203.53663311799997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Submit transaction</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 238.57374563795182 210.57333607799995 L 392.411328918918 210.57333607799995" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(406.8952091782513,210.57333607799995) translate(-406.8952091782513,-210.57333607799995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 392.23541134491796 203.24343716133328 L 406.8952091782513 210.57333607799995 L 392.23541134491796 217.90323499466663 Z"/></g></g><g><g><rect fill="white" stroke="none" x="289.533808890875" y="236.96097217799993" width="66.40133703445312" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="292.172572500875" y="252.79355383799995" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Accepted</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 406.8952091782513 259.83025679799994 L 253.05762589728516 259.83025679799994" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(238.57374563795182,259.83025679799994) translate(-238.57374563795182,-259.83025679799994)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 253.23354347128515 252.50035788133326 L 238.57374563795182 259.83025679799994 L 253.23354347128515 267.1601557146666 Z"/></g></g><g><g><rect fill="white" stroke="none" x="90.6719095595599" y="286.21789289799995" width="66.40133703445312" height="22.86928462"/></g><g><rect fill="white" stroke="none" x="90.6719095595599" y="303.80965029799995" width="98.1550906965625" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="93.31067316955989" y="302.05047455799996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Accepted</text><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="93.31067316955989" y="319.64223195799997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">(Operation ID)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 238.57374563795182 326.6789349179999 L 55.4090444370638 326.6789349179999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(40.925164177730466,326.6789349179999) translate(-40.925164177730466,-326.6789349179999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 55.584962011063794 319.3490360013333 L 40.925164177730466 326.6789349179999 L 55.584962011063794 334.0088338346666 Z"/></g></g><g><g><rect fill="white" stroke="none" x="427.71212210158467" y="353.06657101799993" width="133.19442785476562" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="430.3508857115847" y="368.89915267799995" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Perform transaction</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 406.8952091782513 375.93585563799996 L 477.26223877825134 375.93585563799996 L 477.26223877825134 398.80514025799994 L 421.37908943758464 398.80514025799994" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(406.8952091782513,398.80514025799994) translate(-406.8952091782513,-398.80514025799994)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 421.5550070115847 391.4752413413333 L 406.8952091782513 398.80514025799994 L 421.5550070115847 406.1350391746666 Z"/></g></g><g><g><rect fill="white" stroke="none" x="281.8029586711484" y="425.19277635799995" width="81.86303747390625" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="284.44172228114843" y="441.02535801799996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Emit events</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 406.8952091782513 448.0620609779999 L 253.05762589728516 448.0620609779999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(238.57374563795182,448.0620609779999) translate(-238.57374563795182,-448.0620609779999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 253.23354347128515 440.73216206133327 L 238.57374563795182 448.0620609779999 L 253.23354347128515 455.39195989466657 Z"/></g></g><g><g><rect fill="white" stroke="none" x="98.81793617088802" y="474.44969707799993" width="81.86303747390625" height="22.86928462"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="101.45669978088802" y="490.28227873799995" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Emit events</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 238.57374563795182 497.3189816979999 L 55.4090444370638 497.3189816979999" stroke-miterlimit="10" stroke-width="1.4659797833333332" stroke-dasharray=""/><g transform="translate(40.925164177730466,497.3189816979999) translate(-40.925164177730466,-497.3189816979999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 55.584962011063794 489.98908278133325 L 40.925164177730466 497.3189816979999 L 55.584962011063794 504.64888061466655 Z"/></g></g></g><g/><g/><g/></g></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="600" height="580" viewBox="0 0 600 580">
+  <rect width="600" height="580" fill="white"/>
+  
+  <defs>
+    <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
+      <polygon points="0 0, 10 3.5, 0 7" fill="#000000" />
+    </marker>
+  </defs>
+  
+  <!-- Title -->
+  <text x="300" y="30" font-family="Arial" font-size="16" font-weight="bold" text-anchor="middle">Smart Contracts Async Flow</text>
+  
+  <!-- Actor boxes -->
+  <rect x="50" y="60" width="60" height="40" fill="white" stroke="#0000CC" stroke-width="1.5"/>
+  <text x="80" y="85" font-family="Arial" font-size="12" font-weight="bold" text-anchor="middle">App</text>
+  
+  <rect x="190" y="60" width="60" height="40" fill="white" stroke="#00CC00" stroke-width="1.5"/>
+  <text x="220" y="85" font-family="Arial" font-size="12" font-weight="bold" text-anchor="middle">FireFly</text>
+  
+  <rect x="330" y="60" width="130" height="40" fill="white" stroke="#CC6600" stroke-width="1.5"/>
+  <text x="395" y="85" font-family="Arial" font-size="12" font-weight="bold" text-anchor="middle">Blockchain Connector</text>
+  
+  <rect x="490" y="60" width="80" height="40" fill="white" stroke="#6600CC" stroke-width="1.5"/>
+  <text x="530" y="85" font-family="Arial" font-size="12" font-weight="bold" text-anchor="middle">Blockchain</text>
+  
+  <!-- Lifelines -->
+  <line x1="80" y1="100" x2="80" y2="540" stroke="#000000" stroke-dasharray="5,5" stroke-width="1"/>
+  <line x1="220" y1="100" x2="220" y2="540" stroke="#000000" stroke-dasharray="5,5" stroke-width="1"/>
+  <line x1="395" y1="100" x2="395" y2="540" stroke="#000000" stroke-dasharray="5,5" stroke-width="1"/>
+  <line x1="530" y1="100" x2="530" y2="540" stroke="#000000" stroke-dasharray="5,5" stroke-width="1"/>
+  
+  <!-- Messages -->
+  <!-- 1. Invoke custom contract -->
+  <line x1="80" y1="140" x2="220" y2="140" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="150" y="135" font-family="Arial" font-size="11" text-anchor="middle">Invoke custom contract</text>
+  
+  <!-- 2. Submit transaction -->
+  <line x1="220" y1="170" x2="395" y2="170" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="308" y="165" font-family="Arial" font-size="11" text-anchor="middle">Submit transaction</text>
+  
+  <!-- 3. Transaction accepted (REORDERED) -->
+  <line x1="395" y1="200" x2="220" y2="200" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="308" y="195" font-family="Arial" font-size="11" text-anchor="middle">Transaction accepted</text>
+  
+  <!-- 4. Submitted (Operation ID) -->
+  <line x1="220" y1="230" x2="80" y2="230" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="150" y="210" font-family="Arial" font-size="11" text-anchor="middle">Submitted</text>
+  <text x="150" y="223" font-family="Arial" font-size="11" text-anchor="middle">(Operation ID)</text>
+  
+  <!-- 5. Submit transaction to blockchain -->
+  <line x1="395" y1="260" x2="530" y2="260" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="463" y="255" font-family="Arial" font-size="11" text-anchor="middle">Submit transaction</text>
+  
+  <!-- 6. Perform transaction -->
+  <path d="M 530,290 L 560,290 L 560,320 L 530,320" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)" fill="none"/>
+  <text x="550" y="270" font-family="Arial" font-size="10" text-anchor="start">Perform</text>
+  <text x="550" y="283" font-family="Arial" font-size="10" text-anchor="start">transaction</text>
+  
+  <!-- 7. Retrieve receipt/confirmation -->
+  <line x1="395" y1="350" x2="530" y2="350" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="463" y="345" font-family="Arial" font-size="10" text-anchor="middle">Retrieve receipt/confirmation</text>
+  
+  <!-- 8. Return transaction receipt -->
+  <line x1="530" y1="380" x2="395" y2="380" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="463" y="375" font-family="Arial" font-size="11" text-anchor="middle">Return transaction receipt</text>
+  
+  <!-- 9. Forward transaction receipt -->
+  <line x1="395" y1="410" x2="220" y2="410" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="308" y="405" font-family="Arial" font-size="11" text-anchor="middle">Forward transaction receipt</text>
+  
+  <!-- 10. Update operation -->
+  <path d="M 220,430 L 250,430 L 250,450 L 220,450" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)" fill="none"/>
+  <text x="223" y="425" font-family="Arial" font-size="10" text-anchor="start">Update operation</text>
+  
+  <!-- 11. Emit blockchain events -->
+  <line x1="530" y1="470" x2="395" y2="470" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="463" y="465" font-family="Arial" font-size="11" text-anchor="middle">Emit blockchain events</text>
+  
+  <!-- 12. Forward interested blockchain events -->
+  <line x1="395" y1="490" x2="220" y2="490" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="308" y="485" font-family="Arial" font-size="10" text-anchor="middle">Forward interested blockchain events</text>
+  
+  <!-- 13. Store events in database -->
+  <path d="M 220,510 L 250,510 L 250,530 L 220,530" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)" fill="none"/>
+  <text x="253" y="520" font-family="Arial" font-size="10" text-anchor="start">Store events in database</text>
+  
+  <!-- 14. Emit blockchain_event_received -->
+  <line x1="220" y1="532" x2="80" y2="532" stroke="#000000" stroke-width="1" marker-end="url(#arrowhead)"/>
+  <text x="150" y="528" font-family="Arial" font-size="9" text-anchor="middle">Emit blockchain_event_received</text>
+  
+  <!-- Note -->
+  <rect x="30" y="560" width="320" height="20" fill="white" stroke="#CC0000" stroke-width="1" rx="5" ry="5"/>
+  <text x="190" y="573" font-family="Arial" font-size="11" text-anchor="middle" fill="#CC0000">App can subscribe to events via WebSockets or Webhooks</text>
+</svg>
diff --git a/doc-site/docs/tutorials/custom_contracts/index.md b/doc-site/docs/tutorials/custom_contracts/index.md
index 70a4467cd0..90cb9d5c21 100644
--- a/doc-site/docs/tutorials/custom_contracts/index.md
+++ b/doc-site/docs/tutorials/custom_contracts/index.md
@@ -49,8 +49,6 @@ Like the rest of FireFly, custom onchain logic support are implemented with an a
 - The transaction itself happens asynchronously from the HTTP request that initiated it
 - Blockchain events emitted by the custom onchain logic (Ethereum smart contracts, Fabric chaincodes, Corda flows, etc.) will be stored in FireFly's database if FireFly has a **Event Listener** set up for that specific type of event. FireFly will also emit an event of type `blockchain_event_received` when this happens.
 
-<!-- TODO: Update this diagram -->
-
 ![Smart Contracts Async Flow](../../images/smart_contracts_async_flow.svg "Smart Contracts Async Flow")
 
 <!--nav-->


Reviews:
user: login: EnriqueL8
body: Thanks @VolodymyrBg this is super useful, it seems that the SVG is cut and I can't see the store events flow and emit events to the App, could you please add that?
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-13T17:25:10Z
user: login: EnriqueL8
body: Thanks , looking better! A few changes needed please 
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T11:53:31Z
user: login: EnriqueL8
body: Sorry for spotting this later in the review 
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T10:24:32Z
user: login: EnriqueL8
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T09:47:27Z
user: login: EnriqueL8
body: Awesome thanks @VolodymyrBg! 
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-20T09:58:33Z

Review comments:
path: doc-site/docs/images/smart_contracts_async_flow.svg
user: login: EnriqueL8
body: A few things, 
- the `forward transaction` from the connector to the blockchain should be `submit transaction` as it's in the blockchain connector where the transaction is signed and submitted using the specific DLT format
- This `Accepted` flow is not strictly correct and depends if it's the TX has been submitted synchronously through the app using `confirm=true` or not. You only get a "Submitted" event to the app not `Accepted`
- `Process Transaction` - > `Perform Transaction` 
- `Forward events` -> `Forward interested blockchain events` 

created_at: 2025-03-14T11:53:13Z
author_association: CONTRIBUTOR
path: doc-site/docs/images/smart_contracts_async_flow.svg
user: login: EnriqueL8
body: After reviewing the code flow and where the TODO was, this diagram doesn't show the Async behavior of a smart contract invoke.  The blockchain connector will return a transaction accepted before it's submitted to the blockchain and the response of the operation being completed is a receipt from the blockchain so two things need changing:
- `Transaction accepted` from connector to FireFly should just after the `Submit Transaction` 
- `Before the emit blockchain events` there is also a `Retrieve receipt/confirmation for TX` and then `confirm tx to FireFly`. At this point the operation is updated. 

created_at: 2025-03-18T10:24:22Z
author_association: CONTRIBUTOR
path: doc-site/docs/images/smart_contracts_async_flow.svg
user: login: EnriqueL8
body: Just two more small changes:
- move the `emit_blockchain_event_received` all the way at the bottom 
- the `update_operation` happens inside FireFly once it gets the Transaction Receipt from the connector 
created_at: 2025-03-19T09:47:24Z
author_association: CONTRIBUTOR

PR comments:
user: login: VolodymyrBg
created_at: 2025-03-13T18:05:00Z
body: @EnriqueL8 LIKE THIS?
author_association: CONTRIBUTOR
user: login: VolodymyrBg
created_at: 2025-03-14T18:06:50Z
body: @EnriqueL8 Corrected. I can squash commits if it's necessary, cause too many of them. Sorry for mess
author_association: CONTRIBUTOR
user: login: EnriqueL8
created_at: 2025-03-17T16:47:44Z
body: No worries, could you squash please :) 
author_association: CONTRIBUTOR
user: login: VolodymyrBg
created_at: 2025-03-17T18:46:16Z
body: @EnriqueL8 Done
author_association: CONTRIBUTOR
user: login: codecov[bot]
created_at: 2025-03-18T10:24:53Z
body: ## [Codecov](https://app.codecov.io/gh/hyperledger/firefly/pull/1661?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hyperledger) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 99.95%. Comparing base [(`ec71bca`)](https://app.codecov.io/gh/hyperledger/firefly/commit/ec71bca01e15f60bdefa0dc6ea040de92dc4ea33?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hyperledger) to head [(`058c585`)](https://app.codecov.io/gh/hyperledger/firefly/commit/058c585cbecb4563183c478486643b6e306a6ed4?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hyperledger).
> Report is 6 commits behind head on main.

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main    #1661   +/-   ##
=======================================
  Coverage   99.95%   99.95%           
=======================================
  Files         339      339           
  Lines       29782    29782           
=======================================
  Hits        29770    29770           
  Misses          8        8           
  Partials        4        4           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/hyperledger/firefly/pull/1661?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hyperledger).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hyperledger).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE
user: login: VolodymyrBg
created_at: 2025-03-18T16:44:57Z
body: @EnriqueL8 Hope now it's ok
author_association: CONTRIBUTOR
user: login: VolodymyrBg
created_at: 2025-03-19T17:10:35Z
body: @EnriqueL8 dONE
author_association: CONTRIBUTOR