Running Scroll SDK on an ARM64 Mac
Overview
This guide should get you started with running a local Scroll SDK devnet on your mac laptop with an arm64
processor.
This guide assumes you’ve taken a look at the Early Access document and have access to the scroll-sdk github repo using your local machine.
We’ve written this guide because local deployments for Kubernetes clusters can be finicky.
By the end of the guide, you should have a Scroll SDK running with a block explorer, RPC, webUI, monitoring and metrics, and a local L1 — all accessible to wallets, browsers, and applications running on your local machine.
Updates to the Guide
- July 31, 2024
- Adding additional
make
commands andminikube
config
- Adding additional
- June 26, 2024
- Minor typography fixes i.e.
docker v
todocker -v
- Minor typography fixes i.e.
- June 19, 2024
- Removed external
bjw-s
dependency and prerequisite - Removed manual modification of
.env.frontends
- Updated docker image name used in generating config files
- Removed external
- June 18, 2024
- Fixed
minikube addons enable
commands (missing “addons”)
- Fixed
Prerequisites
- Clone the repo onto your local machine.
- Install dependencies (using
brew
is strongly recommended):- Brew (optional)
/bin/bash -c "$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh](https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh))"
- Docker Desktop
brew install --cask docker
- kubectl
brew install kubectl
- minikube
brew install minikube
- Helm
brew install helm
- docker-mac-net-connect
brew install chipmk/tap/docker-mac-net-connect
- Brew (optional)
- Optional: Install dependencies for example helper scripts
- You should now be able to open a terminal and run the following:
docker -v
kubectl version
minikube status
helm version
Starting minikube
To start minikube, run:
Getting minikube to work with custom DNS names on MacOS
Now run the following commands:
Installing Scroll SDK
-
Clone the
scroll-sdk
repoYou’ll need If you need repo access, reach out to
@dghelm
on Telegram. -
Configure
values.yaml
andconfig.toml
This is the time to adjust what services run on your stack and their configuration. I’d suggest not altering these on your first installation, but see
charts/scroll-sdk/values.yaml
(view on Github) andconfig.toml
(view on Github). -
Bootstrap
Now we’ll install Helm chart dependencies, generate additional config files for our services, and create our
genesis.json
file. -
Launch the chain!
Your chain is now starting! Run
kubectl get pods
to check in on their progress. In the next section we’ll expose the chain to your local machine so you can interact with the stack.
After Launching the Stack
Funding SDK Addresses
You will need to provide funds to the following accounts:
DEPLOYER_ADDR
(only needs funded on L1)L1_COMMIT_SENDER_ADDR
L1_FINALIZE_SENDER_ADDR
L1_GAS_ORACLE_SENDER_ADDR
L2_GAS_ORACLE_SENDER_ADDR
(funded after L2 chain deployment)
If you installed the necessary prerequisites, you can run the example script from the repo’s base directory.
Other Useful Commands
kubectl get pods
will show all the active pods and their status.
kubectl get ingress
will show all the exposed services and URIs.
make uninstall
will stop all services.
minikube dashboard
launches a WebUI for exploring the kubernetes cluster and the various pods, volumes and ingresses without learning all the CLI commands.
Other example scripts can be used to generate traffic on the L1 or L2 to produce blocks more quickly. Try ./examples/l2-generate-txs.sh
.
If you need to update a specific service’s config file:
- Make any necessary changes to the config or helm charts
- Run
make upgrade
- Delete the running pod by running
kubectl delete pod [pod-name]
Pointing DNS Requests to the Cluster
Running kubectl get ingress
should show all the domains setup within the cluster, like the following:
Now, we’ll follow the instructions from the minikube docs for setting up our local machine to use our cluster to resolve all .scrollsdk
domain requests.
Take note of the ADDRESS
in your output (it should match the result of running minikube ip
).
You’ll want to create the following file at /etc/resolver/minikube-scrollsdk
(will require sudo
access).
If you prefer, this can be done in one command that creates the directory and file and then outputs the required info:
Lastly, flush your DNS:
Testing Ingress DNS
Try running:
nslookup frontends.scrollsdk $(minikube ip)
curl frontends.scrollsdk
- If those work, visit
http://frontends.scrollsdk
in your browser.- If those do not work, try resetting your machine and running through the instructions in Getting minikube to work with custom DNS names on MacOS and above again. It may help to run
minikube stop
andminikube start
again.
- If those do not work, try resetting your machine and running through the instructions in Getting minikube to work with custom DNS names on MacOS and above again. It may help to run
Interacting with the Chain
Web UIs
You should now be able to explore the stack on your local machine and using your web browser. All links below assume default configuration and working Ingress DNS.
- Block Explorers (Blockscout)
- L2 Explorer
- L1 Explorer (this is scanning Anvil and can be a bit buggy)
- Bridge
- Bridging UI has a gas bug as of June 13, 2024
- Rollup Explorer
- Shows committed batches and finalized batches
- Granfana Dashboards
- Login
- User:
admin
- Pass:
scroll-sdk
- User:
- See “Scroll” dashboards on this page.
- Login
Connecting to the RPC using a Wallet
To connect directly to an RPC or using MetaMask, use:
Network | Scroll SDK Chain | Scroll SDK L1 |
---|---|---|
RPC URL | http://l2-rpc.scrollsdk | http://l1-devnet.scrollsdk |
Chain ID | 221122 | 111111 |
Currency Symbol | ETH | ETH |
Block Explorer URL | http://blockscout.scrollsdk | http://l1-devnet-explorer.scrollsdk |
Helpful Commands
Anvil has a lot of useful methods that can manipulate the L1. Proper documentation for using them is available in the Hardhat docs (replacing hardhat_
with anvil_
)
Set L1 Token Balance of an Account
In params, change first item to a wallet, and second to hex of wei. This config uses 1000 ETH.
See docs for details.
Mine some L1 Block
See docs for details.