tutorial:transfer-api_transactions
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:transfer-api_transactions [2023/07/19 13:46] – technici4n | tutorial:transfer-api_transactions [2023/07/19 14:00] (current) – [Nested transactions] technici4n | ||
---|---|---|---|
Line 24: | Line 24: | ||
While this seems correct, it is possible that '' | While this seems correct, it is possible that '' | ||
- | - Our tank has water, lava, and 1 unit of power. | + | * Our tank has water, lava, and 1 unit of power. |
- | - '' | + | |
- | - '' | + | |
- | - '' | + | |
- | - '' | + | |
We are now in a broken state where water was consumed but lava cannot be consumed. Either we abort the process and accept that water was deleted, or we continue the process and we still produce the obsidian. Either we delete resources that we shouldn’t, | We are now in a broken state where water was consumed but lava cannot be consumed. Either we abort the process and accept that water was deleted, or we continue the process and we still produce the obsidian. Either we delete resources that we shouldn’t, | ||
Line 98: | Line 98: | ||
Here is how transactions can be visualized: | Here is how transactions can be visualized: | ||
- | - Opening a new transaction creates a new copy of the state. From now on, that copy is modified. | + | * Opening a new transaction creates a new copy of the state. From now on, that copy is modified. |
- | - Aborting a transaction discards that copy. Back to the original state. | + | |
- | - Committing a transaction replaces the original state by the modified copy. From now on, this is the new state. | + | |
We can represent this in a graph with branches: | We can represent this in a graph with branches: | ||
- | - Any modification operates on the top branch. | + | * Any modification operates on the top branch. |
- | - Opening a new transaction creates a new branch. | + | |
- | - Aborting a transaction discards the top branch. | + | |
- | - Committing a transaction merges the top branch into the branch below it. | + | |
Here is the branching graph for that first example: | Here is the branching graph for that first example: | ||
- | {{https:// | + | {{:tutorial: |
==== Nested transactions ==== | ==== Nested transactions ==== | ||
Line 152: | Line 152: | ||
Here is the corresponding graph: | Here is the corresponding graph: | ||
- | {{https:// | + | {{:tutorial: |
=== Transaction vs TransactionContext === | === Transaction vs TransactionContext === | ||
You might have noticed that sometimes we use '' | You might have noticed that sometimes we use '' | ||
- | - Use '' | + | * Use '' |
- | - Use '' | + | |
==== Implementing support for transactions ==== | ==== Implementing support for transactions ==== | ||
Line 165: | Line 165: | ||
A '' | A '' | ||
- | 1. Choose a data type to represent copies of internal state. Usually this will be a record. Here we will use '' | + | - Choose a data type to represent copies of internal state. Usually this will be a record. Here we will use '' |
- | 2. Extend '' | + | |
- | 3. Implement functions to create copies of the internal state, and restore copies thereof - respectively '' | + | |
- | 4. Call '' | + | |
Let’s start with the following template: | Let’s start with the following template: | ||
Line 245: | Line 245: | ||
Now that we have been through this background knowledge, here is how the '' | Now that we have been through this background knowledge, here is how the '' | ||
- | - When '' | + | * When '' |
- | | + | |
- | | + | |
- | - When a transaction is aborted: | + | |
- | | + | |
- | | + | |
- | - When a transaction is committed: | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
Hopefully that gives an overview of what is happening under the hood. You should now be ready to read [[https:// | Hopefully that gives an overview of what is happening under the hood. You should now be ready to read [[https:// | ||
tutorial/transfer-api_transactions.1689774361.txt.gz · Last modified: 2023/07/19 13:46 by technici4n