diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bcm b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bcm index 629568ebfacf8d4bb4baac2606a6a03f385f2d19..13387763249520603372b7d00737af3b9d09f499 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bcm +++ b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bcm @@ -33,26 +33,28 @@ <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c3" org.eventb.core.label="inv11" org.eventb.core.predicate="authenticated_users⊆USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TIsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c4" org.eventb.core.label="inv12" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c5" org.eventb.core.label="inv13" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c6" org.eventb.core.label="inv14" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c7" org.eventb.core.label="inv16" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c8" org.eventb.core.label="inv11" org.eventb.core.predicate="subscribed∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c9" org.eventb.core.label="inv12" org.eventb.core.predicate="initiated∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c:" org.eventb.core.label="inv13" org.eventb.core.predicate="triggered∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c;" org.eventb.core.label="inv14" org.eventb.core.predicate="gateway_processing∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c=" org.eventb.core.label="inv15" org.eventb.core.predicate="submit_cc_tx∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c>" org.eventb.core.label="inv16" org.eventb.core.predicate="user_created∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_ZH0uYMEaEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scVariable name="gateway_processing" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_t-xhYsEVEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c6" org.eventb.core.label="inv14" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c7" org.eventb.core.label="inv15" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c8" org.eventb.core.label="inv11" org.eventb.core.predicate="subscribed∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c9" org.eventb.core.label="inv12" org.eventb.core.predicate="initiated∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c:" org.eventb.core.label="inv13" org.eventb.core.predicate="triggered∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c;" org.eventb.core.label="inv14" org.eventb.core.predicate="gateway_processing∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c=" org.eventb.core.label="inv15" org.eventb.core.predicate="submit_cc_tx∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c>" org.eventb.core.label="inv16" org.eventb.core.predicate="user_created∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c?" org.eventb.core.label="inv17" org.eventb.core.predicate="write_granted∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scVariable name="gateway_processing" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmMMIsHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> <org.eventb.core.scVariable name="triggered_events" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_yREdar7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> - <org.eventb.core.scVariable name="initiated" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_t-xhYMEVEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> - <org.eventb.core.scVariable name="submit_cc_tx" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_t-yIcMEVEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> - <org.eventb.core.scVariable name="subscribed" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_t-w6UMEVEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="initiated" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmMMIMHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="submit_cc_tx" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmMMI8HOEe609fto5wotHA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="subscribed" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmLlEMHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> <org.eventb.core.scVariable name="authenticated_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_1toq4b7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.scVariable name="received_cross_chain_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_yREdbb7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.scVariable name="subscriptions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_yREda77uEe6laZimEYihUg" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> - <org.eventb.core.scVariable name="triggered" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_t-xhYcEVEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> - <org.eventb.core.scVariable name="user_created" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_ZH18gMEaEe6yC4BToIaAqA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="grants" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_2RlqIMErEe6yC4BToIaAqA" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.scVariable name="triggered" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmMMIcHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="write_granted" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_2MPTAMHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> + <org.eventb.core.scVariable name="user_created" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_DmMMJMHOEe609fto5wotHA" org.eventb.core.type="ℤ"/> <org.eventb.core.scVariable name="gateway_pending_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_yREdbL7uEe6laZimEYihUg" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> - <org.eventb.core.scVariable name="write_grant" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_1toq4r7uEe6laZimEYihUg" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.scVariable name="received_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_yREdab7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.scVariable name="authenticated_users" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.variable#_1toq4L7uEe6laZimEYihUg" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.scEvent name="received_cross_chain_transactiont" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="INITIALISATION" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"> @@ -64,19 +66,20 @@ <org.eventb.core.scAction name="+" org.eventb.core.assignment="received_cross_chain_transactions ≔ ∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)" org.eventb.core.label="act6;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'|org.eventb.core.action#_yQ9vtb7uEe6laZimEYihUg"/> <org.eventb.core.scAction name="," org.eventb.core.assignment="authenticated_users ≔ ∅ ⦂ â„™(USERS)" org.eventb.core.label="act11" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAMEWEe6yC4BToIaAqA"/> <org.eventb.core.scAction name="-" org.eventb.core.assignment="authenticated_transactions ≔ ∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)" org.eventb.core.label="act12" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="." org.eventb.core.assignment="write_grant ≔ {gateway_user ↦ write}" org.eventb.core.label="act13" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAsEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="/" org.eventb.core.assignment="subscribed ≔ 0" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_-rC08MEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="0" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_-rC08cEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="1" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_-rDcAMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="2" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.label="act34" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_-rDcAcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="3" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act35" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_-rEDEMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="4" org.eventb.core.assignment="user_created ≔ 0" org.eventb.core.label="act36" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_bpmHkMEaEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="." org.eventb.core.assignment="grants ≔ ∅ ⦂ â„™(USERS×PERMISSIONS)" org.eventb.core.label="act14" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_0oC5cMErEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="/" org.eventb.core.assignment="subscribed ≔ 0" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVN5wMHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="0" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVN5wcHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="1" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVOg0MHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="2" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.label="act34" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVOg0cHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="3" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act35" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVPH4MHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="4" org.eventb.core.assignment="user_created ≔ 0" org.eventb.core.label="act36" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_FVPH4cHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="5" org.eventb.core.assignment="write_granted ≔ 0" org.eventb.core.label="act37" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_4VMjkMHOEe609fto5wotHA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactionu" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUi"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionu" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUi|org.eventb.core.refinesEvent#'"/> <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1;" org.eventb.core.predicate="gateway ↦ source_smart_contract∉subscriptions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_yQ9vtr7uEe6laZimEYihUg|org.eventb.core.guard#_yQ9vuL7uEe6laZimEYihUg" org.eventb.core.theorem="false"/> <org.eventb.core.scAction name="(" org.eventb.core.assignment="subscriptions ≔ subscriptions∪{gateway ↦ source_smart_contract}" org.eventb.core.label="act1;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_yQ9vtr7uEe6laZimEYihUg|org.eventb.core.action#_yQ9vt77uEe6laZimEYihUg"/> - <org.eventb.core.scAction name=")" org.eventb.core.assignment="subscribed ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUi|org.eventb.core.action#_-rEqIMEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name=")" org.eventb.core.assignment="subscribed ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUi|org.eventb.core.action#_G4NWgMHOEe609fto5wotHA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactionv" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="INITIATE_CC_TX_IN_ETHEREUM" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionv" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj|org.eventb.core.refinesEvent#'"/> @@ -84,8 +87,8 @@ <org.eventb.core.scGuard name="(" org.eventb.core.label="grd3;" org.eventb.core.predicate="transaction∉received_transactions[{source_smart_contract}]" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vvL7uEe6laZimEYihUg" org.eventb.core.theorem="false"/> <org.eventb.core.scAction name="transactioo" org.eventb.core.assignment="received_transactions ≔ received_transactions∪{source_smart_contract ↦ transaction}" org.eventb.core.label="act1;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.action#_yQ9vur7uEe6laZimEYihUg"/> <org.eventb.core.scParameter name="transaction" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.parameter#_yQ9vvb7uEe6laZimEYihUg" org.eventb.core.type="TRANSACTIONS"/> - <org.eventb.core.scAction name="transactiop" org.eventb.core.assignment="initiated ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj|org.eventb.core.action#_-rFRMMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="transactioq" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj|org.eventb.core.action#_-rFRMcEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="transactiop" org.eventb.core.assignment="initiated ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj|org.eventb.core.action#_I7eOwMHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="transactioq" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj|org.eventb.core.action#_I7eOwcHOEe609fto5wotHA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactionw" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="TRIGGER_CC_TX_EVENT_IN_ETHEREUM" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionw" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.refinesEvent#'"/> @@ -95,9 +98,9 @@ <org.eventb.core.scAction name="cross_chain_evenv" org.eventb.core.assignment="received_transactions ≔ received_transactions ∖ {source_smart_contract ↦ transaction}" org.eventb.core.label="act2;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.action#_yQ9vwL7uEe6laZimEYihUg"/> <org.eventb.core.scParameter name="cross_chain_event" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yQ9vxL7uEe6laZimEYihUg" org.eventb.core.type="CROSS_CHAIN_EVENTS"/> <org.eventb.core.scParameter name="transaction" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yQ9vw77uEe6laZimEYihUg" org.eventb.core.type="TRANSACTIONS"/> - <org.eventb.core.scAction name="cross_chain_evenw" org.eventb.core.assignment="triggered ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_-rF4QMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="cross_chain_evenx" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_-rF4QcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="cross_chain_eveny" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_-rGfUMEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="cross_chain_evenw" org.eventb.core.assignment="triggered ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_LjZ6UMHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="cross_chain_evenx" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_LjZ6UcHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="cross_chain_eveny" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk|org.eventb.core.action#_LjahYMHOEe609fto5wotHA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactionx" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="LISTEN_CC_TX_EVENT_IN_ETHEREUM" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionx" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.refinesEvent#'"/> @@ -108,27 +111,39 @@ <org.eventb.core.scAction name="cross_chain_transactiop" org.eventb.core.assignment="triggered_events ≔ triggered_events ∖ {source_smart_contract ↦ cross_chain_event}" org.eventb.core.label="act2;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.action#_yQ9vx77uEe6laZimEYihUg"/> <org.eventb.core.scParameter name="cross_chain_event" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yQ9vy77uEe6laZimEYihUg" org.eventb.core.type="CROSS_CHAIN_EVENTS"/> <org.eventb.core.scParameter name="cross_chain_transaction" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yQ9vzL7uEe6laZimEYihUg" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> - <org.eventb.core.scAction name="cross_chain_transactioq" org.eventb.core.assignment="gateway_processing ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_-rHGYMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="cross_chain_transactior" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_-rHGYcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="cross_chain_transactios" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_-rHGYsEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="cross_chain_transactioq" org.eventb.core.assignment="gateway_processing ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_NY1x8MHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="cross_chain_transactior" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_NY1x8cHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="cross_chain_transactios" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.label="act33" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl|org.eventb.core.action#_NY1x8sHOEe609fto5wotHA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactiony" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="SUBMIT_CC_TX_TO_FABRIC" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactiony" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm|org.eventb.core.refinesEvent#'"/> <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1;" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yREdYr7uEe6laZimEYihUg" org.eventb.core.theorem="false"/> <org.eventb.core.scGuard name="cross_chain_transactioq" org.eventb.core.label="grd11" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEcEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scGuard name="cross_chain_transactior" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write∈write_grant" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name="cross_chain_transactior" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scAction name="cross_chain_transactioo" org.eventb.core.assignment="received_cross_chain_transactions ≔ received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}" org.eventb.core.label="act1;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.action#_yREdYL7uEe6laZimEYihUg"/> <org.eventb.core.scAction name="cross_chain_transactiop" org.eventb.core.assignment="gateway_pending_transactions ≔ gateway_pending_transactions ∖ {gateway ↦ cross_chain_transaction}" org.eventb.core.label="act2;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.action#_yREdYb7uEe6laZimEYihUg"/> <org.eventb.core.scAction name="cross_chain_transactios" org.eventb.core.assignment="authenticated_transactions ≔ authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user}" org.eventb.core.label="act11" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.action#_jV8sEMEWEe6yC4BToIaAqA"/> <org.eventb.core.scParameter name="cross_chain_transaction" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yREdY77uEe6laZimEYihUg" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.scParameter name="user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.parameter#_1tncwL7uEe6laZimEYihUg" org.eventb.core.type="USERS"/> - <org.eventb.core.scAction name="cross_chain_transactiot" org.eventb.core.assignment="submit_cc_tx ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm|org.eventb.core.action#_-rHtcMEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="cross_chain_transactiou" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm|org.eventb.core.action#_-rIUgMEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="cross_chain_transactiot" org.eventb.core.assignment="submit_cc_tx ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm|org.eventb.core.action#_RH42kMHOEe609fto5wotHA"/> + <org.eventb.core.scAction name="cross_chain_transactiou" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.label="act32" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm|org.eventb.core.action#_RH5doMHOEe609fto5wotHA"/> </org.eventb.core.scEvent> - <org.eventb.core.scEvent name="received_cross_chain_transactionz" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_g3fQIMEXEe6yC4BToIaAqA"> - <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionz" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_g3fQIMEXEe6yC4BToIaAqA|org.eventb.core.refinesEvent#_g3f3MMEXEe6yC4BToIaAqA"/> + <org.eventb.core.scEvent name="received_cross_chain_transactionz" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUn"> + <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transactionz" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUn|org.eventb.core.refinesEvent#'"/> <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway_user∉authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.guard#_y4y5cMEXEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scAction name="(" org.eventb.core.assignment="authenticated_users ≔ authenticated_users∪{gateway_user}" org.eventb.core.label="act1" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.action#_jV9TIcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name=")" org.eventb.core.assignment="user_created ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_g3fQIMEXEe6yC4BToIaAqA|org.eventb.core.action#_f3UFMMEaEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name=")" org.eventb.core.assignment="user_created ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUn|org.eventb.core.action#_RH5docHOEe609fto5wotHA"/> + </org.eventb.core.scEvent> + <org.eventb.core.scEvent name="received_cross_chain_transaction{" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="GRANT_PERMISSION" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo"> + <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm|org.eventb.core.scMachineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.scEvent#received_cross_chain_transaction{" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.refinesEvent#'"/> + <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1" org.eventb.core.predicate="permission∈PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54cEbEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name="(" org.eventb.core.label="grd2" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54sEbEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name=")" org.eventb.core.label="grd3" org.eventb.core.predicate="user ↦ permission∉grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_5yZW0MHNEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scAction name="permissioo" org.eventb.core.assignment="grants ≔ grants∪{user ↦ permission}" org.eventb.core.label="act1" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.action#_KHH54MEbEe6yC4BToIaAqA"/> + <org.eventb.core.scParameter name="permission" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.parameter#_KHIg8MEbEe6yC4BToIaAqA" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.scParameter name="user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.parameter#_KHIg8cEbEe6yC4BToIaAqA" org.eventb.core.type="USERS"/> + <org.eventb.core.scGuard name="permissiop" org.eventb.core.label="grd31" org.eventb.core.predicate="user=gateway_user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.guard#_yeWE8cHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name="permissioq" org.eventb.core.label="grd32" org.eventb.core.predicate="permission=write" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.guard#_-iJ1EMHOEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scAction name="permissior" org.eventb.core.assignment="write_granted ≔ 1" org.eventb.core.label="act31" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.action#_yeWE8MHOEe609fto5wotHA"/> </org.eventb.core.scEvent> </org.eventb.core.scMachineFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo index 4b4f1e33b48ad1d2908658f31a5d460b36f2b836..3fd631f4193deb0ed81903e34ca129b6f7941c0f 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo +++ b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<org.eventb.core.poFile org.eventb.core.poStamp="7"> +<org.eventb.core.poFile org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="CTXHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="CROSS_CHAIN_TRANSACTIONS" org.eventb.core.type="â„™(CROSS_CHAIN_TRANSACTIONS)"/> @@ -20,7 +20,7 @@ <org.eventb.core.poPredicate name="CROSS_CHAIN_SMART_CONTRACTW" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_c2.buc|org.eventb.core.contextFile#CCTx_Ethereum_Fabric_c2|org.eventb.core.axiom#_olcsoL7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="CROSS_CHAIN_SMART_CONTRACTX" org.eventb.core.predicate="gateway_user∈USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_c2.buc|org.eventb.core.contextFile#CCTx_Ethereum_Fabric_c2|org.eventb.core.axiom#_olcsob7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="ABSHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="ABSHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="gateway_processing" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="initiated" org.eventb.core.type="ℤ"/> @@ -29,10 +29,11 @@ <org.eventb.core.poIdentifier name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + <org.eventb.core.poIdentifier name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="triggered" org.eventb.core.type="ℤ"/> + <org.eventb.core.poIdentifier name="write_granted" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="user_created" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> - <org.eventb.core.poIdentifier name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.poPredicate name="received_cross_chain_transactiont" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.invariant#_yREdZL7uEe6laZimEYihUg"/> @@ -43,64 +44,73 @@ <org.eventb.core.poPredicate name="received_cross_chain_transactiony" org.eventb.core.predicate="authenticated_users⊆USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TIsEWEe6yC4BToIaAqA"/> <org.eventb.core.poPredicate name="received_cross_chain_transactionz" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA"/> <org.eventb.core.poPredicate name="received_cross_chain_transaction{" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="received_cross_chain_transaction|" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="received_cross_chain_transaction}" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="received_cross_chain_transaction|" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="received_cross_chain_transaction}" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="INITIALISATION/inv11/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv11/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv11\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD0"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv16/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="7"> + <org.eventb.core.poSequent name="INITIALISATION/inv16/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_ZH0uYMEaEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_ZH0uYMEaEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv16\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD5"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="INITIALISATION/inv17/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA"/> + <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIALISATION\/inv17\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD6"/> + </org.eventb.core.poSequent> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="gateway_processing'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="authenticated_users'" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> @@ -108,87 +118,88 @@ <org.eventb.core.poIdentifier name="submit_cc_tx'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="triggered'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.poIdentifier name="write_granted'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="subscribed'" org.eventb.core.type="ℤ"/> - <org.eventb.core.poIdentifier name="write_grant'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="subscriptions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="user_created'" org.eventb.core.type="ℤ"/> + <org.eventb.core.poIdentifier name="grants'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="initiated'" org.eventb.core.type="ℤ"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.poStamp="6"/> - <org.eventb.core.poSequent name="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM/inv11/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.poStamp="0"/> + <org.eventb.core.poSequent name="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM/inv11/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionu"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_1tlnkr7uEe6laZimEYihUg"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUi"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM\/inv11\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD0"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="subscribed'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="subscriptions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway ↦ source_smart_contract∉subscriptions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_yQ9vtr7uEe6laZimEYihUg|org.eventb.core.guard#_yQ9vuL7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="INITIATE_CC_TX_IN_ETHEREUM/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="INITIATE_CC_TX_IN_ETHEREUM/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionv"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_1g9W8MBFEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIATE_CC_TX_IN_ETHEREUM\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIATE_CC_TX_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="INITIATE_CC_TX_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionv"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_1g9W8MBFEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUj"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#INITIATE_CC_TX_IN_ETHEREUM\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="submit_cc_tx'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="transaction" org.eventb.core.type="TRANSACTIONS"/> <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="initiated'" org.eventb.core.type="ℤ"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="transaction∈TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vu77uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="transaction∉received_transactions[{source_smart_contract}]" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vvL7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionw"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_HT50IMBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#TRIGGER_CC_TX_EVENT_IN_ETHEREUM\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionw"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_HT50IMBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#TRIGGER_CC_TX_EVENT_IN_ETHEREUM\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionw"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_HT50IMBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUk"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#TRIGGER_CC_TX_EVENT_IN_ETHEREUM\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="submit_cc_tx'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="triggered'" org.eventb.core.type="ℤ"/> @@ -197,38 +208,38 @@ <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="initiated'" org.eventb.core.type="ℤ"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="source_smart_contract ↦ transaction∈received_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vwb7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="cross_chain_event∉triggered_events[{source_smart_contract}]" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vwr7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionx"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_VePMJsBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#LISTEN_CC_TX_EVENT_IN_ETHEREUM\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionx"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_VePMJsBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#LISTEN_CC_TX_EVENT_IN_ETHEREUM\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionx"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_VePMJsBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUl"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#LISTEN_CC_TX_EVENT_IN_ETHEREUM\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.poIdentifier name="gateway_processing'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> @@ -237,30 +248,30 @@ <org.eventb.core.poIdentifier name="gateway_pending_transactions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="cross_chain_event" org.eventb.core.type="CROSS_CHAIN_EVENTS"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="source_smart_contract ↦ cross_chain_event∈triggered_events" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyL7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="gateway ↦ source_smart_contract∈subscriptions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyb7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∉gateway_pending_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyr7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiony"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="0∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="6"> + <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiony"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUm"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.poIdentifier name="gateway_processing'" org.eventb.core.type="ℤ"/> <org.eventb.core.poIdentifier name="authenticated_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> @@ -269,23 +280,56 @@ <org.eventb.core.poIdentifier name="user" org.eventb.core.type="USERS"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.poStamp="6"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yREdYr7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEcEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ write∈write_grant" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> + <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv16/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionz"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA"/> + <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUn"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#CREATE_GATEWAY_USER\/inv16\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD5"/> + </org.eventb.core.poSequent> <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> <org.eventb.core.poIdentifier name="authenticated_users'" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.poIdentifier name="user_created'" org.eventb.core.type="ℤ"/> </org.eventb.core.poPredicateSet> <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.poStamp="0"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway_user∉authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.guard#_y4y5cMEXEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="ALLHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ABSHYP" org.eventb.core.poStamp="6"> - <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="subscribed∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AMEVEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="initiated∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-t3AcEVEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="triggered∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEMEVEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD3" org.eventb.core.predicate="gateway_processing∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-ueEcEVEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD4" org.eventb.core.predicate="submit_cc_tx∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_t-vFIMEVEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD5" org.eventb.core.predicate="user_created∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_ZH0uYMEaEe6yC4BToIaAqA"/> + <org.eventb.core.poSequent name="GRANT_PERMISSION/inv17/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transaction{"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="1∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA"/> + <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poSequent#GRANT_PERMISSION\/inv17\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD6"/> + </org.eventb.core.poSequent> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> + <org.eventb.core.poIdentifier name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.poIdentifier name="write_granted'" org.eventb.core.type="ℤ"/> + <org.eventb.core.poIdentifier name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.poIdentifier name="grants'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + </org.eventb.core.poPredicateSet> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="permission∈PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54cEbEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54sEbEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ permission∉grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_5yZW0MHNEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD3" org.eventb.core.predicate="user=gateway_user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.guard#_yeWE8cHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD4" org.eventb.core.predicate="permission=write" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.event#_yREdbb7uEe6laZimEYihUo|org.eventb.core.guard#_-iJ1EMHOEe609fto5wotHA"/> + </org.eventb.core.poPredicateSet> + <org.eventb.core.poPredicateSet name="ALLHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.poPredicateSet#ABSHYP" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="subscribed∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmAl8MHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="initiated∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmB0EMHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="triggered∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmCbIMHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD3" org.eventb.core.predicate="gateway_processing∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDCMMHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD4" org.eventb.core.predicate="submit_cc_tx∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmDpQMHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD5" org.eventb.core.predicate="user_created∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_DmEQUMHOEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD6" org.eventb.core.predicate="write_granted∈{0,1}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_Animation_m3|org.eventb.core.invariant#_2MNd0MHOEe609fto5wotHA"/> </org.eventb.core.poPredicateSet> </org.eventb.core.poFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpr b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpr index f26229f1071ec256db675ba11c1ee7d1c3001737..ec6c2ed2609c420aa7723feb69ba724402f66e39 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpr +++ b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bpr @@ -32,8 +32,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -67,8 +67,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -102,8 +102,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -137,8 +137,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -172,8 +172,43 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4"> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="0∈{0,1}"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM/inv11/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -222,8 +257,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIATE_CC_TX_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -272,8 +307,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIATE_CC_TX_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -322,8 +357,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -372,8 +407,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -422,8 +457,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -472,8 +507,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -522,8 +557,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -572,8 +607,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -622,8 +657,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -657,8 +692,8 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> @@ -692,10 +727,56 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p6" org.eventb.core.prHyps=""/> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway_user∉authenticated_users"> + <org.eventb.core.prIdent name="USERS" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬gateway_user∈authenticated_users"> + <org.eventb.core.prIdent name="USERS" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="1∈{0,1}"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> - <org.eventb.core.prProof name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prProof name="INITIALISATION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> <org.eventb.core.lang name="L"/> <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> @@ -727,7 +808,57 @@ <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="GRANT_PERMISSION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p6" org.eventb.core.prHyps=""/> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬user ↦ permission∈grants"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="USERS" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="user ↦ permission∉grants"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="USERS" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="1∈{0,1}"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> </org.eventb.core.prFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bps b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bps index b293b8e09086b2ab11897038c264fbc18a2e4896..cc5919a9a6c5018bb10540a020350e31a758b3cf 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bps +++ b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bps @@ -1,20 +1,23 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <org.eventb.core.psFile> - <org.eventb.core.psStatus name="INITIALISATION/inv11/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="7" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM/inv11/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIATE_CC_TX_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIATE_CC_TX_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="6" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv11/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM/inv11/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIATE_CC_TX_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIATE_CC_TX_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="TRIGGER_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="LISTEN_CC_TX_EVENT_IN_ETHEREUM/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="GRANT_PERMISSION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="0" org.eventb.core.psManual="false"/> </org.eventb.core.psFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum index 796ce408e2e2a800c2df43e107302817c29dcbe5..720fa48d6435eab2655d910c1f3da370c04a992d 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum +++ b/gateway-event-b/CCTx_Ethereum_Fabric_Animation_m3.bum @@ -1,63 +1,72 @@ <?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="_f2iCRMEaEe6yC4BToIaAqA" org.eventb.texttools.text_lastmodified="1706803004593" org.eventb.texttools.text_representation="machine CCTx_Ethereum_Fabric_Animation_m3 refines CCTx_Ethereum_Fabric_m2 sees CCTx_Ethereum_Fabric_c2 variables received_transactions triggered_events subscriptions gateway_pending_transactions received_cross_chain_transactions authenticated_users authenticated_transactions write_grant subscribed initiated triggered gateway_processing submit_cc_tx user_created invariants 	@inv11 subscribed ∈ {0,1} 	@inv12 initiated ∈ {0,1} 	@inv13 triggered ∈ {0,1} 	@inv14 gateway_processing ∈ {0,1} 	@inv15 submit_cc_tx ∈ {0,1} 	@inv16 user_created ∈ {0,1} events event INITIALISATION extends INITIALISATION 	then 		@act31 subscribed ≔ 0 		@act32 initiated ≔ 0 		@act33 triggered ≔ 0 		@act34 gateway_processing ≔ 0 		@act35 submit_cc_tx ≔ 0 		@act36 user_created ≔ 0 end event SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM extends SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM 	then 		@act31 subscribed ≔ 1 end event INITIATE_CC_TX_IN_ETHEREUM extends INITIATE_CC_TX_IN_ETHEREUM 	then 		@act31 initiated ≔ 1 		@act32 submit_cc_tx ≔ 0 end event TRIGGER_CC_TX_EVENT_IN_ETHEREUM extends TRIGGER_CC_TX_EVENT_IN_ETHEREUM 	then 		@act31 triggered ≔ 1 		@act32 initiated ≔ 0 		@act33 submit_cc_tx ≔ 0 end event LISTEN_CC_TX_EVENT_IN_ETHEREUM extends LISTEN_CC_TX_EVENT_IN_ETHEREUM 	then 		@act31 gateway_processing ≔ 1 		@act32 triggered ≔ 0 		@act33 submit_cc_tx ≔ 0 end event SUBMIT_CC_TX_TO_FABRIC extends SUBMIT_CC_TX_TO_FABRIC 	then 		@act31 submit_cc_tx ≔ 1 		@act32 gateway_processing ≔ 0 end event CREATE_GATEWAY_USER extends CREATE_GATEWAY_USER 	then 		@act31 user_created ≔ 1 end end " version="5"> +<org.eventb.core.machineFile org.eventb.core.configuration="org.eventb.core.fwd" org.eventb.core.generated="false" org.eventb.emf.persistence.emf_id="_-e8JPMHOEe609fto5wotHA" org.eventb.texttools.text_lastmodified="1706880519570" org.eventb.texttools.text_representation="machine CCTx_Ethereum_Fabric_m3 refines CCTx_Ethereum_Fabric_m2 sees CCTx_Ethereum_Fabric_c2 variables received_transactions triggered_events subscriptions gateway_pending_transactions received_cross_chain_transactions authenticated_users authenticated_transactions grants subscribed initiated triggered gateway_processing submit_cc_tx user_created write_granted invariants 	@inv11 subscribed ∈ {0,1} 	@inv12 initiated ∈ {0,1} 	@inv13 triggered ∈ {0,1} 	@inv14 gateway_processing ∈ {0,1} 	@inv15 submit_cc_tx ∈ {0,1} 	@inv16 user_created ∈ {0,1} 	@inv17 write_granted ∈ {0,1} events event INITIALISATION extends INITIALISATION 	then 		@act31 subscribed ≔ 0 		@act32 initiated ≔ 0 		@act33 triggered ≔ 0 		@act34 gateway_processing ≔ 0 		@act35 submit_cc_tx ≔ 0 		@act36 user_created ≔ 0 		@act37 write_granted ≔ 0 end event SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM extends SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM 	then 		@act31 subscribed ≔ 1 end event INITIATE_CC_TX_IN_ETHEREUM extends INITIATE_CC_TX_IN_ETHEREUM 	then 		@act31 initiated ≔ 1 		@act32 submit_cc_tx ≔ 0 end event TRIGGER_CC_TX_EVENT_IN_ETHEREUM extends TRIGGER_CC_TX_EVENT_IN_ETHEREUM 	then 		@act31 triggered ≔ 1 		@act32 initiated ≔ 0 		@act33 submit_cc_tx ≔ 0 end event LISTEN_CC_TX_EVENT_IN_ETHEREUM extends LISTEN_CC_TX_EVENT_IN_ETHEREUM 	then 		@act31 gateway_processing ≔ 1 		@act32 triggered ≔ 0 		@act33 submit_cc_tx ≔ 0 end event SUBMIT_CC_TX_TO_FABRIC extends SUBMIT_CC_TX_TO_FABRIC 	then 		@act31 submit_cc_tx ≔ 1 		@act32 gateway_processing ≔ 0 end event CREATE_GATEWAY_USER extends CREATE_GATEWAY_USER 	then 		@act31 user_created ≔ 1 end event GRANT_PERMISSION extends GRANT_PERMISSION 	when 		@grd31 user = gateway_user 		@grd32 permission = write 	then 		@act31 write_granted ≔ 1 end end " version="5"> <org.eventb.core.refinesMachine name="'" org.eventb.core.target="CCTx_Ethereum_Fabric_m2"/> <org.eventb.core.seesContext name="_1tlAgL7uEe6laZimEYihUg" org.eventb.core.target="CCTx_Ethereum_Fabric_c2"/> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUh" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIALISATION" org.eventb.emf.persistence.emf_id="_f2iCKsEaEe6yC4BToIaAqA"> - <org.eventb.core.action name="_-rC08MEWEe6yC4BToIaAqA" org.eventb.core.assignment="subscribed ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCJMEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rC08cEWEe6yC4BToIaAqA" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_f2iCJcEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rDcAMEWEe6yC4BToIaAqA" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_f2iCJsEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rDcAcEWEe6yC4BToIaAqA" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act34" org.eventb.emf.persistence.emf_id="_f2iCJ8EaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rEDEMEWEe6yC4BToIaAqA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act35" org.eventb.emf.persistence.emf_id="_f2iCKMEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_bpmHkMEaEe6yC4BToIaAqA" org.eventb.core.assignment="user_created ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act36" org.eventb.emf.persistence.emf_id="_f2iCKcEaEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUi" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_f2iCLcEaEe6yC4BToIaAqA"> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUh" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIALISATION" org.eventb.emf.persistence.emf_id="_-e8JHcHOEe609fto5wotHA"> + <org.eventb.core.action name="_FVN5wMHOEe609fto5wotHA" org.eventb.core.assignment="subscribed ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JFsHOEe609fto5wotHA"/> + <org.eventb.core.action name="_FVN5wcHOEe609fto5wotHA" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_-e8JF8HOEe609fto5wotHA"/> + <org.eventb.core.action name="_FVOg0MHOEe609fto5wotHA" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_-e8JGMHOEe609fto5wotHA"/> + <org.eventb.core.action name="_FVOg0cHOEe609fto5wotHA" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act34" org.eventb.emf.persistence.emf_id="_-e8JGcHOEe609fto5wotHA"/> + <org.eventb.core.action name="_FVPH4MHOEe609fto5wotHA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act35" org.eventb.emf.persistence.emf_id="_-e8JGsHOEe609fto5wotHA"/> + <org.eventb.core.action name="_FVPH4cHOEe609fto5wotHA" org.eventb.core.assignment="user_created ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act36" org.eventb.emf.persistence.emf_id="_-e8JG8HOEe609fto5wotHA"/> + <org.eventb.core.action name="_4VMjkMHOEe609fto5wotHA" org.eventb.core.assignment="write_granted ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act37" org.eventb.emf.persistence.emf_id="_-e8JHMHOEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUi" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_-e8JIMHOEe609fto5wotHA"> <org.eventb.core.refinesEvent name="'" org.eventb.core.target="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM"/> - <org.eventb.core.action name="_-rEqIMEWEe6yC4BToIaAqA" org.eventb.core.assignment="subscribed ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCLMEaEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_G4NWgMHOEe609fto5wotHA" org.eventb.core.assignment="subscribed ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JH8HOEe609fto5wotHA"/> </org.eventb.core.event> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUj" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIATE_CC_TX_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_f2iCMcEaEe6yC4BToIaAqA"> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUj" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIATE_CC_TX_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_-e8JJMHOEe609fto5wotHA"> <org.eventb.core.refinesEvent name="'" org.eventb.core.target="INITIATE_CC_TX_IN_ETHEREUM"/> - <org.eventb.core.action name="_-rFRMMEWEe6yC4BToIaAqA" org.eventb.core.assignment="initiated ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCL8EaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rFRMcEWEe6yC4BToIaAqA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_f2iCMMEaEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_I7eOwMHOEe609fto5wotHA" org.eventb.core.assignment="initiated ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JIsHOEe609fto5wotHA"/> + <org.eventb.core.action name="_I7eOwcHOEe609fto5wotHA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_-e8JI8HOEe609fto5wotHA"/> </org.eventb.core.event> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUk" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="TRIGGER_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_f2iCNsEaEe6yC4BToIaAqA"> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUk" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="TRIGGER_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_-e8JKcHOEe609fto5wotHA"> <org.eventb.core.refinesEvent name="'" org.eventb.core.target="TRIGGER_CC_TX_EVENT_IN_ETHEREUM"/> - <org.eventb.core.action name="_-rF4QMEWEe6yC4BToIaAqA" org.eventb.core.assignment="triggered ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCM8EaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rF4QcEWEe6yC4BToIaAqA" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_f2iCNMEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rGfUMEWEe6yC4BToIaAqA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_f2iCNcEaEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_LjZ6UMHOEe609fto5wotHA" org.eventb.core.assignment="triggered ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JJsHOEe609fto5wotHA"/> + <org.eventb.core.action name="_LjZ6UcHOEe609fto5wotHA" org.eventb.core.assignment="initiated ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_-e8JJ8HOEe609fto5wotHA"/> + <org.eventb.core.action name="_LjahYMHOEe609fto5wotHA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_-e8JKMHOEe609fto5wotHA"/> </org.eventb.core.event> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUl" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="LISTEN_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_f2iCO8EaEe6yC4BToIaAqA"> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUl" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="LISTEN_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_-e8JLsHOEe609fto5wotHA"> <org.eventb.core.refinesEvent name="'" org.eventb.core.target="LISTEN_CC_TX_EVENT_IN_ETHEREUM"/> - <org.eventb.core.action name="_-rHGYMEWEe6yC4BToIaAqA" org.eventb.core.assignment="gateway_processing ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCOMEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rHGYcEWEe6yC4BToIaAqA" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_f2iCOcEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rHGYsEWEe6yC4BToIaAqA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_f2iCOsEaEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_NY1x8MHOEe609fto5wotHA" org.eventb.core.assignment="gateway_processing ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JK8HOEe609fto5wotHA"/> + <org.eventb.core.action name="_NY1x8cHOEe609fto5wotHA" org.eventb.core.assignment="triggered ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_-e8JLMHOEe609fto5wotHA"/> + <org.eventb.core.action name="_NY1x8sHOEe609fto5wotHA" org.eventb.core.assignment="submit_cc_tx ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act33" org.eventb.emf.persistence.emf_id="_-e8JLcHOEe609fto5wotHA"/> </org.eventb.core.event> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUm" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBMIT_CC_TX_TO_FABRIC" org.eventb.emf.persistence.emf_id="_f2iCP8EaEe6yC4BToIaAqA"> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUm" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBMIT_CC_TX_TO_FABRIC" org.eventb.emf.persistence.emf_id="_-e8JMsHOEe609fto5wotHA"> <org.eventb.core.refinesEvent name="'" org.eventb.core.target="SUBMIT_CC_TX_TO_FABRIC"/> - <org.eventb.core.action name="_-rHtcMEWEe6yC4BToIaAqA" org.eventb.core.assignment="submit_cc_tx ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCPcEaEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_-rIUgMEWEe6yC4BToIaAqA" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_f2iCPsEaEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.event name="_g3fQIMEXEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.emf.persistence.emf_id="_f2iCQsEaEe6yC4BToIaAqA"> - <org.eventb.core.refinesEvent name="_g3f3MMEXEe6yC4BToIaAqA" org.eventb.core.target="CREATE_GATEWAY_USER"/> - <org.eventb.core.action name="_f3UFMMEaEe6yC4BToIaAqA" org.eventb.core.assignment="user_created ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_f2iCQcEaEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.invariant name="_t-t3AMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv11" org.eventb.core.predicate="subscribed ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCHsEaEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_t-t3AcEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv12" org.eventb.core.predicate="initiated ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCH8EaEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_t-ueEMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv13" org.eventb.core.predicate="triggered ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCIMEaEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_t-ueEcEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv14" org.eventb.core.predicate="gateway_processing ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCIcEaEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_t-vFIMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv15" org.eventb.core.predicate="submit_cc_tx ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCIsEaEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_ZH0uYMEaEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv16" org.eventb.core.predicate="user_created ∈ {0,1}" org.eventb.emf.persistence.emf_id="_f2iCI8EaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdab7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_transactions" org.eventb.emf.persistence.emf_id="_f2iCEMEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdar7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="triggered_events" org.eventb.emf.persistence.emf_id="_f2iCEcEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREda77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="subscriptions" org.eventb.emf.persistence.emf_id="_f2iCEsEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdbL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_f2iCE8EaEe6yC4BToIaAqA"/> - <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="_f2iCFMEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4L7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_users" org.eventb.emf.persistence.emf_id="_f2iCFcEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4b7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_transactions" org.eventb.emf.persistence.emf_id="_f2iCFsEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4r7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="write_grant" org.eventb.emf.persistence.emf_id="_f2iCF8EaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_t-w6UMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="subscribed" org.eventb.emf.persistence.emf_id="_f2iCGMEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_t-xhYMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="initiated" org.eventb.emf.persistence.emf_id="_f2iCGcEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_t-xhYcEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="triggered" org.eventb.emf.persistence.emf_id="_f2iCGsEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_t-xhYsEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_processing" org.eventb.emf.persistence.emf_id="_f2iCG8EaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_t-yIcMEVEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="submit_cc_tx" org.eventb.emf.persistence.emf_id="_f2iCHMEaEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_ZH18gMEaEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="user_created" org.eventb.emf.persistence.emf_id="_f2iCHcEaEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_RH42kMHOEe609fto5wotHA" org.eventb.core.assignment="submit_cc_tx ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JMMHOEe609fto5wotHA"/> + <org.eventb.core.action name="_RH5doMHOEe609fto5wotHA" org.eventb.core.assignment="gateway_processing ≔ 0" org.eventb.core.generated="false" org.eventb.core.label="act32" org.eventb.emf.persistence.emf_id="_-e8JMcHOEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUn" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.emf.persistence.emf_id="_-e8JNcHOEe609fto5wotHA"> + <org.eventb.core.refinesEvent name="'" org.eventb.core.target="CREATE_GATEWAY_USER"/> + <org.eventb.core.action name="_RH5docHOEe609fto5wotHA" org.eventb.core.assignment="user_created ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JNMHOEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUo" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="GRANT_PERMISSION" org.eventb.emf.persistence.emf_id="_-e8JOsHOEe609fto5wotHA"> + <org.eventb.core.refinesEvent name="'" org.eventb.core.target="GRANT_PERMISSION"/> + <org.eventb.core.action name="_yeWE8MHOEe609fto5wotHA" org.eventb.core.assignment="write_granted ≔ 1" org.eventb.core.generated="false" org.eventb.core.label="act31" org.eventb.emf.persistence.emf_id="_-e8JOcHOEe609fto5wotHA"/> + <org.eventb.core.guard name="_yeWE8cHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="grd31" org.eventb.core.predicate="user = gateway_user" org.eventb.emf.persistence.emf_id="_-e8JN8HOEe609fto5wotHA"/> + <org.eventb.core.guard name="_-iJ1EMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="grd32" org.eventb.core.predicate="permission = write" org.eventb.emf.persistence.emf_id="_-e8JOMHOEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.invariant name="_DmAl8MHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv11" org.eventb.core.predicate="subscribed ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JD8HOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_DmB0EMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv12" org.eventb.core.predicate="initiated ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JEMHOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_DmCbIMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv13" org.eventb.core.predicate="triggered ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JEcHOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_DmDCMMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv14" org.eventb.core.predicate="gateway_processing ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JEsHOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_DmDpQMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv15" org.eventb.core.predicate="submit_cc_tx ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JE8HOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_DmEQUMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv16" org.eventb.core.predicate="user_created ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JFMHOEe609fto5wotHA"/> + <org.eventb.core.invariant name="_2MNd0MHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="inv17" org.eventb.core.predicate="write_granted ∈ {0,1}" org.eventb.emf.persistence.emf_id="_-e8JFcHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdab7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_transactions" org.eventb.emf.persistence.emf_id="_-e8JAMHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdar7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="triggered_events" org.eventb.emf.persistence.emf_id="_-e8JAcHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREda77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="subscriptions" org.eventb.emf.persistence.emf_id="_-e8JAsHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdbL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_-e8JA8HOEe609fto5wotHA"/> + <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="_-e8JBMHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_1toq4L7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_users" org.eventb.emf.persistence.emf_id="_-e8JBcHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_1toq4b7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_transactions" org.eventb.emf.persistence.emf_id="_-e8JBsHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_2RlqIMErEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="grants" org.eventb.emf.persistence.emf_id="_-e8JB8HOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmLlEMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="subscribed" org.eventb.emf.persistence.emf_id="_-e8JCMHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmMMIMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="initiated" org.eventb.emf.persistence.emf_id="_-e8JCcHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmMMIcHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="triggered" org.eventb.emf.persistence.emf_id="_-e8JCsHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmMMIsHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_processing" org.eventb.emf.persistence.emf_id="_-e8JC8HOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmMMI8HOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="submit_cc_tx" org.eventb.emf.persistence.emf_id="_-e8JDMHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_DmMMJMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="user_created" org.eventb.emf.persistence.emf_id="_-e8JDcHOEe609fto5wotHA"/> + <org.eventb.core.variable name="_2MPTAMHOEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.identifier="write_granted" org.eventb.emf.persistence.emf_id="_-e8JDsHOEe609fto5wotHA"/> </org.eventb.core.machineFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm index 527504969f99ed551b780839151047196f4fcaf9..bc2de4287c70b4c9c002e00ef14e1002845d157c 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm +++ b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bcm @@ -33,14 +33,14 @@ <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c3" org.eventb.core.label="inv11" org.eventb.core.predicate="authenticated_users⊆USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TIsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c4" org.eventb.core.label="inv12" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c5" org.eventb.core.label="inv13" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c6" org.eventb.core.label="inv14" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c7" org.eventb.core.label="inv16" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c6" org.eventb.core.label="inv14" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA" org.eventb.core.theorem="false"/> + <org.eventb.core.scInvariant name="CCTx_Ethereum_Fabric_c7" org.eventb.core.label="inv15" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scVariable name="triggered_events" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_yREdar7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.scVariable name="authenticated_transactions" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_1toq4b7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.scVariable name="received_cross_chain_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_yREdbb7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.scVariable name="subscriptions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_yREda77uEe6laZimEYihUg" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + <org.eventb.core.scVariable name="grants" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_2RlqIMErEe6yC4BToIaAqA" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.scVariable name="gateway_pending_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_yREdbL7uEe6laZimEYihUg" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> - <org.eventb.core.scVariable name="write_grant" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_1toq4r7uEe6laZimEYihUg" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.scVariable name="received_transactions" org.eventb.core.abstract="true" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_yREdab7uEe6laZimEYihUg" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.scVariable name="authenticated_users" org.eventb.core.abstract="false" org.eventb.core.concrete="true" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.variable#_1toq4L7uEe6laZimEYihUg" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.scEvent name="received_cross_chain_transactiont" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="INITIALISATION" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"> @@ -52,7 +52,7 @@ <org.eventb.core.scAction name="+" org.eventb.core.assignment="received_cross_chain_transactions ≔ ∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)" org.eventb.core.label="act6;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'|org.eventb.core.action#_yQ9vtb7uEe6laZimEYihUg"/> <org.eventb.core.scAction name="," org.eventb.core.assignment="authenticated_users ≔ ∅ ⦂ â„™(USERS)" org.eventb.core.label="act11" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAMEWEe6yC4BToIaAqA"/> <org.eventb.core.scAction name="-" org.eventb.core.assignment="authenticated_transactions ≔ ∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)" org.eventb.core.label="act12" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAcEWEe6yC4BToIaAqA"/> - <org.eventb.core.scAction name="." org.eventb.core.assignment="write_grant ≔ {gateway_user ↦ write}" org.eventb.core.label="act13" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_jV8FAsEWEe6yC4BToIaAqA"/> + <org.eventb.core.scAction name="." org.eventb.core.assignment="grants ≔ ∅ ⦂ â„™(USERS×PERMISSIONS)" org.eventb.core.label="act14" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh|org.eventb.core.action#_0oC5cMErEe6yC4BToIaAqA"/> </org.eventb.core.scEvent> <org.eventb.core.scEvent name="received_cross_chain_transactionu" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_1tlnkr7uEe6laZimEYihUg"> <org.eventb.core.scRefinesEvent name="'" org.eventb.core.scTarget="/gateway-event-b/CCTx_Abstract_DLT_m1.bcm|org.eventb.core.scMachineFile#CCTx_Abstract_DLT_m1|org.eventb.core.scEvent#received_cross_chain_transactionu" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_1tlnkr7uEe6laZimEYihUg|org.eventb.core.refinesEvent#_1tlnk77uEe6laZimEYihUg"/> @@ -92,7 +92,7 @@ <org.eventb.core.scAction name="cross_chain_transactiop" org.eventb.core.assignment="gateway_pending_transactions ≔ gateway_pending_transactions ∖ {gateway ↦ cross_chain_transaction}" org.eventb.core.label="act2;" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.action#_yREdYb7uEe6laZimEYihUg"/> <org.eventb.core.scParameter name="cross_chain_transaction" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.parameter#_yREdY77uEe6laZimEYihUg" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.scGuard name="cross_chain_transactioq" org.eventb.core.label="grd11" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEcEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> - <org.eventb.core.scGuard name="cross_chain_transactior" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write∈write_grant" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name="cross_chain_transactior" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scParameter name="user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.parameter#_1tncwL7uEe6laZimEYihUg" org.eventb.core.type="USERS"/> <org.eventb.core.scAction name="cross_chain_transactios" org.eventb.core.assignment="authenticated_transactions ≔ authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user}" org.eventb.core.label="act11" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.action#_jV8sEMEWEe6yC4BToIaAqA"/> </org.eventb.core.scEvent> @@ -100,10 +100,12 @@ <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway_user∉authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.guard#_y4y5cMEXEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scAction name="(" org.eventb.core.assignment="authenticated_users ≔ authenticated_users∪{gateway_user}" org.eventb.core.label="act1" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.action#_jV9TIcEWEe6yC4BToIaAqA"/> </org.eventb.core.scEvent> - <org.eventb.core.scEvent name="received_cross_chain_transaction{" org.eventb.core.accurate="false" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="GRANT_PERMISSION" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA"> + <org.eventb.core.scEvent name="received_cross_chain_transaction{" org.eventb.core.accurate="true" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="GRANT_PERMISSION" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA"> <org.eventb.core.scGuard name="'" org.eventb.core.label="grd1" org.eventb.core.predicate="permission∈PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54cEbEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> <org.eventb.core.scGuard name="(" org.eventb.core.label="grd2" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54sEbEe6yC4BToIaAqA" org.eventb.core.theorem="false"/> + <org.eventb.core.scGuard name=")" org.eventb.core.label="grd3" org.eventb.core.predicate="user ↦ permission∉grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_5yZW0MHNEe609fto5wotHA" org.eventb.core.theorem="false"/> <org.eventb.core.scParameter name="permission" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.parameter#_KHIg8MEbEe6yC4BToIaAqA" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.scParameter name="user" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.parameter#_KHIg8cEbEe6yC4BToIaAqA" org.eventb.core.type="USERS"/> + <org.eventb.core.scAction name="permissioo" org.eventb.core.assignment="grants ≔ grants∪{user ↦ permission}" org.eventb.core.label="act1" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.action#_KHH54MEbEe6yC4BToIaAqA"/> </org.eventb.core.scEvent> </org.eventb.core.scMachineFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo index d948cc36bc3a162692c132e8bd969ab2340db1bb..689f13c6de500616b881e793d5a5b231ab466e05 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo +++ b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<org.eventb.core.poFile org.eventb.core.poStamp="16"> +<org.eventb.core.poFile org.eventb.core.poStamp="29"> <org.eventb.core.poPredicateSet name="CTXHYP" org.eventb.core.poStamp="10"> <org.eventb.core.poIdentifier name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="CROSS_CHAIN_TRANSACTIONS" org.eventb.core.type="â„™(CROSS_CHAIN_TRANSACTIONS)"/> @@ -20,13 +20,13 @@ <org.eventb.core.poPredicate name="CROSS_CHAIN_SMART_CONTRACTW" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_c2.buc|org.eventb.core.contextFile#CCTx_Ethereum_Fabric_c2|org.eventb.core.axiom#_olcsoL7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="CROSS_CHAIN_SMART_CONTRACTX" org.eventb.core.predicate="gateway_user∈USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_c2.buc|org.eventb.core.contextFile#CCTx_Ethereum_Fabric_c2|org.eventb.core.axiom#_olcsob7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="ABSHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="10"> + <org.eventb.core.poPredicateSet name="ABSHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="18"> <org.eventb.core.poIdentifier name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + <org.eventb.core.poIdentifier name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> - <org.eventb.core.poIdentifier name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.poPredicate name="received_cross_chain_transactiont" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.invariant#_yREdZL7uEe6laZimEYihUg"/> @@ -35,7 +35,7 @@ <org.eventb.core.poPredicate name="received_cross_chain_transactionw" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.invariant#_yREdZ77uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="received_cross_chain_transactionx" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.invariant#_yREdaL7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="INITIALISATION/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="INITIALISATION/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="26"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)) → (∅ ⦂ â„™(USERS))" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'"/> @@ -44,7 +44,7 @@ <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#INITIALISATION\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="INITIALISATION/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="26"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS))⇒(∃u⦂USERS·u∈(∅ ⦂ â„™(USERS))∧tx ↦ u∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)))" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'"/> @@ -53,71 +53,71 @@ <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#INITIALISATION\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="INITIALISATION/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="{gateway_user ↦ write}∈(∅ ⦂ â„™(USERS)) ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="(∅ ⦂ â„™(USERS×PERMISSIONS))∈(∅ ⦂ â„™(USERS)) ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#INITIALISATION\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="INITIALISATION/inv16/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="14"> + <org.eventb.core.poSequent name="INITIALISATION/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant establishment" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiont"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))[∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)]⊆dom({gateway_user ↦ write})" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀u⦂USERS·u∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))[∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)]⇒u ↦ write∈(∅ ⦂ â„™(USERS×PERMISSIONS))" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#'"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_yREdbb7uEe6laZimEYihUh"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> - <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#INITIALISATION\/inv16\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#INITIALISATION\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="10"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#CTXHYP" org.eventb.core.poStamp="18"> <org.eventb.core.poIdentifier name="authenticated_users'" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="authenticated_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> - <org.eventb.core.poIdentifier name="write_grant'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="subscriptions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.poIdentifier name="grants'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.poStamp="10"/> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiont" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiont" org.eventb.core.poStamp="18"/> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="subscriptions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionu" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionu" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway ↦ source_smart_contract∉subscriptions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_yQ9vtr7uEe6laZimEYihUg|org.eventb.core.guard#_yQ9vuL7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="transaction" org.eventb.core.type="TRANSACTIONS"/> <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionv" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionv" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="transaction∈TRANSACTIONS" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vu77uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="transaction∉received_transactions[{source_smart_contract}]" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_y397cMBFEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vvL7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="transaction" org.eventb.core.type="TRANSACTIONS"/> <org.eventb.core.poIdentifier name="cross_chain_event" org.eventb.core.type="CROSS_CHAIN_EVENTS"/> <org.eventb.core.poIdentifier name="received_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionw" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionw" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="source_smart_contract ↦ transaction∈received_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vwb7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="cross_chain_event∉triggered_events[{source_smart_contract}]" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_E_KKUMBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vwr7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.poIdentifier name="triggered_events'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="cross_chain_event" org.eventb.core.type="CROSS_CHAIN_EVENTS"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionx" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionx" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="source_smart_contract ↦ cross_chain_event∈triggered_events" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyL7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="gateway ↦ source_smart_contract∈subscriptions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyb7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∉gateway_pending_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_THog4MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yQ9vyr7uEe6laZimEYihUg"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="14"> + <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiony"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user}∈received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction} → authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA"/> @@ -126,7 +126,7 @@ <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="14"> + <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiony"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA"/> @@ -135,28 +135,28 @@ <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv16/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="14"> + <org.eventb.core.poSequent name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactiony"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⊆dom(write_grant)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀u⦂USERS·u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⇒u ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="ABSTRACT" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="CONCRETE" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA"/> - <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> - <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv16\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSource name="SEQHYT" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#SUBMIT_CC_TX_TO_FABRIC\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYV" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.poIdentifier name="authenticated_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.poIdentifier name="gateway_pending_transactions'" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.poIdentifier name="user" org.eventb.core.type="USERS"/> <org.eventb.core.poIdentifier name="received_cross_chain_transactions'" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactiony" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactiony" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions" org.eventb.core.source="/gateway-event-b/CCTx_Abstract_DLT_m1.bum|org.eventb.core.machineFile#CCTx_Abstract_DLT_m1|org.eventb.core.event#_fwqd8MBGEe6yC4BToIaAqA|org.eventb.core.guard#_yREdYr7uEe6laZimEYihUg"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEcEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ write∈write_grant" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_hrEVZsBGEe6yC4BToIaAqA|org.eventb.core.guard#_jV8sEsEWEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionz"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users∪{gateway_user}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA"/> @@ -164,7 +164,7 @@ <org.eventb.core.poSelHint name="SEQHYT" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#CREATE_GATEWAY_USER\/inv12\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD1"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionz"/> <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA"/> @@ -172,33 +172,51 @@ <org.eventb.core.poSelHint name="SEQHYT" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#CREATE_GATEWAY_USER\/inv13\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD2"/> </org.eventb.core.poSequent> - <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="16"> + <org.eventb.core.poSequent name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transactionz"/> - <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="write_grant∈authenticated_users∪{gateway_user} ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="grants∈authenticated_users∪{gateway_user} ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA"/> - <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> <org.eventb.core.poSelHint name="SEQHYT" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#CREATE_GATEWAY_USER\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> </org.eventb.core.poSequent> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="15"> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="authenticated_users'" org.eventb.core.type="â„™(USERS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.poStamp="16"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transactionz" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transactionz" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="gateway_user∉authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_K_21gMEXEe6yC4BToIaAqA|org.eventb.core.guard#_y4y5cMEXEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="0"> + <org.eventb.core.poSequent name="GRANT_PERMISSION/inv14/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="29"> + <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transaction{"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="grants∪{user ↦ permission}∈authenticated_users ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> + <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> + <org.eventb.core.poSelHint name="SEQHYT" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#GRANT_PERMISSION\/inv14\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD3"/> + </org.eventb.core.poSequent> + <org.eventb.core.poSequent name="GRANT_PERMISSION/inv15/INV" org.eventb.core.accurate="true" org.eventb.core.poDesc="Invariant preservation" org.eventb.core.poStamp="29"> + <org.eventb.core.poPredicateSet name="SEQHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTALLHYPreceived_cross_chain_transaction{"/> + <org.eventb.core.poPredicate name="SEQHYQ" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants∪{user ↦ permission}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYR" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA"/> + <org.eventb.core.poSource name="SEQHYS" org.eventb.core.poRole="DEFAULT" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> + <org.eventb.core.poSelHint name="SEQHYT" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poSelHintSnd="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poSequent#GRANT_PERMISSION\/inv15\/INV|org.eventb.core.poPredicateSet#SEQHYP"/> + <org.eventb.core.poSelHint name="SEQHYU" org.eventb.core.poSelHintFst="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP|org.eventb.core.poPredicate#PRD4"/> + </org.eventb.core.poSequent> + <org.eventb.core.poPredicateSet name="EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ALLHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poIdentifier name="permission" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.poIdentifier name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.poIdentifier name="grants'" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.poStamp="0"> + <org.eventb.core.poPredicateSet name="EVTALLHYPreceived_cross_chain_transaction{" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#EVTIDENTreceived_cross_chain_transaction{" org.eventb.core.poStamp="29"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="permission∈PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54cEbEe6yC4BToIaAqA"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="user∈authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_KHH54sEbEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="user ↦ permission∉grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.event#_KHHS0MEbEe6yC4BToIaAqA|org.eventb.core.guard#_5yZW0MHNEe609fto5wotHA"/> </org.eventb.core.poPredicateSet> - <org.eventb.core.poPredicateSet name="ALLHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ABSHYP" org.eventb.core.poStamp="14"> + <org.eventb.core.poPredicateSet name="ALLHYP" org.eventb.core.parentSet="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpo|org.eventb.core.poFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.poPredicateSet#ABSHYP" org.eventb.core.poStamp="28"> <org.eventb.core.poPredicate name="PRD0" org.eventb.core.predicate="authenticated_users⊆USERS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TIsEWEe6yC4BToIaAqA"/> <org.eventb.core.poPredicate name="PRD1" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TI8EWEe6yC4BToIaAqA"/> <org.eventb.core.poPredicate name="PRD2" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJMEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD3" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJcEWEe6yC4BToIaAqA"/> - <org.eventb.core.poPredicate name="PRD4" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jV9TJsEWEe6yC4BToIaAqA"/> + <org.eventb.core.poPredicate name="PRD3" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_OTstIMHNEe609fto5wotHA"/> + <org.eventb.core.poPredicate name="PRD4" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants" org.eventb.core.source="/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum|org.eventb.core.machineFile#CCTx_Ethereum_Fabric_m2|org.eventb.core.invariant#_jCLrMcHJEe6yC4BToIaAqA"/> </org.eventb.core.poPredicateSet> </org.eventb.core.poFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpr b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpr index d5d7965da941a37fada5dd52ee53c33ad1379dc3..416c349e9ada94b9ed587f54ac0d5de2b03fd6f0 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpr +++ b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bpr @@ -630,27 +630,26 @@ </org.eventb.core.prAnte> <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> </org.eventb.core.prRule> - <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/> - <org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)) → {gateway_user}"/> <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)) → (∅ ⦂ â„™(USERS))"/> <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,USERS"> <org.eventb.core.lang name="L"/> @@ -666,7 +665,6 @@ </org.eventb.core.prAnte> <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> </org.eventb.core.prRule> - <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> @@ -678,59 +676,47 @@ <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS))⇒(∃u⦂USERS·u∈{gateway_user}∧tx ↦ u∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)))"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS))⇒(∃u⦂USERS·u∈(∅ ⦂ â„™(USERS))∧tx ↦ u∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)))"/> <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> <org.eventb.core.prIdent name="PERMISSIONS" org.eventb.core.type="â„™(PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> - <org.eventb.core.prProof name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="PERMISSIONS,USERS"> + <org.eventb.core.prProof name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> - <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> - <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p4"/> - <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p5"/> - <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p6"/> - <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p7"/> - <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p3"> - <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> - </org.eventb.core.prRule> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4"> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/> </org.eventb.core.prAnte> </org.eventb.core.prRule> </org.eventb.core.prAnte> <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> </org.eventb.core.prRule> - <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> - <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"/> - <org.eventb.core.prPred name="p6" org.eventb.core.predicate="gateway∈GATEWAYS"> - <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> - <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p0" org.eventb.core.predicate="{gateway_user ↦ write}∈{gateway_user} ↔ {write}"/> - <org.eventb.core.prPred name="p7" org.eventb.core.predicate="gateway_user∈USERS"/> - <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> - <org.eventb.core.prPred name="p4" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> - <org.eventb.core.prIdent name="CROSS_CHAIN_SMART_CONTRACTS" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS)"/> - <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ â„™(USERS×PERMISSIONS))∈(∅ ⦂ â„™(USERS)) ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p5" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> - <org.eventb.core.prIdent name="CROSS_CHAIN_SMART_CONTRACTS" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS)"/> - <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"/> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> @@ -781,7 +767,7 @@ <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p18"/> <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p19"/> <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p20"/> - <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p4,p7,p3,p5,p8,p9,p10"> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p7,p4,p5,p8,p9,p10"> <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> </org.eventb.core.prRule> </org.eventb.core.prAnte> @@ -794,41 +780,41 @@ <org.eventb.core.prIdent name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prIdent name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prPred name="p17" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> - <org.eventb.core.prPred name="p2" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> <org.eventb.core.prPred name="p13" org.eventb.core.predicate="gateway∈GATEWAYS"/> <org.eventb.core.prPred name="p0" org.eventb.core.predicate="authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user}∈received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction} → authenticated_users"/> - <org.eventb.core.prPred name="p4" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}"/> <org.eventb.core.prPred name="p5" org.eventb.core.predicate="user∈authenticated_users"/> <org.eventb.core.prPred name="p14" org.eventb.core.predicate="gateway_user∈USERS"> <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> </org.eventb.core.prPred> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="user ↦ write∈grants"/> <org.eventb.core.prPred name="p18" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.prPred name="p12" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"/> - <org.eventb.core.prPred name="p8" org.eventb.core.predicate="user ↦ write∈write_grant"/> <org.eventb.core.prPred name="p9" org.eventb.core.predicate="PERMISSIONS={read,write}"/> <org.eventb.core.prPred name="p15" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p10" org.eventb.core.predicate="¬read=write"/> - <org.eventb.core.prPred name="p3" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions"/> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions"/> <org.eventb.core.prPred name="p16" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p20" org.eventb.core.predicate="authenticated_users⊆USERS"/> <org.eventb.core.prPred name="p6" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> - <org.eventb.core.prPred name="p7" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)"/> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> <org.eventb.core.prPred name="p11" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> @@ -877,12 +863,12 @@ <org.eventb.core.prIdent name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prIdent name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.prPred> @@ -899,9 +885,9 @@ <org.eventb.core.prPred name="p19" org.eventb.core.predicate="tx∈received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}"> <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> </org.eventb.core.prPred> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="user ↦ write∈grants"/> <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"/> - <org.eventb.core.prPred name="p5" org.eventb.core.predicate="user ↦ write∈write_grant"/> <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> @@ -924,9 +910,9 @@ <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> - <org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> </org.eventb.core.prProof> <org.eventb.core.prProof name="SUBMIT_CC_TX_TO_FABRIC/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,GATEWAYS,PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> @@ -1317,26 +1303,31 @@ <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> <org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> </org.eventb.core.prProof> - <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> - <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> - <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7,p8"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p8"/> - <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/> - <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/> - <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p11"/> - <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p12"/> - <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p13"/> - <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p14"/> - <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p15"/> - <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p16"/> - <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p17"/> - <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p3,p5,p6,p7"> - <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p19"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p6,p7,p8,p9"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> </org.eventb.core.prRule> </org.eventb.core.prAnte> </org.eventb.core.prRule> @@ -1346,76 +1337,84 @@ <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prIdent name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prPred name="p0" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users∪{gateway_user}"/> - <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> - <org.eventb.core.prPred name="p2" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> - <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="gateway∈GATEWAYS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p3" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}"/> - <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway_user∈USERS"/> - <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway_user∉authenticated_users"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="gateway_user∈USERS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> - <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> - <org.eventb.core.prPred name="p13" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p17" org.eventb.core.predicate="authenticated_users⊆USERS"/> - <org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> - <org.eventb.core.prPred name="p5" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)"/> - <org.eventb.core.prPred name="p8" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬gateway_user∈authenticated_users"/> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> </org.eventb.core.prProof> - <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="tx" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="tx" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3,p4"/> - <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/> - <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4,p5"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p5"/> - <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p6"/> - <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p7"/> - <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p8"/> - <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p9"/> - <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p10"/> - <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p11"/> - <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p12"/> - <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p13"/> - <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p14"/> - <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees tx)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> - <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15"> - <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> - <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps=""> - <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p16"> - <org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p1,p3,p4,p16"> - <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p7"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p8"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees tx)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17"> + <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p17" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p18"> + <org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p1,p4,p5,p6,p18"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> </org.eventb.core.prRule> </org.eventb.core.prAnte> </org.eventb.core.prRule> @@ -1432,75 +1431,197 @@ <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prPred name="p11" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> - <org.eventb.core.prPred name="p7" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="gateway∈GATEWAYS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p17" org.eventb.core.predicate="∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions"> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="gateway_user∉authenticated_users"/> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions"> <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p8" org.eventb.core.predicate="gateway_user∈USERS"/> - <org.eventb.core.prPred name="p12" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway_user∈USERS"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p6" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p3" org.eventb.core.predicate="PERMISSIONS={read,write}"/> - <org.eventb.core.prPred name="p9" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬read=write"/> <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions)"/> - <org.eventb.core.prPred name="p10" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p16" org.eventb.core.predicate="tx∈received_cross_chain_transactions"> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="tx∈received_cross_chain_transactions"> <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p14" org.eventb.core.predicate="authenticated_users⊆USERS"/> - <org.eventb.core.prPred name="p15" org.eventb.core.predicate="tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions)"> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∪{gateway_user}∧tx ↦ u∈authenticated_transactions)"> <org.eventb.core.prIdent name="tx" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> - <org.eventb.core.prPred name="p5" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p13" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬gateway_user∈authenticated_users"/> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> - <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> - <org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> + <org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> </org.eventb.core.prProof> - <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> <org.eventb.core.lang name="L"/> <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7,p8"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p19"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p6,p7,p8,p9"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway_user∉authenticated_users"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="gateway_user∈USERS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="grants∈authenticated_users∪{gateway_user} ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬gateway_user∈authenticated_users"/> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="INITIALISATION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4"> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ â„™(USERS×PERMISSIONS))∈(∅ ⦂ â„™(USERS)) ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> - <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> <org.eventb.core.prAnte name="'"> - <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p8"/> - <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/> - <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/> - <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p11"/> - <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p12"/> - <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p13"/> - <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p14"/> - <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p15"/> - <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p16"/> - <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p17"/> - <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p3,p5,p6,p7"> - <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p6,p7,p8"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> </org.eventb.core.prRule> </org.eventb.core.prAnte> </org.eventb.core.prRule> @@ -1510,49 +1631,619 @@ <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> - <org.eventb.core.prIdent name="write_grant" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> - <org.eventb.core.prPred name="p0" org.eventb.core.predicate="write_grant∈authenticated_users∪{gateway_user} ↔ {write}"/> - <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> - <org.eventb.core.prPred name="p2" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> - <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway∈GATEWAYS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p3" org.eventb.core.predicate="write_grant∈authenticated_users ↔ {write}"/> - <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway_user∈USERS"/> - <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway_user∉authenticated_users"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="gateway_user∈USERS"/> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> - <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> </org.eventb.core.prPred> <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> - <org.eventb.core.prPred name="p13" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p17" org.eventb.core.predicate="authenticated_users⊆USERS"/> - <org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> - <org.eventb.core.prPred name="p5" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions]⊆dom(write_grant)"/> - <org.eventb.core.prPred name="p8" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="grants∈authenticated_users∪{gateway_user} ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> </org.eventb.core.prPred> - <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬gateway_user∈authenticated_users"/> <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> - <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> - <org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="GRANT_PERMISSION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p8"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p4,p6,p7"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="user∈authenticated_users"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway_user∈USERS"> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="permission∈PERMISSIONS"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="grants∪{user ↦ permission}∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2,p3"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4"> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬read=write"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀u⦂USERS·u∈(∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS))[∅ ⦂ â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)]⇒u ↦ write∈(∅ ⦂ â„™(USERS×PERMISSIONS))"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="PERMISSIONS={read,write}"> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="CREATE_GATEWAY_USER/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p6,p7,p8"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="gateway_user∉authenticated_users"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="gateway_user∈USERS"/> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="grants∈authenticated_users∪{gateway_user} ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬gateway_user∈authenticated_users"/> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="GRANT_PERMISSION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="u" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8,p9"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p8,p9"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p19"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p20"/> + <org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p21"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees u)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + <org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p23"> + <org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p3,p1,p2,p6,p4,p8,p9,p10,p23"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p21" org.eventb.core.predicate="permission∈PERMISSIONS"/> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants∪{user ↦ permission}"/> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p22" org.eventb.core.predicate="u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants∪{user ↦ permission}"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="¬user ↦ permission∈grants"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p24" org.eventb.core.predicate="u ↦ write∈grants∪{user ↦ permission}"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="user∈authenticated_users"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="gateway_user∈USERS"> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p23" org.eventb.core.predicate="u∈authenticated_transactions[received_cross_chain_transactions]"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p20" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="user ↦ permission∉grants"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> + <org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="SUBMIT_CC_TX_TO_FABRIC/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="u" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,GATEWAYS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p8"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees u)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p19"> + <org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p4,p1,p2,p5,p6,p7,p19"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway∈GATEWAYS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀u⦂USERS·u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="user∈authenticated_users"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway_user∈USERS"> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="user ↦ write∈grants"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⇒u ↦ write∈grants"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p20" org.eventb.core.predicate="u ↦ write∈grants"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="GRANT_PERMISSION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8,p9"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p8,p9"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p18"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p19"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p20"/> + <org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p21"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p6,p4,p8,p9,p10"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="permission" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀tx⦂CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS·tx∈received_cross_chain_transactions⇒(∃u⦂USERS·u∈authenticated_users∧tx ↦ u∈authenticated_transactions)"/> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="grants∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="authenticated_transactions∈received_cross_chain_transactions → authenticated_users"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="gateway∈GATEWAYS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="user∈authenticated_users"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="gateway_user∈USERS"> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p21" org.eventb.core.predicate="permission∈PERMISSIONS"/> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"> + <org.eventb.core.prIdent name="GATEWAYS" org.eventb.core.type="â„™(GATEWAYS)"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p20" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="¬user ↦ permission∈grants"/> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="user ↦ permission∉grants"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="grants∪{user ↦ permission}∈authenticated_users ↔ PERMISSIONS"/> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/> + </org.eventb.core.prProof> + <org.eventb.core.prProof name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="u" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="CROSS_CHAIN_SMART_CONTRACTS,CROSS_CHAIN_TRANSACTIONS,GATEWAYS,PERMISSIONS,USERS"> + <org.eventb.core.lang name="L"/> + <org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(PERMISSIONS,{read},{write}))" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7"/> + <org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/> + <org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'"> + <org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p8"/> + <org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/> + <org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/> + <org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p11"/> + <org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p12"/> + <org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p13"/> + <org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p14"/> + <org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p15"/> + <org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p16"/> + <org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p17"/> + <org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees u)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + <org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps=""> + <org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p19"> + <org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p4,p1,p2,p5,p6,p7,p19"> + <org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + </org.eventb.core.prRule> + </org.eventb.core.prAnte> + <org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/> + </org.eventb.core.prRule> + <org.eventb.core.prIdent name="authenticated_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS×USERS)"/> + <org.eventb.core.prIdent name="authenticated_users" org.eventb.core.type="â„™(USERS)"/> + <org.eventb.core.prIdent name="cross_chain_transaction" org.eventb.core.type="CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prIdent name="gateway" org.eventb.core.type="GATEWAYS"/> + <org.eventb.core.prIdent name="gateway_pending_transactions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="grants" org.eventb.core.type="â„™(USERS×PERMISSIONS)"/> + <org.eventb.core.prIdent name="read" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prIdent name="received_cross_chain_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_TRANSACTIONS)"/> + <org.eventb.core.prIdent name="target_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prIdent name="user" org.eventb.core.type="USERS"/> + <org.eventb.core.prIdent name="write" org.eventb.core.type="PERMISSIONS"/> + <org.eventb.core.prPred name="p14" org.eventb.core.predicate="subscriptions∈GATEWAYS ↔ CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="subscriptions" org.eventb.core.type="â„™(GATEWAYS×CROSS_CHAIN_SMART_CONTRACTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p10" org.eventb.core.predicate="gateway∈GATEWAYS"/> + <org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀u⦂USERS·u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p19" org.eventb.core.predicate="u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p2" org.eventb.core.predicate="user∈authenticated_users"/> + <org.eventb.core.prPred name="p11" org.eventb.core.predicate="gateway_user∈USERS"> + <org.eventb.core.prIdent name="gateway_user" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p5" org.eventb.core.predicate="user ↦ write∈grants"/> + <org.eventb.core.prPred name="p15" org.eventb.core.predicate="gateway_pending_transactions∈GATEWAYS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p9" org.eventb.core.predicate="target_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"/> + <org.eventb.core.prPred name="p6" org.eventb.core.predicate="PERMISSIONS={read,write}"/> + <org.eventb.core.prPred name="p12" org.eventb.core.predicate="received_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ TRANSACTIONS"> + <org.eventb.core.prIdent name="TRANSACTIONS" org.eventb.core.type="â„™(TRANSACTIONS)"/> + <org.eventb.core.prIdent name="received_transactions" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×TRANSACTIONS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬read=write"/> + <org.eventb.core.prPred name="p1" org.eventb.core.predicate="gateway ↦ cross_chain_transaction∈gateway_pending_transactions"/> + <org.eventb.core.prPred name="p13" org.eventb.core.predicate="triggered_events∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_EVENTS"> + <org.eventb.core.prIdent name="CROSS_CHAIN_EVENTS" org.eventb.core.type="â„™(CROSS_CHAIN_EVENTS)"/> + <org.eventb.core.prIdent name="triggered_events" org.eventb.core.type="â„™(CROSS_CHAIN_SMART_CONTRACTS×CROSS_CHAIN_EVENTS)"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p17" org.eventb.core.predicate="authenticated_users⊆USERS"/> + <org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(PERMISSIONS,{read},{write})"/> + <org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀u⦂USERS·u∈authenticated_transactions[received_cross_chain_transactions]⇒u ↦ write∈grants"/> + <org.eventb.core.prPred name="p8" org.eventb.core.predicate="source_smart_contract∈CROSS_CHAIN_SMART_CONTRACTS"> + <org.eventb.core.prIdent name="source_smart_contract" org.eventb.core.type="CROSS_CHAIN_SMART_CONTRACTS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p16" org.eventb.core.predicate="received_cross_chain_transactions∈CROSS_CHAIN_SMART_CONTRACTS ↔ CROSS_CHAIN_TRANSACTIONS"/> + <org.eventb.core.prPred name="p18" org.eventb.core.predicate="u∈(authenticated_transactions{target_smart_contract ↦ cross_chain_transaction ↦ user})[received_cross_chain_transactions∪{target_smart_contract ↦ cross_chain_transaction}]⇒u ↦ write∈grants"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prPred name="p20" org.eventb.core.predicate="u ↦ write∈grants"> + <org.eventb.core.prIdent name="u" org.eventb.core.type="USERS"/> + </org.eventb.core.prPred> + <org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/> + <org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/> + <org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/> + <org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/> + <org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/> </org.eventb.core.prProof> </org.eventb.core.prFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bps b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bps index 968a4e289aed3d2b49ce4fc3e067850402d7d08d..efdbfc401bad928d3c48b54119b7d353a190a482 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bps +++ b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bps @@ -1,13 +1,15 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <org.eventb.core.psFile> - <org.eventb.core.psStatus name="INITIALISATION/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psBroken="true" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psBroken="true" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psBroken="true" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="INITIALISATION/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="14" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="14" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="14" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv16/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="14" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psManual="false"/> - <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="16" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="26" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="26" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="SUBMIT_CC_TX_TO_FABRIC/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv13/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="CREATE_GATEWAY_USER/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="28" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="GRANT_PERMISSION/inv14/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="29" org.eventb.core.psManual="false"/> + <org.eventb.core.psStatus name="GRANT_PERMISSION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.poStamp="29" org.eventb.core.psManual="false"/> </org.eventb.core.psFile> diff --git a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum index b97c66af4cdbe3da5f2ff30067d4d06c17259097..4fcf47d0424e58491eaf967d0cf897c512cdefd9 100644 --- a/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum +++ b/gateway-event-b/CCTx_Ethereum_Fabric_m2.bum @@ -1,53 +1,54 @@ <?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="_KFJkGcEbEe6yC4BToIaAqA" org.eventb.texttools.text_lastmodified="1706803287986" org.eventb.texttools.text_representation="machine CCTx_Ethereum_Fabric_m2 refines CCTx_Abstract_DLT_m1 sees CCTx_Ethereum_Fabric_c2 variables received_transactions triggered_events subscriptions gateway_pending_transactions received_cross_chain_transactions authenticated_users authenticated_transactions write_grant invariants @inv11 authenticated_users ⊆ USERS // The authenticated users are a subset of all the possible users @inv12 authenticated_transactions ∈ received_cross_chain_transactions → authenticated_users // @inv13 ∀ tx · tx ∈ received_cross_chain_transactions ⇒ (∃ u · u ∈ authenticated_users ∧ tx ↦ u ∈ authenticated_transactions) // RQ1 @inv14 write_grant ∈ authenticated_users ↔ {write} @inv16 authenticated_transactions[received_cross_chain_transactions] ⊆ dom(write_grant) // RQ2 events event INITIALISATION extends INITIALISATION then @act11 authenticated_users ≔ ∅ @act12 authenticated_transactions ≔ ∅ @act13 write_grant ≔ {gateway_user ↦ write} // The gateway has write permissions (RQ3) end event SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM extends SUBSCRIBE_SMART_CONTRACT_EVENTS end event INITIATE_CC_TX_IN_ETHEREUM extends INITIATE_CC_TX end event TRIGGER_CC_TX_EVENT_IN_ETHEREUM extends TRIGGER_CC_TX_EVENT end event LISTEN_CC_TX_EVENT_IN_ETHEREUM extends LISTEN_CC_TX_EVENT end event SUBMIT_CC_TX_TO_FABRIC extends SUBMIT_CC_TX any user where @grd11 user ∈ authenticated_users // Only allow authenticated users (RQ6) @grd12 user ↦ write ∈ write_grant // Only allow authorized users (RQ7) then @act11 authenticated_transactions(target_smart_contract ↦ cross_chain_transaction) ≔ user // Audit user that submitted a transaction to a smart contract (RQ4) end event CREATE_GATEWAY_USER 	 when 	 	@grd1 gateway_user ∉ authenticated_users 	 then 	 	@act1 authenticated_users ≔ authenticated_users ∪ {gateway_user} // The gateway is an authenticated user (RQ2) end event GRANT_PERMISSION 	any permission user 	where 		@grd1 permission : PERMISSIONS 		@grd2 user : authenticated_users 	then 		@act1 grants := grants \/ {user |-> permission} end end " version="5"> +<org.eventb.core.machineFile org.eventb.core.configuration="org.eventb.core.fwd" org.eventb.core.generated="false" org.eventb.emf.persistence.emf_id="_qrrLSsHUEe609fto5wotHA" org.eventb.texttools.text_lastmodified="1706882963666" org.eventb.texttools.text_representation="machine CCTx_Ethereum_Fabric_m2 refines CCTx_Abstract_DLT_m1 sees CCTx_Ethereum_Fabric_c2 variables received_transactions triggered_events subscriptions gateway_pending_transactions received_cross_chain_transactions authenticated_users authenticated_transactions grants invariants @inv11 authenticated_users ⊆ USERS // The authenticated users are a subset of all the possible users @inv12 authenticated_transactions ∈ received_cross_chain_transactions → authenticated_users // Authenticated transactions are received transactions submitted by an authenticated user @inv13 ∀ tx · tx ∈ received_cross_chain_transactions ⇒ (∃ u · u ∈ authenticated_users ∧ tx ↦ u ∈ authenticated_transactions) //Every submitted transaction to Hyperledger Fabric must be authenticated (RQ4) @inv14 grants ∈ authenticated_users ↔ PERMISSIONS // Users with read or write permissions @inv15 ∀ u · u ∈ authenticated_transactions[received_cross_chain_transactions] ⇒ u ↦ write ∈ grants //Authenticated users that submitted a transaction must have write permissions (RQ5) events event INITIALISATION extends INITIALISATION then @act11 authenticated_users ≔ ∅ @act12 authenticated_transactions ≔ ∅ @act14 grants ≔ ∅ end event SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM extends SUBSCRIBE_SMART_CONTRACT_EVENTS end event INITIATE_CC_TX_IN_ETHEREUM extends INITIATE_CC_TX end event TRIGGER_CC_TX_EVENT_IN_ETHEREUM extends TRIGGER_CC_TX_EVENT end event LISTEN_CC_TX_EVENT_IN_ETHEREUM extends LISTEN_CC_TX_EVENT end event SUBMIT_CC_TX_TO_FABRIC extends SUBMIT_CC_TX any user where @grd11 user ∈ authenticated_users // Only allow authenticated users (RQ6) @grd12 user ↦ write ∈ grants // Only allow authorized users (RQ7) then @act11 authenticated_transactions(target_smart_contract ↦ cross_chain_transaction) ≔ user // Audit user that submitted a transaction to a smart contract (RQ4) end event CREATE_GATEWAY_USER 	 when 	 	@grd1 gateway_user ∉ authenticated_users 	 then 	 	@act1 authenticated_users ≔ authenticated_users ∪ {gateway_user} // The gateway is an authenticated user (RQ2) end event GRANT_PERMISSION 	any permission user 	where 		@grd1 permission ∈ PERMISSIONS 		@grd2 user ∈ authenticated_users 		@grd3 user ↦ permission ∉ grants 	then 		@act1 grants ≔ grants ∪ {user ↦ permission} // Add permissions to a user end end " version="5"> <org.eventb.core.refinesMachine name="'" org.eventb.core.target="CCTx_Abstract_DLT_m1"/> <org.eventb.core.seesContext name="_1tlAgL7uEe6laZimEYihUg" org.eventb.core.target="CCTx_Ethereum_Fabric_c2"/> - <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUh" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIALISATION" org.eventb.emf.persistence.emf_id="_KFJkAMEbEe6yC4BToIaAqA"> - <org.eventb.core.action name="_jV8FAMEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_users ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act11" org.eventb.emf.persistence.emf_id="_KFJj_cEbEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_jV8FAcEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_transactions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act12" org.eventb.emf.persistence.emf_id="_KFJj_sEbEe6yC4BToIaAqA"/> - <org.eventb.core.action name="_jV8FAsEWEe6yC4BToIaAqA" org.eventb.core.assignment="write_grant ≔ {gateway_user ↦ write}" org.eventb.core.comment="The gateway has write permissions (RQ3)" org.eventb.core.generated="false" org.eventb.core.label="act13" org.eventb.emf.persistence.emf_id="_KFJj_8EbEe6yC4BToIaAqA"/> + <org.eventb.core.event name="_yREdbb7uEe6laZimEYihUh" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIALISATION" org.eventb.emf.persistence.emf_id="_qrrLMMHUEe609fto5wotHA"> + <org.eventb.core.action name="_jV8FAMEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_users ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act11" org.eventb.emf.persistence.emf_id="_qrrLLcHUEe609fto5wotHA"/> + <org.eventb.core.action name="_jV8FAcEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_transactions ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act12" org.eventb.emf.persistence.emf_id="_qrrLLsHUEe609fto5wotHA"/> + <org.eventb.core.action name="_0oC5cMErEe6yC4BToIaAqA" org.eventb.core.assignment="grants ≔ ∅" org.eventb.core.generated="false" org.eventb.core.label="act14" org.eventb.emf.persistence.emf_id="_qrrLL8HUEe609fto5wotHA"/> </org.eventb.core.event> - <org.eventb.core.event name="_1tlnkr7uEe6laZimEYihUg" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_KFJkAsEbEe6yC4BToIaAqA"> + <org.eventb.core.event name="_1tlnkr7uEe6laZimEYihUg" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_qrrLMsHUEe609fto5wotHA"> <org.eventb.core.refinesEvent name="_1tlnk77uEe6laZimEYihUg" org.eventb.core.target="SUBSCRIBE_SMART_CONTRACT_EVENTS"/> </org.eventb.core.event> - <org.eventb.core.event name="_1g9W8MBFEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIATE_CC_TX_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_KFJkBMEbEe6yC4BToIaAqA"> + <org.eventb.core.event name="_1g9W8MBFEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="INITIATE_CC_TX_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_qrrLNMHUEe609fto5wotHA"> <org.eventb.core.refinesEvent name="_1g9-AMBFEe6yC4BToIaAqA" org.eventb.core.target="INITIATE_CC_TX"/> </org.eventb.core.event> - <org.eventb.core.event name="_HT50IMBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="TRIGGER_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_KFJkBsEbEe6yC4BToIaAqA"> + <org.eventb.core.event name="_HT50IMBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="TRIGGER_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_qrrLNsHUEe609fto5wotHA"> <org.eventb.core.refinesEvent name="_HT50IcBGEe6yC4BToIaAqA" org.eventb.core.target="TRIGGER_CC_TX_EVENT"/> </org.eventb.core.event> - <org.eventb.core.event name="_VePMJsBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="LISTEN_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_KFJkCMEbEe6yC4BToIaAqA"> + <org.eventb.core.event name="_VePMJsBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="LISTEN_CC_TX_EVENT_IN_ETHEREUM" org.eventb.emf.persistence.emf_id="_qrrLOMHUEe609fto5wotHA"> <org.eventb.core.refinesEvent name="_VePMJ8BGEe6yC4BToIaAqA" org.eventb.core.target="LISTEN_CC_TX_EVENT"/> </org.eventb.core.event> - <org.eventb.core.event name="_hrEVZsBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBMIT_CC_TX_TO_FABRIC" org.eventb.emf.persistence.emf_id="_KFJkDsEbEe6yC4BToIaAqA"> + <org.eventb.core.event name="_hrEVZsBGEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.generated="false" org.eventb.core.label="SUBMIT_CC_TX_TO_FABRIC" org.eventb.emf.persistence.emf_id="_qrrLPsHUEe609fto5wotHA"> <org.eventb.core.refinesEvent name="_hrEVZ8BGEe6yC4BToIaAqA" org.eventb.core.target="SUBMIT_CC_TX"/> - <org.eventb.core.action name="_jV8sEMEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_transactions(target_smart_contract ↦ cross_chain_transaction) ≔ user" org.eventb.core.comment="Audit user that submitted a transaction to a smart contract (RQ4)" org.eventb.core.generated="false" org.eventb.core.label="act11" org.eventb.emf.persistence.emf_id="_KFJkDcEbEe6yC4BToIaAqA"/> - <org.eventb.core.guard name="_jV8sEcEWEe6yC4BToIaAqA" org.eventb.core.comment="Only allow authenticated users (RQ6)" org.eventb.core.generated="false" org.eventb.core.label="grd11" org.eventb.core.predicate="user ∈ authenticated_users" org.eventb.emf.persistence.emf_id="_KFJkC8EbEe6yC4BToIaAqA"/> - <org.eventb.core.guard name="_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.comment="Only allow authorized users (RQ7)" org.eventb.core.generated="false" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write ∈ write_grant" org.eventb.emf.persistence.emf_id="_KFJkDMEbEe6yC4BToIaAqA"/> - <org.eventb.core.parameter name="_1tncwL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="user" org.eventb.emf.persistence.emf_id="_KFJkCsEbEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.event name="_K_21gMEXEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.emf.persistence.emf_id="_KFJkEsEbEe6yC4BToIaAqA"> - <org.eventb.core.action name="_jV9TIcEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_users ≔ authenticated_users ∪ {gateway_user}" org.eventb.core.comment="The gateway is an authenticated user (RQ2)" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_KFJkEcEbEe6yC4BToIaAqA"/> - <org.eventb.core.guard name="_y4y5cMEXEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway_user ∉ authenticated_users" org.eventb.emf.persistence.emf_id="_KFJkEMEbEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.event name="_KHHS0MEbEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="GRANT_PERMISSION" org.eventb.emf.persistence.emf_id="_KFJkGMEbEe6yC4BToIaAqA"> - <org.eventb.core.action name="_KHH54MEbEe6yC4BToIaAqA" org.eventb.core.assignment="grants ≔ grants ∪ {user ↦ permission}" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_KFJkF8EbEe6yC4BToIaAqA"/> - <org.eventb.core.guard name="_KHH54cEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="permission ∈ PERMISSIONS" org.eventb.emf.persistence.emf_id="_KFJkFcEbEe6yC4BToIaAqA"/> - <org.eventb.core.guard name="_KHH54sEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd2" org.eventb.core.predicate="user ∈ authenticated_users" org.eventb.emf.persistence.emf_id="_KFJkFsEbEe6yC4BToIaAqA"/> - <org.eventb.core.parameter name="_KHIg8MEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="permission" org.eventb.emf.persistence.emf_id="_KFJkE8EbEe6yC4BToIaAqA"/> - <org.eventb.core.parameter name="_KHIg8cEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="user" org.eventb.emf.persistence.emf_id="_KFJkFMEbEe6yC4BToIaAqA"/> - </org.eventb.core.event> - <org.eventb.core.invariant name="_jV9TIsEWEe6yC4BToIaAqA" org.eventb.core.comment="The authenticated users are a subset of all the possible users" org.eventb.core.generated="false" org.eventb.core.label="inv11" org.eventb.core.predicate="authenticated_users ⊆ USERS" org.eventb.emf.persistence.emf_id="_KFJj-MEbEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_jV9TI8EWEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv12" org.eventb.core.predicate="authenticated_transactions ∈ received_cross_chain_transactions → authenticated_users" org.eventb.emf.persistence.emf_id="_KFJj-cEbEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_jV9TJMEWEe6yC4BToIaAqA" org.eventb.core.comment="RQ1" org.eventb.core.generated="false" org.eventb.core.label="inv13" org.eventb.core.predicate="∀ tx · tx ∈ received_cross_chain_transactions ⇒ (∃ u · u ∈ authenticated_users ∧ tx ↦ u ∈ authenticated_transactions)" org.eventb.emf.persistence.emf_id="_KFJj-sEbEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_jV9TJcEWEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="inv14" org.eventb.core.predicate="write_grant ∈ authenticated_users ↔ {write}" org.eventb.emf.persistence.emf_id="_KFJj-8EbEe6yC4BToIaAqA"/> - <org.eventb.core.invariant name="_jV9TJsEWEe6yC4BToIaAqA" org.eventb.core.comment="RQ2" org.eventb.core.generated="false" org.eventb.core.label="inv16" org.eventb.core.predicate="authenticated_transactions[received_cross_chain_transactions] ⊆ dom(write_grant)" org.eventb.emf.persistence.emf_id="_KFJj_MEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdab7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_transactions" org.eventb.emf.persistence.emf_id="_KFJj8MEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdar7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="triggered_events" org.eventb.emf.persistence.emf_id="_KFJj8cEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREda77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="subscriptions" org.eventb.emf.persistence.emf_id="_KFJj8sEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_yREdbL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_KFJj88EbEe6yC4BToIaAqA"/> - <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="_KFJj9MEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4L7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_users" org.eventb.emf.persistence.emf_id="_KFJj9cEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4b7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_transactions" org.eventb.emf.persistence.emf_id="_KFJj9sEbEe6yC4BToIaAqA"/> - <org.eventb.core.variable name="_1toq4r7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="write_grant" org.eventb.emf.persistence.emf_id="_KFJj98EbEe6yC4BToIaAqA"/> + <org.eventb.core.action name="_jV8sEMEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_transactions(target_smart_contract ↦ cross_chain_transaction) ≔ user" org.eventb.core.comment="Audit user that submitted a transaction to a smart contract (RQ4)" org.eventb.core.generated="false" org.eventb.core.label="act11" org.eventb.emf.persistence.emf_id="_qrrLPcHUEe609fto5wotHA"/> + <org.eventb.core.guard name="_jV8sEcEWEe6yC4BToIaAqA" org.eventb.core.comment="Only allow authenticated users (RQ6)" org.eventb.core.generated="false" org.eventb.core.label="grd11" org.eventb.core.predicate="user ∈ authenticated_users" org.eventb.emf.persistence.emf_id="_qrrLO8HUEe609fto5wotHA"/> + <org.eventb.core.guard name="_jV8sEsEWEe6yC4BToIaAqA" org.eventb.core.comment="Only allow authorized users (RQ7)" org.eventb.core.generated="false" org.eventb.core.label="grd12" org.eventb.core.predicate="user ↦ write ∈ grants" org.eventb.emf.persistence.emf_id="_qrrLPMHUEe609fto5wotHA"/> + <org.eventb.core.parameter name="_1tncwL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="user" org.eventb.emf.persistence.emf_id="_qrrLOsHUEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.event name="_K_21gMEXEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="CREATE_GATEWAY_USER" org.eventb.emf.persistence.emf_id="_qrrLQsHUEe609fto5wotHA"> + <org.eventb.core.action name="_jV9TIcEWEe6yC4BToIaAqA" org.eventb.core.assignment="authenticated_users ≔ authenticated_users ∪ {gateway_user}" org.eventb.core.comment="The gateway is an authenticated user (RQ2)" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_qrrLQcHUEe609fto5wotHA"/> + <org.eventb.core.guard name="_y4y5cMEXEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="gateway_user ∉ authenticated_users" org.eventb.emf.persistence.emf_id="_qrrLQMHUEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.event name="_KHHS0MEbEe6yC4BToIaAqA" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.generated="false" org.eventb.core.label="GRANT_PERMISSION" org.eventb.emf.persistence.emf_id="_qrrLScHUEe609fto5wotHA"> + <org.eventb.core.action name="_KHH54MEbEe6yC4BToIaAqA" org.eventb.core.assignment="grants ≔ grants ∪ {user ↦ permission}" org.eventb.core.comment="Add permissions to a user" org.eventb.core.generated="false" org.eventb.core.label="act1" org.eventb.emf.persistence.emf_id="_qrrLSMHUEe609fto5wotHA"/> + <org.eventb.core.guard name="_KHH54cEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd1" org.eventb.core.predicate="permission ∈ PERMISSIONS" org.eventb.emf.persistence.emf_id="_qrrLRcHUEe609fto5wotHA"/> + <org.eventb.core.guard name="_KHH54sEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.label="grd2" org.eventb.core.predicate="user ∈ authenticated_users" org.eventb.emf.persistence.emf_id="_qrrLRsHUEe609fto5wotHA"/> + <org.eventb.core.guard name="_5yZW0MHNEe609fto5wotHA" org.eventb.core.generated="false" org.eventb.core.label="grd3" org.eventb.core.predicate="user ↦ permission ∉ grants" org.eventb.emf.persistence.emf_id="_qrrLR8HUEe609fto5wotHA"/> + <org.eventb.core.parameter name="_KHIg8MEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="permission" org.eventb.emf.persistence.emf_id="_qrrLQ8HUEe609fto5wotHA"/> + <org.eventb.core.parameter name="_KHIg8cEbEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="user" org.eventb.emf.persistence.emf_id="_qrrLRMHUEe609fto5wotHA"/> + </org.eventb.core.event> + <org.eventb.core.invariant name="_jV9TIsEWEe6yC4BToIaAqA" org.eventb.core.comment="The authenticated users are a subset of all the possible users" org.eventb.core.generated="false" org.eventb.core.label="inv11" org.eventb.core.predicate="authenticated_users ⊆ USERS" org.eventb.emf.persistence.emf_id="_qrrLKMHUEe609fto5wotHA"/> + <org.eventb.core.invariant name="_jV9TI8EWEe6yC4BToIaAqA" org.eventb.core.comment="Authenticated transactions are received transactions submitted by an authenticated user" org.eventb.core.generated="false" org.eventb.core.label="inv12" org.eventb.core.predicate="authenticated_transactions ∈ received_cross_chain_transactions → authenticated_users" org.eventb.emf.persistence.emf_id="_qrrLKcHUEe609fto5wotHA"/> + <org.eventb.core.invariant name="_jV9TJMEWEe6yC4BToIaAqA" org.eventb.core.comment="Every submitted transaction to Hyperledger Fabric must be authenticated (RQ4)" org.eventb.core.generated="false" org.eventb.core.label="inv13" org.eventb.core.predicate="∀ tx · tx ∈ received_cross_chain_transactions ⇒ (∃ u · u ∈ authenticated_users ∧ tx ↦ u ∈ authenticated_transactions)" org.eventb.emf.persistence.emf_id="_qrrLKsHUEe609fto5wotHA"/> + <org.eventb.core.invariant name="_OTstIMHNEe609fto5wotHA" org.eventb.core.comment="Users with read or write permissions" org.eventb.core.generated="false" org.eventb.core.label="inv14" org.eventb.core.predicate="grants ∈ authenticated_users ↔ PERMISSIONS" org.eventb.emf.persistence.emf_id="_qrrLK8HUEe609fto5wotHA"/> + <org.eventb.core.invariant name="_jCLrMcHJEe6yC4BToIaAqA" org.eventb.core.comment="Authenticated users that submitted a transaction must have write permissions (RQ5)" org.eventb.core.generated="false" org.eventb.core.label="inv15" org.eventb.core.predicate="∀ u · u ∈ authenticated_transactions[received_cross_chain_transactions] ⇒ u ↦ write ∈ grants" org.eventb.emf.persistence.emf_id="_qrrLLMHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdab7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="received_transactions" org.eventb.emf.persistence.emf_id="_qrrLIMHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdar7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="triggered_events" org.eventb.emf.persistence.emf_id="_qrrLIcHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREda77uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="subscriptions" org.eventb.emf.persistence.emf_id="_qrrLIsHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_yREdbL7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="gateway_pending_transactions" org.eventb.emf.persistence.emf_id="_qrrLI8HUEe609fto5wotHA"/> + <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="_qrrLJMHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_1toq4L7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_users" org.eventb.emf.persistence.emf_id="_qrrLJcHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_1toq4b7uEe6laZimEYihUg" org.eventb.core.generated="false" org.eventb.core.identifier="authenticated_transactions" org.eventb.emf.persistence.emf_id="_qrrLJsHUEe609fto5wotHA"/> + <org.eventb.core.variable name="_2RlqIMErEe6yC4BToIaAqA" org.eventb.core.generated="false" org.eventb.core.identifier="grants" org.eventb.emf.persistence.emf_id="_qrrLJ8HUEe609fto5wotHA"/> </org.eventb.core.machineFile> diff --git a/gateway-prob-animation/ethereum-fabric/gateway-ethereum-fabric-history.html b/gateway-prob-animation/ethereum-fabric/gateway-ethereum-fabric-history.html new file mode 100644 index 0000000000000000000000000000000000000000..eff4e35a1ddca1a93866ec11dfb3cedfd344c919 --- /dev/null +++ b/gateway-prob-animation/ethereum-fabric/gateway-ethereum-fabric-history.html @@ -0,0 +1,929 @@ +<!DOCTYPE html> +<html> +<head> + <!-- html file generated by ProB from a VisB visualization --> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <script> + function setAttr(id, attribute, value){ + var obj = document.getElementById(id); + if (obj == null) { + if (id != "visb_debug_messages") { + console.error("Unknown SVG id " + id + " for attribute " + attribute); + } + } else if(attribute=="text") { + obj.textContent = value; + } else if(attribute=="class" && value != "") { + if(value[0]=="+") { + obj.classList.add(value.substr(1)); + } else if(value[0]=="-") { + obj.classList.remove(value.substr(1)); + } else { + obj.setAttribute(attribute, value); + } + } else { + obj.setAttribute(attribute, value); + } + } + function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + var lastSelectedRow = 0; + function highlightRow(id) { + if (lastSelectedRow>0) {setAttr("row"+lastSelectedRow,"bgcolor","")}; + setAttr("row"+id,"bgcolor","yellow"); + lastSelectedRow = id; + } + function backStep() { + if (lastSelectedRow>1) { + var prev = lastSelectedRow-1; + document.getElementById("row"+prev).click(); + } + } + function forwardStep() { + if (lastSelectedRow>0) { + var nxt = lastSelectedRow+1; + var row = document.getElementById("row"+(nxt)); + if (row != null) { row.click() }; + } + } + </script> + + <style> + table { + font-family: arial, sans-serif; + font-size: 11px; + border-collapse: collapse; + width: 100%; + } + td, th { + border: 1px solid #dddddd; + text-align: left; + padding: 2px; + } +/* + tr:nth-child(even) { + background-color: #dddddd; + } + */ + </style> + + <style> + .collapsible { + cursor: pointer; + } + .collapsible-style { + background-color: #777; + color: white; + padding: 6px; + width: 100%; + border: none; + text-align: left; + outline: none; + font-size: 12px; + } + + .active, .collapsible:hover { + background-color: #555; + } + + .collapsible:after { + content: '\002B'; + color: white; + font-weight: bold; + float: right; + margin-left: 5px; + } + + .active:after { + content: "\2212"; + } + + .coll-content-hid { + padding: 0 12px; + display: none; + overflow: hidden; + background-color: #f1f1f1; + } + .coll-content-vis { + padding: 0 12px; + display: block; + overflow: hidden; + background-color: #f1f1f1; + } + .visb-messages { + text-align: left; + outline: none; + font-size: 12px; + font-family: arial, sans-serif; + } + </style> + + + + <script> + function visualise0(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 0"); + highlightRow(stepNr); + } + function visualise2(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 2"); + setAttr("subscription","visibility","hidden"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","white"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","hidden"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{}"); + setAttr("bVar_gateway_pending_transactions","text","{}"); + setAttr("bVar_gateway_processing","text","0"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","0"); + setAttr("bVar_subscriptions","text","{}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","0"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise3(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 3"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","white"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","hidden"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{}"); + setAttr("bVar_gateway_pending_transactions","text","{}"); + setAttr("bVar_gateway_processing","text","0"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","0"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise7(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 7"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","red"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","white"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","hidden"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{}"); + setAttr("bVar_gateway_pending_transactions","text","{}"); + setAttr("bVar_gateway_processing","text","0"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","1"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{(source_smart_contract|->TRANSACTIONS1)}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","0"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise11(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 11"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","red"); + setAttr("gateway","fill","white"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","hidden"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{}"); + setAttr("bVar_gateway_pending_transactions","text","{}"); + setAttr("bVar_gateway_processing","text","0"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","1"); + setAttr("bVar_triggered_events","text","{(source_smart_contract|->CROSS_CHAIN_EVENTS1)}"); + setAttr("bVar_user_created","text","0"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise16(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 16"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","green"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","hidden"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{}"); + setAttr("bVar_gateway_pending_transactions","text","{(gateway|->CROSS_CHAIN_TRANSACTIONS1)}"); + setAttr("bVar_gateway_processing","text","1"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","0"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise21(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 21"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","green"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","visible"); + setAttr("authorized","visibility","visible"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{gateway_user}"); + setAttr("bVar_gateway_pending_transactions","text","{(gateway|->CROSS_CHAIN_TRANSACTIONS1)}"); + setAttr("bVar_gateway_processing","text","1"); + setAttr("bVar_grants","text","{}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","1"); + setAttr("bVar_write_granted","text","0"); + highlightRow(stepNr); + } + function visualise24(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 24"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","green"); + setAttr("submit-cc-tx","stroke","black"); + setAttr("user","visibility","visible"); + setAttr("authorized","visibility","hidden"); + setAttr("bVar_authenticated_transactions","text","{}"); + setAttr("bVar_authenticated_users","text","{gateway_user}"); + setAttr("bVar_gateway_pending_transactions","text","{(gateway|->CROSS_CHAIN_TRANSACTIONS1)}"); + setAttr("bVar_gateway_processing","text","1"); + setAttr("bVar_grants","text","{(gateway_user|->write)}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","0"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","1"); + setAttr("bVar_write_granted","text","1"); + highlightRow(stepNr); + } + function visualise27(stepNr) { + setAttr("trace_meter","value",stepNr); + setAttr("visb_debug_messages","text","Step "+stepNr+"/9, State ID: 27"); + setAttr("subscription","visibility","visible"); + setAttr("initiate-cc-tx","stroke","black"); + setAttr("trigger-event","stroke","black"); + setAttr("gateway","fill","white"); + setAttr("submit-cc-tx","stroke","red"); + setAttr("user","visibility","visible"); + setAttr("authorized","visibility","hidden"); + setAttr("bVar_authenticated_transactions","text","{(source_smart_contract|->CROSS_CHAIN_TRANSACTIONS1|->gateway_user)}"); + setAttr("bVar_authenticated_users","text","{gateway_user}"); + setAttr("bVar_gateway_pending_transactions","text","{}"); + setAttr("bVar_gateway_processing","text","0"); + setAttr("bVar_grants","text","{(gateway_user|->write)}"); + setAttr("bVar_initiated","text","0"); + setAttr("bVar_received_cross_chain_transactions","text","{(source_smart_contract|->CROSS_CHAIN_TRANSACTIONS1)}"); + setAttr("bVar_received_transactions","text","{}"); + setAttr("bVar_submit_cc_tx","text","1"); + setAttr("bVar_subscribed","text","1"); + setAttr("bVar_subscriptions","text","{(gateway|->source_smart_contract)}"); + setAttr("bVar_triggered","text","0"); + setAttr("bVar_triggered_events","text","{}"); + setAttr("bVar_user_created","text","1"); + setAttr("bVar_write_granted","text","1"); + highlightRow(stepNr); + } + async function runAll(delay) { + visualise0(1); + setAttr("visb_debug_messages","text","Step: 1/9, State ID: 0, Event: SETUP_CONSTANTS(target_smart_contract=source_smart_contract)"); + await sleep(delay); + visualise2(2); + setAttr("visb_debug_messages","text","Step: 2/9, State ID: 2, Event: INITIALISATION(authenticated_transactions=\{\},authenticated_users=\{\},gateway_pending_transactions=\{\},gateway_processing=0..."); + await sleep(delay); + visualise3(3); + setAttr("visb_debug_messages","text","Step: 3/9, State ID: 3, Event: SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM"); + await sleep(delay); + visualise7(4); + setAttr("visb_debug_messages","text","Step: 4/9, State ID: 7, Event: INITIATE_CC_TX_IN_ETHEREUM(TRANSACTIONS1)"); + await sleep(delay); + visualise11(5); + setAttr("visb_debug_messages","text","Step: 5/9, State ID: 11, Event: TRIGGER_CC_TX_EVENT_IN_ETHEREUM(CROSS_CHAIN_EVENTS1,TRANSACTIONS1)"); + await sleep(delay); + visualise16(6); + setAttr("visb_debug_messages","text","Step: 6/9, State ID: 16, Event: LISTEN_CC_TX_EVENT_IN_ETHEREUM(CROSS_CHAIN_EVENTS1,CROSS_CHAIN_TRANSACTIONS1)"); + await sleep(delay); + visualise21(7); + setAttr("visb_debug_messages","text","Step: 7/9, State ID: 21, Event: CREATE_GATEWAY_USER"); + await sleep(delay); + visualise24(8); + setAttr("visb_debug_messages","text","Step: 8/9, State ID: 24, Event: GRANT_PERMISSION(write,gateway_user)"); + await sleep(delay); + visualise27(9); + setAttr("visb_debug_messages","text","Step: 9/9, State ID: 27, Event: SUBMIT_CC_TX_TO_FABRIC(CROSS_CHAIN_TRANSACTIONS1,gateway_user)"); + await sleep(delay); + } + </script> + + <script> function registerHovers() {} </script> + </head> +<body> + + + <button type="button" class="collapsible collapsible-style">SVG Visualisation</button> + <div text-align="left"> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Do not edit this file with editors other than draw.io --> + +<svg + version="1.1" + width="368px" + height="207px" + viewBox="-0.5 -0.5 368 207" + content="<mxfile host="app.diagrams.net" modified="2024-02-01T15:46:08.451Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="p-dDu4ZKovM0da-b8yg-" version="23.0.2" type="google" pages="7" scale="1" border="0"> <diagram name="gateway-solution" id="IxfVzK6chv7lJw_EbnZr"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="c-U9safHB3ttp2hsg-zf-6" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="180" y="220" width="330" height="150" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="c-U9safHB3ttp2hsg-zf-1" target="c-U9safHB3ttp2hsg-zf-3" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-1" value="Source blockchain" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="188" y="380" width="100" height="50" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-2" value="Target blockchain" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="395" y="380" width="100" height="50" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-3" value="Source connector" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="188" y="300" width="100" height="50" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-4" value="Target connector" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="400" y="300" width="100" height="50" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="c-U9safHB3ttp2hsg-zf-5" target="c-U9safHB3ttp2hsg-zf-4" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-5" value="Router" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="295" y="250" width="100" height="50" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-7" value="Gateway" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxGeometry x="170" y="220" width="350" height="30" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=15;entryPerimeter=0;" parent="1" source="c-U9safHB3ttp2hsg-zf-3" target="c-U9safHB3ttp2hsg-zf-5" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="c-U9safHB3ttp2hsg-zf-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.59;entryY=0.06;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="c-U9safHB3ttp2hsg-zf-4" target="c-U9safHB3ttp2hsg-zf-2" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram name="abstract-specification" id="-QJY6oymtGVpWPObD_cF"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="EoR6y-X5EmPLE4C7FN8b-0" /> <mxCell id="EoR6y-X5EmPLE4C7FN8b-1" parent="EoR6y-X5EmPLE4C7FN8b-0" /> <mxCell id="EoR6y-X5EmPLE4C7FN8b-3" value="3. trigger cc-tx event" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="EoR6y-X5EmPLE4C7FN8b-1" source="JDs1YQqlEzECSltLOP-f-1" target="JDs1YQqlEzECSltLOP-f-3" edge="1"> <mxGeometry x="-0.3333" y="15" relative="1" as="geometry"> <mxPoint x="330" y="355" as="targetPoint" /> <mxPoint as="offset" /> <mxPoint x="265" y="380" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="TJc7Q5ErO2HgT6tBkr5N-0" value="1. Subscribe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="EoR6y-X5EmPLE4C7FN8b-1" source="JDs1YQqlEzECSltLOP-f-3" target="JDs1YQqlEzECSltLOP-f-1" edge="1"> <mxGeometry x="-0.2" y="15" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="375" y="370" as="sourcePoint" /> <mxPoint x="310" y="405" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="EoR6y-X5EmPLE4C7FN8b-12" value="4. submit cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;" parent="EoR6y-X5EmPLE4C7FN8b-1" source="JDs1YQqlEzECSltLOP-f-3" target="JDs1YQqlEzECSltLOP-f-2" edge="1"> <mxGeometry x="0.0142" y="18" relative="1" as="geometry"> <mxPoint y="1" as="offset" /> <mxPoint x="420" y="357.5" as="sourcePoint" /> <mxPoint x="483.0999999999999" y="383" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="TJc7Q5ErO2HgT6tBkr5N-2" value="2. initiate cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="EoR6y-X5EmPLE4C7FN8b-1" source="TJc7Q5ErO2HgT6tBkr5N-1" target="JDs1YQqlEzECSltLOP-f-1" edge="1"> <mxGeometry x="-0.0476" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="265" y="430" as="targetPoint" /> <Array as="points"> <mxPoint x="205" y="450" /> <mxPoint x="270" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="TJc7Q5ErO2HgT6tBkr5N-1" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;labelBackgroundColor=default;" parent="EoR6y-X5EmPLE4C7FN8b-1" vertex="1"> <mxGeometry x="190" y="340" width="30" height="60" as="geometry" /> </mxCell> <mxCell id="JDs1YQqlEzECSltLOP-f-1" value="Source smart contract" style="rounded=1;whiteSpace=wrap;html=1;" parent="EoR6y-X5EmPLE4C7FN8b-1" vertex="1"> <mxGeometry x="230" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="JDs1YQqlEzECSltLOP-f-2" value="Target smart contract" style="rounded=1;whiteSpace=wrap;html=1;" parent="EoR6y-X5EmPLE4C7FN8b-1" vertex="1"> <mxGeometry x="440" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="JDs1YQqlEzECSltLOP-f-3" value="Gateway" style="rounded=1;whiteSpace=wrap;html=1;" parent="EoR6y-X5EmPLE4C7FN8b-1" vertex="1"> <mxGeometry x="340" y="333" width="80" height="50" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram name="abstract-animation" id="fuSdiZRc7RcFF8zck2q4"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="Ni0NketW2BAV2I28kZGi-0" /> <mxCell id="Ni0NketW2BAV2I28kZGi-1" parent="Ni0NketW2BAV2I28kZGi-0" /> <mxCell id="Ni0NketW2BAV2I28kZGi-2" value="3. trigger cc-tx event" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="Ni0NketW2BAV2I28kZGi-1" source="Ni0NketW2BAV2I28kZGi-7" target="Ni0NketW2BAV2I28kZGi-9"> <mxGeometry x="-0.3333" y="15" relative="1" as="geometry"> <mxPoint x="330" y="355" as="targetPoint" /> <mxPoint as="offset" /> <mxPoint x="265" y="380" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-3" value="1. Subscribe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="Ni0NketW2BAV2I28kZGi-1" source="Ni0NketW2BAV2I28kZGi-9" target="Ni0NketW2BAV2I28kZGi-7"> <mxGeometry x="-0.2" y="15" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="375" y="370" as="sourcePoint" /> <mxPoint x="310" y="405" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-4" value="4. submit cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;" edge="1" parent="Ni0NketW2BAV2I28kZGi-1" source="Ni0NketW2BAV2I28kZGi-9" target="Ni0NketW2BAV2I28kZGi-8"> <mxGeometry x="0.0142" y="18" relative="1" as="geometry"> <mxPoint y="1" as="offset" /> <mxPoint x="420" y="357.5" as="sourcePoint" /> <mxPoint x="483.0999999999999" y="383" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-5" value="2. initiate cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="Ni0NketW2BAV2I28kZGi-1" source="Ni0NketW2BAV2I28kZGi-6" target="Ni0NketW2BAV2I28kZGi-7"> <mxGeometry x="-0.0476" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="265" y="430" as="targetPoint" /> <Array as="points"> <mxPoint x="205" y="450" /> <mxPoint x="270" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-6" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;labelBackgroundColor=default;" vertex="1" parent="Ni0NketW2BAV2I28kZGi-1"> <mxGeometry x="190" y="340" width="30" height="60" as="geometry" /> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-7" value="Source smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="Ni0NketW2BAV2I28kZGi-1"> <mxGeometry x="230" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-8" value="Target smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="Ni0NketW2BAV2I28kZGi-1"> <mxGeometry x="440" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="Ni0NketW2BAV2I28kZGi-9" value="Gateway" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="Ni0NketW2BAV2I28kZGi-1"> <mxGeometry x="340" y="333" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="LVfMiaI1IPe-Tqw3IRDa-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="Ni0NketW2BAV2I28kZGi-1"> <mxGeometry x="330" y="300" width="100" height="20" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram name="ethereum-fabric-animation" id="RV4wOy_-u867rTqqJLF8"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="oTchvmGYH3MwDzKBjXvu-0" /> <mxCell id="oTchvmGYH3MwDzKBjXvu-1" parent="oTchvmGYH3MwDzKBjXvu-0" /> <mxCell id="oTchvmGYH3MwDzKBjXvu-2" value="3. trigger cc-tx event" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="oTchvmGYH3MwDzKBjXvu-1" source="oTchvmGYH3MwDzKBjXvu-7" target="oTchvmGYH3MwDzKBjXvu-9"> <mxGeometry x="-0.3333" y="15" relative="1" as="geometry"> <mxPoint x="330" y="355" as="targetPoint" /> <mxPoint as="offset" /> <mxPoint x="265" y="380" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-3" value="1. Subscribe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="oTchvmGYH3MwDzKBjXvu-1" source="oTchvmGYH3MwDzKBjXvu-9" target="oTchvmGYH3MwDzKBjXvu-7"> <mxGeometry x="-0.2" y="15" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="375" y="370" as="sourcePoint" /> <mxPoint x="310" y="405" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-4" value="4. submit cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;" edge="1" parent="oTchvmGYH3MwDzKBjXvu-1" source="oTchvmGYH3MwDzKBjXvu-9" target="oTchvmGYH3MwDzKBjXvu-8"> <mxGeometry x="0.0142" y="18" relative="1" as="geometry"> <mxPoint y="1" as="offset" /> <mxPoint x="420" y="357.5" as="sourcePoint" /> <mxPoint x="483.0999999999999" y="383" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-5" value="2. initiate cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="oTchvmGYH3MwDzKBjXvu-1" source="oTchvmGYH3MwDzKBjXvu-6" target="oTchvmGYH3MwDzKBjXvu-7"> <mxGeometry x="-0.0476" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="265" y="430" as="targetPoint" /> <Array as="points"> <mxPoint x="205" y="450" /> <mxPoint x="270" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-6" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;labelBackgroundColor=default;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="190" y="340" width="30" height="60" as="geometry" /> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-7" value="Source smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="230" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-8" value="Target smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="440" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-9" value="Gateway" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="340" y="333" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="oTchvmGYH3MwDzKBjXvu-10" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="330" y="300" width="100" height="20" as="geometry" /> </mxCell> <mxCell id="7YnMIBwf0hIX2jhLdFOH-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="364" y="260" width="32" height="32" as="geometry" /> </mxCell> <mxCell id="7YnMIBwf0hIX2jhLdFOH-3" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="oTchvmGYH3MwDzKBjXvu-1"> <mxGeometry x="500" y="320" width="52" height="52" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram name="fabric-ethereum-animation" id="qFPzXrBYEuxDntpSMbV6"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="01pgN8GewFdfEfVDNItF-0" /> <mxCell id="01pgN8GewFdfEfVDNItF-1" parent="01pgN8GewFdfEfVDNItF-0" /> <mxCell id="01pgN8GewFdfEfVDNItF-2" value="3. trigger cc-tx event" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="01pgN8GewFdfEfVDNItF-1" source="01pgN8GewFdfEfVDNItF-7" target="01pgN8GewFdfEfVDNItF-9"> <mxGeometry x="-0.3333" y="15" relative="1" as="geometry"> <mxPoint x="330" y="355" as="targetPoint" /> <mxPoint as="offset" /> <mxPoint x="265" y="380" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-3" value="1. Subscribe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="01pgN8GewFdfEfVDNItF-1" source="01pgN8GewFdfEfVDNItF-9" target="01pgN8GewFdfEfVDNItF-7"> <mxGeometry x="-0.2" y="15" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="375" y="370" as="sourcePoint" /> <mxPoint x="310" y="405" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-4" value="4. submit cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;" edge="1" parent="01pgN8GewFdfEfVDNItF-1" source="01pgN8GewFdfEfVDNItF-9" target="01pgN8GewFdfEfVDNItF-8"> <mxGeometry x="0.0142" y="18" relative="1" as="geometry"> <mxPoint y="1" as="offset" /> <mxPoint x="420" y="357.5" as="sourcePoint" /> <mxPoint x="483.0999999999999" y="383" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-5" value="2. initiate cc-tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="01pgN8GewFdfEfVDNItF-1" source="01pgN8GewFdfEfVDNItF-6" target="01pgN8GewFdfEfVDNItF-7"> <mxGeometry x="-0.0476" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="265" y="430" as="targetPoint" /> <Array as="points"> <mxPoint x="205" y="450" /> <mxPoint x="270" y="450" /> </Array> </mxGeometry> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-6" value="User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;labelBackgroundColor=default;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="190" y="340" width="30" height="60" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-7" value="Source smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="230" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-8" value="Target smart contract" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="440" y="380" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-9" value="Gateway" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="340" y="333" width="80" height="50" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-10" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="330" y="300" width="100" height="20" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-11" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="346" y="260" width="32" height="32" as="geometry" /> </mxCell> <mxCell id="01pgN8GewFdfEfVDNItF-12" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="01pgN8GewFdfEfVDNItF-1"> <mxGeometry x="386" y="262" width="28" height="28" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram id="T7Ew8g7FgAYmE6fumc95" name="specification-layers"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="ls7eoqOi9B50MHgQH9Si-1" value="One way cross-chain transaction &lt;br&gt;abstract specification" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="260" y="260" width="250" height="60" as="geometry" /> </mxCell> <mxCell id="ls7eoqOi9B50MHgQH9Si-2" value="Ethereum -&amp;gt; Fabric specification" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="390" y="330" width="120" height="60" as="geometry" /> </mxCell> <mxCell id="ls7eoqOi9B50MHgQH9Si-3" value="Fabric -&amp;gt; Ethereum specification" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="260" y="330" width="120" height="60" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> <diagram id="rLaGeFibsiL8HTMZMKSm" name="use-case-scenario"> <mxGraphModel dx="794" dy="412" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="Krg6Kf3u61ibPq_FTrr5-17" value="Ethereum" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="340" y="220" width="100" height="340" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-18" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="Krg6Kf3u61ibPq_FTrr5-17" vertex="1"> <mxGeometry x="45" y="70" width="10" height="30" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-19" value="transfer(userAccount, amount, gwAccount)" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="Krg6Kf3u61ibPq_FTrr5-17" source="Krg6Kf3u61ibPq_FTrr5-18" target="Krg6Kf3u61ibPq_FTrr5-18" edge="1"> <mxGeometry x="-0.7931" y="15" relative="1" as="geometry"> <mxPoint x="-115" y="160" as="sourcePoint" /> <Array as="points"> <mxPoint x="120" y="85" /> <mxPoint x="120" y="100" /> </Array> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-20" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="Krg6Kf3u61ibPq_FTrr5-17" vertex="1"> <mxGeometry x="45" y="170" width="10" height="80" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-21" value="transfer(scAccount, amount, targetAccount)" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="Krg6Kf3u61ibPq_FTrr5-17" source="Krg6Kf3u61ibPq_FTrr5-20" target="Krg6Kf3u61ibPq_FTrr5-20" edge="1"> <mxGeometry x="-0.8126" y="10" relative="1" as="geometry"> <mxPoint x="-105" y="360" as="sourcePoint" /> <Array as="points"> <mxPoint x="120" y="220" /> <mxPoint x="120" y="240" /> </Array> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-7" value="" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};participant=umlActor;" parent="1" vertex="1"> <mxGeometry x="170" y="220" width="20" height="340" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-8" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="Krg6Kf3u61ibPq_FTrr5-7" vertex="1"> <mxGeometry x="5" y="70" width="10" height="30" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-10" value="" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};participant=umlActor;" parent="1" vertex="1"> <mxGeometry x="170" y="220" width="20" height="340" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-11" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="Krg6Kf3u61ibPq_FTrr5-10" vertex="1"> <mxGeometry x="5" y="70" width="10" height="30" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-2" value="Gateway" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="470" y="220" width="100" height="340" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-4" value="Hyperledger Fabric" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="580" y="220" width="100" height="340" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-16" value="Action executed" style="shape=umlFrame;whiteSpace=wrap;html=1;pointerEvents=0;width=130;height=15;" parent="1" vertex="1"> <mxGeometry x="160" y="330" width="500" height="150" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-29" value="transfer(userAccount, amount, gwAccount)" style="edgeStyle=elbowEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;curved=0;" parent="1" source="Krg6Kf3u61ibPq_FTrr5-8" target="Krg6Kf3u61ibPq_FTrr5-17" edge="1"> <mxGeometry x="0.0225" y="20" relative="1" as="geometry"> <Array as="points"> <mxPoint x="230" y="300" /> </Array> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-26" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="625" y="360" width="10" height="30" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-28" value="initiate-cross-chain-tx(userAccount, businessData)" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;" parent="1" source="Krg6Kf3u61ibPq_FTrr5-27" target="Krg6Kf3u61ibPq_FTrr5-26" edge="1"> <mxGeometry x="-0.3864" y="10" relative="1" as="geometry"> <mxPoint x="145" y="550" as="sourcePoint" /> <mxPoint x="625" y="500" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-27" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="175" y="360" width="10" height="20" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-24" value="triggerEvent" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;" parent="1" source="Krg6Kf3u61ibPq_FTrr5-26" target="Krg6Kf3u61ibPq_FTrr5-22" edge="1"> <mxGeometry x="0.0833" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="625" y="530" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-22" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="515" y="390" width="10" height="30" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-25" value="submit-cc-tx(userAccount, businessData)" style="edgeStyle=elbowEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;curved=0;labelBackgroundColor=default;" parent="1" edge="1"> <mxGeometry x="0.0829" y="-10" relative="1" as="geometry"> <mxPoint as="offset" /> <mxPoint x="515" y="409.7171428571429" as="sourcePoint" /> <mxPoint x="395" y="409.7171428571429" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-15" value="Timeout" style="shape=umlFrame;whiteSpace=wrap;html=1;pointerEvents=0;width=70;height=15;" parent="1" vertex="1"> <mxGeometry x="160" y="490" width="500" height="60" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-39" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="385" y="512" width="10" height="28" as="geometry" /> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-40" value="transfer(scAccount, amount, userAccount)" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="1" source="Krg6Kf3u61ibPq_FTrr5-39" target="Krg6Kf3u61ibPq_FTrr5-39" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="390" y="505" as="sourcePoint" /> <Array as="points"> <mxPoint x="420" y="530" /> <mxPoint x="420" y="540" /> </Array> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-42" value="expire(userAccount)" style="edgeStyle=elbowEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;curved=0;" parent="1" source="Krg6Kf3u61ibPq_FTrr5-14" target="Krg6Kf3u61ibPq_FTrr5-39" edge="1"> <mxGeometry x="-0.05" y="10" relative="1" as="geometry"> <Array as="points"> <mxPoint x="340" y="520" /> </Array> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="Krg6Kf3u61ibPq_FTrr5-14" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="175" y="512" width="10" height="20" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " + style="background-color: rgb(255, 255, 255);" + id="svg15" + sodipodi:docname="gateway-event-b-ethereum-fabric-animation.svg" + inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <sodipodi:namedview + id="namedview15" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:zoom="2.8722826" + inkscape:cx="184" + inkscape:cy="103.57616" + inkscape:window-width="1920" + inkscape:window-height="974" + inkscape:window-x="-11" + inkscape:window-y="-11" + inkscape:window-maximized="1" + inkscape:current-layer="svg15" /> + <defs + id="defs1" /> + <rect + fill="#ffffff" + width="100%" + height="100%" + x="0" + y="0" + id="rect1" /> + <path + d="M 86,120 V 98 h 63.63" + fill="none" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="stroke" + id="trigger-event" /> + <path + d="m 154.88,98 -7,3.5 1.75,-3.5 -1.75,-3.5 z" + fill="#000000" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="all" + id="path2" /> + <g + transform="translate(-0.5,-0.5)" + id="g2"> + <switch + id="switch2"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 83px; margin-left: 95px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">3. trigger cc-tx event</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="45" + y="77" + width="100" + height="15.75" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAA/CAYAAADOgp5DAAAAAXNSR0IArs4c6QAAF9xJREFUeF7tnQXMXcXTxrcUJ0CgUFxKcIK0UCDQYsWluHtwL+5WNMW1aKC4O8XdtWhxd4oElwAlv032Zt9595yze+8999zezibk+/59z115dnafmdmZ3R5jx44da7QoAoqAIqAIKAKJCPRQAklETD9XBBQBRUARsAgogaggKAKKgCKgCNSFgBJIXbDpjxQBRUARUASUQFQGFAFFQBFQBOpCQAmkLtj0R4qAIqAIKAJKICoDioAioAgoAnUhoARSF2z6I0VAEVAEFIFcAvn222/NnXfeae6//37z3HPPmU8++cRMOeWUZrHFFjPLL7+82XTTTc2CCy5oJphggvEOyXfeeceO/9VXX7VjHzp0qDnyyCPHOxx0wIqAIjD+IhAkkD/++MNccMEF5vjjjzc//PBDLjprr722OfbYY03fvn1Njx492gbJ//77zzz88MPm999/N4MHD256v5RAmg6pVlgiAmPGjDHXXHON2Wabbcw000xTYktadSchUCQ33QgEwjjkkEPMxRdfHI3DtNNOa8477zyrkbcDiXz88cfm6KOPNldccYW56qqrzJZbbhk9ltgPlUBikdLvqkTgr7/+MjfffLO1kOecc05z9dVXm169elXZJW17HEAgVm66EAiWx0EHHWTOPffc2hAhh3322cestdZaVgD/+ecf8+KLL5oRI0aYG2+8sfYdrq2bbrrJrLrqqpXC8/zzz5s11lijZjkpgVQ6Hdp4hQj8+eefVhk866yzbC9WW201JZAK52NcaTpFbroQyO2332623npr88svv9ixLrXUUtayWHzxxbuNHSKBRPbdd9/a9yuvvLLV+meaaabKsHrqqafMgAEDau2XRSCVDVAbVgQiEUAhZH1eeOGFSiCRmOlnxqTITY1AfvzxR7PDDjuYW2+91WI4xxxzWILgsDyrQCInn3xyl8NjzOUNNtigsnlQAqkMem24zRBI2QjarOvanQoRSJGbGoGw8eL6cdbH3nvvbYYNG2YmmWSS3KG89tprZqONNjLvvfee/Q6NB1KZeOKJK4FACaQS2LXRNkQgZSNow+5rlypCIEVuagRyxhlnmP3226/WZdxZMdFLX375pT2kfvTRR+1vd9xxR+tznXzyySsZvhJIJbBro22IQMpG0Ibd1y5VhECK3FgCIeT1jTfeMC+88IJ5+eWXzbvvvmvOOeccM//88xcOQRIIZyicm3CoXkVRAqkCdW2zHRFI2Qjasf/ap2oQSJGbhjPRX3rpJbPOOuuYr776qjIXlgypzYP9ySefNMsuu6z9RALlkgF/++03GwzAGRAJlJwHrbDCCmaLLbYwAwcONJNNNpmpN4z3559/NiNHjjRYeKNGjbL1QLZLLrmkWW+99cwmm2xievfubftHyOVWW21l///YCBqUgdGjR5vrr7/ePPbYY+aVV16xbsn55pvP9n277bazwRETTjih+f777631eN9999k2YgMOeIOMpNLbbrvNPPLIIzaZkv9NWXrppU2/fv3MuuuuW8OqaBlILN0cEY599tlnm1tuucXWT64R0YDNTmBlTsCAeXnmmWfsnFBob9FFF7UuWuZ/iimmKBpKl7+XVW9RJ4477jhz1FFHFX1mdtllF4PnAZnB9eyH7m+88cb28L0oZ+SLL76wgTfIgStXXnmllatmhvSzVp944gm7blByn332Wdsca5M5WnHFFe364X9ntfvvv//a89qTTjrJ/pZgH2SYtRdbpKwWufpbtVboP+sZOQYjP/Gb8REdy96Sh0+q3LAPNkQgHKKTb3HiiSfW8K/iEL2ZBLLzzjubvfbaq0uIshscGz1BBoMGDUomELAi7JmkS7dBhYSWsGmIDFcgYdEpBPLZZ5+ZI444wpJfXiH585RTTjHTTz99MoHEtkH7kBbywWYEYWWVEIGw2JmLEFbNivYj5+m0006zSbNFCbOMhcRaAkSKbl4oq97YTa6ejeCtt94y22+/vd14XDnzzDMNG2TWhkyuwOGHH24xdGX33Xe3Z6epZJs1tth1435PoiTzNNtsswWrfOihh8z6669fO+sFK8YQS3aXXnqpXZuu5Ln6W7VWUAhRNjmCyJNj9i/mh1QN9hlZ6pGbugkELX348OF2s3MH77FaS+xCiP2uWQTCBBADff755webRvAQILSyFAsE7YlFdcwxx8QOyebe4ELcbbfd7G+KLBAswT322KPLBpDXGBviCSecYLXOGAsETQqLZtddd80lwFCbjIW2sjYViSVydfnll2eOhQ0LjTl20Yf6RJtEHeLyjC0sQDRY2s4ixLLqje0j39WzEfC76667zpK2W88LLLCA/bdFFlmkW/PIw7XX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" + id="image2" /> + </switch> + </g> + <path + d="m 196,123 v 22 h -63.63" + fill="none" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="stroke" + id="path3" /> + <path + d="m 127.12,145 7,-3.5 -1.75,3.5 1.75,3.5 z" + fill="#000000" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="all" + id="path4" /> + <g + transform="translate(-0.5,-0.5)" + id="g4"> + <switch + id="switch4"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 160px; margin-left: 181px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">1. Subscribe</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="150.5" + y="154" + width="61" + height="15.75" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAAA/CAYAAADXAOWJAAAAAXNSR0IArs4c6QAAD6BJREFUeF7tnXfMFUUXxg9qrFFiwy4YsIJiA0HAQrdiodrFRpGqIIiVJhCKvWOXqiCxYiwQlVhAIdIUIxBDQClGShSi8OU3+eZmnXfrvcu7917PJP4h7+7szrPznH7mVtmxY8cO0aEIKAJlgUAVJXRZfEddhCJgEFBC60ZQBMoIASV0GX1MXYoioITWPaAIlBECSugy+pi6FEVACa17QBEoIwSU0GX0MXUpikBehP7kk0/kmmuukdWrV8vnn38ujRo1Kmok//77b/nxxx/lww8/lNmzZ8uSJUvkhx9+MO+87777yqmnnio1a9aUVq1ayXnnnSeHHHKIVKlSpWjW9MUXX0jjxo1z7zN48GC59957i+b9SulF+O4dOnSQBQsWmNcOwrJUMU9M6F9//VVuu+02mTFjhgGkmAm9detWeeedd2TkyJHyzTffxN53nTp1krvuuktOOeWUoiB2qW6u2IBX4oVKaA/YW7Zskf79+8uTTz6Z+9diJfSaNWvMu7766qt5bRc0N/ffcccdstdee+U1R1o3KaHTQlKMZaYaWkT+/PNPGTVqlDzwwAP/QrcYCe1aEd4XbtCggZx++uly9NFHm3/+559/jPn11VdfycqVKyvsnBEjRhhS77bbbuntqoQzKaETAhZyuRJaRDZt2iSDBg2Sxx57rAJUxUZoCIrgufvuu3PvesABB8g999wjN910k+y3336+n3v79u3y7bffyoMPPmjMdDvQ1E8//bRghmflVyuh0yN03JlKFfNIH/rnn3+WO++8U6ZPn+6LRbERetGiRdKuXTsT+GJUr15dXn75ZTn33HNjfUvciuHDh5v/7Dj//PON6X7EEUfEmiPti0p1c6WNQ2XOV6qYBxKagNKbb75pooA2IuwHaLERevz48XLzzTfnXnXMmDHSp0+fRNoV/5s53n333dw8r732mlx99dWVuadyzyrVzZUJWCk9tFQxr0BoTM85c+aYyLDX9ASniy66SM444wxDcjuKidCY26RzHnroIfN6hx12mLz99tvmnZOOadOmyZVXXpm7rVu3boJw2HPPPZNOVfD1pbq5Cl54hhOUKuYVCO0GDSymbOghQ4bI+++/b3LQxUhoAndo42eeeca83sknnyxTpkyR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" + id="image4" /> + </switch> + </g> + <path + d="m 236,98 h 60 v 15.63" + fill="none" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="stroke" + id="submit-cc-tx" /> + <path + d="m 296,118.88 -3.5,-7 3.5,1.75 3.5,-1.75 z" + fill="#000000" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="all" + id="path6" /> + <g + transform="translate(-0.5,-0.5)" + id="g6"> + <switch + id="switch6"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 81px; margin-left: 278px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">4. submit cc-tx</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="242.5" + y="75" + width="71" + height="15.75" + xlink:href="data:image/png;base64,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" + id="image6" /> + </switch> + </g> + <path + d="m 21,140 v 50 h 65 v -13.63" + fill="none" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="stroke" + id="initiate-cc-tx" /> + <path + d="m 86,171.12 3.5,7 -3.5,-1.75 -3.5,1.75 z" + fill="#000000" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="all" + id="path8" /> + <g + transform="translate(-0.5,-0.5)" + id="g8"> + <switch + id="switch8"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 200px; margin-left: 35px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">2. initiate cc-tx</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="0" + y="194" + width="70" + height="15.75" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAA/CAYAAAA7UNe2AAAAAXNSR0IArs4c6QAAEJVJREFUeF7tnXWsHkUXxqdQLA0QIHjQoCWFYsHdXVoKxR2KFHcoTpHg7tDiUqy0QHDXFIIXgoTgFhwSoF9+8zHLvnNnd2Z2d+57L++ZpH/0vjtnZ545++yxme0zadKkSUqaICAICAIJEOgjBJMAVREpCAgCGgEhGFEEQUAQSIaAEEwyaEWwICAICMGIDggCgkAyBIRgkkErggUBQUAIRnRAEBAEkiEgBJMMWhEsCAgCpQTz448/qqeeekrdcccd6rXXXlMTJkzQiM0444xq2WWXVSuttJLaYostVP/+/dVkk03WdjS//fZbtd1226kHH3xQj2WvvfZS5557rppmmmm6fWwnn3yyGjFihL7vEkssoW699Va18MIL1x5HKrm1ByYCBAEHAk6C+e2339QVV1yhH86PP/7YC9zGG2+sUPyBAwd6r015QW8mmL///ls9+uij6tdff1WbbrppIUw9kWC+/vprddNNN6kdd9xRzTDDDCmXWGTXRCBUz2reJuvehWBQlkMOOUSNHj066h7zzDOPuvTSS9X666+v+vTpE9W3qYt7K8F89NFH6vjjj1ejRo1SN9xwg7bCilpPIpg//vhD3Xnnneqkk05S8847r7rxxhvVTDPN1NRyipyGEYjRs6Zu3UIwv/zyizr88MPVJZdcksmfdtpptcLjCmHq9+3bV3311VfqoYceUldffbV6/fXXs2shmeuvv16tttpqTY0vSk5vJJgXX3xRbbDBBuq7777Tc+0tBPP777+rI488Up1//vl63Outt54QTJS2du/FsXrW1OhaCIY30Pbbb5/JhlAuvvhiteKKKzqtEh4KlOzKK6/M+mDe8/9ZZpmlqTH+p+U888wzauWVV87m6COYngIGbvRBBx2kLr/8ciGYnrIoJeNol55lBPP999+r3XbbTd111116mKHWCIHg/fffX5v3pmE2b7nllr0A9vYPsV0LX3fmQjB1Eeze/u3Ss4xgGACm+k8//aRnfvTRR6sTTzxRu0S+hvm1+eabq88//1xfus8++6izzz5bTT311L6uHf97uxa+LvBCMHUR7N7+7dKzjGDIGB188MHZrImxrLPOOkEoEBjedttt1cMPPyzmchBi/17UroWPHGaXy4Vg6iLY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" + id="image8" /> + </switch> + </g> + <circle + cx="21" + cy="87.5" + fill="#ffffff" + stroke="#000000" + pointer-events="all" + id="ellipse8" + r="7.5" /> + <path + d="m 21,95 v 25 m 0,-20 H 6 m 15,0 H 36 M 21,120 6,140 m 15,-20 15,20" + fill="none" + stroke="#000000" + stroke-miterlimit="10" + pointer-events="all" + id="path9" /> + <g + transform="translate(-0.5,-0.5)" + id="g9"> + <switch + id="switch9"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 147px; margin-left: 21px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">User</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="8.5" + y="147.5" + width="25" + height="17" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABECAYAAAB3TpBiAAAAAXNSR0IArs4c6QAACPFJREFUeF7tm3WoFVsUh9dVMVFQscEAE7G7FQu7sRW7C8EODCxM7MTuQCwUxU4M1D9MsLAQFRUVRb3y7ccc5syZM3HPPTj3sRc8eJ6Zvffa67d6zU1ITExMFE2BkUCCBiQwWChGNCDBwkMDEjA8NCAakKBJIGD86BiiAQmYBALGjraQIAPy4MED6dixo9y+fTvE5oULF6RGjRoxsf39+3cZNWqUrF69OrTPgAEDZNGiRZIhQ4aY9v6/LQ6zEA3Iv4dXA/LvMQjjQAOiAflPAjqG2GuCthBtIdpCnHRAW4i2EG0hKd5CPn78KCdPnpSjR4+qovXWrVvqTtmyZZMyZcpI1apVpVGjRlKlSpWYCs3Pnz/L+fPnZe/evWHnFChQQJ1Tr149ad26tfDvhIQET7a1bds26datW0Sh/fXrV9m8ebNs2rRJrl69qvaE/0C7rA8fPsiCBQtk1apVwv+7UbFixWTKlCnSrl07SZcundvroecIZ82aNTJz5kxP5/To0UOmTZsmBQsWdD3DDpCcOXPK0KFD5cSJExHrAwvIy5cvZciQIXLw4EHXS1tf6Nevn8yZM0dZkBvdv39fRowYYSscp7Vo9MKFC6VNmzaO1mIFZPfu3cJv0e4VSEDQ2DFjxsiKFSvCZIIFVKtWTYoXL65+//Lli9BrO3v2bITsZsyYIePGjZM0adJEleu9e/ekV69eymWYCSCrV68ulStXlrRp08r79++VyzRcpfFu5syZlfV27tw5KihWQMqVKxfaB1CbNm2q3NWzZ8+USw4kIEeOHFGXROAQDC9dulSaNGkSIWA+mnn8+LGMHTtWDhw4EJJriRIlZM+ePVKyZElbQN6+fauKU7OmAsSkSZOkT58+kiVLlrB1f/78kZs3b8rEiRPDrAneEHq0BqwVEGPT7t27y7x58yR37tyhc2jCBg6Qnz9/Ks2mE2zQvn37pG3bto7e582bN9K3b18BTINwKXSZrfT7928ljAkTJoQeIdgNGzaowO0UsIll8Ld27drQWmIKCmMFkRfsAGnWrJmsW7cuDAxjs8ABQkaF9hiCJbvZtWuX4K7caP/+/Sqgm7Vw+fLlgmsx05MnT5QFGq7Ki+sxrye+wePp06fVz6zHOuvXrx/Boh0ggIEV2lHgAMFfd+3aVY4fP674LVKkiEpDS5cu7YaHEKD79++vNLVs2bIq1nTo0CEi41q/fr2yJoOcNDzaodY9sEQSCWKOmayAuN0ncIB8+/ZNZT1okUF+siY31OyGZVu3blVK4Ifu3Lkj7du3l0ePHqlldevWVe4pb968joA0aNBAtm/fLjly5EgZFgKXVu3jt1KlSqkCq3nz5lK0aFHH7MlJsK9evVLCP3PmTMjdUA9QXPqhd+/eSZcuXVT2BeXJk0cOHTokFSpUcATErcsdOAvhNlYfbRUUARiNJNCTmubKlctz5WzVbARJPPBSs5j5wNKoKUidDQLYhg0bOgIyfvx4ISVPnTp1yrEQOD137pyKB4yV3YiWA+C0aNFCBf9UqVJFXXLx4kWpWbOm25ZJem7n+qwxZPr06TJ58uSo+wfSQgxunz59KlOnTlU9H6+Eaxs9erTy75kyZYpYluIBsTNDr8Ix3rMLpG6aYqyl8KOKRfv4z4vFsJaWBrUM7s1MKQoQa6DiIknJQKyAWWsLnnsFxLwX1fKLFy+UOyOAnjp1yrEZCCh8emTOaKyANG7cWGVH2bNn96tnnt6PyWV9+vRJ5efk/QbNmjVLCESxEBpORnLp0qXQNskBNFX9w4cPVQ+IotDak+Iwa5V/5coV1ao32jJkRTt37pTChQvHcsWoa2MCxK5t4ZamebkFWkkfyhACa2gI1q5d28tyT+9gPceOHVMdYhTAoMGDB6sWfvr06dVP9L06deokN27cUP+mymZdrB8DRmMyJkDYFBMfOHBgaH8ymB07dkihQoU8Ccb6EjEAX06gNYhOKsWR1b/znDQSS6KRd/fuXZWSUhh6Ic6i+woIBlldkp0XADAqba9DJ/am/dK7d29VD9HBZTZC24YU3EwxA4LmkD6+fv06tO/ixYtl+PDhvhg2FtvVFE5WZ72AXwt1ixF2CkJDccuWLZIvXz4vuAt70EkgLXdTspgBYRbBNGvjxo2hw9BkRo116tTxxLDx0q9fv5S7oDtqJqfurbVwo42Oj/fSy+IMqwCIiUuWLJGMGTOGWLh+/bpKi82ujT4UVuw0PzE2oF2C5ZpjFvMbCj63XpZbMmP79TszAg40+3xAYcRp16yzQ4mMjRb3/Pnzwx6zHreYNWtWW3DtFKJVq1ZqjdUdWDewa8HjwrAyM/348UPNNVAWg4gluNaePXs6goJMmL2sXLkyTGFJhCpWrBhxp5gthB2pG0B82bJlEQfUqlVL+XTMnNmwoREEVdJbOq4ESbIoswaykVdLo/ZBg80KQQ+LIrF8+fIRlTguhGke2aB5Tk2ghg+72bedlsMjsWTkyJGSP3/+sLsbZ8DD4cOHw545WVeyAMJpTNSGDRumpm7JQV5n0Jxlp8EGDwRQxriGwJ4/fy6XL19O0niVTA+LsCoOZ+GeabFgOSgGTUS7tJr1WFq0OibZAIEppmOzZ8+OcDt+AapUqZKQGCBIr5mM3WTO67k0CpkW0tV1iwmAOWjQoLC/ifF6Dm4dMKK10u1iWpJiiJkhXBFpKBc0z6y9MI1VMNsgG7HrK7ntgaUwVp07d66tFtutpzpnLo4leQWfeIfCxONzo2S1EPOF8aG4sWvXrqkvPfDZ+GGzuSMEQMASaI8ztbNmHW4g2D0npuEuiA9U2nwsZ3ynRXeXTAwX07JlSxUvnLq9TuebP8gjFnIWhNviLtwPwP18kBc3QJIiSL3GvwT0H336l1lcV2hA4ipe/5trQPzLLK4rNCBxFa//zTUg/mUW1xUakLiK1//mGhD/MovrCg1IXMXrf3MNiH+ZxXWFBiSu4vW/uQbEv8ziusLbn5LGlQW9uVkCGpCA6YMGRAMSMAkEjB1tIRqQgEkgYOxoC9GABEwCAWNHW4gGJGASCBg72kI0IAGTQMDY+QvEqtgPI7dycQAAAABJRU5ErkJggg==" + id="image9" /> + </switch> + </g> + <rect + x="46" + y="120" + width="80" + height="50" + rx="7.5" + ry="7.5" + fill="#ffffff" + stroke="#000000" + pointer-events="all" + id="rect9" /> + <g + transform="translate(-0.5,-0.5)" + id="g10"> + <switch + id="switch10"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 145px; margin-left: 47px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Source smart contract</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="47" + y="131" + width="78" + height="32" + xlink:href="data:image/png;base64,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" + id="image10" /> + </switch> + </g> + <rect + x="256" + y="120" + width="80" + height="50" + rx="7.5" + ry="7.5" + fill="#ffffff" + stroke="#000000" + pointer-events="all" + id="rect10" /> + <g + transform="translate(-0.5,-0.5)" + id="g11"> + <switch + id="switch11"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 145px; margin-left: 257px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Target smart contract</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="257" + y="131" + width="78" + height="32" + xlink:href="data:image/png;base64,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" + id="image11" /> + </switch> + </g> + <rect + x="156" + y="73" + width="80" + height="50" + rx="7.5" + ry="7.5" + fill="#ffffff" + stroke="#000000" + pointer-events="all" + id="gateway" /> + <g + transform="translate(-0.5,-0.5)" + id="g12"> + <switch + id="switch12"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 98px; margin-left: 157px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Gateway</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <image + x="157" + y="91.5" + width="78" + height="17" + xlink:href="data:image/png;base64,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" + id="image12" /> + </switch> + </g> + <image + x="145.5" + y="39.5" + width="100" + height="20" + xlink:href="data:image/png;base64,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" + preserveAspectRatio="none" + id="subscription" + inkscape:svg-dpi="1" + visibility="hidden"/> + <image + x="179.5" + y="-0.5" + width="32" + height="32" + xlink:href="data:image/png;base64,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" + preserveAspectRatio="none" + id="user" + inkscape:svg-dpi="1" + visibility="hidden" /> + <image + x="315.5" + y="59.5" + width="52" + height="52" + xlink:href="data:image/png;base64,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" + preserveAspectRatio="none" + id="authorized" + inkscape:svg-dpi="1" + visibility="visible"/> +</svg> + </div> + <button type="button" class="collapsible-style">Replay Trace</button> + <div class="coll-content-vis"> + <button onclick="backStep()">« Back</button> + <button onclick="forwardStep()">Forward »</button> + <button onclick="runAll(10)">Run Trace (10 ms delay)</button> + <button onclick="runAll(500)">Run Trace (500 ms delay)</button> + <br><text id="visb_debug_messages" class="visb-messages"> </text> + </div> + <progress id="trace_meter" min="0" max="9" value="0"></progress> + <button type="button" class="collapsible collapsible-style">Variables (15/15)</button> +<div class="coll-content-hid"> + <table> <tr> <th>Nr</th> <th>Name</th> <th>Value</th> </tr> + + <tr id="var_rowauthenticated_transactions"> <td>1</td> <td>authenticated_transactions</td> <td id="bVar_authenticated_transactions">?</td></tr> + + <tr id="var_rowauthenticated_users"> <td>2</td> <td>authenticated_users</td> <td id="bVar_authenticated_users">?</td></tr> + + <tr id="var_rowgateway_pending_transactions"> <td>3</td> <td>gateway_pending_transactions</td> <td id="bVar_gateway_pending_transactions">?</td></tr> + + <tr id="var_rowgateway_processing"> <td>4</td> <td>gateway_processing</td> <td id="bVar_gateway_processing">?</td></tr> + + <tr id="var_rowgrants"> <td>5</td> <td>grants</td> <td id="bVar_grants">?</td></tr> + + <tr id="var_rowinitiated"> <td>6</td> <td>initiated</td> <td id="bVar_initiated">?</td></tr> + + <tr id="var_rowreceived_cross_chain_transactions"> <td>7</td> <td>received_cross_chain_transactions</td> <td id="bVar_received_cross_chain_transactions">?</td></tr> + + <tr id="var_rowreceived_transactions"> <td>8</td> <td>received_transactions</td> <td id="bVar_received_transactions">?</td></tr> + + <tr id="var_rowsubmit_cc_tx"> <td>9</td> <td>submit_cc_tx</td> <td id="bVar_submit_cc_tx">?</td></tr> + + <tr id="var_rowsubscribed"> <td>10</td> <td>subscribed</td> <td id="bVar_subscribed">?</td></tr> + + <tr id="var_rowsubscriptions"> <td>11</td> <td>subscriptions</td> <td id="bVar_subscriptions">?</td></tr> + + <tr id="var_rowtriggered"> <td>12</td> <td>triggered</td> <td id="bVar_triggered">?</td></tr> + + <tr id="var_rowtriggered_events"> <td>13</td> <td>triggered_events</td> <td id="bVar_triggered_events">?</td></tr> + + <tr id="var_rowuser_created"> <td>14</td> <td>user_created</td> <td id="bVar_user_created">?</td></tr> + + <tr id="var_rowwrite_granted"> <td>15</td> <td>write_granted</td> <td id="bVar_write_granted">?</td></tr> + </table> + </div> + <button type="button" class="collapsible collapsible-style">Constants (1/1)</button> +<div class="coll-content-hid"> + <table> <tr> <th>Nr</th> <th>Name</th> <th>Value</th> </tr> + + <tr id="var_rowtarget_smart_contract"> <td>1</td> <td>target_smart_contract</td> <td id="bVar_target_smart_contract">source_smart_contract</td></tr> + </table> + </div> + <button type="button" class="collapsible collapsible-style">Sets (7/7)</button> +<div class="coll-content-hid"> + <table> <tr> <th>Nr</th> <th>Name</th> <th>Value</th> </tr> + + <tr id="var_rowCROSS_CHAIN_EVENTS"> <td>1</td> <td>CROSS_CHAIN_EVENTS</td> <td id="bVar_CROSS_CHAIN_EVENTS">{CROSS_CHAIN_EVENTS1,CROSS_CHAIN_EVENTS2}</td></tr> + + <tr id="var_rowCROSS_CHAIN_TRANSACTIONS"> <td>2</td> <td>CROSS_CHAIN_TRANSACTIONS</td> <td id="bVar_CROSS_CHAIN_TRANSACTIONS">{CROSS_CHAIN_TRANSACTIONS1,CROSS_CHAIN_TRANSACTIONS2}</td></tr> + + <tr id="var_rowGATEWAYS"> <td>3</td> <td>GATEWAYS</td> <td id="bVar_GATEWAYS">{gateway,GATEWAYS2}</td></tr> + + <tr id="var_rowTRANSACTIONS"> <td>4</td> <td>TRANSACTIONS</td> <td id="bVar_TRANSACTIONS">{TRANSACTIONS1,TRANSACTIONS2}</td></tr> + + <tr id="var_rowCROSS_CHAIN_SMART_CONTRACTS"> <td>5</td> <td>CROSS_CHAIN_SMART_CONTRACTS</td> <td id="bVar_CROSS_CHAIN_SMART_CONTRACTS">{source_smart_contract,CROSS_CHAIN_SMART_CONTRACTS2}</td></tr> + + <tr id="var_rowUSERS"> <td>6</td> <td>USERS</td> <td id="bVar_USERS">{gateway_user,USERS2}</td></tr> + + <tr id="var_rowPERMISSIONS"> <td>7</td> <td>PERMISSIONS</td> <td id="bVar_PERMISSIONS">{read,write}</td></tr> + </table> + </div> + <button type="button" class="collapsible-style">Trace (length=9)</button> +<div class="coll-content-vis"> + <table> <tr> <th>Nr</th> <th>Event</th> <th>Target State ID</th> </tr> + + <tr id="row1"><td>1</td><td style="cursor:not-allowed">SETUP_CONSTANTS(target_smart_contract=source_smart_contract)</td><td>State 0</td></tr> + + <tr id="row2" onclick="visualise2(2)"><td>2</td><td style="cursor:pointer">INITIALISATION(authenticated_transactions={},authenticated_users={},gateway_pending_transactions={},gateway_processing=0...</td><td><button onclick="visualise2(2);">State 2</button></td></tr> + + <tr id="row3" onclick="visualise3(3)"><td>3</td><td style="cursor:pointer">SUBSCRIBE_SMART_CONTRACT_EVENTS_IN_ETHEREUM</td><td><button onclick="visualise3(3);">State 3</button></td></tr> + + <tr id="row4" onclick="visualise7(4)"><td>4</td><td style="cursor:pointer">INITIATE_CC_TX_IN_ETHEREUM(TRANSACTIONS1)</td><td><button onclick="visualise7(4);">State 7</button></td></tr> + + <tr id="row5" onclick="visualise11(5)"><td>5</td><td style="cursor:pointer">TRIGGER_CC_TX_EVENT_IN_ETHEREUM(CROSS_CHAIN_EVENTS1,TRANSACTIONS1)</td><td><button onclick="visualise11(5);">State 11</button></td></tr> + + <tr id="row6" onclick="visualise16(6)"><td>6</td><td style="cursor:pointer">LISTEN_CC_TX_EVENT_IN_ETHEREUM(CROSS_CHAIN_EVENTS1,CROSS_CHAIN_TRANSACTIONS1)</td><td><button onclick="visualise16(6);">State 16</button></td></tr> + + <tr id="row7" onclick="visualise21(7)"><td>7</td><td style="cursor:pointer">CREATE_GATEWAY_USER</td><td><button onclick="visualise21(7);">State 21</button></td></tr> + + <tr id="row8" onclick="visualise24(8)"><td>8</td><td style="cursor:pointer">GRANT_PERMISSION(write,gateway_user)</td><td><button onclick="visualise24(8);">State 24</button></td></tr> + + <tr id="row9" onclick="visualise27(9)"><td>9</td><td style="cursor:pointer">SUBMIT_CC_TX_TO_FABRIC(CROSS_CHAIN_TRANSACTIONS1,gateway_user)</td><td><button onclick="visualise27(9);">State 27</button></td></tr> + </table> + </div> + <button type="button" class="collapsible-style">Info</button> +<div class="coll-content-vis visb-messages"> +Generated on 2/2/2024 at 11:13 using ProB version 1.12.2-final +<br>Main specification package: event_b_project +<br>Main specification name: CCTx_Ethereum_Fabric_Animation_m3 +<br>Main VisB JSON file: gateway-vis-file.json (modified on 2/2/2024 at 10:40) +<br>VisB SVG file: gateway-event-b-ethereum-fabric-animation.svg (modified on 2/2/2024 at 11:01) + <script> visualise27(9); </script> + </div> + <script> registerHovers() </script> + +<script> +var collapsibles = document.getElementsByClassName("collapsible"); +var ii; + +for (ii = 0; ii < collapsibles.length; ii++) { + collapsibles[ii].addEventListener("click", function() { + this.classList.toggle("active"); + var content = this.nextElementSibling; + if (content.style.display === "block") { + content.style.display = "none"; + } else { + content.style.display = "block"; + } + }); +} +</script> + +</body> +</html> + diff --git a/gateway-prob-animation/ethereum-fabric/gateway-event-b-ethereum-fabric-animation.svg b/gateway-prob-animation/ethereum-fabric/gateway-event-b-ethereum-fabric-animation.svg index 424ea7cc0a739d31ca452bd761f7f4e159273039..d3f7ef225169afadde809544eb8937fefd361e6f 100644 --- a/gateway-prob-animation/ethereum-fabric/gateway-event-b-ethereum-fabric-animation.svg +++ b/gateway-prob-animation/ethereum-fabric/gateway-event-b-ethereum-fabric-animation.svg @@ -396,7 +396,8 @@ xlink:href="data:image/png;base64,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" preserveAspectRatio="none" id="subscription" - inkscape:svg-dpi="1" /> + inkscape:svg-dpi="1" + visibility="hidden"/> <image x="179.5" y="-0.5" @@ -416,5 +417,5 @@ preserveAspectRatio="none" id="authorized" inkscape:svg-dpi="1" - visibility="hidden"/> + visibility="visible"/> </svg> diff --git a/gateway-prob-animation/ethereum-fabric/gateway-vis-file.json b/gateway-prob-animation/ethereum-fabric/gateway-vis-file.json index fddf67f03a1f32f74d9ddb558b37f918b264a055..49b55363cf16dccc2046f32fc1841942e21aace8 100644 --- a/gateway-prob-animation/ethereum-fabric/gateway-vis-file.json +++ b/gateway-prob-animation/ethereum-fabric/gateway-vis-file.json @@ -30,6 +30,11 @@ "id": "user", "attr": "visibility", "value": "IF user_created=1 THEN \"visible\" ELSE \"hidden\" END" + }, + { + "id": "authorized", + "attr": "visibility", + "value": "IF write_granted=1 THEN \"hidden\" ELSE \"visible\" END" } ], "events": [ @@ -56,6 +61,10 @@ { "id": "user", "event": "CREATE_GATEWAY_USER" + }, + { + "id": "authorized", + "event": "GRANT_PERMISSION" } ] } \ No newline at end of file