Process flow
The following main threads are spawned when Trin is started via ./src/main.rs.
stateDiagram-v2
trin: trin
state trin {
utplistner: UTP listener
subprotocolhandler: sub-protocol handler
subprotocolnetworktask: sub-protocol network task
portaleventshandler: portal events handler
jsonrpcserver: JSON-RPC server
main() --> utplistner
main() --> subprotocolhandler
main() --> subprotocolnetworktask
main() --> portaleventshandler
main() --> jsonrpcserver
}
Where for each sub-protocol implemented (History, State, Etc.,), a new thread is started.
Here are some of the major components that are called on startup within ./src/lib.rs.
stateDiagram-v2
collection: configs and services
state trin {
main() --> from_cli()
from_cli() --> run_trin()
run_trin() --> discovery()
run_trin() --> utp_listener()
run_trin() --> header_oracle()
run_trin() --> portalnet_config
run_trin() --> storage_config
}
portalnet_config --> collection
storage_config --> collection
discovery() --> collection
header_oracle() --> collection
utp_listener() --> collection
state portalnet {
portalnet_config
storage_config
discovery()
}
state utp {
utp_listener()
}
state validation {
header_oracle()
}
Once the initial collection of important configs and services have
been aggregated, they are passed to the crates for each sub-protocol (trin-history shown here). The received data structures are then
used to start the JSON-RPC server.
An events listener awaits network activity that can be actioned.
stateDiagram-v2
trinhistory: trin-history
jsonrpchistory: JSON-RPC History details
historyhandler: History handler
collection: configs and services
state trin {
collection --> initialize_history_network()
collection --> HistoryRequestHandler
initialize_history_network() --> jsonrpchistory
jsonrpchistory --> launch_jsonrpc_server()
HistoryRequestHandler --> historyhandler
collection --> events()
historyhandler --> events()
}
state portalnet {
events()
}
state trinhistory {
initialize_history_network()
state jsonrpc {
HistoryRequestHandler
}
}
state rpc {
launch_jsonrpc_server()
}
Then ./portalnet/events.rs is handles events at the level of the Portal Wire Protocol.
These are defined messages that are compliant with the Discv5 protocol, and specific
to the Portal Network.