TikTok Shop Video Generator
바이럴 틱톡 영상을 클릭 한 번에 광고로 전환해 틱톡샵 판매자·제휴자가 촬영·편집 없이 무료로 체험할 수 있습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 |