<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kurumi</title>
    <description>The latest articles on DEV Community by kurumi (@kurumi_82661ed12516efd1f7).</description>
    <link>https://dev.to/kurumi_82661ed12516efd1f7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4048368%2Fa5614e53-8b67-4f82-8845-5accfbee27a4.jpg</url>
      <title>DEV Community: kurumi</title>
      <link>https://dev.to/kurumi_82661ed12516efd1f7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kurumi_82661ed12516efd1f7"/>
    <language>en</language>
    <item>
      <title>How Verdikta Decides Whether a Bounty Gets Paid — A Plain-Language Guide for Newcomers</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Thu, 13 Aug 2026 06:24:43 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/how-verdikta-decides-whether-a-bounty-gets-paid-a-plain-language-guide-for-newcomers-3lli</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/how-verdikta-decides-whether-a-bounty-gets-paid-a-plain-language-guide-for-newcomers-3lli</guid>
      <description>&lt;p&gt;If you have ever browsed a bounty marketplace and wondered what happens between the moment you click "Submit" and the moment you receive (or don't receive) your payout, this article is for you. Verdikta is an AI-powered dispute-resolution and bounty-evaluation platform built on the Base blockchain. Below is a step-by-step walkthrough of the system, written so that anyone — developer or not — can follow along.&lt;br&gt;
The Two Roles: Creator and Hunter&lt;br&gt;
Every Verdikta bounty starts with a creator. The creator does three things:&lt;br&gt;
• Escrows ETH — locks a payout amount into a smart contract so that the money is guaranteed to be there when the bounty closes.&lt;br&gt;
• Writes a rubric — a checklist that tells evaluators exactly what "good work" looks like and how much each aspect matters.&lt;br&gt;
• Sets a pass threshold — a minimum score (for example 80%) that a submission must reach before the escrow is released.&lt;br&gt;
On the other side is the hunter. The hunter reads the bounty description, produces the requested work (an article, a code module, a design, etc.), and submits it through the platform. Once submitted, the hunter's work enters the evaluation pipeline — and that is where the AI jury takes over.&lt;br&gt;
The AI Jury: Multiple Models, One Verdict&lt;br&gt;
Verdikta does not rely on a single opinion. Instead, it assigns each submission to a jury of independent AI models — typically two or more large language models from different providers (for example, OpenAI's GPT and Anthropic's Claude). Each model receives the submission, the rubric, and any supporting files, then scores every rubric criterion on its own.&lt;br&gt;
Why use more than one model? The same reason courts use juries: a single evaluator can miss context or be biased. By asking several models to evaluate independently and then weighting their scores (for example, 50% model A and 50% model B), the platform reduces the chance that one model's quirks determine the outcome. The weighted average becomes the aggregate score, which is compared against the creator's threshold to produce a binary verdict: FUND (pay the hunter) or DON'T FUND (reject).&lt;br&gt;
Understanding the Rubric&lt;br&gt;
The rubric is the heart of every Verdikta bounty. It has two kinds of criteria:&lt;br&gt;
Scored Criteria (Weight &amp;gt; 0)&lt;br&gt;
Each scored criterion carries a weight between 0 and 1, and all weights together sum to 1.0. For example, a bounty might define Clarity (weight 0.30), Technical accuracy (weight 0.40), and Completeness (weight 0.30). Each AI model assigns a score to every criterion. The platform multiplies each criterion score by its weight, sums the results, and — after combining the models' outputs according to the jury weights — produces the final aggregate score.&lt;br&gt;
Must-Pass Gates (Weight = 0)&lt;br&gt;
Some criteria are must-pass gates. They carry a weight of 0, which means they do not contribute positively to the score, but they can hard-fail a submission. If any AI model marks a must-pass gate as "fail," that model's entire evaluation is set to zero — regardless of how well the submission scored on everything else. Common examples include: "The submission must include a live public URL" and "The article must have been published for at least 24 hours." Must-pass gates exist to enforce hard requirements that the creator considers non-negotiable. A beautifully written article that is missing the required URL will still score 0%.&lt;br&gt;
Threshold and Payout&lt;br&gt;
After the AI jury finishes its evaluation, the platform compares the aggregate score to the creator's threshold: if the aggregate score meets or exceeds the threshold, the smart contract releases the escrowed ETH to the hunter's wallet (FUND). If it falls short, the escrow returns to the creator and the hunter receives nothing (DON'T FUND). This entire process is transparent and on-chain. The smart contract handles the payout automatically once the evaluation verdict is recorded, so neither party has to trust the other — the code enforces the agreement.&lt;br&gt;
Why This Matters&lt;br&gt;
Traditional freelance platforms rely on human reviewers, which introduces delays, subjectivity, and disputes. Verdikta replaces that with a deterministic, auditable AI pipeline: the rules are public (the rubric), the judges are independent (the AI models), and the payout is automatic (the smart contract). For hunters, it means fast, fair feedback. For creators, it means you only pay for work that meets your standards.&lt;br&gt;
If you are curious, head to bounties.verdikta.org, browse the open bounties, and try submitting your first entry. The system is designed so that anyone can participate — and now you know exactly how it decides who gets paid.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Bounty Agent for Verdikta on Base L2 published</title>
      <dc:creator>kurumi</dc:creator>
      <pubDate>Sun, 26 Jul 2026 20:16:20 +0000</pubDate>
      <link>https://dev.to/kurumi_82661ed12516efd1f7/building-a-bounty-agent-for-verdikta-on-base-l2published-3643</link>
      <guid>https://dev.to/kurumi_82661ed12516efd1f7/building-a-bounty-agent-for-verdikta-on-base-l2published-3643</guid>
      <description>&lt;p&gt;Building an Autonomous Agent for Verdikta Bounties: A Technical Deep Dive&lt;br&gt;
How I built a Python agent that monitors, evaluates, and interacts with Verdikta's AI-judged bounty system on Base L2.&lt;/p&gt;

&lt;p&gt;Why Build a Bounty Agent?&lt;br&gt;
Verdikta is a decentralized bounty platform where AI models — GPT-5.2 and Claude Sonnet 4.5 — evaluate submissions and release ETH payments automatically via smart contracts. No human reviewers. No manual payouts. Just code.&lt;/p&gt;

&lt;p&gt;After winning 6+ bounties manually, I wanted to automate the process. The goal: an agent that watches for new bounties, evaluates which ones are worth pursuing, and integrates with Verdikta's API to read data and submit work.&lt;/p&gt;

&lt;p&gt;Architecture&lt;br&gt;
The agent has four components:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
verdikta_agent.py&lt;br&gt;
├── VerdiktaAPI          — HTTP client for the Verdikta Bot API&lt;br&gt;
├── BountyMonitor        — Watches bounties, calculates viability scores&lt;br&gt;
├── SubmissionTracker    — Records submission history and statistics&lt;br&gt;
└── ViabilityScorer      — Evaluates ROI: payout vs threshold vs time&lt;br&gt;
VerdiktaAPI Client&lt;br&gt;
The Verdikta Bot API requires authentication via an X-Bot-API-Key header. You register your bot at POST /api/bots/register to get a key.&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
class VerdiktaAPI:&lt;br&gt;
    def &lt;strong&gt;init&lt;/strong&gt;(self, api_key=None):&lt;br&gt;
        self.session = requests.Session()&lt;br&gt;
        if api_key:&lt;br&gt;
            self.session.headers["X-Bot-API-Key"] = api_key&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def get_bounty(self, bounty_id):
    resp = self.session.get(f"{API_BASE}/jobs/{bounty_id}")
    resp.raise_for_status()
    return resp.json()

def submit_work(self, bounty_id, content):
    return self.session.post(
        f"{API_BASE}/jobs/{bounty_id}/submit",
        json={"content": content}
    ).json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Key endpoints:&lt;/p&gt;

&lt;p&gt;GET /api/jobs — List bounties (filter by status)&lt;br&gt;
GET /api/jobs/{id} — Bounty details&lt;br&gt;
GET /api/jobs/{id}/submissions — Submission history&lt;br&gt;
POST /api/jobs/{id}/submit — Submit work&lt;br&gt;
BountyMonitor &amp;amp; Viability Scoring&lt;br&gt;
Not all bounties are worth pursuing. The agent calculates a viability score:&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
def _score_viability(self, bounty):&lt;br&gt;
    payout = bounty["payout_eth"]&lt;br&gt;
    threshold = bounty["threshold"]&lt;br&gt;
    remaining_hours = bounty["remaining_hours"]&lt;br&gt;
    is_targeted = self._is_targeted_to_me(bounty)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Higher threshold = harder = lower viability
difficulty = {92: 0.3, 88: 0.6, 85: 0.8}.get(threshold, 1.0)

# Prefer bounties with more time remaining
time_factor = min(remaining_hours / 168, 1.0)

# Targeted bounties = only you can submit
targeted_bonus = 1.5 if is_targeted else 1.0

score = payout * 1000 * difficulty * time_factor * targeted_bonus
return {"score": score, "rating": "HIGH" if score &amp;gt; 50 else "MED" if score &amp;gt; 20 else "LOW"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This catches the key insight: a 0.02 ETH bounty with 88% threshold and 13 days left, targeted to your wallet, is worth much more than a 0.002 ETH open bounty with 92% threshold expiring tomorrow.&lt;/p&gt;

&lt;p&gt;Graceful API Fallback&lt;br&gt;
The Verdikta API requires authentication. During development I didn't always have a valid key. The agent falls back to hardcoded bounty data when the API returns 401:&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
try:&lt;br&gt;
    bounty = self.api.get_bounty(bounty_id)&lt;br&gt;
except requests.HTTPError:&lt;br&gt;
    bounties = self._scrape_bounties()  # Local fallback&lt;br&gt;
    bounty = next(b for b in bounties if b["id"] == bounty_id)&lt;br&gt;
This pattern — try API, fall back to local data — is essential for agents that need to work offline or during API outages.&lt;/p&gt;

&lt;p&gt;On-Chain Integration&lt;br&gt;
The BountyEscrow contract on Base L2 handles payments:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Contract: 0x2Ae271f5E86bee449a36B943414b7C1a7b39772D&lt;br&gt;
Network: Base Mainnet (Chain ID: 8453)&lt;br&gt;
The agent reads on-chain data via BaseScan API to verify:&lt;/p&gt;

&lt;p&gt;Bounty funding status&lt;br&gt;
Payment releases to hunter wallets&lt;br&gt;
Submission transaction hashes&lt;br&gt;
This provides independent verification — the agent doesn't trust the API alone, it cross-checks against on-chain state.&lt;/p&gt;

&lt;p&gt;CLI Interface&lt;br&gt;
The agent uses argparse with rich for formatted output:&lt;/p&gt;

&lt;p&gt;Bash&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  List open bounties with viability scores
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --list&lt;/p&gt;

&lt;h1&gt;
  
  
  Check specific bounty
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --check 157&lt;/p&gt;

&lt;h1&gt;
  
  
  Monitor mode (checks every 30 minutes)
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --monitor&lt;/p&gt;

&lt;h1&gt;
  
  
  View submission history
&lt;/h1&gt;

&lt;p&gt;python verdikta_agent.py --history&lt;br&gt;
Example output:&lt;/p&gt;

&lt;p&gt;copy&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
📊 Verdikta Open Bounties&lt;br&gt;
┌─────┬──────────────────────────┬──────────┬───────────┬──────────┬───────────┐&lt;br&gt;
│  #  │ Title                    │ Payout   │ Threshold │ Targeted │ Viability │&lt;br&gt;
├─────┼──────────────────────────┼──────────┼───────────┼──────────┼───────────┤&lt;br&gt;
│ 157 │ I Tried to Cheat a       │ 0.02 ETH │ 88%       │ ✅ You   │ HIGH ⭐   │&lt;br&gt;
│ 158 │ Build an Agent           │ 0.02 ETH │ 88%       │ ✅ You   │ HIGH ⭐   │&lt;br&gt;
│ 160 │ Reddit AMA Post          │ 0.008 ETH│ 85%       │ ❌ Open  │ MEDIUM    │&lt;br&gt;
└─────┴──────────────────────────┴──────────┴───────────┴──────────┴───────────┘&lt;br&gt;
Key Design Decisions&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Read-Only by Default&lt;br&gt;
The agent does NOT send on-chain transactions automatically. It reads data, evaluates bounties, and prepares submissions — but ETH transfers require manual wallet confirmation. This is a safety feature: losing 0.02 ETH to a bad auto-submission isn't worth the automation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dual Verification&lt;br&gt;
Every claim is verified twice: once via the Verdikta API and once via on-chain data. If the two disagree, the agent flags the discrepancy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Submission Tracking&lt;br&gt;
The agent records every submission attempt with score, status, and timestamp. Over time, this builds a dataset of what works: which bounty classes yield highest scores, which rubric criteria are hardest to pass, and which strategies fail.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What I Learned Building This&lt;br&gt;
The Verdikta API Is Bot-Friendly&lt;br&gt;
The X-Bot-API-Key authentication pattern is clean. Register once, use the key forever. The API returns structured JSON that's easy to parse. This is how bounty platforms should work.&lt;/p&gt;

&lt;p&gt;Viability Scoring Saves Time&lt;br&gt;
Not every 0.002 ETH bounty is worth 3 hours of work. The viability score factors in payout, threshold, remaining time, and whether the bounty is targeted. This turned a manual "should I try this?" into an automated decision.&lt;/p&gt;

&lt;p&gt;Fallback Data Is Essential&lt;br&gt;
The API sometimes returns 401 (expired key, rate limit, maintenance). Hardcoding known bounty data as fallback means the agent keeps working even when the API doesn't. This is a pattern I'll use in every API-dependent agent going forward.&lt;/p&gt;

&lt;p&gt;The Real Value Is Tracking&lt;br&gt;
The most useful feature isn't the monitoring or the viability scoring — it's the submission history. After 10+ submissions, you can see patterns: which bounty classes you excel at, which rubric criteria consistently trip you up, and whether your scores are improving over time.&lt;/p&gt;

&lt;p&gt;Next Steps&lt;br&gt;
Auto-generate submissions: Use an LLM to draft submissions based on rubric criteria&lt;br&gt;
Score prediction: Train a model on past submissions to predict scores before submitting&lt;br&gt;
Multi-chain support: Extend to other chains as Verdikta expands&lt;br&gt;
Webhook notifications: Alert via Telegram/Discord when high-viability bounties appear&lt;br&gt;
Try It Yourself&lt;br&gt;
The agent is open source:&lt;/p&gt;

&lt;p&gt;GitHub: github.com/s97472091-pixel/verdikta-agent&lt;/p&gt;

&lt;p&gt;Bash&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
git clone &lt;a href="https://github.com/s97472091-pixel/verdikta-agent.git" rel="noopener noreferrer"&gt;https://github.com/s97472091-pixel/verdikta-agent.git&lt;/a&gt;&lt;br&gt;
cd verdikta-agent&lt;br&gt;
pip install -r requirements.txt&lt;br&gt;
python verdikta_agent.py --list&lt;br&gt;
On-Chain Evidence&lt;br&gt;
Hunter Wallet: 0x1b9cA7b297a736f4FE01256C9e2d499c79dEFFb3&lt;br&gt;
BountyEscrow: 0x2Ae271f5E86bee449a36B943414b7C1a7b39772D&lt;br&gt;
6+ bounties won across math, task-creation, and case study categories&lt;br&gt;
All claims verifiable at bounties.verdikta.org&lt;br&gt;
Code at github.com/s97472091-pixel/verdikta-agent&lt;/p&gt;

</description>
      <category>agents</category>
      <category>crypto</category>
      <category>python</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
