💾Bridge Daemon
An overview of the Bridge Daemon
High-level Overview
The Bridge Daemon
is implemented in the same way as other daemons in the dYdX Chain open source software. Specifically, the daemon:
will be run in process as go routines, and
will use gRPC for communication with the main application.
One-time Setup
Application initializes gRPC server
The daemon initializes gRPC client
need to make a connection to
localhost:9090
for query serviceneed to make a connection to unix socket for private daemon service
Related Module
Daemon
Main Loop Logic
Query Protocol for the Next Event ID
Let n
be the nextRecognizedEventId
on the in-memory BridgeEvents
struct on thex/bridge
module.
Let c
be the ProposeParams.MaxBridgesPerBlock
parameter on the x/bridge
module.
Search for next bridge log
For each Ethereum node endpoint configured, use the eth_getLogs
RPC call with the following parameters:
address
:BridgeContractAddress
topics
: [sha256(LogBridge(…))
, [n
,n+1
, … ,n+c-1
]]from_block
:"ethereum block height of last recognized bridge event"
to_block
:"finalized"
Update the Server
For each event returned by each of the Ethereum nodes, send a single, batched AddBridgeEventsRequest
to the server with the events in-order.
Sleep
To prevent hogging resources (from the validator itself or the remote Ethereum Node), the go routine can sleep until the next iteration. It can use the ProposeParams.ProposeDelayDuration
parameter on the x/bridge
module to determine a suitable sleep time. Ideally it would sleep for no more than about half of this interval.
Configuration
These should be configurable by a validator.
EthereumNodeRpcEndpoint
: The daemon maintains an Ethereum node RPC endpoint.
Ideally, this should be a list of RPC endpoints and every RPC query will be sent to each node and daemon will only proceed if each node provides the same response. However, if a validator hosts its own Ethereum node, then it can use a single endpoint. All 16 private-testnet validators who responded to a dYdX survey indicated that they will host their own Ethereum full nodes.
BridgeContractAddress
: The bridge contract to query logs from.
RPC Interface
Information is stored in the BridgeEvent
struct as described in x/bridge.
Last updated