Smart Contract Interaction

Bridging E2E Flow

  1. The user creates an order using the Escrow smart contract on the source chain.

  2. The order details are stored in the orders mapping.

  3. An OrderPlaced event is emitted.

  4. The Operator service, listening for the OrderPlaced event, detects the new order.

  5. The Market Maker (MM) calls the transferTo function on the PaymentRegistry smart contract on the destination chain, using details from the OrderPlaced event.

  6. The PaymentRegistry contract records the transaction details and transfers the funds to the user on the destination chain.

  7. The Operator service, listens for the Transfer event from the PaymentRegistry contract.

  8. Once the Transfer event is detected, the MM can either begin the proof process immediately or wait for better gas prices and batch proof their order fulfillments.

  9. When the proof process begins, the Operator service receives data specifying which order is being proved.

  10. The Operator service calculates which storage slots in the PaymentRegistry smart contract hold the transaction details, serving as proof that the MM has fulfilled the order.

  11. These storage slots are sent to the Storage Proofs to be made available in the Facts Registry smart contract on the source chain.

  12. The Operator webhook receives a status: DONE confirmation from the Storage Proofs.

  13. The Operator relays the storage slots back to the Escrow smart contract using it's getValuesFromSlots function.

  14. getValuesFromSlots calls the Facts Registry smart contract to retrieve the values stored in the given slots on the destination chain from the PaymentRegistry smart contract.

  15. getValuesFromSlots then calls convertBytes32toNative to convert the retrieved values.

  16. The slot values are converted into their native types.

  17. The proveOrderFulfillment function is called, which checks the values from the Facts Registry and compares them to the data stored in the orders mapping.

  18. If the data matches, proveOrderFulfillment updates the order status to proved and records the source chain address of the MM.

  19. The MM calls the withdrawProved function to receive payment (including the amount bridged + fee) for the proved order.

Last updated