diff --git a/op-bnb.yml b/op-bnb.yml new file mode 100644 index 00000000..8df5845e --- /dev/null +++ b/op-bnb.yml @@ -0,0 +1,60 @@ +version: '3.1' + +services: + + op-bnb: + image: ghcr.io/bnb-chain/op-geth:${OPBNB_GETH_IMAGE_TAG:-v0.3.0} + restart: unless-stopped + stop_grace_period: 5m + entrypoint: /scripts/op-geth-start.sh + environment: + BEDROCK_DATADIR: /geth + CHAIN_ID: 204 + L2_RPC: https://opbnb-mainnet-rpc.bnbchain.org + NETWORK_NAME: mainnet + ports: + - ${PORT__OP_GETH:-8545}:8545 + volumes: + - ./op-bnb/scripts/:/scripts + - .jwtsecret:/jwtsecret + - op-bnb-geth:/geth + labels: + - "traefik.enable=true" + - "traefik.http.middlewares.op-bnb-stripprefix.stripprefix.prefixes=/opbnb" + - "traefik.http.services.op-bnb.loadbalancer.server.port=8545" + - "traefik.http.routers.op-bnb.entrypoints=websecure" + - "traefik.http.routers.op-bnb.tls.certresolver=myresolver" + - "traefik.http.routers.op-bnb.rule=Host(`$DOMAIN`) && PathPrefix(`/opbnb`)" + - "traefik.http.routers.op-bnb.middlewares=op-bnb-stripprefix, ipwhitelist" + networks: + - chains + + + op-bnb-node: + image: ghcr.io/bnb-chain/op-node:${OPBNB_NODE_IMAGE_TAG:-v0.3.0} + depends_on: + - op-bnb + restart: unless-stopped + stop_grace_period: 5m + entrypoint: /scripts/op-node-start.sh + environment: + OP_NODE__RPC_ENDPOINT: ${OPBNB_BSC_ENDPOINT} + NETWORK_NAME: mainnet + expose: + - 3074 + env_file: + - .env + ports: + - ${PORT__OP_NODE_P2P:-3074}:3074 + - ${PORT__OP_NODE:-8546}:8546 + volumes: + - ./op-bnb/scripts/:/scripts + - .jwtsecret:/jwtsecret + - op-bnb-node:/op_node + networks: + - chains + + +volumes: + op-bnb-geth: + op-bnb-node: diff --git a/op-bnb/scripts/op-geth-start.sh b/op-bnb/scripts/op-geth-start.sh new file mode 100644 index 00000000..405f3bf9 --- /dev/null +++ b/op-bnb/scripts/op-geth-start.sh @@ -0,0 +1,63 @@ +#!/bin/sh +set -eou +apk add wget +if [ "$NETWORK_NAME" == "testnet" ]; then + if [ ! -f $BEDROCK_DATADIR/genesis.json ]; then + wget -O $BEDROCK_DATADIR/genesis.json https://raw.githubusercontent.com/bnb-chain/opbnb/develop/assets/testnet/genesis.json + else + echo "genesis.json exists." + fi + export P2P_BOOTNODES="enr:-KO4QKFOBDW--pF4pFwv3Al_jiLOITj_Y5mr1Ajyy2yxHpFtNcBfkZEkvWUxAKXQjWALZEFxYHooU88JClyzA00e8YeGAYtBOOZig2V0aMfGhE0ZYGqAgmlkgnY0gmlwhDREiqaJc2VjcDI1NmsxoQM8pC_6wwTr5N2Q-yXQ1KGKsgz9i9EPLk8Ata65pUyYG4RzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QFJc0KR09ye818GT2kyN9y6BAGjhz77sYimxn85jJf2hOrNqg4X0b0EsS-_ssdkzVpavqh6oMX7W5Y81xMRuEayGAYtBSiK9g2V0aMfGhE0ZYGqAgmlkgnY0gmlwhANzx96Jc2VjcDI1NmsxoQPwA1XHfWGd4umIt7j3Fc7hKq_35izIWT_9yiN_tX8lR4RzbmFwwIN0Y3CCdl-DdWRwgnZf" +fi + +if [ "$NETWORK_NAME" == "mainnet" ]; then + if [ ! -f $BEDROCK_DATADIR/genesis.json ]; then + wget -O $BEDROCK_DATADIR/genesis.json https://raw.githubusercontent.com/bnb-chain/opbnb/develop/assets/mainnet/genesis.json + else + echo "genesis.json exists." + fi + export P2P_BOOTNODES="enr:-KO4QHs5qh_kPFcjMgqkuN9dbxXT4C5Cjad4SAheaUxveCbJQ3XdeMMDHeHilHyqisyYQAByfdhzyKAdUp2SvyzWeBqGAYvRDf80g2V0aMfGhHFtSjqAgmlkgnY0gmlwhDaykUmJc2VjcDI1NmsxoQJUevTL3hJwj21IT2GC6VaNqVQEsJFPtNtO-ld5QTNCfIRzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QKIByq-YMjs6IL2YCNZEmlo3dKWNOy4B6sdqE3gjOrXeKdNbwZZGK_JzT1epqCFs3mujjg2vO1lrZLzLy4Rl7PyGAYvRA8bEg2V0aMfGhHFtSjqAgmlkgnY0gmlwhDbjSM6Jc2VjcDI1NmsxoQNQhJ5pqCPnTbK92gEc2F98y-u1OgZVAI1Msx-UiHezY4RzbmFwwIN0Y3CCdl-DdWRwgnZf" +fi + +if [ ! -d $BEDROCK_DATADIR/geth ]; then + exec geth --datadir $BEDROCK_DATADIR init $BEDROCK_DATADIR/genesis.json +else + echo "$BEDROCK_DATADIR/geth exists." +fi + +# Start op-geth. +exec geth \ + --datadir="$BEDROCK_DATADIR" \ + --verbosity=3 \ + --http \ + --http.corsdomain="*" \ + --http.vhosts="*" \ + --http.addr=0.0.0.0 \ + --http.port=8545 \ + --http.api=net,eth,engine \ + --ws \ + --ws.addr=0.0.0.0 \ + --ws.port=8545 \ + --ws.origins="*" \ + --ws.api=eth,engine \ + --syncmode=full \ + --maxpeers=10 \ + --networkid=$CHAIN_ID \ + --miner.gaslimit=150000000 \ + --triesInMemory=32 \ + --txpool.globalslots=10000 \ + --txpool.globalqueue=5000 \ + --cache 6000 \ + --cache.preimages \ + --allow-insecure-unlock \ + --authrpc.addr="0.0.0.0" \ + --authrpc.port="8551" \ + --authrpc.vhosts="*" \ + --authrpc.jwtsecret=./jwt.txt \ + --gcmode=archive \ + --metrics \ + --metrics.port 6060 \ + --metrics.addr 0.0.0.0 \ + --syncmode=full \ + --bootnodes=$P2P_BOOTNODES \ + --rollup.sequencerhttp=$L2_RPC diff --git a/op-bnb/scripts/op-node-start.sh b/op-bnb/scripts/op-node-start.sh new file mode 100644 index 00000000..292ea506 --- /dev/null +++ b/op-bnb/scripts/op-node-start.sh @@ -0,0 +1,43 @@ +#!/bin/sh +set -eou + +apk add wget +if [ "$NETWORK_NAME" == "testnet" ]; then + export NETWORK=opBNBTestnet + export P2P_BOOTNODES="enr:-J24QGQBeMsXOaCCaLWtNFSfb2Gv50DjGOKToH2HUTAIn9yXImowlRoMDNuPNhSBZNQGCCE8eAl5O3dsONuuQp5Qix2GAYjB7KHSgmlkgnY0gmlwhDREiqaHb3BzdGFja4PrKwCJc2VjcDI1NmsxoQL4I9wpEVDcUb8bLWu6V8iPoN5w8E8q-GrS5WUCygYUQ4N0Y3CCIyuDdWRwgiMr,enr:-J24QJKXHEkIhy0tmIk2EscMZ2aRrivNsZf_YhgIU51g4ZKHWY0BxW6VedRJ1jxmneW9v7JjldPOPpLkaNSo6cXGFxqGAYpK96oCgmlkgnY0gmlwhANzx96Hb3BzdGFja4PrKwCJc2VjcDI1NmsxoQMOCzUFffz04eyDrmkbaSCrMEvLvn5O4RZaZ5k1GV4wa4N0Y3CCIyuDdWRwgiMr" +fi + +if [ "$NETWORK_NAME" == "mainnet" ]; then + export NETWORK=opBNBMainnet + export P2P_BOOTNODES="enr:-J24QPSZMaGw3NhO6Ll25cawknKcOFLPjUnpy72HCkwqaHBKaaR9ylr-ejx20INZ69BLLj334aEqjNHKJeWhiAdVcn-GAYv28FmZgmlkgnY0gmlwhDTDWQOHb3BzdGFja4PMAQCJc2VjcDI1NmsxoQJ-_5GZKjs7jaB4TILdgC8EwnwyL3Qip89wmjnyjvDDwoN0Y3CCIyuDdWRwgiMs,enr:-J24QA9sgVxbZ0KoJ7-1gx_szfc7Oexzz7xL2iHS7VMHGj2QQaLc_IQZmFthywENgJWXbApj7tw7BiouKDOZD4noWEWGAYppffmvgmlkgnY0gmlwhDbjSM6Hb3BzdGFja4PMAQCJc2VjcDI1NmsxoQKetGQX7sXd4u8hZr6uayTZgHRDvGm36YaryqZkgnidS4N0Y3CCIyuDdWRwgiMs" +fi + +# Start op-node. +exec op-node \ + --l1.trustrpc \ + --sequencer.l1-confs=15 \ + --verifier.l1-confs=15 \ + --l1.http-poll-interval 3s \ + --l1.epoch-poll-interval 45s \ + --l1.rpc-max-batch-size 20 \ + --network=$NETWORK \ + --rpc.addr=0.0.0.0 \ + --rpc.port=8546 \ + --p2p.sync.req-resp \ + --p2p.listen.ip=0.0.0.0 \ + --p2p.listen.tcp=9003 \ + --p2p.listen.udp=9003 \ + --snapshotlog.file=./snapshot.log \ + --p2p.priv.raw=$P2P_PRIV_KEY \ + --p2p.bootnodes=$P2P_BOOTNODES \ + --metrics.enabled \ + --metrics.addr=0.0.0.0 \ + --metrics.port=7300 \ + --pprof.enabled \ + --rpc.enable-admin \ + --l1=$OP_NODE__RPC_ENDPOINT \ + --l2=http://op-geth:8551 \ + --l2.jwt-secret=./jwt.txt \ + --l2.engine-sync=true \ + --l2.skip-sync-start-check=true \ + --log.level=debug diff --git a/reference-rpc-endpoint.json b/reference-rpc-endpoint.json index 199d72df..ca2055ae 100644 --- a/reference-rpc-endpoint.json +++ b/reference-rpc-endpoint.json @@ -14,7 +14,9 @@ "https://ethereum-rpc.publicnode.com" ], "default": [ - "erigon-fullnode" + "erigon-fullnode", + "nethermind-mainnet", + "geth-mainnet" ], "archive": [ "reth-mainnet" @@ -126,6 +128,9 @@ ], "default": [ "reth-sepolia" + ], + "erchive": [ + "reth-sepolia" ] }, "holesky": { @@ -153,10 +158,10 @@ "https://rpc.mantle.xyz" ], "default": [ - "mantle-fullnode" + "op-mantle-fullnode" ], "archive": [ - "mantle" + "op-mantle" ] }, "polygon": { @@ -198,5 +203,23 @@ "bsc", "bsc-erigon-fullnode" ] - } + }, + "opbnb": { + "id": 204, + "urls": [ + "https://opbnb-mainnet-rpc.bnbchain.org" + ], + "default": [ + "op-bnb.yml" + ] + }, + "polygon-amoy": { + "id": 80002, + "urls": [ + "https://rpc-amoy.polygon.technology/" + ], + "default": [ + "polygon-amoy-erigon-fullnode" + ] + } }