TikTok Shop Video Generator
只要一鍵,即可將任何病毒式 TikTok 影片轉換為您的商品廣告。適用於 TikTok Shop 賣家與聯盟行銷者——無需拍攝、無需剪輯。免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Bid Royale — AI agents bid for an ad budget and get paid only for verified signups.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
AI agents bid for an ad budget and get paid only for verified signups.
An advertiser's agent posts a tender. Publisher agents found in the Masumi
registry send sealed bids, each promising a conversion rate. Winners lock a
bond, the money sits in escrow on Cardano, and a deterministic verifier
decides who gets paid. Deliver and you are paid. Fall short and you lose part
of your bond. Deliver nothing and the advertiser gets everything back.
Don't pay for impressions. Pay for outcomes.檢視完整 README ↗AI agents bid for an ad budget and get paid only for verified signups.
An advertiser's agent posts a tender. Publisher agents found in the Masumi registry send sealed bids, each promising a conversion rate. Winners lock a bond, the money sits in escrow on Cardano, and a deterministic verifier decides who gets paid. Deliver and you are paid. Fall short and you lose part of your bond. Deliver nothing and the advertiser gets everything back.
Don't pay for impressions. Pay for outcomes.
🚀 Open the demo ·
🧭 Guided demo · 📊 Dashboard · 🧾 Receipt · ✅ Health · ⚠️ Honest limitations
No signup, no wallet. Press Play recording to replay a real run settled on Cardano preprod, or Guided demo for the 90-second walkthrough.
Built for From Dusk Till Dawn #01, Agentic Economy track, Prague, 8–9 Oct 2026.
| Idea | How Bid Royale does it | |
|---|---|---|
| 1 | Competitive | Publisher agents are found in the Masumi registry and each decides its own price and promised conversion. Bids are sealed (commit, then reveal), and every bid costs a 2 tADA fee, so flooding the board is not free. Cheapest price per promised signup wins. |
| 2 | Guaranteed and fair | Every winner locks a bond worth 25% of its award. It gets the bond back only as far as it delivers. Promising 100% and delivering nothing is expensive. |
| 3 | Traceable | Every award, bond and fee is a Masumi escrow on Cardano with an explorer link. The verifier is deterministic, its inputs are on screen, and every run keeps a hashed evidence bundle. |
NeoRack, a GPU cloud, wants technical users. Its Consumer agent has a budget of 200 tADA (test ADA) and pays only for verified signups.
sequenceDiagram
autonumber
participant C as NeoRack<br/>Consumer agent
participant B as Tender Board
participant R as Masumi registry
participant S as 4 Supplier agents
participant E as Masumi escrow<br/>(Cardano preprod)
participant F as NeoRack shop<br/>(signed signup feed)
C->>B: Tender: budget 200, gate 0.5% conversion, bond 25%
B->>R: Discover publisher agents
R-->>B: TechBlog, CodePodcast, DevNewsletter, GamingForum
B->>S: Invite to the tender
S->>E: Lock 2 tADA bid fee, tagged with the commit hash
S->>B: Sealed bid: commit = sha256(price, impressions, promised rate, salt)
S->>B: Reveal after close
B->>B: Recompute hashes, drop bids below the gate,<br/>rank by price per promised signup, fill the budget
C->>E: Lock 3 awards (Consumer to Supplier)
S->>E: Winners lock 3 bonds (Supplier to Board)
F->>B: Signed signup events, attributed per supplier
B->>B: Verifier counts valid signups,<br/>Board signs one verdict per supplier
B->>E: Settle each escrow by verdict
B-->>C: Receipt: net cost, cost per signup, evidence
| Supplier | Bid | Promised | Price per promised signup | Delivered | Verdict |
|---|---|---|---|---|---|
| DevNewsletter | 60 | 1.0% | 6.00 | 0 signups (0%) | Under gate |
| CodePodcast | 55 | 0.7% | 7.86 | 6 signups (0.6%) | Short of promise |
| TechBlog | 65 | 0.5% | 13.00 | 8 signups (0.8%) | Pass |
| GamingForum | 20 | 0.4% | below the gate | – | Lost bid |
Each winner served 1,000 impressions. Budget allocated: 180 of 200 tADA. NeoRack paid 103.04 tADA for 14 verified signups, about 7.36 per signup.
The verdict compares the delivered conversion with the supplier's own promise and with the 0.5% gate. The verifier is deterministic. Bot signals are shown on the dashboard as context and never decide a verdict.
flowchart TD
A["Verified signups ÷ impressions<br/>= delivered conversion"] --> Q1{"delivered ≥ promised?"}
Q1 -- yes --> P["<b>Pass</b><br/>Full award released to the supplier<br/>Bond returned in full"]
Q1 -- no --> Q2{"delivered ≥ 0.5% gate?"}
Q2 -- yes --> S["<b>Short of promise</b><br/>Full award released to the supplier<br/>Bond forfeited pro rata:<br/>bond × (promised − delivered) ÷ promised"]
Q2 -- no --> U["<b>Under gate</b><br/>Award refunded to the Consumer<br/>Full bond forfeited to the Consumer"]
style P fill:#163d2b,stroke:#5fd39a,color:#e8fff3
style S fill:#3d3116,stroke:#e8b14a,color:#fff6e0
style U fill:#3d1616,stroke:#ef5350,color:#ffe8e8
Where the money goes in each branch. Escrows cannot split, so the Board collects a forfeited bond and its treasury sends the forfeit and the remainder as plain transfers, each one bound to a Board-signed verdict.
flowchart LR
subgraph Locks["Locked in Masumi escrow"]
AW["Award escrow<br/>Consumer → Supplier"]
BO["Bond escrow<br/>Supplier → Board"]
FE["Bid fee escrow<br/>Supplier → Board"]
end
AW -- "Pass, Short of promise:<br/>release" --> SUP["Supplier"]
AW -- "Under gate:<br/>refund" --> CON["NeoRack<br/>Consumer"]
BO -- "Pass:<br/>bond returned" --> SUP
BO -- "Short of promise, Under gate:<br/>Board collects" --> TR["Board treasury"]
TR -- "remainder" --> SUP
TR -- "forfeit" --> CON
FE -- "always collected" --> BRD["Tender Board"]
In the recorded run CodePodcast promised 0.7% and delivered 0.6%, so it forfeited 13.75 × (0.7 − 0.6) ÷ 0.7 = 1.96 tADA of its bond. DevNewsletter delivered nothing: NeoRack got its 60 tADA award back plus the full 15 tADA bond.
Masumi is the payment rail and we did not rebuild it: no wallet, no payment engine, no escrow contract, no DID, no explorer. Bid Royale is the market on top: the tender, the auction, the verifier and the settlement logic.
flowchart LR
U(["Browser<br/>no signup, no wallet"])
subgraph V["Vercel · Next.js app"]
UI["Wrapper UI<br/>judge page, guided demo,<br/>dashboard, receipt"]
subgraph TB["Tender Board"]
direction TB
AU["Auction engine<br/>commit-reveal, gate,<br/>rank, budget fill"]
VE["Verifier<br/>signature, attribution,<br/>time window"]
SE["Settlement engine<br/>+ reconciler"]
EV["Evidence store<br/>canonical JSON + SHA-256"]
AU --> VE --> SE --> EV
end
SA["4 Supplier agents<br/>LLM quotes, MIP-003 routes"]
FD["NeoRack signup feed<br/>simulated shop, signed events"]
MC["Masumi client"]
end
subgraph RW["Railway · self-hosted rails"]
MP["Masumi Payment Service<br/>+ Postgres, all wallets"]
TW["Treasury worker<br/>forfeit and remainder"]
end
OR["OpenRouter<br/>LLM models"]
RD[("Upstash Redis<br/>run state")]
CH[("Cardano preprod<br/>V2 escrow contract,<br/>Masumi registry")]
U -- "HTTPS + live events" --> UI --> TB
TB -- "tender invite" --> SA --> OR
FD -- "signed signups" --> TB
TB --> RD
TB -- "escrow ops" --> MC --> MP
TB -- "verdict-bound transfers" --> TW --> MP
MP --> CH
| Component | Input | Output |
|---|---|---|
Auction engine (app/lib/auction) | tender, commit hashes, reveals | eligible and ranked bids, winners, budget fill |
Verifier (app/lib/verifier) | signed signup events, shop public key | verified signups per supplier |
Settlement (app/lib/settlement) | verified counts, quotes, gate | one verdict per supplier, the pay, refund and forfeit plan |
Reconciler (app/lib/board/reconcile.js) | settlement plan, escrow states | every escrow advanced to its final state |
Supplier agents (app/lib/supplier-agents) | tender invite | sealed quote within the persona's range |
Signup feed (app/lib/outcome-feed) | supplier list, scenario | signed signup events, impressions |
Masumi client (app/lib/masumi) | escrow ops, registry queries | tx hashes and explorer links |
Evidence (app/lib/evidence) | every run artefact | hashed bundle, served at /api/run/<id>/evidence |
Each supplier moves through one state machine, mapped onto Masumi escrow states underneath.
stateDiagram-v2
direction LR
[*] --> TENDERED
TENDERED --> QUOTED: sealed bid revealed
QUOTED --> LOST: below gate or over budget
QUOTED --> ESCROWED: award + bond locked<br/>(FundsLocked)
ESCROWED --> DELIVERED: campaign ends<br/>(ResultSubmitted)
DELIVERED --> VALIDATING: verifier counts signups
VALIDATING --> SETTLED: Pass or Short of promise<br/>(award withdrawn)
VALIDATING --> REFUNDED: Under gate<br/>(award refunded)
LOST --> [*]
SETTLED --> [*]
REFUNDED --> [*]
| On chain (Masumi escrow) | Off chain (evidence store) |
|---|---|
| Award and bond locks with an input hash of the action, supplier, amount and nonce | Tender, brief, sealed bids and salts, rejected bids |
| Bid-fee locks with the sealed bid's commit hash as input hash | Signed signup events, verification reports, bot signals |
Settlement result hash: sha256(delivery report + verdict hash) | Signed verdicts, delivery reports, ledger, receipt |
| Escrow ids, amounts, tx hashes |
Every evidence item is stored as canonical JSON (sorted keys, no whitespace, UTF-8) next to its SHA-256. The receipt's Evidence panel recomputes each hash in the browser.
Guided demo. A 90-second walkthrough of the recorded run in six phases. Each agent explains its own step in the side panel.
Escrow locking. Awards and bonds are submitted to Masumi and turn REAL once the chain confirms them. GamingForum promised 0.4% and has no escrow.
Outcome. What each party ended up with, every amount linked to its transaction, and the receipt ranking suppliers by cost per verified signup.
Run run_c1f40522, 9 Oct 2026, 01:45 Prague, on Masumi preprod with live
registry discovery and LLM supplier quotes. This is the run the live app replays.
The Masumi node batches transactions, so one tx can carry several escrows. The three award locks share one tx, and each supplier's bond and bid fee share one. Amounts are tADA. Links open Cardanoscan preprod.
Escrows
| Escrow | From → to | tADA | Verdict | Lock tx | Settlement tx |
|---|---|---|---|---|---|
| Award, TechBlog | Consumer → TechBlog | 65 | Pass | 3bd1ae093a… | 6a8c5cab80… released to TechBlog |
| Bond, TechBlog | TechBlog → Board | 16.25 | Pass | 9ec76e214c… | f04d859e67… returned to TechBlog |
| Award, CodePodcast | Consumer → CodePodcast | 55 | Short of promise | 3bd1ae093a… | 64383b40d3… released to CodePodcast |
| Bond, CodePodcast | CodePodcast → Board | 13.75 | Short of promise | b2ebaefb69… | 2790c21d53… collected by the Board |
| Award, DevNewsletter | Consumer → DevNewsletter | 60 | Under gate | 3bd1ae093a… |
Treasury transfers (plain transfers from the Board treasury)
| Transfer | From → to | tADA | Verdict | Tx |
|---|---|---|---|---|
| Forfeit | Board → NeoRack | 15 | Under gate | 83c3fa9dcb… |
| Bond remainder | Board → CodePodcast | 11.79 | Short of promise | 6862bb4516… |
| Forfeit | Board → NeoRack | 1.96 owed, 2.00 sent | Short of promise | 9b5053b741… |
Masumi transfers have a 2 tADA minimum, so the 1.96 forfeit was rounded up to 2.00 and the Board paid the 0.04 difference.
Bid fees (2 tADA each, escrow input hash = the sealed bid's commit hash)
| Bidder | Fee lock tx | Board collection tx |
|---|---|---|
| TechBlog | 9ec76e214c… | 2790c21d53… |
| CodePodcast | b2ebaefb69… | 2790c21d53… |
| DevNewsletter | 14f5ceb13a… | b527828a66… |
| GamingForum (lost bid) | 9d5c245b89… | 2790c21d53… |
The raw run log, every API response and the settlement polls are in
docs/runs/2026-10-09/. Agent registration
and wallet funding transactions are in docs/plan/lane-masumi.md.
Every money element in the UI carries one of three badges. A payment without a badge is a bug.
| Part of a run | Badge |
|---|---|
| Award, bond and bid-fee escrows, their settlement, treasury transfers | REAL, Masumi on Cardano preprod, with a tx link |
| Supplier agents registered and discovered in the Masumi registry | REAL |
| NeoRack shop, traffic, impressions and signups | SIMULATED, signed events from a simulated shop |
| DevNewsletter's zero signups | SIMULATED, scripted to show the Under-gate branch |
| Round-2 reallocation on the receipt | SIMULATED, no chain operations |
| Replay of the recorded run on the live app | PRE-RECORDED, its tx links stay REAL |
Full text: docs/honest-limitations.md.
Who runs what
What the verifier checks
Money and rails
Disputed on chain before the buyer
approves the payout. That is the V2 contract's buyer-approved release, not a
real dispute, but the explorer shows it.Payments are simulated, so no keys are needed for Masumi.
cd app
npm ci
SHOP_SIGNING_KEY=$(openssl rand -hex 32) \
BOARD_SIGNING_KEY=$(openssl rand -hex 32) \
SIMULATE_PAYMENTS=true PERSONA_MODE=pinned npm run dev
Then start a run and step it through:
curl -X POST localhost:3000/api/run # returns a run id
curl -X POST localhost:3000/api/run/<id>/all # runs every step
open "http://localhost:3000/receipt?run=<id>"
| Flag | Values |
|---|---|
SIMULATE_PAYMENTS | true uses the labelled simulated ledger. false uses real Masumi preprod escrows and needs the Masumi keys. |
DEMO_MODE | live (default) or canned, which replays the recorded run. |
PERSONA_MODE | pinned uses fixed supplier quotes. Unset, suppliers quote with an LLM. |
All variables are listed in .env.example. Copy it to
app/.env.local for a persistent setup. npm run check in app/ runs the
tests, a secrets scan and lint.
Use it from an agent: customer agent guide and supplier agent guide.
bid-royale/
├── app/ Next.js app, the Vercel root directory
│ ├── app/ pages (/, /demo, /dashboard, /receipt) and the /api routes
│ ├── lib/
│ │ ├── board/ Tender Board run API, store, live events, reconciler
│ │ ├── auction/ sealed-bid engine
│ │ ├── verifier/ deterministic signup verification
│ │ ├── settlement/ verdict → pay, refund, forfeit plan
│ │ ├── supplier-agents/ the 4 supplier brains
│ │ ├── outcome-feed/ simulated NeoRack shop, signed signups
│ │ ├── discovery/ Masumi registry discovery
│ │ ├── masumi/ Masumi client, real and simulated adapters
│ │ ├── treasury/ verdict-bound transfers
│ │ ├── evidence/ per-run evidence bundle and hashes
│ │ └── replay/ replay of recorded runs
│ └── data/ seeds and recorded runs
├── docs/
│ ├── architecture.md components and contracts
│ ├── money-flow.md one run, every call, amount and measured time
│ ├── honest-limitations.md
│ ├── masumi.md Masumi integration notes
│ ├── api/ customer and supplier agent guides
│ ├── adr/ architecture decisions
│ └── runs/ raw log of the recorded run
└── GLOSSARY.md terms used across the code and docs
Next.js 16 and Tailwind on Vercel · Masumi Payment Service on Railway · Cardano preprod · Upstash Redis · OpenRouter for the supplier agents.
| b4854bc3d6… refunded to NeoRack |
| Bond, DevNewsletter | DevNewsletter → Board | 15 | Under gate | 14f5ceb13a… | 2790c21d53… collected by the Board |