Skip to content
Snippets Groups Projects
CCTx_Abstract_DLT_m1.bum 17.1 KiB
Newer Older
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile org.eventb.core.configuration="org.eventb.core.fwd" org.eventb.core.generated="false" org.eventb.emf.persistence.emf_id="_PjG9LPKVEe60CqkwWvstGA" org.eventb.texttools.text_lastmodified="1712243330256" org.eventb.texttools.text_representation="machine CCTx_Abstract_DLT_m1 sees CCTx_Abstract_DLT_c1&#10;&#10;variables received_transactions emitted_events subscriptions gateway_pending_transactions received_cross_chain_transactions&#10;&#10;invariants&#10;  @inv1 received_transactions ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS&#10;  @inv2 emitted_events ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS&#10;  @inv3 subscriptions ∈ GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS&#10;  @inv4 gateway_pending_transactions ∈ GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS&#10;  @inv5 received_cross_chain_transactions ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS&#10;&#10;events&#10;  event INITIALISATION&#10;    then&#10;      @act1 received_transactions ≔ ∅&#10;      @act2 emitted_events ≔ ∅&#10;      @act3 subscriptions ≔ ∅&#10;      @act4 gateway_pending_transactions ≔ ∅&#10;      @act6 received_cross_chain_transactions ≔ ∅&#10;  end&#10;&#10;  event SUBSCRIBE_SMART_CONTRACT_EVENTS&#10;    where&#10;      @grd1 gateway ↦ source_smart_contract ∉ subscriptions // The gateway is not already subscribed to the smart contract events&#10;    then&#10;      @act1 subscriptions ≔ subscriptions  ∪ {gateway ↦ source_smart_contract} // The gateway is subscribed to listen to the smart contract events&#10;  end&#10;&#10;  event INITIATE_CC_TX&#10;    any transaction&#10;    where&#10;      @grd1 transaction ∈ TRANSACTIONS&#10;      @grd3 transaction ∉ received_transactions[{source_smart_contract}] // The transaction was not received by the smart contract&#10;    then&#10;      @act1 received_transactions ≔ received_transactions ∪ {source_smart_contract ↦ transaction} // Add the transaction to the received transactions of the smart contract&#10;  end&#10;&#10;  event EMIT_CC_TX_EVENT&#10;    any transaction cross_chain_event&#10;    where&#10;      @grd1 source_smart_contract ↦ transaction ∈ received_transactions // The smart contract has a pending transaction to process&#10;      @grd2 cross_chain_event ∉ emitted_events[{source_smart_contract}] // The smart contract will always emit a new event&#10;    then&#10;      @act1 emitted_events ≔  emitted_events ∪ {source_smart_contract ↦ cross_chain_event} // The smart contract emits a new event related to the transaction processing&#10;      @act2 received_transactions ≔ received_transactions ∖ {source_smart_contract ↦ transaction} // The smart contract processed the transaction&#10;  end&#10;&#10;  event LISTEN_CC_TX_EVENT&#10;    any cross_chain_event cross_chain_transaction&#10;    where&#10;      @grd1 source_smart_contract ↦ cross_chain_event ∈ emitted_events // The smart contract has emitted an event&#10;      @grd2 gateway ↦ source_smart_contract ∈ subscriptions // Exist a subscription to the smart contract events&#10;      @grd3 gateway ↦ cross_chain_transaction ∉ gateway_pending_transactions // The event was not already listened&#10;    then&#10;      @act1 gateway_pending_transactions ≔ gateway_pending_transactions ∪ {gateway ↦ cross_chain_transaction} // The event is added to the cross-chain transactions to be processed by the gateway&#10;      @act2 emitted_events ≔ emitted_events ∖ {source_smart_contract ↦ cross_chain_event} // The event is removed from the pending events to listen&#10;  end&#10;&#10;  event SUBMIT_CC_TX&#10;    any cross_chain_transaction&#10;    where&#10;      @grd1 gateway ↦ cross_chain_transaction ∈ gateway_pending_transactions // There is one pending cross-chain transaction to process&#10;    then&#10;      @act1 received_cross_chain_transactions ≔ received_cross_chain_transactions ∪ {target_smart_contract ↦ cross_chain_transaction} // The cross-chain transaction is received by the target smart contract&#10;      @act2 gateway_pending_transactions ≔  gateway_pending_transactions ∖ {gateway ↦ cross_chain_transaction} // Remove the cross-chain transaction to the pending transactions of the Gateway&#10;  end&#10;end" version="5">
Guzman Llambias's avatar
Guzman Llambias committed
    <org.eventb.core.seesContext name="_yQ9vsL7uEe6laZimEYihUg" org.eventb.core.target="CCTx_Abstract_DLT_c1"/>
    <org.eventb.core.event name="'" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="INITIALISATION" org.eventb.emf.persistence.emf_id="_PjG9D_KVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpBMgMQ4Ee609fto5wotHA" org.eventb.core.assignment="received_transactions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9CvKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpBzkMQ4Ee609fto5wotHA" org.eventb.core.assignment="emitted_events ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act2" org.eventb.emf.persistence.emf_id="_PjG9C_KVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpBzkcQ4Ee609fto5wotHA" org.eventb.core.assignment="subscriptions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act3" org.eventb.emf.persistence.emf_id="_PjG9DPKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpBzksQ4Ee609fto5wotHA" org.eventb.core.assignment="gateway_pending_transactions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act4" org.eventb.emf.persistence.emf_id="_PjG9DfKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpCaoMQ4Ee609fto5wotHA" org.eventb.core.assignment="received_cross_chain_transactions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act6" org.eventb.emf.persistence.emf_id="_PjG9DvKVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.event name="_yQ9vtr7uEe6laZimEYihUg" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS" org.eventb.emf.persistence.emf_id="_PjG9EvKVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpDBsMQ4Ee609fto5wotHA" org.eventb.core.assignment="subscriptions ≔ subscriptions  ∪ {gateway ↦ source_smart_contract}" org.eventb.core.comment="The gateway is subscribed to listen to the smart contract events" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9EfKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpDBscQ4Ee609fto5wotHA" org.eventb.core.comment="The gateway is not already subscribed to the smart contract events" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway ↦ source_smart_contract ∉ subscriptions" org.eventb.emf.persistence.emf_id="_PjG9EPKVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.event name="_y397cMBFEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="INITIATE_CC_TX" org.eventb.emf.persistence.emf_id="_PjG9F_KVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpDowMQ4Ee609fto5wotHA" org.eventb.core.assignment="received_transactions ≔ received_transactions ∪ {source_smart_contract ↦ transaction}" org.eventb.core.comment="Add the transaction to the received transactions of the smart contract" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9FvKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpDowcQ4Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="transaction ∈ TRANSACTIONS" org.eventb.emf.persistence.emf_id="_PjG9FPKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpEP0MQ4Ee609fto5wotHA" org.eventb.core.comment="The transaction was not received by the smart contract" org.eventb.core.generated="false" org.eventb.core.label="grd3" org.eventb.core.predicate="transaction ∉ received_transactions[{source_smart_contract}]" org.eventb.emf.persistence.emf_id="_PjG9FfKVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yQ9vvb7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="transaction" org.eventb.emf.persistence.emf_id="_PjG9E_KVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.event name="_Pk5swPKVEe60CqkwWvstGA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="EMIT_CC_TX_EVENT" org.eventb.emf.persistence.emf_id="_PjG9HvKVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpE24MQ4Ee609fto5wotHA" org.eventb.core.assignment="emitted_events ≔  emitted_events ∪ {source_smart_contract ↦ cross_chain_event}" org.eventb.core.comment="The smart contract emits a new event related to the transaction processing" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9HPKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpFd8MQ4Ee609fto5wotHA" org.eventb.core.assignment="received_transactions ≔ received_transactions ∖ {source_smart_contract ↦ transaction}" org.eventb.core.comment="The smart contract processed the transaction" org.eventb.core.generated="false" org.eventb.core.label="act2" org.eventb.emf.persistence.emf_id="_PjG9HfKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpFd8cQ4Ee609fto5wotHA" org.eventb.core.comment="The smart contract has a pending transaction to process" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="source_smart_contract ↦ transaction ∈ received_transactions" org.eventb.emf.persistence.emf_id="_PjG9GvKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpGFAMQ4Ee609fto5wotHA" org.eventb.core.comment="The smart contract will always emit a new event" org.eventb.core.generated="false" org.eventb.core.label="grd2" org.eventb.core.predicate="cross_chain_event ∉ emitted_events[{source_smart_contract}]" org.eventb.emf.persistence.emf_id="_PjG9G_KVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yQ9vw77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="transaction" org.eventb.emf.persistence.emf_id="_PjG9GPKVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yQ9vxL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="cross_chain_event" org.eventb.emf.persistence.emf_id="_PjG9GfKVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.event name="_THog4MBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="LISTEN_CC_TX_EVENT" org.eventb.emf.persistence.emf_id="_PjG9JvKVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpGsEMQ4Ee609fto5wotHA" org.eventb.core.assignment="gateway_pending_transactions ≔ gateway_pending_transactions ∪ {gateway ↦ cross_chain_transaction}" org.eventb.core.comment="The event is added to the cross-chain transactions to be processed by the gateway" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9JPKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpHTIMQ4Ee609fto5wotHA" org.eventb.core.assignment="emitted_events ≔ emitted_events ∖ {source_smart_contract ↦ cross_chain_event}" org.eventb.core.comment="The event is removed from the pending events to listen" org.eventb.core.generated="false" org.eventb.core.label="act2" org.eventb.emf.persistence.emf_id="_PjG9JfKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpHTIcQ4Ee609fto5wotHA" org.eventb.core.comment="The smart contract has emitted an event" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="source_smart_contract ↦ cross_chain_event ∈ emitted_events" org.eventb.emf.persistence.emf_id="_PjG9IfKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpH6MMQ4Ee609fto5wotHA" org.eventb.core.comment="Exist a subscription to the smart contract events" org.eventb.core.generated="false" org.eventb.core.label="grd2" org.eventb.core.predicate="gateway ↦ source_smart_contract ∈ subscriptions" org.eventb.emf.persistence.emf_id="_PjG9IvKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpH6McQ4Ee609fto5wotHA" org.eventb.core.comment="The event was not already listened" org.eventb.core.generated="false" org.eventb.core.label="grd3" org.eventb.core.predicate="gateway ↦ cross_chain_transaction ∉ gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_PjG9I_KVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yQ9vy77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="cross_chain_event" org.eventb.emf.persistence.emf_id="_PjG9H_KVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yQ9vzL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="cross_chain_transaction" org.eventb.emf.persistence.emf_id="_PjG9IPKVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.event name="_fwqd8MBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="SUBMIT_CC_TX" org.eventb.emf.persistence.emf_id="_PjG9K_KVEe60CqkwWvstGA">
        <org.eventb.core.action name="_zpJIUMQ4Ee609fto5wotHA" org.eventb.core.assignment="received_cross_chain_transactions ≔ received_cross_chain_transactions ∪ {target_smart_contract ↦ cross_chain_transaction}" org.eventb.core.comment="The cross-chain transaction is received by the target smart contract" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_PjG9KfKVEe60CqkwWvstGA"/>
        <org.eventb.core.action name="_zpJvYMQ4Ee609fto5wotHA" org.eventb.core.assignment="gateway_pending_transactions ≔  gateway_pending_transactions ∖ {gateway ↦ cross_chain_transaction}" org.eventb.core.comment="Remove the cross-chain transaction to the pending transactions of the Gateway" org.eventb.core.generated="false" org.eventb.core.label="act2" org.eventb.emf.persistence.emf_id="_PjG9KvKVEe60CqkwWvstGA"/>
        <org.eventb.core.guard name="_zpJvYcQ4Ee609fto5wotHA" org.eventb.core.comment="There is one pending cross-chain transaction to process" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway ↦ cross_chain_transaction ∈ gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_PjG9KPKVEe60CqkwWvstGA"/>
        <org.eventb.core.parameter name="_yREdY77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="cross_chain_transaction" org.eventb.emf.persistence.emf_id="_PjG9J_KVEe60CqkwWvstGA"/>
    </org.eventb.core.event>
    <org.eventb.core.invariant name="_zpKWcMQ4Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv1" org.eventb.core.predicate="received_transactions ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS" org.eventb.emf.persistence.emf_id="_PjG9BfKVEe60CqkwWvstGA"/>
    <org.eventb.core.invariant name="_zpKWccQ4Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv2" org.eventb.core.predicate="emitted_events ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS" org.eventb.emf.persistence.emf_id="_PjG9BvKVEe60CqkwWvstGA"/>
    <org.eventb.core.invariant name="_zpK9gMQ4Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv3" org.eventb.core.predicate="subscriptions ∈ GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS" org.eventb.emf.persistence.emf_id="_PjG9B_KVEe60CqkwWvstGA"/>
    <org.eventb.core.invariant name="_zpK9gcQ4Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv4" org.eventb.core.predicate="gateway_pending_transactions ∈ GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS" org.eventb.emf.persistence.emf_id="_PjG9CPKVEe60CqkwWvstGA"/>
    <org.eventb.core.invariant name="_qTKs0MT7Ee609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv5" org.eventb.core.predicate="received_cross_chain_transactions ∈ CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS" org.eventb.emf.persistence.emf_id="_PjG9CfKVEe60CqkwWvstGA"/>
    <org.eventb.core.variable name="_yREdab7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_transactions" org.eventb.emf.persistence.emf_id="_PjG9APKVEe60CqkwWvstGA"/>
    <org.eventb.core.variable name="_PlDdwPKVEe60CqkwWvstGA" org.eventb.core.generated="false" org.eventb.core.identifier="emitted_events" org.eventb.emf.persistence.emf_id="_PjG9AfKVEe60CqkwWvstGA"/>
    <org.eventb.core.variable name="_yREda77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="subscriptions" org.eventb.emf.persistence.emf_id="_PjG9AvKVEe60CqkwWvstGA"/>
    <org.eventb.core.variable name="_yREdbL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_PjG9A_KVEe60CqkwWvstGA"/>
    <org.eventb.core.variable name="_yREdbb7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_cross_chain_transactions" org.eventb.emf.persistence.emf_id="_PjG9BPKVEe60CqkwWvstGA"/>
</org.eventb.core.machineFile>