Your guide
to Perla mining.
Run a Pearl-compatible GPU worker, bind its work to your EVM wallet, and follow accepted contributions in Perla. Settlement is designed for Robinhood Chain.
The guide separates participant installation from operator deployment. The downloadable adapter contains the bridge, build scripts, native verifier, and upstream attribution.
Download worker packageDownload package checksumsUseful computation.
Verifiable shares.
- Authorize your wallet.A short-lived, single-use signed message opens a browser account. It authorizes worker management, not transactions.
- Register a worker.The dashboard issues a dedicated, revocable worker token. The server stores its hash; the token is shown once.
- Receive a work challenge.Perla creates a random job bound to the worker, wallet, UTC contribution epoch, site, and Robinhood Testnet domain.
- Run AI inference.The pinned Pearl vLLM plugin replaces supported dense linear operations with its NoisyGEMM CUDA kernels. Mining shares are produced during those operations.
- Verify and account.The local bridge submits the native PlainProof. An isolated native verifier checks the work. Only an accepted proof creates a durable contribution record.
- Settle a funded epoch.The operator publishes a deterministic allocation root and funds the reward contract. Eligible wallets can then claim with a Merkle proof.
Perla reuses Pearl’s miner/proof interface and native verifier. It supplies a separate coordinator and Robinhood settlement layer. Its work envelopes are not Pearl blocks, and no new blockchain is launched.
Pinned upstream source and licensesWhat the worker
is designed to do.
The initial path runs supported dense matrix operations during AI inference through the pinned Pearl vLLM integration. The native proof and the model response are separate outputs: one verifies admitted mining work, while the other is the model’s answer.
| Workload | What it produces | Current evidence |
|---|---|---|
| Dense matrix computationPearl NoisyGEMM · rank 128 · certificate v3 | Matrix work and a native mining proof | Integration implementedGPU execution remains a deployment-host check. |
| Reference text inferencepearl-ai/Llama-3.3-70B-Instruct-pearl · pinned vLLM plugin | An AI response, with shares possible during supported operations | GPU validation pendingThe reference command uses two GPUs. Actual VRAM needs depend on configuration. |
| Protocol test fixtureCPU-generated native PlainProof | Reproducible proof-to-ledger validation | Software testedThis exercises mathematics and accounting; it is not an AI service or GPU benchmark. |
There is no published Perla GPU throughput, energy-saving, accuracy comparison or earnings benchmark for this path. CPU-generated test proofs validate the protocol and ledger; they do not demonstrate a deployed GPU model.
An accepted share does not attest the physical GPU, prove that a paying client requested the work, or establish the semantic correctness of a full model response. A public customer-job marketplace is outside the current release.
Read the software validation recordBuilt for
Robinhood Chain.
The validation release uses Robinhood Chain Testnet for reward contracts. GPU computation and native proof verification run offchain. Participants do not need to run a blockchain node.
| Network | Robinhood Chain Testnet |
|---|---|
| Chain ID | 46630 |
| Gas currency | Test ETH |
| Public RPC | https://rpc.testnet.chain.robinhood.com |
| Explorer | Open testnet explorer |
Use a test wallet and test tokens for validation. Production token distribution requires a separate deployment; the operator CLI refuses other chains.
Official network and wallet instructionsStart with
supported hardware.
| Component | Validation profile |
|---|---|
| Operating system | Linux x86-64. Ubuntu 24.04 is the documented host. |
| GPU kernels | NVIDIA sm90: H100 or H200, matching the pinned upstream profile. |
| Drivers | NVIDIA host drivers compatible with the upstream CUDA 13.0 container. |
| Container runtime | Docker with Buildx and NVIDIA Container Toolkit; GPU passthrough must work. |
| Host tools | Git, Bash, Python 3, and nvidia-smi. |
| GPU memory and disk | Depend on the model and tensor-parallel configuration. The reference checkpoint is 70B and requires substantial model-cache disk space. |
| Coordinator | A reachable Perla origin, active verifier, and a registered worker token. |
Kernel architecture support does not guarantee that a model fits your GPU memory. The command below uses two visible GPUs for the reference checkpoint. Other GPU families, CPU mining, Windows-native mining, and MoE models are outside this validation profile.
nvidia-smi
docker buildx version
docker infoA browser tab cannot run these native kernels. Keep your seed phrase and private keys out of the miner configuration.
Bring a worker
online.
1. Create your worker configuration
Open the mining dashboard, choose Sign in with wallet, and sign the displayed authorization message. Choose Add worker, enter a name, then download worker.env. Also download the worker package above. The token is scoped to that worker and cannot spend wallet funds.
2. Extract and build
Put the downloaded archive and configuration in your working folder. Extract the package, move worker.env into its folder, and restrict its permissions. Inspect the build script before running it.
tar -xzf perla-worker.tar.gz
mv worker.env perla-worker/
cd perla-worker
chmod 600 worker.env
less setup-worker.sh
bash setup-worker.shThe script checks the GPU architecture, fetches the exact upstream commit, preserves its licenses, initializes submodules, builds Pearl’s image, and adds the Perla bridge. It does not install a Pearl node or create a Pearl wallet. The build downloads large CUDA, PyTorch, vLLM, and model-related dependencies.
Download the checksum list alongside the archive and compare it before building:
sha256sum --ignore-missing -c SHA256SUMS3. Start the worker
This reference command uses two GPUs and keeps the inference endpoint bound to your host’s loopback interface. Set tensor parallelism and memory limits for your actual hardware before starting.
docker run -d --name perla-worker --restart unless-stopped \
--gpus all --env-file worker.env \
-p 127.0.0.1:8000:8000 --shm-size 8g \
-v "$PWD/hf-cache:/root/.cache/huggingface" \
perla-worker:0.1 pearl-ai/Llama-3.3-70B-Instruct-pearl \
--host 0.0.0.0 --port 8000 --tensor-parallel-size 2 \
--max-model-len 2048 --gpu-memory-utilization 0.85 --enforce-eager4. Check connectivity
docker logs --tail 100 -f perla-worker
curl --fail http://127.0.0.1:8000/v1/modelsThe bridge logs its local listener and accepted-share receipts. A worker appears online after a successful work request. A running vLLM process alone does not mean a share was accepted. If the coordinator is private, an external worker cannot reach it without an authorized deployment/access arrangement.
Run an
AI request.
Mining happens during supported matrix operations. An idle model server does not manufacture contribution points. Send an actual inference request to the worker:
curl --fail http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"pearl-ai/Llama-3.3-70B-Instruct-pearl","messages":[{"role":"user","content":"Explain matrix multiplication in one paragraph."}],"max_tokens":128}'Read the model response, inspect the worker logs, then refresh the Contributions tab. A response and a share are separate outcomes; not every request necessarily yields a share. The initial integration does not include a public inference marketplace, billing, or automatic customer traffic.
A worker you
can manage.
docker logs --tail 100 perla-worker
docker stats --no-stream perla-worker
docker stop perla-worker
docker start perla-workerStopping the container stops the miner and bridge. Accepted contribution records remain on the server. To retire an installation, revoke its token in the dashboard and stop the container. Revocation rejects new jobs and re-checks in-flight submissions before crediting work.
Update and uninstall
This release pins upstream code rather than automatically pulling a moving branch. For an approved update, download the new package, read its release notes, stop the container, build the new revision, and recreate the container with the existing configuration. Do not delete the model cache unless you intend to download it again.
docker stop perla-worker
docker rm perla-worker
# Revoke the worker token in your dashboard.
# Remove worker.env and the extracted package when no longer needed.Worker configuration is independent from wallet keys. A lost token cannot be displayed again; revoke it and create a replacement.
Proof first.
Accounting second.
The verifier uses the pinned pearl_mining native implementation of certificate-version-3 PlainProof validation, including its matrix/Merkle/noise and proof-of-work checks. Initial admission is limited to dense GEMM with rank 128 and bounded dimensions and payload sizes.
Jobs expire after five minutes. Their native challenge binds the site, chain, epoch, worker, recipient wallet, and random job ID. A proof cannot be moved to another job or wallet. One job can be credited once; a database uniqueness constraint prevents concurrent duplicate credits. Worker-supplied speed, uptime, and reward amounts are never used as proof.
A dedicated operator runs the native verifier. Proof parsing runs in a CPU/time/memory-bounded subprocess and fails closed. Perla does not currently verify Pearl ZK certificates inside an EVM contract. Reward-root publication therefore trusts the operator’s offchain accounting.
A valid mathematical share does not attest to a particular physical GPU or prove that a paying customer requested an AI response. The CPU fixture utility exists only to test protocol correctness; it is not an AI workload, hardware benchmark, or profitability demonstration.
One billion tokens.
Two separate networks.
The testnet deployment source creates 1,000,000,000 tPERLA with 18 decimals and no additional mint function. The planned mainnet supply is also 1,000,000,000 PERLA. These are separate contracts and balances; equal supply does not create a bridge or a conversion right.
Fixed supply in the deployment source. A new deployment is required to use it.
Separate Pons launch. Its mining reserve still needs to be allocated and funded.
A declining budget. A proportional allocation.
The reference schedule adapts Pearl’s cumulative curve to UTC days: C(d) = S × d / (d + 1460). Each daily budget is the difference between two rounded cumulative amounts. At day 1,460, the cumulative scheduled budget is 50% of the testnet pool.
This calculates a budget; the current distributor does not enforce the schedule. The operator still publishes and funds each epoch. Days with no accepted work create no allocation and have no automatic rollover.
1% of a 684,462.696 tPERLA daily budget. Cumulative scheduled budget: 684,462.696 tPERLA.
Illustration only, displayed to three decimal places. Actual claims use integer base units and deterministic rounding. Testnet balances do not establish a mainnet allocation or a 1:1 conversion.
Read the emission model and funding limitsPearl issues native block rewards. Perla instead distributes existing ERC-20 tokens from funded epochs on Robinhood. Mainnet mining requires a funded reserve from the planned Pons launch or later treasury acquisition. Its size and custody have not been set. Launching a 1B token does not itself make those tokens available for mining.
Clear contributions.
Explicit allocations.
For the validation profile, each accepted share adds one contribution point. The share target is fixed by the coordinator. An epoch is a UTC day; jobs that cross its boundary retain their original epoch until they expire.
The operator closes an epoch after its final jobs expire, snapshots accepted points, and prepares a deterministic Merkle tree. Integer rounding uses largest remainders with address-based tie-breaking, so allocations sum exactly to the budget.
The immutable reward root must be funded with actual ERC-20 test tokens. The dashboard only exposes allocations after the coordinator reads the expected token, root, budget, and chain from the contract. Claims bind the chain, distributor contract, epoch, index, recipient, and amount. Anyone may relay a valid claim, but the tokens always go to its committed recipient.
Publishing reward roots is an operator responsibility. The contract cannot independently determine whether all offchain contributions were included. Claiming requires test ETH for gas and an active funded epoch.
What you operate.
What you pay for.
| Action | Responsibility |
|---|---|
| Wallet account signature | Authorizes worker management. It is not a transaction and does not spend gas. |
| GPU, drivers and model cache | Run on your own hardware or a host you rent. Your chosen provider sets its capacity, storage and bandwidth charges. |
| AI inference traffic | Supply requests to the local model endpoint. An idle worker is not a source of accepted contributions. |
| Coordinator and native verifier | Operated separately by the deployment operator. A participant registration does not provision these services. |
| Contract claim | A testnet transaction needs test ETH. A relayer can submit a valid claim, but cannot redirect the committed recipient’s allocation. |
Perla does not offer a paid managed-GPU plan in this release. There is no published earnings-per-hour estimate or guarantee that contribution points offset hardware costs.
Keep credentials scoped.
Understand the operator.
The browser uses an HttpOnly account session to manage workers. A worker receives its own bearer token; the database stores that token’s hash. Account reads expose worker records and accepted contribution history, not the original token.
The coordinator receives native proof payloads and forwards them to the verifier. Persistent contribution records include the job, worker, recipient, epoch, time, points and proof hash. Reward manifests commit wallet addresses and allocation amounts.
AI prompts, outputs, checkpoints and model caches are handled on the worker host. Native proofs can disclose parts of the mathematical workload. This release does not provide confidential inference or a zero-knowledge privacy guarantee; a host operator can access the workloads it handles.
The reward contract enforces its funded root. Participants still trust the operator to run the native verifier correctly, retain accepted records, and include the complete eligible ledger in the allocation. An external audit has not been completed.
Never put recovery words or private wallet keys in worker.env. Revoke an exposed worker token and create a replacement. The operator’s verifier and epoch-management secrets belong only in server configuration.
Deploy the
verification service.
The website stores accounts, jobs, contributions, and reward manifests in its persistent SQLite database. Run the native verifier on a separate Linux host behind HTTPS. It requires CPU resources, not a GPU. The GPU worker is a separate process.
Download operator packageThe operator package includes the verifier, contracts, and CLI. Use Node.js 22.13 or newer and a Linux host with Docker. Extract it and install the pinned CLI dependencies:
tar -xzf perla-operator.tar.gz
cd perla-operator
npm install
cd services/pearl-adapterCreate verifier.env locally with a random verifier-only secret:
python3 -c 'import secrets; print("PERLA_VERIFIER_TOKEN=" + secrets.token_hex(32))' > verifier.env
chmod 600 verifier.envdocker build -f Dockerfile.verifier -t perla-verifier:0.1 .
# Create a random PERLA_VERIFIER_TOKEN in verifier.env and chmod 600 it.
docker run -d --name perla-verifier --restart unless-stopped \
--memory 5g --cpus 4 --env-file verifier.env \
-p 127.0.0.1:8766:8766 perla-verifier:0.1Terminate TLS at a reverse proxy and forward only to the loopback verifier. Keep its bearer token private. Configure the website with PERLA_VERIFIER_URL, matching PERLA_VERIFIER_TOKEN, and a separate PERLA_OPERATOR_TOKEN. Set PERLA_MINING_ENABLED=true only after the health check and real GPU inference-to-share flow pass.
Return to the package root with cd ../.. for the reward CLI. Configure PERLA_ENDPOINT and the same PERLA_OPERATOR_TOKEN as the website. Set PERLA_REWARD_TOKEN after deploying the test token, then PERLA_DISTRIBUTOR_ADDRESS after deploying the distributor. Keep PERLA_PRIVATE_KEY in your local environment and use a dedicated test wallet.
The source includes contracts/PerlaRewards.sol, a test token, and the scripts/perla-rewards.mjs operator CLI. All CLI chain operations reject networks other than Robinhood Testnet. Keys are read from environment variables and never requested by the website.
node scripts/perla-rewards.mjs compile
# Configure PERLA_RPC_URL, PERLA_PRIVATE_KEY and test-token addresses locally.
node scripts/perla-rewards.mjs emission 1
# Preview only. Then deploy the fixed 1B tPERLA token.
node scripts/perla-rewards.mjs deploy-test-token
node scripts/perla-rewards.mjs deploy
# Configure the returned distributor and token in the website runtime.
node scripts/perla-rewards.mjs prepare EPOCH BUDGET_BASE_UNITS
node scripts/perla-rewards.mjs fund epoch-EPOCH.json
node scripts/perla-rewards.mjs activate EPOCHEPOCH is the integer UTC day: Math.floor(unixSeconds / 86400). Only fully closed epochs can be prepared. BUDGET_BASE_UNITS is an integer amount in the token’s smallest unit. Replace these placeholders before running commands.
Review the generated allocation manifest before funding. The native-verifier container and GPU installation must be validated on their deployment hosts; a successful web build does not validate a CUDA runtime.
Find the
right signal.
| Symptom | Check |
|---|---|
| Mining admission paused | The operator has not enabled work. Registration can still be saved. No GPU plan has been purchased. |
| Private or unavailable coordinator | Confirm the correct reachable deployment origin and its access policy. An owner-private preview is not a public mining endpoint. |
| GPU not supported | Check compute capability. This pinned kernel profile documents sm90, not every NVIDIA model. |
| CUDA or container error | Check host driver compatibility, NVIDIA Container Toolkit, GPU passthrough, and image build logs. |
| Model out of memory | Check checkpoint size, available VRAM, tensor parallelism, context length, and GPU memory utilization. |
| Online but no shares | Send inference requests using a supported checkpoint. Inspect plugin and bridge logs. Uptime alone does not earn points. |
| 401 invalid worker | The token may be missing, copied incorrectly, or revoked. Create a replacement from the signed-in account. |
| 409 expired or duplicate job | The proof arrived too late or that job was already credited. Let the miner fetch a fresh job. |
| 422 proof rejected | Confirm the pinned commit, certificate v3, dense rank-128 profile, and unchanged challenge. No points are added. |
| 503 verifier unavailable | Check verifier health, HTTPS, matching secret, native build, memory and CPU limits. The coordinator does not accept proofs optimistically. |
| No claim allocation | The epoch may not be prepared, funded, or activated. Points are not a claimable token balance. |
The words
used in this guide.
- Worker
- One registered miner installation with its own access token.
- Coordinator
- The service that authorizes workers, issues challenges and records accepted contributions.
- Job
- A five-minute mining challenge for a specific worker and recipient; it is separate from an AI request.
- Share
- A native proof accepted for that job under the current admission rules.
- PlainProof
- The native Pearl proof format checked by the pinned mathematical verifier.
- NoisyGEMM
- The upstream matrix-computation integration used by the supported mining profile.
- Epoch
- One UTC day of contribution accounting. Jobs retain the epoch in which they were issued.
- Contribution point
- One unit of validation accounting awarded per accepted job in this profile.
- Reward root
- A Merkle commitment to the wallets and amounts in a funded epoch allocation.
- Claim
- A contract call that proves inclusion in the funded allocation and pays its committed recipient.
Before your
first installation.
What is Perla?
Perla connects AI-oriented GPU mining with wallet-bound contribution accounting and funded settlement on Robinhood. It adapts Pearl’s miner and native proof interface to an application coordinator.
What is the GPU actually doing?
A supported worker serves an AI model through the pinned Pearl vLLM plugin. NoisyGEMM adds mining work to supported dense matrix operations. When a candidate meets the share target, the worker can submit a proof to Perla.
Does an accepted share prove an AI answer is true?
It verifies the admitted mathematical mining work. It does not establish the truth, safety or quality of a complete AI answer, identify the physical GPU, or prove that a paying customer requested it.
Is mining open now?
Worker management and the protocol are implemented. Public admission is paused by default until a verifier and the supported GPU deployment are validated. The Status page reads the current deployment’s admission setting.
Which hardware can I use?
The current pinned kernel profile targets NVIDIA sm90 H100/H200 on Linux. Model memory requirements are separate from kernel compatibility. Consumer cards, Windows-native mining and additional GPU families are outside this release’s admission profile.
Can I mine in a browser or on my CPU?
The browser manages your account and displays server records. It does not run the CUDA miner. CPU proof fixtures are used for software tests and are not an advertised participant mining path.
Do I need to run a blockchain node?
No. The worker talks to the Perla coordinator through a local bridge. Reward contracts use Robinhood Chain Testnet, while proof checking and contribution accounting run offchain.
Built to verify.
Released in stages.
The initial goal is a reproducible GPU inference request, accepted native proof, persistent contribution, and funded test-token claim. Mainnet rewards require a separate launch and validation decision.
Software evidence and remaining release gates