|
| 1 | +# RRC-7755 Go Filler Service |
| 2 | + |
| 3 | +> **DISCLAIMER:** This is a preliminary draft version of a Go implementation for the RRC-7755 filler. It contains experimental and hacky code that is not production-ready. Please do not use the code for any production purposes. This implementation is meant for demonstration and testing purposes only. |
| 4 | +> |
| 5 | +> **⚠️ IMPORTANT:** Users should understand that: |
| 6 | +> - This code is still in early development |
| 7 | +> - It may contain bugs or failures. |
| 8 | +> - The implementation makes numerous assumptions that might not hold in other environments |
| 9 | +> - This code is highly imperfect and is generated in a hackathon-like development environment. It does not represent Base's engineering standards or best practices |
| 10 | +> - It is provided solely as a reference implementation for experimental purposes |
| 11 | +> - No warranty or official support is provided for this code |
| 12 | +> |
| 13 | +> Please use this implementation wisely and only for exploratory purposes. Do not deploy it in production environments. |
| 14 | +
|
| 15 | +The Go Filler service is part of the RRC-7755 proof-of-concept implementation. It listens for message events from Outbox contracts on source chains and fulfills those messages on destination chains. |
| 16 | + |
| 17 | +## Features |
| 18 | + |
| 19 | +### What is included in the go-filler |
| 20 | + |
| 21 | +1. Outbox package: |
| 22 | +- Listen to requests from outbox |
| 23 | +- Validate request content |
| 24 | +- Send fulfillment to inbox |
| 25 | + |
| 26 | +2. Prover package: |
| 27 | +- Generate proof of fulfillment on arbitrum as a destination chain on devnet (disclaimer: unit tested but not E2E tested onchain) |
| 28 | + |
| 29 | +### What is not included yet |
| 30 | + |
| 31 | +- Usage of service frameworks |
| 32 | +- Storage for outbox requests |
| 33 | +- Submission of proof to the outbox to claim rewards |
| 34 | +- Mainnet storage proof |
| 35 | + |
| 36 | + |
| 37 | +## Prerequisites |
| 38 | + |
| 39 | +- Go 1.20 or later |
| 40 | +- Access to Ethereum RPC endpoints |
| 41 | + |
| 42 | +## Environment Setup |
| 43 | + |
| 44 | +Create a `.env` file in the project root directory with the following variables: |
| 45 | + |
| 46 | +``` |
| 47 | +# RPC endpoints for different chains (examples) |
| 48 | +SEPOLIA_RPC=wss://ethereum-sepolia-rpc.publicnode.com |
| 49 | +BASE_SEPOLIA_RPC=wss://base-sepolia-rpc.publicnode.com |
| 50 | +ARBITRUM_SEPOLIA_RPC=wss://sepolia-rollup.arbitrum.io/feed |
| 51 | +
|
| 52 | +# Wallet configuration |
| 53 | +from-address: .env//YOUR_WALLET_ADDR |
| 54 | +private-key: .env//YOUR_WALLET_PRIVATE_KEY |
| 55 | +recipient-address: .env//RECIPIENT_ADDR |
| 56 | +``` |
| 57 | + |
| 58 | +## Configuration |
| 59 | + |
| 60 | +The service uses YAML configuration files located in `services/go-filler/cmd/config/`. The main configuration file is `local.yaml`, which includes: |
| 61 | + |
| 62 | +- Chain configurations (chain IDs, RPC URLs, contract addresses) |
| 63 | +- Wallet configuration |
| 64 | +- Outbox and Inbox address mappings |
| 65 | + |
| 66 | +## Building and Running |
| 67 | + |
| 68 | +### Using Make |
| 69 | + |
| 70 | +The project includes a Makefile with several useful commands: |
| 71 | + |
| 72 | +```bash |
| 73 | +# Run the service |
| 74 | +make run |
| 75 | +``` |
| 76 | + |
| 77 | +### Manual Running |
| 78 | + |
| 79 | +If you prefer to run the service manually: |
| 80 | + |
| 81 | +```bash |
| 82 | +cd services/go-filler |
| 83 | +go build -o bin/filler cmd/main.go |
| 84 | +./bin/filler |
| 85 | +``` |
| 86 | + |
| 87 | +## Troubleshooting |
| 88 | + |
| 89 | +### Common Issues |
| 90 | + |
| 91 | +- **Connection issues**: Check your RPC endpoint URLs and ensure they're accessible from your environment. |
| 92 | +- **Insufficient funds**: Ensure your wallet has enough funds on the destination chains to cover transaction costs. |
| 93 | + |
| 94 | + |
0 commit comments