Skip to content

OxForged/minty

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

44 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Minty

Minty

Autonomous cryptocurrency tipping for Rumble creators โ€” powered by Tether WDK and AI.

Minty is a Chrome Extension (Manifest V3) that watches your Rumble sessions and automatically sends on-chain crypto tips to creators based on rules you define. Set it once, and Minty handles everything: detecting creators, tracking watch time, running AI-powered decisions, and broadcasting real blockchain transactions โ€” no clicks required.

Chrome MV3 Tether WDK


Features

  • Autonomous tipping โ€” no interaction needed after setup; tips fire automatically when watch time thresholds are met
  • Rule engine โ€” per-creator or wildcard rules with configurable rate/min, min watch time, max tip, token, and network
  • AI reasoning โ€” optional LLM layer (OpenAI, Anthropic, Gemini, Ollama) that adjusts tip amounts and can veto low-confidence decisions
  • Real on-chain transactions โ€” uses the official Tether WDK; no mocking
  • Multi-network โ€” Ethereum (Sepolia), Polygon (Amoy), Arbitrum Sepolia, Bitcoin testnet
  • Multi-token โ€” USDT, USAT (Alloy Dollar), XAUT (Tether Gold), BTC
  • Budget guards โ€” daily spending cap + per-session cap with midnight resets
  • Companion website โ€” full analytics dashboard, leaderboard, and streamer profiles bundled inside the extension

Architecture Overview

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  rumble.com (any video page)                                  โ”‚
โ”‚                                                               โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  content.js  (content script, injected by manifest)     โ”‚ โ”‚
โ”‚  โ”‚                                                         โ”‚ โ”‚
โ”‚  โ”‚  1. Detects video element & creator name                โ”‚ โ”‚
โ”‚  โ”‚  2. Extracts creator wallet via silent 3-step HTMX fetchโ”‚ โ”‚
โ”‚  โ”‚  3. Tracks real watch time (play/pause/seek events)     โ”‚ โ”‚
โ”‚  โ”‚  4. Reports to background every 30 seconds              โ”‚ โ”‚
โ”‚  โ”‚  5. Shows "Minty Active" badge overlay on player        โ”‚ โ”‚
โ”‚  โ”‚  6. Displays tip notification when a tip fires          โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚  chrome.runtime.sendMessage
                          โ”‚  WATCH_UPDATE / VIDEO_ENDED / CREATOR_DETECTED
                          โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  background.js  (service worker โ€” persistent orchestrator)    โ”‚
โ”‚                                                               โ”‚
โ”‚  handleWatchUpdate()                                          โ”‚
โ”‚    โ”‚                                                          โ”‚
โ”‚    โ”œโ”€โ”€โ–บ agent.shouldTip()  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚    โ”‚         (7-step decision pipeline)                   โ”‚   โ”‚
โ”‚    โ”‚                                                      โ”‚   โ”‚
โ”‚    โ””โ”€โ”€โ–บ executeTip()  โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ decision: shouldTip    โ”‚   โ”‚
โ”‚              โ”‚                                            โ”‚   โ”‚
โ”‚              โ”œโ”€โ”€โ–บ wallet.sendTip()   (Tether WDK)         โ”‚   โ”‚
โ”‚              โ”œโ”€โ”€โ–บ storage.addTipRecord()                  โ”‚   โ”‚
โ”‚              โ”œโ”€โ”€โ–บ storage.addDailySpending()              โ”‚   โ”‚
โ”‚              โ”œโ”€โ”€โ–บ chrome.tabs.sendMessage(TIP_SENT)       โ”‚   โ”‚
โ”‚              โ””โ”€โ”€โ–บ chrome.action.setBadgeText()            โ”‚   โ”‚
โ”‚                                                           โ”‚   โ”‚
โ”‚  agent.js โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”˜   โ”‚
โ”‚    โ”‚  Rule Engine + AI Reasoning + Spending Guardian           โ”‚
โ”‚    โ””โ”€โ”€โ–บ Optional LLM call (OpenAI / Anthropic / Gemini /       โ”‚
โ”‚         Ollama) for confidence scoring & amount adjustment      โ”‚
โ”‚                                                               โ”‚
โ”‚  wallet.js                                                    โ”‚
โ”‚    โ””โ”€โ”€โ–บ Tether WDK (WalletManagerEvm / WalletManagerBtc)      โ”‚
โ”‚         Real BIP-39 HD wallet. Real on-chain transfers.        โ”‚
โ”‚                                                               โ”‚
โ”‚  storage.js                                                   โ”‚
โ”‚    โ””โ”€โ”€โ–บ chrome.storage.local                                  โ”‚
โ”‚         settings / tipHistory / watchSessions /               โ”‚
โ”‚         dailySpending / tipRules / creatorCache               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ–ฒ
                          โ”‚  chrome.runtime.sendMessage
                          โ”‚  GET_STATS / CREATE_RULE / INIT_WALLET / ...
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  popup/  (extension popup UI, 380ร—580px)                      โ”‚
โ”‚    popup.html / popup.css / popup.js                          โ”‚
โ”‚    4 tabs: Dashboard ยท Rules ยท History ยท Settings             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚  chrome.tabs.create
                          โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  website/  (companion web app, bundled in extension package)  โ”‚
