English first, 中文版在下方.
1. Project Overview
- Project name: MeterNet
- One-sentence summary: An open-source hotspot box (any Linux laptop or Raspberry Pi) that sells Wi-Fi per megabyte and keeps each phone online only while small Fiber payments keep arriving.
- Project type: working prototype + public field report (2 hotspots, ≥10 outside users, 14 days, testnet)
- Funding requested: $980, paid in CKB
- Duration: 6 weeks
MeterNet is a consumption-side Fiber app, not another payment entry point. Fiber is the meter: access is opened 2 MB at a time and closed within seconds once payment stops.
2. Team Profile
Timilehin Olowu (solo), full-stack and blockchain engineer, Lagos, Nigeria.
- I built ZecKit, an open-source Zcash wallet infrastructure project funded by the Zcash Foundation.
- Founder and CTO of Wheelers, a Lagos ride-hailing platform with live riders and drivers.
- Has shipped on EVM, Stellar/Soroban, Sui and Monad.
- New to Fiber. Anything that breaks on FNN gets written up and filed upstream, not patched in private.
GitHub: Timi16 · GitHub · Repo: GitHub - Timi16/meternet: An open-source hotspot box (any Linux laptop or Raspberry Pi) that sells Wi-Fi per megabyte and keeps each phone online only while small Fiber payments keep arriving. · GitHub · Contact: Nervos Talk DM
3. Project Background
Why I want to build this. I run Wheelers, a ride-hailing app in Lagos, so I spend a lot of time on how payments behave on weak phone networks. Fiber is the first payment rail I’ve seen that could charge per megabyte, and I want to test that on real phones and real Lagos 4G instead of guessing.
The gap this targets. The AI, machine payments, and Fiber in 2026 opportunity map (evidence snapshot 22 August 2026) lists questions that test the Fiber hypothesis. MeterNet produces field data for three of them:
- “Can an independent provider receive repeated payments without manually solving inbound liquidity?”
- “Can a browser-side Fiber session recover safely after tab closure, device loss, or an FNN upgrade?”
- “What real workload needs bidirectional or non-USDC settlement strongly enough to accept channel operations?”
The same report notes that the Fiber charging simulation shows one channel can carry repeated device-like payments, but “does not demonstrate a charging business or hardware deployment.” MeterNet is a small hardware deployment.
The everyday problem. Where I live, one MiFi or phone hotspot often serves a room, a shop or a compound. Settling up is done three ways, and each one leaks:
| How it’s paid today | What goes wrong |
|---|---|
| Transfer or cash up front | Fixed amount, no refund for unused data, owner chases late payers |
| Printed voucher codes | Owner sells codes in person; unused balance is lost; codes get shared |
| “Pay me later” | Arguments, unpaid usage, owner stops sharing |
Existing work, and what this reuses. The report puts generic usage metering in “reuse now”, so MeterNet does not build a new metering protocol:
- Trickle already does signed grants, budget enforcement and per-tick keysend on testnet. Week 1 tries Trickle’s per-tick pattern against the hotspot box before writing anything new.
- Scryve Reads and the FNN WASM path show in-page browser nodes. MeterNet uses the official WASM / fiber-js node, not a custom one.
- x402
uptolists bandwidth as a use case, and voucher codes already exist offline. Both are the baselines MeterNet is compared against.
What is new: a Fiber node on the provider’s own hardware, gating a real network link, with users who are not crypto users, measured over 14 days.
Why Fiber, and when it is not needed. The hotspot owner and the users share no billing operator, and a channel lets a phone pay every 2 MB with no signature per payment. Unspent balance stays in the user’s channel, so there is nothing to refund. If users fully trust the owner, a voucher or prepaid credit is simpler. Hypothesis H4 below tests exactly that.
4. Solution
What a user does:
- Joins the “MeterNet” Wi-Fi. A portal page opens.
- Opens one private channel to the hotspot from a browser Fiber node, funded with testnet CKB from the faucet.
- Gets internet. The page pays for each next 2 MB in the background.
- Closes the tab or stops paying. Access closes within 15 seconds.
Pre-registered hypotheses. Posted on this thread before week 1. Anyone may add a scenario, and I commit to running what is added.
| # | Hypothesis | Pass if | If it fails, the report publishes |
|---|---|---|---|
| H1 | Fiber can meter a live session | ≥ 95% of 2 MB chunk payments settle in < 5 s | Failure classes and timings |
| H2 | The meter enforces payment | 100% of unpaid sessions closed within 15 s, across 6 scenarios × 3 runs | Which scenario leaks free data, and how much |
| H3 | An independent provider needs no manual inbound liquidity | Outside host runs 14 days, ≥ 500 payments, ≤ 2 manual liquidity actions | Every manual action, with operator minutes |
| H4 | A per-user channel is worth opening | Median user reuses one channel for ≥ 3 sessions | Sessions per channel. If most users come once, a voucher beats a channel and the report says so |
What this pilot does not claim. Users pay with free testnet CKB and the project pays for the mobile data. That is subsidized test traffic, so the report makes no claim about sustained demand. It measures reliability, recovery and operator time.
5. Technical Architecture
Hotspot box (Linux laptop or Raspberry Pi; upstream is a MiFi or phone data):
-
openNDS captive portal with a forwarding auth service (FAS). The meter opens and closes access per device with
ndsctl authandndsctl deauth, and reads per-client traffic fromndsctl json. If those counters are not exposed on the target build, per-device iptables counters are the fallback. -
FNN native node, latest release pinned at kickoff, unpatched. The browser nodes connect to it over WebSocket, since WASM builds dial ws/wss addresses. It auto-accepts incoming channels above its configured minimum.
-
meterd (TypeScript), the meter loop:
- A device asks for the next 2 MB. meterd calls
new_invoiceand returns the invoice. - The browser pays with
send_payment. meterd pollsget_invoiceuntil the status isPaid. - On
Paid, that device’s allowance rises by 2 MB. - If usage reaches the allowance and nothing lands within a 15 s grace window, meterd runs
ndsctl deauth.
If Trickle’s per-tick keysend runs on the current FNN release in week 1, meterd uses it instead of invoices, and
FIBER_NOTES.mdrecords the comparison. - A device asks for the next 2 MB. meterd calls
-
Walled garden: before the first payment, a device can reach only the portal, the box’s Fiber node and a CKB testnet RPC, so the channel-funding transaction can go out.
User’s phone: a portal page running the official WASM / fiber-js node. It calls connect_peer to the box, then open_channel with public: false and one_way: true, because the channel only ever pays the hotspot.
Logging: each chunk records a hashed device ID, invoice, payment hash, preimage, timings, bytes, and the reason for every cutoff. Logs are append-only JSON and published at the end.
Hard parts, which are the point of the test:
- Android and iOS open captive portals in a mini-browser that stops scripts when it closes. Users have to move to a real browser tab, and the drop-off is measured.
- Locked screens and background tabs can pause the payment loop.
- The box’s own 4G uplink can drop. Users must not be cut off for the box’s failure.
- Browser recovery. The report notes that IndexedDB persistence and backup/restore exist, but recovery after tab closure or device loss “still needs product-level testing.” Scenarios 1 and 2 test it on real phones.
Out of scope: mainnet, real money, stablecoins, public resale of data, OpenWrt router firmware, any business.
6. Weekly Execution Plan
| Week | Focus | Concrete output |
|---|---|---|
| 1 | Box: openNDS + FAS + FNN + meterd; try Trickle’s per-tick pattern | docker compose up brings up a hotspot on a laptop; meterd tests pass against a mocked FNN RPC; keysend-vs-invoice decision written in FIBER_NOTES.md |
| 2 | Browser client + end-to-end on testnet | First metered session on my own phones; tag v0.1; hypotheses and scenarios posted on this thread |
| 3 | Failure lab: 6 scenarios × 3 runs (tab closed, screen locked, box uplink dropped, box rebooted, user stops paying, user channel empty) | Scenario table with payment hashes and cutoff times for every run |
| 4–5 | Field pilot: 14 days, 2 hotspots (mine + 1 outside host), ≥ 10 outside users | Daily log export; every manual liquidity action timestamped by the host |
| 6 | Report + reproducibility | meternet report logs/ rebuilds every number; logs and report published; closing post on this thread |
The outside host and users confirm on this thread before week 4. If fewer than 10 users join, the report states the real number as a result.
7. Funding Requirements: $980 in CKB
Bottom-up at $15/hour, 58 hours.
| Item | Hours | Cost (USD) |
|---|---|---|
| Box image, openNDS FAS, meterd + tests, Trickle trial | 18 | 270 |
| Browser client (WASM node, channel open, auto-pay) | 16 | 240 |
| Failure lab runs (6 × 3) and write-up | 8 | 120 |
| Pilot support and daily log checks | 8 | 120 |
| Report generator, log publishing, closing post | 8 | 120 |
| Second box for the outside host (used Raspberry Pi 4 + SD card, estimate; receipt published) | – | 60 |
| Mobile data for 2 hotspots over 14 days (estimate; receipts published) | – | 40 |
| Small VPS for log backup, 2 months | – | 10 |
| Total | 58 | 980 |
20% at launch ($196). The remaining 80% ($784) on completion against the deliverables in section 8. Fund usage is disclosed at completion against this table.
8. Deliverables and Verification
None of these checks needs a code review.
| Deliverable | How to verify |
|---|---|
| Hotspot box | On a Linux laptop with Wi-Fi, run docker compose up and join “MeterNet-demo” from a phone: no internet before the first payment, internet after it |
| Meter enforcement | Close the tab mid-session: access closes within 15 s and the cutoff appears in the log |
| Test suite | npm test passes, including the 6 failure scenarios against a mocked FNN |
| Channel and payment evidence | Every channel-funding tx hash in the report opens on the CKB testnet explorer; meternet verify logs/ checks every preimage against its payment hash |
| Field report (H1–H4) | meternet report logs/ on the published logs rebuilds every number; diff against the published copy |
| Independent participants | Outside host’s and users’ confirmation replies on this thread, dated before week 4 |
| FNN notes | FIBER_NOTES.md lists each bug or gap found, each linked to an upstream issue |
9. Current State vs. Funded Scope
Already exists (not funded): the meternet repo with README, architecture notes, and the meterd state-machine skeleton with one failing test.
Funded by this grant: hotspot box image, meterd, browser client, failure lab, 14-day field pilot, report generator, published logs, FNN notes.
Explicitly out of scope: mainnet, real-money payments or a stablecoin, public resale of data, router firmware, business or go-to-market work.
10. CKB Ecosystem Alignment
- Consumption-side Fiber app. It needs frequent, small, unsigned payments between parties who share no billing operator.
- Evidence the opportunity map asks for: it brings a provider and users not created for the demo, measures completion, latency, retries, recovery and operator time, and publishes enough to reproduce.
- Reuses before building: official WASM / fiber-js node, Trickle’s per-tick pattern if it runs, unpatched FNN.
- Honest limit: testnet only. With USDI’s operator ceasing operations there is no public mainnet stable-value route to price data in. The report records what a mainnet version would need, without claiming it.
Risks and Mitigations
| Risk | Mitigation |
|---|---|
| Fewer than 10 outside users join | Recruit from a hostel and a shop before week 4; if still short, report the real count |
| Outside host drops out | A named backup host confirms on this thread before week 4 |
| Mini-browser stops the payment loop | That is H2 data; the portal moves users to a real browser tab and the drop-off is measured |
| Data-sharing terms and consumer protection | Pilot only among consenting participants, on the project’s own data plans, no public resale, no real money |
| FNN or WASM bug blocks the flow | Pin the release, file the issue, document the workaround in FIBER_NOTES.md |
中文版
1. 项目概述
- 项目名称: MeterNet
- 一句话简介: 一个开源热点盒子(任意 Linux 笔记本或树莓派),按 MB 出售 Wi-Fi,只有在 Fiber 小额支付持续到账时,手机才保持联网。
- 项目类型: 可运行原型 + 公开实地报告(2 个热点、≥10 名外部用户、14 天、测试网)
- 申请资金: 980 美元,以 CKB 支付
- 周期: 6 周
MeterNet 是消费侧的 Fiber 应用,而不是又一个支付入口。Fiber 本身就是计量器:每次放行 2 MB,停止付款后数秒内断开。
2. 团队简介
Timilehin Olowu(个人),全栈与区块链工程师,尼日利亚拉各斯。
- 我开发了 ZecKit,一个由 Zcash 基金会资助的开源 Zcash 钱包基础设施项目。
- Wheelers 创始人兼 CTO,这是一个在拉各斯运营、有真实乘客和司机的网约车平台。
- 在 EVM、Stellar/Soroban、Sui 和 Monad 上交付过项目。
- 初次接触 Fiber。在 FNN 上遇到的任何问题都会公开记录并提交上游,不做私有补丁。
GitHub: Timi16 · GitHub · 仓库: GitHub - Timi16/meternet: An open-source hotspot box (any Linux laptop or Raspberry Pi) that sells Wi-Fi per megabyte and keeps each phone online only while small Fiber payments keep arriving. · GitHub · 联系方式: Nervos Talk 私信
3. 项目背景
我为什么想做这个。 我在拉各斯运营网约车应用 Wheelers,经常需要处理支付在弱手机网络下的表现。Fiber 是我见过的第一个能按 MB 收费的支付通道,我想在真实手机和真实的拉各斯 4G 网络上验证它,而不是靠猜。
针对的缺口。 《AI、机器支付与 Fiber 2026:CKB 与 Fiber 开发者机会地图》(证据截至 2026 年 8 月 22 日)列出了检验 Fiber 假设的问题。MeterNet 为其中三个提供实地数据:
- 独立服务方能否在不手动解决入站流动性的情况下持续收款?
- 浏览器端 Fiber 会话在标签页关闭、设备丢失或 FNN 升级后能否安全恢复?
- 什么样的真实负载足够需要双向或非 USDC 结算,从而值得承担通道操作?
同一报告指出,Fiber 充电模拟证明一个通道可以承载重复的设备类支付,但并未展示充电业务或硬件部署。MeterNet 是一次小规模的硬件部署。
日常问题。 在我生活的地方,一个 MiFi 或手机热点常常供一个房间、一家小店或一个院子共用。结算方式有三种,每种都有漏洞:
| 目前的付款方式 | 问题 |
|---|---|
| 预先转账或付现金 | 金额固定,未用完的流量不退,主人要追讨欠款 |
| 打印的充值码 | 主人需当面售卖;余额作废;充值码被转借 |
| “以后再付” | 争执、白用、主人不再分享 |
已有工作与复用。 报告把通用用量计量列为"直接复用",因此 MeterNet 不新建计量协议:
- Trickle 已在测试网实现签名授权、预算控制和按次 keysend。第 1 周先在热点盒子上试用 Trickle 的按次模式,再决定是否写新代码。
- Scryve Reads 和 FNN WASM 路径展示了页内浏览器节点。MeterNet 使用官方 WASM / fiber-js 节点,不自制节点。
- x402
upto把带宽列为用例,线下也已有充值码。两者都是 MeterNet 的对照基线。
新的部分:Fiber 节点运行在服务方自己的硬件上,控制真实的网络链路,用户不是加密货币用户,并进行 14 天的测量。
为什么用 Fiber,以及何时不需要。 热点主人与用户之间没有共同的计费运营方,通道让手机每 2 MB 付款一次且无需逐笔签名。未花完的余额留在用户通道里,无需退款。如果用户完全信任主人,充值码或预付额度更简单,下文的 H4 正是检验这一点。
4. 解决方案
用户流程:
- 连接 “MeterNet” Wi-Fi,打开门户页面。
- 用浏览器 Fiber 节点向热点开一个私有通道,资金来自测试网水龙头的 CKB。
- 开始上网,页面在后台为下一个 2 MB 付款。
- 关闭页面或停止付款,15 秒内断网。
预先登记的假设。 第 1 周前发布在本帖,任何人都可以追加场景,我承诺执行所有追加的场景。
| # | 假设 | 通过标准 | 若失败,报告公开 |
|---|---|---|---|
| H1 | Fiber 能为实时会话计量 | ≥95% 的 2 MB 分块付款在 5 秒内完成 | 失败类别与耗时 |
| H2 | 计量器能强制付款 | 6 个场景 × 3 次中,100% 未付款会话在 15 秒内断开 | 哪个场景漏出免费流量、漏了多少 |
| H3 | 独立服务方无需手动处理入站流动性 | 外部主人运行 14 天,≥500 笔付款,≤2 次手动流动性操作 | 每次手动操作及耗时 |
| H4 | 每个用户开一个通道是值得的 | 用户中位数在同一通道上使用 ≥3 次会话 | 每通道会话数;若多数用户只来一次,充值码优于通道,报告会如实说明 |
本次试点不声称的内容。 用户使用免费测试网 CKB,流量费用由项目承担,属于补贴测试流量,因此报告不对持续需求做任何声称,只测量可靠性、恢复能力和运营时间。
5. 技术架构
热点盒子(Linux 笔记本或树莓派,上游为 MiFi 或手机流量):
-
openNDS 门户,配合转发认证服务(FAS)。计量器用
ndsctl auth/ndsctl deauth按设备开关网络,并从ndsctl json读取每个客户端的流量;若目标版本未提供这些计数,则改用按设备的 iptables 计数。 -
FNN 原生节点,启动时锁定最新正式版本,不打补丁。浏览器节点通过 WebSocket 连接它(WASM 版本使用 ws/wss 地址),它自动接受高于设定最低额的入站通道。
-
meterd(TypeScript)计量循环:
- 设备请求下一个 2 MB,meterd 调用
new_invoice并返回发票。 - 浏览器用
send_payment付款,meterd 轮询get_invoice直到状态为Paid。 - 状态为
Paid时,该设备额度增加 2 MB。 - 用量达到额度且 15 秒宽限期内没有付款到账,meterd 执行
ndsctl deauth。
若 Trickle 的按次 keysend 在第 1 周能在当前 FNN 版本上运行,meterd 改用它代替发票,并在
FIBER_NOTES.md中记录对比。 - 设备请求下一个 2 MB,meterd 调用
-
白名单: 首次付款前,设备只能访问门户、盒子的 Fiber 节点和一个 CKB 测试网 RPC,以便发出通道注资交易。
用户手机: 门户页面运行官方 WASM / fiber-js 节点,先 connect_peer 连接盒子,再以 public: false、one_way: true 调用 open_channel,因为该通道只向热点付款。
日志: 每个分块记录哈希后的设备 ID、发票、支付哈希、原像、耗时、字节数和每次断开的原因。日志为只追加 JSON,结束时公开。
难点(也正是测试重点):
- Android 和 iOS 用迷你浏览器打开门户,关闭时脚本停止,用户需切换到正式浏览器标签页,流失率会被测量。
- 锁屏和后台标签页可能暂停付款循环。
- 盒子自身的 4G 上行可能掉线,不能因盒子故障而断开用户。
- 浏览器恢复:报告指出 IndexedDB 持久化和备份/恢复已可用,但标签页关闭或设备丢失后的恢复仍需产品层面测试。场景 1 和 2 在真实手机上测试这一点。
不在范围内: 主网、真实资金、稳定币、公开转售流量、OpenWrt 路由器固件、任何商业活动。
6. 执行计划
| 周 | 重点 | 具体产出 |
|---|---|---|
| 1 | 盒子:openNDS + FAS + FNN + meterd;试用 Trickle 按次模式 | docker compose up 在笔记本上启动热点;meterd 在模拟 FNN RPC 下测试通过;keysend 与发票的选择记录在 FIBER_NOTES.md |
| 2 | 浏览器客户端 + 测试网端到端 | 在我自己的手机上完成首次计量会话;打 v0.1 标签;在本帖发布假设和场景 |
| 3 | 故障实验:6 个场景 × 3 次(关闭标签页、锁屏、盒子上行掉线、盒子重启、用户停止付款、用户通道余额耗尽) | 每次运行的支付哈希和断开时间表 |
| 4–5 | 实地试点:14 天,2 个热点(我的 + 1 个外部主人),≥10 名外部用户 | 每日日志导出;主人为每次手动流动性操作打时间戳 |
| 6 | 报告 + 可复现性 | meternet report logs/ 重建所有数据;公开日志和报告;在本帖发布结项 |
外部主人和用户在第 4 周前于本帖确认。若加入用户少于 10 人,报告如实写明人数。
7. 资金需求:980 美元(以 CKB 支付)
按 15 美元/小时自下而上估算,共 58 小时。
| 项目 | 小时 | 费用(美元) |
|---|---|---|
| 盒子镜像、openNDS FAS、meterd 及测试、Trickle 试用 | 18 | 270 |
| 浏览器客户端(WASM 节点、开通道、自动付款) | 16 | 240 |
| 故障实验(6 × 3)及记录 | 8 | 120 |
| 试点支持与每日日志检查 | 8 | 120 |
| 报告生成器、日志发布、结项帖 | 8 | 120 |
| 外部主人的第二台盒子(二手树莓派 4 + SD 卡,估价;公开收据) | – | 60 |
| 2 个热点 14 天的流量费(估价;公开收据) | – | 40 |
| 日志备份用小型 VPS,2 个月 | – | 10 |
| 合计 | 58 | 980 |
启动时发放 20%(196 美元),其余 80%(784 美元)在完成第 8 节交付物后发放。结项时按本表公开资金使用情况。
8. 交付物与验证方式
以下验证均无需代码审查。
| 交付物 | 验证方式 |
|---|---|
| 热点盒子 | 在带 Wi-Fi 的 Linux 笔记本上运行 docker compose up,用手机连接 “MeterNet-demo”:首次付款前无法上网,付款后可以上网 |
| 计量强制 | 会话中关闭标签页:15 秒内断网,日志中出现断开记录 |
| 测试套件 | npm test 通过,包括在模拟 FNN 下的 6 个故障场景 |
| 通道与支付证据 | 报告中每个通道注资交易哈希都可在 CKB 测试网浏览器 查到;meternet verify logs/ 校验每个原像与支付哈希 |
| 实地报告(H1–H4) | 对公开日志运行 meternet report logs/ 可重建所有数据,并与公开版本比对 |
| 独立参与者 | 外部主人和用户在第 4 周前于本帖的确认回复 |
| FNN 记录 | FIBER_NOTES.md 列出发现的每个问题,并链接到上游 issue |
9. 当前状态 vs. 资助范围
已存在(不在资助范围): meternet 仓库,包含 README、架构说明,以及带一个失败测试的 meterd 状态机骨架。
本次资助: 热点盒子镜像、meterd、浏览器客户端、故障实验、14 天实地试点、报告生成器、公开日志、FNN 记录。
明确不在范围内: 主网、真实资金或稳定币、公开转售流量、路由器固件、商业或市场推广工作。
10. CKB 生态契合度
- 消费侧 Fiber 应用: 需要在没有共同计费运营方的双方之间进行频繁、小额、无需逐笔签名的支付。
- 提供机会地图所要求的证据: 引入非为演示而创建的服务方和用户;测量完成率、延迟、重试、恢复和运营时间;公开足够信息以便复现。
- 先复用再构建: 官方 WASM / fiber-js 节点;若可运行则复用 Trickle 的按次模式;FNN 不打补丁。
- 如实说明的限制: 仅限测试网。USDI 运营方已宣布停止运营,目前没有公开的主网稳定价值路径可用于为流量定价。报告会记录主网版本所需条件,但不做声称。
风险与缓解措施
| 风险 | 缓解措施 |
|---|---|
| 外部用户少于 10 人 | 第 4 周前在宿舍和小店招募;仍不足则如实报告人数 |
| 外部主人退出 | 一名具名的备用主人在第 4 周前于本帖确认 |
| 迷你浏览器中断付款循环 | 这本身是 H2 数据;门户引导用户切换到正式浏览器,并测量流失率 |
| 流量共享条款与消费者保护 | 仅在知情同意的参与者之间、使用项目自己的流量套餐试点,不公开转售,不涉及真实资金 |
| FNN 或 WASM 缺陷阻断流程 | 锁定版本,提交 issue,并在 FIBER_NOTES.md 中记录变通方法 |