Become a Keeper

Earn PLS by fulfilling entropy requests

1
Monitor
Check pending
2
Find
Ready requests
3
Fulfill
Send transaction
4
Earn
Get bounty
👁
Watch
?
Find
TX
Fulfill
$
Earn

No registration needed - anyone can be a keeper

Max Bounty
3K
PLS per request
Your Share
30%
of each request
Batch Size
75
max per tx
Cooldown
1
block

Revenue Split (per 10,000 PLS request)

3,000
Your Bounty (30%)
6,000
Protocol (60%)
1,000
Treasury (10%)

Bounty Decay (Speed Matters!)

Faster fulfillment = bigger bounty. Be first to earn more.

Delay 1-2 blocks (fastest)3,000 PLS (100%)
Delay 3 blocks~2,475 PLS (82%)
Delay 4 blocks~1,950 PLS (65%)
Delay 5 blocks~1,425 PLS (47%)
Delay 7+ blocks (slow)900 PLS (30% min)
What You Need
Wallet
With PLS for gas
RPC Access
PulseChain node
Bot Script
Node.js or Python
Not Required
Registration
Fully permissionless
Staking
No collateral needed
Approval
Start immediately
Keeper Bot

Quick Start

Simple bot to start earning bounties

1Contracts

VE
VEO
Fulfill requests
VE
VEOKeeper
Find ready requests

2Basic Bot

keeper.js
const { ethers } = require('ethers');

const provider = new ethers.JsonRpcProvider('https://rpc.pulsechain.com');
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
const veo = new ethers.Contract(VEO_ADDRESS, VEO_ABI, wallet);
const veoKeeper = new ethers.Contract(VEOKEEPER_ADDRESS, KEEPER_ABI, provider);

async function runKeeper() {
    while (true) {
        // Check cooldown (1 block between fulfills)
        const currentBlock = await provider.getBlockNumber();
        const lastFulfill = await veo.lastFulfillBlock(wallet.address);
        if (currentBlock <= lastFulfill) {
            await sleep(3000);
            continue;
        }

        // Get fulfillable requests
        const [requestIds] = await veoKeeper.getGlobalFulfillable();
        if (requestIds.length === 0) {
            await sleep(3000);
            continue;
        }

        // Fulfill batch (max 75 per tx)
        const batch = requestIds.slice(0, 75);
        const tx = await veo.fulfillEntropyBulk(batch, {
            gasLimit: 300000 + (batch.length * 150000)
        });

        const receipt = await tx.wait();
        console.log(`Fulfilled ${batch.length} requests! Tx: ${receipt.hash}`);
    }
}

runKeeper();

3Key Functions

VEOKeeper (Read)
getGlobalFulfillable() → (bytes32[], ...)getPendingStatus() → (ids, ready[], ...)canKeeperFulfill(keeper, id) → (bool, ...)
VEO (Write)
fulfillEntropy(requestId)fulfillEntropyBulk(requestIds[]) → bountyisReadyToFulfill(id) → bool

Rules

Competition
First come first served
Cooldown
1 block between fulfills
Batch Limit
Max 75 per transaction
Gas
You pay, bounty covers it