New: the Free plan. Check FirstLight's timing against your own feed
All docs pages

FirstLight colocation for Robinhood Chain

Robinhood Chain colocation in AWS Ohio puts your client instance next to the FirstLight relay. Your instance reads the Robinhood Chain sequencer feed, /tx and /headers over private addresses, without the public internet.

Plan

Colocation is part of the Ultra plan. To set it up, write to your FirstLight contact or ask on Telegram.

What you get

  • An instance of your own AWS account in a cluster placement group that we share with your account, in the AWS zone use2-az2 (AWS Ohio, us-east-2).
  • A VPC peering between our VPC and yours, so your instance reaches the relay on private addresses.
  • The feed as a plain WebSocket (ws://) on a private address that your FirstLight contact gives you. The streams are the same as on the public endpoints:
  • Compressed frames on /: the relay answers the standard permessage-deflate extension. A compressed message can come in several frames. Join the frames of a message, then inflate the whole message with a fresh window. A client that does not offer the extension gets plaintext.

The private address takes no key. The relay admits your instance by its private address. The keyed public endpoints stay available to you outside the group, for example wss://blocks.first-light.stream/{KEY}.

What we need from you

  1. Your AWS account ID.
  2. The ID of the VPC in which your client runs, and its CIDR. The CIDR must not overlap our VPC. Your FirstLight contact tells you our range.
  3. After you launch: the private IPv4 address of your client instance.

How to join

1. Accept the share

We share the placement group with your account through AWS Resource Access Manager. Accept the invitation in your Resource Access Manager console, in us-east-2.

2. Launch in the group

Use the placement group ID that your FirstLight contact gives you, not the group name. The group name does not work from your account. Launch in a subnet whose AZ ID is use2-az2. The AZ name of that zone can be different in your account. Find it with this command:

aws ec2 describe-availability-zones --region us-east-2 --zone-ids use2-az2 \
    --query 'AvailabilityZones[0].ZoneName' --output text

Then launch:

aws ec2 run-instances --region us-east-2 --subnet-id SUBNET_IN_USE2_AZ2 \
    --placement GroupId=PLACEMENT_GROUP_ID --instance-type TYPE --image-id AMI ...

A cluster placement group can refuse a launch for capacity (InsufficientInstanceCapacity). If this occurs, try again later.

3. Accept the peering

We request a VPC peering from our VPC to yours. Accept it. Then add one route to the route table of your client's subnet: our VPC range to the peering connection.

4. Connect

Your FirstLight contact tells you when the relay admits your address. Then connect to the private address that your contact gave you. A Nitro node reads the feed with one flag:

nitro --node.feed.input.url ws://RELAY_PRIVATE_ADDRESS:PORT/

Without the peering, your instance can reach only the public endpoints.

Reconnect rule

We release a new relay with a roll. The new relay starts beside the old one on the same address. The old relay then closes each connection with the WebSocket close code 1012 (Service Restart).

  • On close code 1012, reconnect at once to the same address.
  • On reconnect, send the header Arbitrum-Requested-Sequence-Number with your last sequence number plus one. When the relay still holds that message for catch-up, it serves you from that message. If not, you start at the live head. A Nitro node sends this header on each connect.
  • Skip each sequence number that you already have. A reader that reconnects during a release can get messages that it already has.
  • When a second relay address is given to you, keep both addresses. When one address refuses the connection, connect to the other.

What we see

We see your address, the time of each connection, the round-trip time of the connection and the messages that the relay sent you. We cannot see or change your instances. When the share ends, AWS removes your running instances from the placement group.

Need a key? Ask on TelegramMessage @idatsy, direct to the operator. Start with a free key for the headers stream.