Luke Parker
0c1aec29bb
Finish routing output flushing
...
Completes the transaction-chaining scheduler.
2024-09-19 23:36:32 -07:00
Luke Parker
653ead1e8c
Finish the tree logic in the transaction-chaining scheduler
...
Also completes the DB functions, makes Scheduler never instantiated, and
ensures tree roots have change outputs.
2024-09-19 23:36:32 -07:00
Luke Parker
8ff019265f
Near-complete version of the tree algorithm in the transaction-chaining scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
0601d47789
Work on the tree logic in the transaction-chaining scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
ebef38d93b
Ensure the transaction-chaining scheduler doesn't accumulate the same output multiple times
2024-09-19 23:36:32 -07:00
Luke Parker
75b4707002
Add input aggregation in the transaction-chaining scheduler
...
Also handles some other misc in it.
2024-09-19 23:36:32 -07:00
Luke Parker
3c787e005f
Fix bug in the scanner regarding forwarded output amounts
...
We'd report the amount originally received, minus 2x the cost to aggregate,
regardless the amount successfully forwarded. We should've reduced to the
amount successfully forwarded, if it was smaller, in case the cost to
forward exceeded the aggregation cost.
2024-09-19 23:36:32 -07:00
Luke Parker
f11a6b4ff1
Better document the forwarded output flow
2024-09-19 23:36:32 -07:00
Luke Parker
fadc88d2ad
Add scheduler-primitives
...
The main benefit is whatever scheduler is in use, we now have a single API to
receive TXs to sign (which is of value to the TX signer crate we'll inevitably
build).
2024-09-19 23:36:32 -07:00
Luke Parker
c88ebe985e
Outline of the transaction-chaining scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
6deb60513c
Expand primitives/scanner with niceties needed for the scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
bd277e7032
Add processor/scheduler/utxo/primitives
...
Includes the necessary signing functions and the fee amortization logic.
Moves transaction-chaining to utxo/transaction-chaining.
2024-09-19 23:36:32 -07:00
Luke Parker
fc765bb9e0
Add crate for the transaction-chaining Scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
13b74195f7
Don't have acknowledge_batch
immediately run
...
`acknowledge_batch` can only be run if we know what the Batch should be. If we
don't know what the Batch should be, we have to block until we do.
Specifically, we need the block number associated with the Batch.
Instead of blocking over the Scanner API, the Scanner API now solely queues
actions. A new task intakes those actions once we can. This ensures we can
intake the entire Substrate chain, even if our daemon for the external network
is stalled at its genesis block.
All of this for the block number alone seems ridiculous. To go from the block
hash in the Batch to the block number without this task, we'd at least need the
index task to be up to date (still requiring blocking or an API returning
ephemeral errors).
2024-09-19 23:36:32 -07:00
Luke Parker
f21838e0d5
Replace acknowledge_block with acknowledge_batch
2024-09-19 23:36:32 -07:00
Luke Parker
76cbe6cf1e
Have acknowledge_block take in the results of the InInstructions executed
...
If any failed, the scanner now creates a Burn for the return.
2024-09-19 23:36:32 -07:00
Luke Parker
5999f5d65a
Route the DB w.r.t. forwarded outputs' information
2024-09-19 23:36:32 -07:00
Luke Parker
d429a0bae6
Remove unused ID -> number lookup
2024-09-19 23:36:32 -07:00
Luke Parker
775824f373
Impl ScanData serialization in the DB
2024-09-19 23:36:32 -07:00
Luke Parker
41a74cb513
Check a queued key has never been queued before
...
Re-queueing should only happen with a malicious supermajority and breaks
indexing by the key.
2024-09-19 23:36:32 -07:00
Luke Parker
e26da1ec34
Have the Eventuality task drop outputs which aren't ours and aren't worth it to aggregate
...
We could drop these entirely, yet there's some degree of utility to be able to
add coins to Serai in this manner.
2024-09-19 23:36:32 -07:00
Luke Parker
7266e7f7ea
Add note on why LifetimeStage is monotonic
2024-09-19 23:36:32 -07:00
Luke Parker
a8b9b7bad3
Add sanity checks we haven't prior reported an InInstruction for/accumulated an output
2024-09-19 23:36:32 -07:00
Luke Parker
2ca7fccb08
Pass the lifetime information to the scheduler
...
Enables it to decide which keys to use for fulfillment/change.
2024-09-19 23:36:32 -07:00
Luke Parker
4f6d91037e
Call flush_key
2024-09-19 23:36:32 -07:00
Luke Parker
8db76ed67c
Add key management to the scheduler
2024-09-19 23:36:32 -07:00
Luke Parker
920303e1b4
Add helper to intake Eventualities
2024-09-19 23:36:32 -07:00
Luke Parker
9f4b28e5ae
Clarify output-to-self to output-to-Serai
...
There's only the requirement it's to an active key which is being reported for.
2024-09-19 23:36:32 -07:00
Luke Parker
f9d02d43c2
Route burns through the scanner
2024-09-19 23:36:32 -07:00
Luke Parker
8ac501028d
Add API to publish Batches with
...
This doesn't have to be abstract, we can generate the message and use the
message-queue API, yet this should help with testing.
2024-09-19 23:36:32 -07:00
Luke Parker
612c67c537
Cache the cost to aggregate
2024-09-19 23:36:32 -07:00
Luke Parker
04a971a024
Fill in various DB functions
2024-09-19 23:36:32 -07:00
Luke Parker
738636c238
Have Scanner::new spawn tasks
2024-09-19 23:36:32 -07:00
Luke Parker
65f3f48517
Add ReportDb
2024-09-19 23:36:32 -07:00
Luke Parker
7cc07d64d1
Make report.rs a folder, not a file
2024-09-19 23:36:32 -07:00
Luke Parker
fdfe520f9d
Add ScanDb
2024-09-19 23:36:32 -07:00
Luke Parker
77ef25416b
Make scan.rs a folder, not a file
2024-09-19 23:36:32 -07:00
Luke Parker
7c1025dbcb
Implement key retiry
2024-09-19 23:36:32 -07:00
Luke Parker
a771fbe1c6
Logs, documentation, misc
2024-09-19 23:36:32 -07:00
Luke Parker
9cebdf7c68
Add sorts for safety even upon non-determinism
2024-09-19 23:36:32 -07:00
Luke Parker
75251f04b4
Use a channel for the InInstructions
...
It's still unclear how we'll handle refunding failed InInstructions at this
time. Presumably, extending the InInstruction channel with the associated
output ID?
2024-09-19 23:36:32 -07:00
Luke Parker
6196642beb
Add a DbChannel between scan and eventuality task
2024-09-19 23:36:32 -07:00
Luke Parker
2bddf00222
Don't expose IndexDb throughout the crate
2024-09-19 23:36:32 -07:00
Luke Parker
9ab8ba0215
Add dedicated Eventuality DB and stub missing fns
2024-09-19 23:36:32 -07:00
Luke Parker
33e0c85f34
Make Eventuality a folder, not a file
2024-09-19 23:36:32 -07:00
Luke Parker
1e8f4e6156
Make a dedicated IndexDb
2024-09-19 23:36:32 -07:00
Luke Parker
66f3428051
Make index a folder, not a file
2024-09-19 23:36:32 -07:00
Luke Parker
7e71840822
Add helper methods
...
Has fetched blocks checked to be the indexed blocks. Has scanned outputs be
sorted, meaning they aren't subject to implicit order/may be non-deterministic
(such as if handled by a threadpool).
2024-09-19 23:36:32 -07:00
Luke Parker
b65dbacd6a
Move ContinuallyRan into primitives
...
I'm unsure where else it'll be used within the processor, yet it's generally
useful and I don't want to make a dedicated crate yet.
2024-09-19 23:36:32 -07:00
Luke Parker
2fcd9530dd
Add a callback to accumulate outputs and return the new Eventualities
2024-09-19 23:36:32 -07:00