Join at Marlin and work on interesting problems like figuring out cryptoeconomics for incentivizing full nodes to propagate blocks and transactions, creating network topologies in a rapidly changing network and finding efficient rounting paths with multiple sources and multiple destinations.
Marlin is an open collection of protocols and related libraries that provides high-performance network infrastructure for decentralized systems.
The Marlin Network is able to achieve global latencies of <150ms. This enables developers to build high-performance responsive distributed systems (including blockchains and dapps).
The Marlin Network can scale to a large number of nodes without compromising on performance. Developers are no longer limited by the fanout capabilities of a single node.
Some examples:
Run a cluster and participate in testnet.
All at Marlin work on interesting problems like figuring out cryptoeconomics for incentivizing full nodes to propagate blocks and transactions, creating network topologies in a rapidly changing network and finding efficient rounting paths with multiple sources and multiple destinations. Join to contribute ideas or join research discussions at Marlin Research.
Kickstart your application on the Marlin Network by using Multicast SDK.
The current architecture has 4 types of nodes
A cluster operator is responsible for running managing the beacon, monitoring and relay nodes. Users of the network need to simply run and manage a user node.
The beacon node is similar to seed nodes or bootstrap nodes in other networks. It is the initial touchpoint using which a user discovers the other nodes in the network. See Beacon for more details.
The monitoring node is used to monitor the network by aggregating logs and metrics from the other nodes. See Monitoring for more details.
The relay nodes form the core of the network and are responsible for propagating information from one user to the others. See Relay for more details.
The user nodes produce and receive messages propagating through the network. See User for more details.
Node Type | vCPU | Memory | Disk space |
---|---|---|---|
Beacon | 0.5 | 1 GB | < 1 GB |
Monitoring | 2 | 8 GB | 50 GB |
Relay * | 1 | 1 | < 1 GB |
User * | 1 | 1 | < 1 GB |
* In the case of relay and user nodes, a full/light node of a blockchain usually runs alongside it (as shown in the diagram above) which consumes signifiant resources depending on the blockchain. Hardware requirements need to be determined accordingly. For example, team recommend 2 vCPUs, 8GB Memory and 375 GB local SSD for Ethereum.
Reference scripts for provisioning and deployment of a cluster on GCP using Pulumi+Ansible are provided here. While some tweaks might be needed to customize it based on your requirements and infrastructure, it should provide a good base for any customizations.
The Marlin Protocol incentivizes relayers to propagate blocks from producers to receivers. Relayers receive 2 types of rewards:
Receivers pay a subscription fee to subscribe for blocks of an epoch. Subscription fee received from all the receivers is collected into a pot which is divided among the clusters who propagate the chunks in that epoch.
Relayers who deliver the chunk to receivers receive a receipt which is created as follows by the receiver
Receipt = Sig(RelayerAddress + blockHash + chunkIndex, ReceiverPrivKey)
Once the relayer who delivered the chunk receives the receipt, based on the receipt a peg relayer from the same cluster is selected as follows
PegRelayerIndex = Hash(Receipt) mod(N) where N is number of relayers in the cluster
The delivery relayer sends the receipt to the peg relayer for relayer signature on the receipt. This signed receipt is sent back to the delivery relayer. The hash of the signed receipt is calculated to identify the ticket.
Ticket = Hash(Sig(Receipt, PegRelayerPrivKey))
The fee is paid probabilistically such that only some of the tickets received by the relayers which are part of the winning range can claim the fee. Winning range is adjusted to ensure that the number of winning tickets in each epoch are constant. So if the number of redemptions are higher, then the winning range decreases and vice versa.
A portion of the fee claimed by the cluster is paid back to the receiver to ensure that receiver has skin in the game, in case receiver falsely denies receiving a message.
The network reward is an incentive for relayers during the initial phase to participate in the network when the number of subscribers and messages in the network are not high enough to cover the infrastructure costs. These rewards are provided to bootstrap the network and the reward value decreases over time as the organic usage of the network increases and relayers recover increasing higher portion of the costs through fees instead.