โ”‚    index.html       โ€” landing page (works standalone)         โ”‚
โ”‚    dashboard.html   โ€” personal analytics + charts             โ”‚
โ”‚    leaderboard.html โ€” creator ranking from tip history        โ”‚
โ”‚    streamer.html    โ€” per-creator profile search              โ”‚
โ”‚    css/ js/         โ€” vanilla JS, canvas charts, no framework โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Auto-Tip Decision Pipeline

Every 30 seconds while video plays:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  WATCH_UPDATE received                  โ”‚
โ”‚  watchMinutes = watchSeconds / 60       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ Already tipped โ”‚โ”€โ”€YESโ”€โ”€โ–บ skip (quiet)
         โ”‚  this session? โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ NO
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ Creator addressโ”‚โ”€โ”€NOโ”€โ”€โ”€โ–บ skip (quiet)
         โ”‚   detected?   โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ YES
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ Matching rule  โ”‚โ”€โ”€NOโ”€โ”€โ”€โ–บ skip
         โ”‚    exists?    โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ YES
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ watchMin โ‰ฅ minWatchMinutes?    โ”‚โ”€โ”€NOโ”€โ”€โ–บ skip (quiet)
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ YES
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ amount = min(watchMin ร— rate, maxTipAmount) โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚ todaySpent + amount โ‰ค maxDailySpend?  โ”‚โ”€โ”€NOโ”€โ”€โ–บ skip (logs budget info)
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ YES
                 โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚  AI enabled?           โ”‚โ”€โ”€NOโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                              โ”‚
                 โ”‚ YES                                           โ”‚
                 โ–ผ                                               โ”‚
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
         โ”‚  LLM call โ†’ { shouldTip, confidence,         โ”‚       โ”‚
         โ”‚    adjustedAmount, reasoning, sentiment }     โ”‚       โ”‚
         โ”‚                                               โ”‚       โ”‚
         โ”‚  confidence < 0.3 AND shouldTip=false?       โ”‚       โ”‚
         โ”‚  โ””โ”€โ”€โ–บ veto                                    โ”‚       โ”‚
         โ”‚                                               โ”‚       โ”‚
         โ”‚  LLM failure? โ†’ non-blocking fallback         โ”‚       โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
                 โ”‚                                               โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                      โ”‚
                                      โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  executeTip()                        โ”‚
                    โ”‚                                      โ”‚
                    โ”‚  1. Double-check daily budget        โ”‚
                    โ”‚  2. wallet.sendTip() โ†’ Tether WDK   โ”‚
                    โ”‚  3. storage.addTipRecord()           โ”‚
                    โ”‚  4. storage.addDailySpending()       โ”‚
                    โ”‚  5. TIP_SENT โ†’ badge on video page   โ”‚
                    โ”‚  6. Badge text = total tip count     โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Creator Wallet Extraction

Rumble uses HTMX โ€” wallet addresses only appear inside dynamically-fetched HTML fragments. Minty extracts them silently via a 3-step fetch chain without opening any UI or modifying the DOM.

