sequenceDiagram
actor u as User
participant c as Contract
actor r as Relay
u->>c : agigit pull(modelHash,relayPubkeyList) [$DOWN≈0,$COST,$TIP]
c->>r : agigit pull(modelHash)
loop deposit payment to attract relay
u->>c : depositPayment()[$∆DOWN≈0,$∆COST,$∆TIP]
end
r->>c : takeOrder(x=prime1*prime2)
c->>r : takeOrder()[$DOWN]
c->>u : takenOrder(true)
u->>r : handshake
r->>u : fileTransfer( e=authorSignaturePreservingEncryption(model,prime1+prime2) )
activate r
activate u
loop fileTransfer(e@progress%) for progress=0%..100%
r->>u : fileTransfer(e@progress%)
u->>c : confirmFileTransfer(e@progress%)
c->>r : confirmFileTransfer()[∆progress%*$COST]
end
u->>c : confirmReceived(true)
deactivate r
deactivate u
alt Contract checks prime1 * prime2== x
r->>c : completeOrder(prime1,prime2)
c->>r : completeOrder()[$TIP]
c->>u : completeOrder(prime1,prime2)
u->>u : model = decrypt(e,prime1+prime2)
else Contract timeout OR Contract checks prime1 * prime2 != x
opt not timeout
r->>c : completeOrder(prime1,prime2)
end
c->>u : completeOrder()[$TIP]
end