Skip to content
Agent Daredevil

Agent Daredevil

Sportsbetting intelligence in the AI Agent Economy

Created on 2nd September 2025

•

Agent Daredevil

Agent Daredevil

Sportsbetting intelligence in the AI Agent Economy

The problem Agent Daredevil solves

image

**Sportsbetting and prediction is intimidating for majority of beginners. **

OUR SOLUTION: an AI agent companion that helps users make better informed betting decisions.

AN AI AGENT STACK THAT ENABLES INTELLIGENT ANALYSIS, AUTONOMOUS ESCROW, & AUTHENTICATION FOR COMPETITIVE GAMING
AND SPORTS PREDICTION.

image

Agent Daredevil isn't your average AI companion; Not only is he your favorite betting consultant, his intelligent analysis and prediction capabilities enable him to distribute and monitize data across the AI agent ecosystem through Virtuals.io's Agent Commerce Protocol (ACP) as a sports intelligence layer.

image

Currently, our MCP stack allows us to query historical and live data through the Sportradar API suite (official NBA data provider)

Soon, Agent Daredevil will serve as the primary arbiter of outcomes and logic for sports and esports. Being built as a composable agentic toolkit (MCP SDK) powering sportsbeting platforms and wagering features in the AI & Web3 ecosystem.

image

Our team is composed of battle tested sports and esports veterans, serving top Web3 gaming companies like Yield Guild Games & Gala Games.

Try our F1 Companion dApp here:
https://f1.daredevil.gg

Test our Wagering dApp DEMO here:
https://daredevil.gg

image

Challenges I ran into

The biggest challenge that i encountered was migrating our existing supabase databases on-chain. We had to rewrite our backend and match resolution logic which is supposedly triggered manually by and ADMIN account.

Now, we are building smart contracts on BASE to handle on-chain escrow & resolution that will be triggered via MCP/ACP hosts -> connected to respective game APIs.

Smart Contract Address(es)

// SPDX-license-identifier: unlicensed
pragma solidity ^0.8.20;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

interface IStakewise {
function deposit(uint256 _assets, address _receiver) external returns (uint256);
function redeem(uint256 _shares, address _receiver, address _owner) external returns (uint256);
}

contract BaseBet is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;

/* ---------- Base mainnet addresses ---------- */
IERC20  public constant CB_BTC   = IERC20(0xcbB7C0000a88B649584F0401F9922F9a0Cb3f9c6);   // cbBTC on Base
IERC20  public constant ST_CB_BTC = IERC20(0x7C5C2d46A4ceC2951Ea36657CE0eAE39a2B86D2F);  // stcbBTC (Stakewise)
IStakewise public constant STAKEWISE = IStakewise(0x7C5C2d46A4ceC2951Ea36657CE0eAE39a2B86D2F);

address public oracle;
address public immutable treasury;

struct Bet {
    address p1;
    address p2;
    uint256 stake;      // each side
    uint256 shares;     // stcbBTC minted
    bool    done;
    address winner;     // 0 == draw
}

mapping(uint256 => Bet) public bets;
uint256 public id;

event Created(uint256 indexed id, address indexed p1, uint256 stake);
event Joined(uint256 indexed id, address indexed p2);
event Paid(uint256 indexed id, address winner, uint256 reward);
event Fee(uint256 indexed id, uint256 amount);

modifier onlyOracle() {
    require(msg.sender == oracle, "!oracle");
    _;
}

constructor(address _oracle, address _treasury) {
    oracle   = _oracle;
    treasury = _treasury;
    CB_BTC.safeApprove(address(STAKEWISE), type(uint256).max);
}

function setOracle(address o) external onlyOwner {
    oracle = o;
}

function open(uint256 amount) external nonReentrant {
    require(amount >= 0.001 ether, "dust");
    uint256 betId = ++id;
    Bet storage b = bets[betId];
    b.p1    = msg.sender;
    b.stake = amount;

    CB_BTC.safeTransferFrom(msg.sender, address(this), amount);
    uint256 pre = ST_CB_BTC.balanceOf(address(this));
    STAKEWISE.deposit(amount, address(this));
    b.shares = ST_CB_BTC.balanceOf(address(this)) - pre;

    emit Created(betId, msg.sender, amount);
}

function join(uint256 betId) external nonReentrant {
    Bet storage b = bets[betId];
    require(b.p1 != address(0) && b.p2 == address(0), "bad id");
    b.p2 = msg.sender;

    CB_BTC.safeTransferFrom(msg.sender, address(this), b.stake);
    uint256 pre = ST_CB_BTC.balanceOf(address(this));
    STAKEWISE.deposit(b.stake, address(this));
    b.shares += ST_CB_BTC.balanceOf(address(this)) - pre;

    emit Joined(betId, msg.sender);
}

function settle(uint256 betId, address winner) external onlyOracle {
    Bet storage b = bets[betId];
    require(!b.done && b.p2 != address(0), "bad settle");
    require(winner == address(0) || winner == b.p1 || winner == b.p2, "bad winner");
    b.done   = true;
    b.winner = winner;

    STAKEWISE.redeem(b.shares, address(this), address(this));

    uint256 bal = CB_BTC.balanceOf(address(this));
    uint256 reward = bal > b.stake * 2 ? bal - b.stake * 2 : 0;
    uint256 fee = reward / 2;
    uint256 pot = bal - fee;

    if (fee > 0) {
        CB_BTC.safeTransfer(treasury, fee);
        emit Fee(betId, fee);
    }

    if (winner == address(0)) {
        CB_BTC.safeTransfer(b.p1, b.stake);
        CB_BTC.safeTransfer(b.p2, b.stake);
    } else {
        CB_BTC.safeTransfer(winner, pot);
    }

    emit Paid(betId, winner, reward);
}

}

Other Onchain Proof

17,000+ TOKEN HOLDERS
$117K MARKET CAP
https://dexscreener.com/base/0xC0F1ec856C4bE383655F6d756B3b0B48D9713b27

Tracks Applied (1)

Top 5 New Consumer Apps

Partnered with Redbull to hyper-gamify communities with responsible sportsbetting. We are currently building several AI...Read More

Discussion

Builders also viewed

See more projects on Devfolio