Atlas RPC nodes are bridges between end users and our Atlas sequencer.
It provides a Solana-compatible JSON-RPC and websocket endpoint.
All transactions sent to the RPC node will be forwarded to our sequencer.
Once the sequencer processed those transactions, they would be sent back to the RPC node by a message bus (Redis for now), the RPC node would replay the transaction to make sure that the sequencer is not malicious.
At least 32 cores, 64G memory, and 100G disk
linux/amd64
or linux/arm64
We support machines with lower specs, but we recommend that you run the below commands with the --low-cpu
flag.
Redis(Message Bus): redis://redis-testnet.atlas.xyz:6379/
Postgres(Serve historical data): postgresql://public_access:[email protected]:5432/svm_node
Sequencer: http://testnet.atlas.xyz:3002
(API Key required)
atlas-replay-node --mode=rpc \
--log-level=info \
--redis-url='redis://redis-testnet.atlas.xyz:6379/' \
--server-url='https://testnet.atlas.xyz:3002/' \
--postgres-url='postgresql://public_access:[email protected]:5432/svm_node' \
--api-key=<YOUR API KEY> \
--num-async-threads=2
This will use up to 4 CPU cores
atlas-replay-node --mode=rpc \
--log-level=info \
--redis-url='redis://redis-testnet.atlas.xyz:6379/' \
--server-url='https://testnet.atlas.xyz:3002/' \
--postgres-url='postgresql://public_access:[email protected]:5432/svm_node' \
--api-key=<YOUR API KEY> \
--num-async-threads=1 \
--low-cpu
To save logs elsewhere, pass the argument --log-dir
. The log files on disk will be rotated daily.
docker run -d \
--name atlas-rpc \
-p 8899:8899 -p 8900:8900 \
ghcr.io/ellipsis-labs/atlas-replay-node:v0.0.1 \
--mode=rpc \
--log-level=info \
--redis-url='redis://redis-testnet.atlas.xyz:6379/' \
--server-url='https://testnet.atlas.xyz:3002/' \
--postgres-url='postgresql://public_access:[email protected]:5432/svm_node' \
--api-key=<YOUR API KEY> \
--num-async-threads=1
This will use up to 4 CPU cores
docker run -d \
--name atlas-rpc \
-p 8899:8899 -p 8900:8900 \
ghcr.io/ellipsis-labs/atlas-replay-node:v0.0.1 \
--mode=rpc \
--log-level=info \
--redis-url='redis://redis-testnet.atlas.xyz:6379/' \
--server-url='https://testnet.atlas.xyz:3002/' \
--postgres-url='postgresql://public_access:[email protected]:5432/svm_node' \
--api-key=<YOUR API KEY> \
--num-async-threads=1 \
--low-cpu
apiVersion: apps/v1
kind: Deployment
metadata:
name: atlas-rpc
labels:
app: atlas-rpc
spec:
replicas: 3
selector:
matchLabels:
app: atlas-rpc
template:
metadata:
labels:
app: atlas-rpc
spec:
containers:
- name: atlas-rpc
image: ghcr.io/ellipsis-labs/atlas-replay-node:v0.0.1
ports:
- containerPort: 8899
- containerPort: 8900
env:
args:
- --mode=rpc
- --log-level=info
- --redis-url=redis://redis-testnet.atlas.xyz:6379/
- --server-url=https://testnet.atlas.xyz:3002/
- --api-key=<YOUR API KEY>
- --postgres-url=postgresql://public_access:[email protected]:5432/svm_node
- --num-async-threads=2
resources:
requests:
cpu: 32
memory: 64Gi
limits:
cpu: 32
memory: 64Gi
livenessProbe:
httpGet:
path: /liveness
port: 8899
initialDelaySeconds: 5
periodSeconds: 3
readinessProbe:
httpGet:
path: /readiness
port: 8899
initialDelaySeconds: 5
periodSeconds: 1
-
Historical state storage
Right now, the historical state is saved in our Postgres database.
In the future, once we make our transaction ledger public, anyone can replay the ledger, rebuild the historical state, and store it in a private database.
-
Re: external dependencies, some may change - We’re planning to migrate our Redis to Kafka soon, and the historical storage layer hasn’t been finalized yet.