Deployments in Gevulot are immutable and permanent by default. Deployment transactions need to contain a pointer to the program binary (URL) and a hash commitment so the downloaded program can be verified. When a program is deployed, it becomes usable at the next epoch.
Running a Program
The full lifecycle of running a prover program:
Run transaction is sent to network, which specifies program ID, input pointer + hash commitment, amount of provers and max cycles per prover.
Receiving node puts the transaction into the mempool for prover allocation and for inclusion in the next block.
Prover nodes complete workload and put the proof back into the mempool for verification
Validator nodes verify the proof and vote on its correctness
Once 2/3 of validator nodes have verified, the leader includes the proof in the next block
A user can also cancel a workload, by submitting a cancel transaction. The cancellation will only be heeded by the provers once the transaction has finality and has propagated across the network at which point they will cease running the program. Once a proving workload is cancelled the user will pay for the cycles used up until the cancellation transaction reached finality.