Monorepo for the Pearl network 🐚
Find a file
Or Aharonee 18779ea6bc
fix: complete testnet2 support and SPV seed discovery on test networks (#251)
rpcclient.New rejected "testnet2" (its chain-name switch predates the
network), breaking oystercli --testnet2 before dialing. Add the missing
case, plus --testnet2 in the tools that never got it (sweepaccount,
addblock, findcheckpoint, dbtool, rpctest harness), and document the
option in both sample configs.
Also stop marking the testnet/testnet2 DNS seeds as service-bit
filtering: SPV clients queried x49.<seed> subdomains the deployed
seeders do not serve, so fresh SPV wallets discovered zero peers.
pearld was unaffected (SFNodeNetwork uses the unfiltered path), and
neutrino still checks advertised services after connecting.
2026-07-16 17:54:44 +03:00
.github build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
.vscode Initial Pearl implementation 2026-04-26 20:55:07 +03:00
apps refactor(rpc): overhaul node and wallet RPC servers, clients, and TLS (#220) 2026-06-24 17:01:14 +03:00
coredns-dnsseed build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
dnsseeder build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
docs Moe fork changes (#173) 2026-06-11 15:12:04 +03:00
miner feat(miner): Added support for hadamard quantized models (#207) 2026-06-22 16:10:57 +00:00
node fix: complete testnet2 support and SPV seed discovery on test networks (#251) 2026-07-16 17:54:44 +03:00
pearl-blake3 Moe fork changes (#173) 2026-06-11 15:12:04 +03:00
plonky2 Moe fork changes (#173) 2026-06-11 15:12:04 +03:00
proxy build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
py-pearl-mining Moe fork changes (#173) 2026-06-11 15:12:04 +03:00
spv build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
tools build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
version build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
wallet fix: complete testnet2 support and SPV seed discovery on test networks (#251) 2026-07-16 17:54:44 +03:00
xmss docs(xmss): add README for XMSS post-quantum signature module (#137) 2026-06-15 08:01:44 +00:00
zk-pow feat(zk-pow): Go FFI for PlainProof share verification and block proving (#165) 2026-07-09 21:33:14 +00:00
.clang-format Initial Pearl implementation 2026-04-26 20:55:07 +03:00
.coderabbit.yaml Initial Pearl implementation 2026-04-26 20:55:07 +03:00
.dockerignore Initial Pearl implementation 2026-04-26 20:55:07 +03:00
.env.example Initial Pearl implementation 2026-04-26 20:55:07 +03:00
.gitignore Initial Pearl implementation 2026-04-26 20:55:07 +03:00
.gitmodules Initial Pearl implementation 2026-04-26 20:55:07 +03:00
CODE_OF_CONDUCT.md Initial Pearl implementation 2026-04-26 20:55:07 +03:00
CONTRIBUTING.md Initial Pearl implementation 2026-04-26 20:55:07 +03:00
go.mod build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
go.sum build(deps): update Go dependencies, toolchain, and base images for v1.1.6 (#246) 2026-07-15 13:39:31 +00:00
install.ps1 feat(wallet): add oystercli, an interactive terminal client for oyster (#244) 2026-07-15 14:23:29 +03:00
install.sh feat(wallet): add oystercli, an interactive terminal client for oyster (#244) 2026-07-15 14:23:29 +03:00
LICENSE Initial Pearl implementation 2026-04-26 20:55:07 +03:00
pyproject.toml Moe fork changes (#173) 2026-06-11 15:12:04 +03:00
README.md feat(wallet): add oystercli, an interactive terminal client for oyster (#244) 2026-07-15 14:23:29 +03:00
ruff.toml Initial Pearl implementation 2026-04-26 20:55:07 +03:00
SECURITY.md Initial Pearl implementation 2026-04-26 20:55:07 +03:00
Taskfile.yml feat(wallet): add oystercli, an interactive terminal client for oyster (#244) 2026-07-15 14:23:29 +03:00
uv.lock Moe fork changes (#173) 2026-06-11 15:12:04 +03:00

Pearl

Blockchain / Build and Test Integration Tests CI Miner CI Miner GPU CI Desktop Wallet CI/CD Plonky2 Tests Rust CI ISC License

Pearl is an L1 blockchain based on the Proof-of-Useful-Work protocol, where mining is done as a by-product of arbitrary matrix multiplication, as proposed in this paper.

This monorepo contains the full node, wallet, SPV light client, ZK proving system, vLLM miner, and supporting tools.

Repository Layout

Directory Description
node/ pearld — reference implementation of the Pearl Protocol (full node)
wallet/ Oyster — HD wallet daemon with JSON-RPC and gRPC interfaces, plus oystercli, an interactive terminal client for it
spv/ Pearl light client — privacy-preserving SPV client using compact block filters
dnsseeder/ DNS seeder for the Pearl network
coredns-dnsseed/ CoreDNS plugin — production DNS seeder
proxy/ Caddy reverse-proxy sidecar for RPC TLS termination and rate limiting
xmss/ XMSS post-quantum signature scheme (C + Go FFI)
zk-pow/ ZK proof-of-work circuit and verifier (Rust, Plonky2/STARKy)
pearl-blake3/ Blake3 hashing utilities (Rust)
plonky2/ Plonky2 SNARK proving system (Rust, vendored)
miner/ vLLM miner — GPU mining infrastructure (Python/CUDA, uv workspace)
py-pearl-mining/ Python bindings for Pearl mining (Rust/PyO3)
apps/ Frontend applications (website, desktop wallet — pnpm/Turborepo)
tools/ Go development tool dependencies

Install (prebuilt binaries)

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/pearl-research-labs/pearl/master/install.sh | sh

Windows:

irm https://raw.githubusercontent.com/pearl-research-labs/pearl/master/install.ps1 | iex

Installs pearld, prlctl, oyster, and oystercli with localhost-only mainnet defaults and shared RPC credentials (oyster uses SPV by default). Binaries go to ${XDG_BIN_HOME:-$HOME/.local/bin} on macOS/Linux, or %LOCALAPPDATA%\Pearl\bin on Windows.

Tool Linux macOS Windows
pearld ~/.pearld/pearld.conf ~/Library/Application Support/Pearld/pearld.conf %LOCALAPPDATA%\Pearld\pearld.conf
oyster ~/.oyster/oyster.conf ~/Library/Application Support/Oyster/oyster.conf %LOCALAPPDATA%\Oyster\oyster.conf
prlctl ~/.prlctl/prlctl.conf ~/Library/Application Support/Prlctl/prlctl.conf %LOCALAPPDATA%\Prlctl\prlctl.conf

Pin a version or install directory with --version / --bin-dir (or -Version / -BinDir on Windows). See node/docs/installation.md for upgrade, removal, and other details. To build from source, see Building below.

Prerequisites

  • Go 1.26 or newer
  • Rust toolchain (for ZK and hashing crates)
  • C compiler (for XMSS library)
  • Python 3.12 and uv (for vLLM miner packages)
  • Task runner
  • CUDA toolkit (for vLLM miner)

Building

task build              # build everything (blockchain + vLLM miner)
task build:blockchain   # pearld, prlctl, oyster, oystercli → bin/
task build:miner        # install vLLM miner Python packages
task build:pearld       # pearld only

Running a Node and vLLM Miner

The setup flow: build > create wallet > start node > start vLLM miner.

1. Create a wallet and get a mining address

The interactive way — oystercli configures oyster automatically and walks you through wallet creation, starting the daemon, and generating an address (Receive menu). With the release installer it is already on your PATH (oystercli); from a source build:

cd bin && ./oystercli

Or manually:

./bin/oyster -u rpcuser -P rpcpass --create

Follow the prompts to set a passphrase and record your seed. Then start the wallet and generate a Taproot mining address:

./bin/oyster -u rpcuser -P rpcpass &
./bin/prlctl -u rpcuser -P rpcpass -s https://localhost:44207 getnewaddress

2. Start the node

./bin/pearld \
  --rpcuser=rpcuser \
  --rpcpass=rpcpass \
  --rpclisten=0.0.0.0:44107 \
  --miningaddr=<your-taproot-address> \
  --txindex

Key flags: --testnet / --simnet for non-mainnet, --notls to disable TLS, --debuglevel=debug for verbose logs. See node/sample-pearld.conf for all options.

Network RPC P2P Wallet Server
Mainnet 44107 44108 44207
Testnet 44109 44110 44209
Testnet2 44111 44112 44211
Simnet 18556 18555 18554
Regtest 18334 18444 18332

3. Start the vLLM miner

The vLLM miner has two components: pearl-gateway (bridge to the node) and vllm-miner (GPU mining via vLLM).

export PEARLD_RPC_URL="http://localhost:44107"
export PEARLD_RPC_USER="rpcuser"
export PEARLD_RPC_PASSWORD="rpcpass"
export PEARLD_MINING_ADDRESS="<your-taproot-address>"
pearl-gateway start

The gateway connects to pearld over JSON-RPC and exposes a mining interface on /tmp/pearlgw.sock (UDS) or port 8337 (TCP, set MINER_RPC_TRANSPORT=tcp).

To run the full stack with Docker:

docker buildx build -t vllm_miner . -f miner/vllm-miner/Dockerfile

docker run --rm -it --gpus all --network host \
  -e PEARLD_RPC_URL=http://localhost:44107 \
  -e PEARLD_RPC_USER=rpcuser \
  -e PEARLD_RPC_PASSWORD=rpcpass \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  --shm-size 8g \
  vllm_miner:latest \
  pearl-ai/Llama-3.3-70B-Instruct-pearl \
  --host 0.0.0.0 --port 8000

Testing

task test               # run all tests (Go + Python)
task test:go            # Go tests with race detector
task test:python        # full Python test suite
task test:python:basic  # Python tests (excludes integration/perf/slow)

Formatting and Linting

task fmt            # format all (Go + Rust + Python)
task lint:python    # lint Python code with ruff
task tidy           # tidy Go dependencies

Scoped variants are available: task fmt:go, task fmt:rust, task fmt:python, task lint:go, task lint:rust, task lint:python.

Contributing

See CONTRIBUTING.md.

Security

See SECURITY.md.

License

Pearl is licensed under the copyfree ISC License. See LICENSE for details.

Acknowledgments

Pearl's blockchain infrastructure was originally forked from the following open-source projects: