graph TD;
    CLI::parse-->NodeCommand
    NodeCommand--execute-->NodeBuilder
    subgraph "Builder"
        NodeBuilder--"with_types"-->NodeBuilderT
        NodeBuilderT("NodeBuilder(Types)")--"with_components"-->NodeBuilderC
        NodeBuilderC("NodeBuilder(Types, Components)")--"extend_rpc_modules"-->NodeBuilderC
        NodeBuilderC--"on_rpc_started"-->NodeBuilderC
    end
    NodeBuilderC--"launch"-->launch
    subgraph launch
        database("database init")-->tree("blockchain tree init")
        tree--BuilderContext-->components{"build_components"}
        subgraph components
            ComponentsBuilder--"first creates"-->Pool
            Pool--"then creates"-->PayloadService
            Pool--"then creates"-->Network
        end
        components--"launch rpc"-->RpcContext
        RpcContext--invokes-->extend_rpc_modules
        RpcContext--invokes-->on_rpc_started
    end
    launch--"FullNode"-->NodeHandle