DOM: button[hx-get*="qr-modal"]
       โ”‚
       โ”‚ Step 1: htmxFetch(hx-get, hx-vals)
       โ–ผ
   Tip modal HTML
   โ”œโ”€โ”€ Check hx-vals for address โ†’ found? โœ“ DONE
   โ””โ”€โ”€ Find button[hx-get*="qr-address"]
              โ”‚
              โ”‚ Step 2: htmxFetch(hx-get, hx-vals)
              โ–ผ
         Crypto network tabs HTML
         โ””โ”€โ”€ querySelectorAll('button[hx-vals*="address"]')
                    โ”‚
                    โ”‚ Step 3: Parse hx-vals JSON from each button
                    โ–ผ
              Address priority:
              1st: blockchain=polygon + currency=usdt
              2nd: blockchain=polygon (any currency)
              3rd: any address found
              Fallback: regex scan (0x... or bc1...) in raw HTML

This chain depends on Rumble's current HTMX DOM structure. If wallet extraction breaks, start debugging at Step 1 by checking whether button[hx-get*="qr-modal"] still exists on video pages.


AI Agent

The AI layer is fully optional. If no credentials are configured, the agent runs in pure rule-based mode with no external calls.

How to enable:

  1. Open the popup โ†’ Dashboard โ†’ AI Agent section
  2. Select your provider and enter credentials
  3. Optionally specify a model override (blank = provider default)
  4. Click Connect AI Agent

What the AI does:

  • Receives watch context: creator, watch duration, base amount, rule parameters, daily budget, recent tip history
  • Returns a confidence score (0.0โ€“1.0) and can adjust the tip amount (bounded by rule.maxTipAmount)
  • Vetoes the tip if confidence < 0.3 and shouldTip = false
  • AI failures are non-blocking โ€” any error falls back to rule-based logic

Provider quick reference:

Provider Default model Credential needed
OpenAI gpt-4o-mini API key from platform.openai.com
Anthropic claude-haiku-4-5-20251001 API key from console.anthropic.com
Gemini gemini-2.5-flash-lite API key from aistudio.google.com
Ollama llama3.2 Local server URL (default: http://localhost:11434)

Supported Networks & Tokens

All networks are configured for testnet by default. Mainnet values are in .env.example.

Network Testnet RPC
Ethereum Sepolia https://1rpc.io/sepolia
Polygon Amoy https://rpc-amoy.polygon.technology
Arbitrum Sepolia https://sepolia-rollup.arbitrum.io/rpc
Bitcoin Testnet ElectrumWs
Token Full name Networks
USDT USDโ‚ฎ (Tether Dollar) Ethereum, Polygon, Arbitrum
USAT USAโ‚ฎ (Alloy Dollar) Ethereum
XAUT XAUโ‚ฎ (Tether Gold) Ethereum
BTC Bitcoin Bitcoin

Getting Started

1. Clone and install

git clone https://github.com/charlesms1246/minty
cd minty
npm install

2. Build

npm run build

3. Load in Chrome

  1. Navigate to chrome://extensions
  2. Enable Developer mode (top-right toggle)
  3. Click Load unpacked
  4. Select the project root (the folder that contains manifest.json and extension/)

4. Set up your wallet

  1. Click the Minty icon in the toolbar โ†’ Settings โ†’ Wallet
  2. Click Generate New for a fresh wallet, or paste an existing seed phrase
  3. Click Initialize Wallet

Save your seed phrase โ€” it is the only way to recover your wallet.

5. Fund your testnet wallet

6. Create your first rule

  1. Rules tab โ†’ fill in the form
  2. Recommended starting values: All Creators ยท $0.02/min ยท USDT ยท Polygon ยท 3 min min ยท $5 max
  3. Click Create Rule

7. Watch a Rumble video

Navigate to any video on rumble.com. The "Minty Active" badge appears in the top-right corner of the player. After the minimum watch time, a tip fires automatically.

8. (Optional) Connect an AI agent

Dashboard โ†’ AI Agent โ†’ select provider โ†’ enter API key โ†’ Connect AI Agent.


Mainnet Upgrade Guide

The extension ships in testnet mode. To switch to mainnet:

  1. src/wallet.js โ€” replace RPC_PROVIDERS and TOKEN_CONTRACTS with the mainnet values documented in .env.example
  2. popup/popup.js โ€” update getExplorerUrl() to mainnet explorers (polygonscan.com, etherscan.io, arbiscan.io, blockstream.info)
  3. wallet.js โ€” update ElectrumWs endpoint to a mainnet Bitcoin Electrum server
  4. Security โ€” implement proper seed phrase encryption before any mainnet use (see TODO in wallet.js)

Built for the Tether WDK Hackathon ย ยทย  Powered by Tether WDK

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 96.1%
  • CSS 2.3%
  • HTML 1.6%