a404944b90
When a Substrate block occurs, the coordinator is expected to emit SubstrateBlock. This causes the processor to begin a variety of plans. The processor now emits SubstrateBlockAck, explicitly listing all plan IDs, before starting signing. This lets the coordinator provide a SubstrateBlock transaction, and with it, recognize all plan IDs as valid. Prior, we would've had to have a spotty algorithm based upon the upcoming Preprocess messages, or if we immediately provided the SubstrateBlock transaction, then wait for the processor to inform us of the contained plans. This creates an explicitly proper async flow not reliant on waiting for data availability. Alternatively, we could've replaced Preprocess with (Block, Vec<Preprocess>). This would've been more efficient, yet also clunky due to the multiple usages of the Preprocess message. |
||
---|---|---|
.. | ||
messages | ||
src | ||
Cargo.toml | ||
LICENSE | ||
README.md |
Processor
The Serai processor scans a specified chain, communicating with the coordinator.
Key Generation
The coordinator will tell the processor if it's been included in managing a coin. If so, the processor is to begin the key generation protocol, relying on the coordinator to provided authenticated communication with the remote parties.
When the key generation protocol successfully completes, the processor is expected to inform the coordinator so it may vote on it on the Substrate chain. Once the key is voted in, it'll become active.
Scanning
Sufficiently confirmed block become finalized in the eyes of the procesor. Finalized blocks are scanned and have their outputs emitted, though not acted on.
Reporting
The processor reports finalized blocks to the coordinator. Once the group
acknowledges the block as finalized, they begin a threshold signing protocol
to sign the block's outputs as a Batch
.
Once the Batch
is signed, the processor emits an Update
with the signed
batch. Serai includes it, definitively ordering its outputs within the context
of Serai.
Confirmed Outputs
With the outputs' ordering, validators are able to act on them.
Actions are triggered by passing the outputs to the scheduler. The scheduler will do one of two things:
- Use the output
- Accumulate it for later usage
Burn Events
When the Serai chain issues a Burn
event, the processor should send coins
accordingly. This is done by scheduling the payments out.
TODO
-
Items marked TODO
-
Items marked TODO2, yet those only need to be done after protonet
-
Test the implementors of Coin against the trait API
-
Test the databases
-
Test eventuality handling
-
Coordinator communication
Kafka? RPC ping to them, which we don't count as 'sent' until we get a pong?