proto required luxfi/node and luxfi/node required proto, with no replace directive on either side. The cycle was not load-bearing: most of it was proto reaching into the node for packages proto already owns — p/warp, p/txs, p/signer, p/stakeable, p/security, x/txs — which now name themselves. Two were real. The UTXO components moved here, where the chains that use them already live, and the node is the only other caller, so that dependency now runs one way. And p/config held the node's chain manager to queue a chain the P-Chain had accepted a CreateChainTx for; it calls one method, so it declares one method. A P-Chain that imports the node to describe QueueChainCreation is what made two modules require each other. Dropping the requirement dropped a registration with it: lux.ParseUTXO is a registry filled by an init, which the node used to link in on proto's behalf. The packages that call it now say so themselves. Co-authored-by: Hanzo Dev <[email protected]>
Package executor
This package deals with state management for P-Chain blocks.
*Block
The *Block type implements the linear.Block interface.
This is the type that the platformvm deals with when it uses linear.Blocks.
*Block wraps a blocks.Block and a manager.
The *Block itself doesn't have any state.
The state is all held by the manager, and the *Block acts upon the manager to get/set the state.
Therefore, we don't need to worry about deduplicating *Block instances.
The platformvm uses the manager to create blocks and query block state because
the manager.GetBlock returns a stateful block (*Block), whereas state.State's GetStatelessBlock returns a blocks.Block.
Visitors
This package contains three implementations of blocks.Visitor: verifier, acceptor and rejector.
These implement the logic for verifying, accepting and rejecting blocks.
Each implementation has a reference to a shared *backend, which maintains state, etc.
(The manager has a reference to the shared *backend as well.)