Spark Program | Dular

Hi @Hanssen, thanks for pushing on this. I agree this needs to be very explicit.

For the current milestone scope, Dular is not trying to make every mobile/USSD pilot user run an independent Fiber node. The current architecture is operator-managed, because the target users are mobile money users who should not need to manage node uptime, channels, or watchtowers.

So yes, in the hosted mode, multiple users may route through the same Dular-operated Fiber node pubkey. That pubkey represents the Dular Fiber receiving/routing endpoint, not a separate always-on Fiber node for each user.

To avoid confusion, I will describe the registry more precisely as:

phone number → Dular user identity + Fiber receiving endpoint

In the pilot, each user can have a distinct Dular account/user identity, while the Fiber endpoint may be Dular-managed. In a later non-custodial version, the same registry can point to a user-owned or separately hosted Fiber node pubkey.

On external Fiber interoperability: yes, I agree this is important. By the end of the current milestones, Dular should include a Fiber interoperability flow.

  • Send to non-Dular Fiber user: user pastes/provides a Fiber invoice, Dular debits their Dular balance and pays the invoice through the operator-managed Fiber node.
  • Receive from non-Dular Fiber user: Dular generates a Fiber invoice tied to the Dular user account, and once the external Fiber payment succeeds, Dular credits that user’s balance.

This means Dular users still get the simple phone-number/USSD experience, but assets are not trapped inside Dular. They can enter and exit through standard Fiber invoice flows.

So the final architecture for this grant should be understood as:

  • Mobile/USSD users do not run Fiber nodes themselves.
  • Dular operates the Fiber node/channel infrastructure during the pilot.
  • Internal phone-number transfers can remain abstracted for UX.
  • External Fiber invoice send/receive should be supported so Dular remains interoperable with the wider Fiber network.
  • A future fully non-custodial version can move from Dular-managed endpoints to user-owned or hosted per-user Fiber nodes
1 Like

Hello, thank you for the reminder.

Apologies for the delay in weekly updates. The main reason is that our next milestone depends heavily on production USSD access, and we have been trying to resolve that before giving a substantive update.

Our original plan was to use Africa’s Talking shared USSD code, as stated in the proposal. However, after requesting production access, the Africa’s Talking team informed us that for crypto-related services they require a dedicated USSD setup rather than the shared USSD option. The dedicated USSD route is significantly more expensive and currently exceeds the budget we allocated for this milestone.

Because of this, we have been exploring alternative options and trying to find a practical route that still allows us to complete the USSD milestone properly. We have not yet found a perfect fit, but we have set this coming week as our final deadline to resolve the USSD path and provide a clear decision/update. Without production USSD access, we cannot honestly claim the next milestone as complete beyond the simulator-tested implementation we already built.

On @Hanssen’s architecture questions: I have now responded directly in the thread.

Going forward, I will resume weekly updates even when the update is mainly about blockers or dependency resolution, so the committee and community have better visibility.

1 Like

Hi @duongja — thanks for the architecture clarifications in post #15. I reviewed the public repo to understand how Fiber fits in practice, and I have a few follow-up questions on the final milestone scope.

1. How do users access and spend funds without running their own Fiber node?

You described a managed-wallet model where internal transfers use an application ledger rather than per-transfer Fiber channel updates.

  • For a typical user sending RUSD via the app or USSD, what exactly authorizes the spend — a ledger entry only, or an underlying Fiber payment?
  • If Dular’s backend or operator node is unavailable, can users still access or recover their funds independently?
  • By the end of all milestones, will mobile/USSD users still depend entirely on Dular-operated infrastructure, or will any users run user-owned or hosted-per-user Fiber nodes?

2. How will channel liquidity be managed?

Fiber payments depend on liquidity in the right channels (local balance, inbound capacity, routing).

  • Who funds and rebalances the operator channels (RUSD and CKB for fees)?
  • For deposits and withdrawals, which movements actually happen on Fiber vs. only in the ledger / M-Pesa layer?
  • As user count and volume grow, what is your strategy for inbound liquidity, outbound liquidity, and routing across relay nodes?

3. How are peer connectivity and channels handled?

In standard Fiber usage, payers and receivers typically need connectivity and channel relationships before payments can flow.

  • Do users each get a distinct Fiber pubkey/identity, or do they share operator node key material? (Related to Hanssen’s question in post #19.)
  • For internal Dular transfers, are any Fiber channels opened between user identities, or is routing entirely at the operator/relay layer?
  • For deposits, withdrawals, and any future external Fiber payments: when and how are channels opened — at onboarding, on first payment, or via shared hub-and-spoke channels to relay nodes?

Thanks.

3 Likes

Hi @duongja ,

The review committee has no further comments or follow-up questions on your current submission.

Please note, however, that if you encounter issues that are difficult to resolve, you should promptly provide a brief update to the committee and the community.

Best,
xingtian
On behalf of the Spark Program Committee

2 Likes

Hello everyone,

I want to give a clear update on two things: the USSD blocker and the architecture direction for Dular after the feedback from @Hanssen and @ebubedev.

USSD update

We implemented the USSD interface and tested it through the Africa’s Talking simulator. The current implementation supports balance checks, phone-number sends, receive details, M-Pesa deposit initiation, PIN setup, and a withdrawal placeholder. The simulator evidence and implementation are already in the public repo.

However, we will not use USSD as the main live testing channel for the next phase.

The reason is that our original proposal budgeted for Africa’s Talking shared USSD codes. After engaging Africa’s Talking for production access, they informed us that for crypto-related services they require a dedicated USSD code, not the shared USSD option. The dedicated USSD route is significantly more expensive than the shared-code setup we budgeted for, and it is not practical within the current Spark grant amount.

So the USSD implementation will remain in the codebase as a simulator-tested interface, but we will not depend on production USSD for the next live user test phase unless we later secure a dedicated USSD budget or find another production-ready provider.

Architecture update after committee feedback

The questions from @Hanssen and @ebubedev were valid. Our earlier implementation was closer to a managed/operator model:

  • internal Dular transfers were application-ledger based;
  • users did not run their own Fiber nodes;
  • Fiber was used around settlement/proof/liquidity;
  • external Fiber invoice send/receive was not yet exposed as a polished user flow.

That helped us prototype quickly, but I agree it weakens the relationship between Dular and Fiber if users cannot directly control their Fiber identity or interact with external Fiber payments.

Because of this, we are changing the direction for the next phase.

Instead of continuing with USSD as the main live test path, we will move toward a mobile web/PWA flow using Fiber WASM through fiber-js. The goal is to make Dular more directly Fiber-native and closer to self-custody.

The updated direction is:

  • users access Dular through a mobile browser/PWA;
  • the user’s device generates and stores their wallet/Fiber keys locally;
  • Dular backend handles phone verification, registry lookup, M-Pesa coordination, and UX support;
  • the phone-to-pubkey registry maps phone numbers to user-owned Fiber identities/receiving endpoints;
  • Fiber invoice send/receive flows will be exposed so assets can move between Dular users and non-Dular Fiber users;
  • internal transfers should move away from being only ledger entries and toward Fiber invoice/payment flows where technically feasible.

This means the registry becomes closer to what was originally intended:

phone number → user-owned Fiber identity / receiving endpoint

rather than:

phone number → Dular-managed backend account only.

What this means for the final milestone scope

For the live test phase, we are no longer treating production USSD as a hard dependency. The priority is now mobile-phone testing through a browser/PWA self-custody flow.

The target final architecture for this grant becomes:

  • mobile users do not need to install or manage a desktop Fiber node;
  • the browser runs Fiber WASM where possible;
  • user keys are generated and stored locally on the user’s device;
  • Dular does not need to custody the user’s private key;
  • Dular still provides phone-number identity, M-Pesa integration, and coordination services;
  • users should be able to send to and receive from external Fiber users through invoice flows.

Longer term, we can still support other modes:

  • hosted nodes as a service for users who want convenience;
  • native mobile support if Fiber mobile tooling matures;
  • USSD if we later secure a dedicated code or a viable provider;
  • operator-managed liquidity nodes for routing/rebalancing support.

But for now, the practical decision is:

  • keep the USSD implementation and simulator evidence in the repo;
  • do not rely on production USSD for the next live test phase;
  • move the main testing path toward mobile web + Fiber WASM + user-controlled keys;
  • strengthen direct Fiber interoperability instead of relying mainly on an internal ledger abstraction.

This should address the core concern that Dular must not become a closed mobile-money ledger with Fiber only in the background. The updated path makes Fiber central to the user identity and payment flow while still preserving Dular’s original goal: making stablecoin payments usable from ordinary mobile phones.

4 Likes

Hi @duongja ,

Regarding your recent request for a change of direction, after careful review, the committee has reached the following decision:

  • The committee is willing to approve your request to adjust the project’s direction, provided that deposit and withdrawal functions continue to operate normally. Provided this condition is met, the proposed changes to the milestones may be accepted, and the grant amount need not be adjusted.

However, before formally updating the milestones, please clearly specify the status of the deposit and withdrawal functions. This is a prerequisite for approval of the change in direction.

Please provide a clear status update on this matter.

Best,
xingtian
On behalf of the Spark Program Committee

2 Likes

Dular Fiber Web Implementation Completion Report

Hello everyone,

We have completed the proposed transition to a mobile web architecture where Fiber is central to the user identity and payment flow.

Links

Fiber Implementation Completed

The following functionality is now implemented and deployed:

  • Fiber runs directly in the mobile browser through Fiber WASM and fiber-js.
  • Each user’s Fiber and CKB keys are generated on their device.
  • Private keys are stored locally and encrypted using the user’s wallet PIN.
  • Dular does not store or control users’ private keys.
  • Each verified phone number is bound to a user-owned Fiber public key and receiving endpoint.
  • Users can send direct Fiber payments to other Dular users using phone numbers.
  • Phone-number payments resolve the recipient’s registered Fiber identity and settle through Fiber rather than an internal Dular ledger.
  • Users can create and pay standard Fiber invoices.
  • Users can send to and receive from non-Dular Fiber wallets.
  • Payment requests can be shared through QR codes and payment links.
  • The application supports camera scanning and QR scanning from saved images.
  • Browser wallets connect to the Dular Fiber operator for channels, routing, and liquidity support.
  • Users can inspect Fiber channels, balances, payment hashes, invoices, and transaction status.
  • A unified activity page records Fiber sends, receives, payment requests, channel activation, wallet registration, and related operations.

The Dular backend now acts as a phone registry, coordination service, and liquidity operator. It does not act as the owner of the user’s Fiber wallet.

The active architecture is now:

Phone number -> user-owned Fiber identity -> direct Fiber payment

Deposit and Withdrawal Status

As requested by the committee, the architecture change has not removed the deposit or withdrawal paths.

  • Deposit: Implemented and operational. Deposits settle by paying an exact invoice created and signed by the user’s browser Fiber wallet. Funds are delivered through Fiber and are not credited to an internal Dular balance.
  • Withdrawal: The Fiber side is implemented. The browser validates and pays an exact operator invoice, and the backend includes payout tracking, reconciliation, and refund handling. Production payout execution remains gated by the external provider credential requirement previously reported.

Verification

The implementation currently passes:

  • 53 automated tests covering Fiber routing, invoices, payments, channels, wallet identity binding, deposit and withdrawal state handling, refunds, and activity history.
  • Lint validation.
  • Production build validation.

The implementation is publicly available for committee and community testing through the application and repository links above.

Next Milestone

The web implementation change proposed in response to the committee’s feedback is complete. Dular now provides a working mobile, self-custody, Fiber-native wallet with phone-number payments and external Fiber interoperability.

We are ready to proceed to the next milestone, focused on:

  • Live mobile user testing.
  • Fiber channel and routing reliability.
  • Testing payments between Dular and external Fiber wallets.
  • Collecting user feedback and transaction evidence.
  • Improving recovery and mobile wallet usability.

We therefore request approval to proceed to the next milestone and the release of 400,000 CKB for the next phase of implementation and live testing.

2 Likes

Hi @duongja! I just wanted to confirm some more details: is the fiat currency deposit channel proposed in the initial proposal still working properly in the current project?

1 Like

Absolutely 100% @Hanssen

3 Likes

Hi @duongja ,

第三笔打款已发放。

交易哈希:0x26ea40585bb2fc5e0b918940d7a14760180f73efcd21cb455a83943198dbf724

由于委员会使用的多签钱包出现故障,委员会临时使用个人钱包打款完成项目所需支付,垫付部分后续会从多签钱包回款。

Best,
xingtian
On behalf of the Spark Program Committee

1 Like

Hi Duongja! If there are any updates, difficulties, or challenges, please feel free to communicate and discuss them with the committee in the thread.

2 Likes

We are winding down this week, all good

1 Like

Hi @duongja ,

We noticed that it has been some time since your last progress update. However, you previously mentioned that the conclusion phase was proceeding smoothly, so we are contacting you to ask about the latest progress.

First, I hope you and your team are doing well. Please take good care of your health and maintain a balance between work and rest.

From the project’s perspective, we are eager to understand the current progress—whether it is advancing smoothly, encountering any obstacles, or what the overall status is. Even a brief update can help the committee and the community stay informed and provide support when needed.

Please share the latest status at your earliest convenience. If there are any difficulties affecting progress, please do not hesitate to let us know—the committee is willing to provide every assistance.

We look forward to your reply.

Best,
xingtian

Hi @duongja ,

Last week, we attempted to get in touch with you to inquire about the progress of the project and the status of your team, but we still haven’t received a reply to date.

We genuinely hope everything is okay on your end. However, the committee has the responsibility to ensure that allocated funds are used effectively and that all projects remain accountable to the public.

Please provide a progress update at your earliest convenience. If the project has encountered blockers or if the timeline needs adjustment, we are open to discussing it — but we do need to hear from you. Rather than lose a promising project, we would prefer to work with you to overcome these challenges.

Continued silence will lead the committee to determine that the project is no longer active and terminate its funding.

Best,
xingtian
On behalf of the Spark Program Committee

cc: @zz_tovarishch @yixiu.ckbfans.bit @Hanssen

Hello @xingtianchunyan

Thank you for reaching out, and apologies for the delayed reply.

We recently identified an issue. Our internal systems were not saving the transaction evidence after completion. We only discovered this after the process had finished. It stemmed from our server configurations, combined with an error-handling path we had not anticipated. As a result, the operator node lost connection without communicating the failure.

We are now redoing the process and expect to complete it within the next two days.

We appreciate the committee’s patience and remain fully committed to delivering.

1 Like

Hello @duongja ,

When we received your message five days ago and learned that you would soon provide the committee with a formal progress update, everyone was very excited. However, several days have now passed since the “completion within two days” commitment you mentioned, and perhaps you have recently encountered new urgent matters or development bottlenecks. As of now, we still have not seen your formal status update.

In the world of blockchain and open source, we fully understand that project progress can be unpredictable, and that development delays or unexpected obstacles are common. Even if you have truly encountered a major obstacle that is difficult to overcome, being willing to discuss it openly with the community would still provide invaluable lessons from the experience for the ecosystem. We have always been willing to stand alongside developers, but this requires us to stay connected and honor our communication commitments to one another.

According to the “Completion Policy” under Section 3.3 of our “Spark Program: Microgrant Initiative,” in the following extreme circumstances, the committee will have no choice but to terminate the project and suspend the disbursement of any further funding in order to act responsibly toward the public resources of the entire community:

  • A sustained lack of substantial progress over an extended period (more than two weeks) without a reasonable explanation;
  • A serious deviation from the original project direction or use of funds without the committee’s approval;
  • Significant integrity or fabrication issues.

As the deadline you previously committed to has already been delayed, we are reaching out for one final follow-up this week: if we still do not receive an official response or project update from you by the end of this Sunday (2026-09-13), the project will unfortunately be terminated in accordance with the procedure, and the remaining funding support will be discontinued accordingly.

If you encounter difficulties that you truly cannot resolve, or would like to discuss how to adjust the direction of your project, please don’t hesitate to reply to this email at any time. The committee’s door is always open, but we need to build our relationship on positive, honest, and timely communication from both sides.

We sincerely look forward to hearing from you. Wishing you all the best!

Sincerely,
xingtian
On behalf of the Spark Program Committee

cc: @zz_tovarishch , @Hanssen , @yixiu.ckbfans.bit

2 Likes

Hello @xingtianchunyan @zz_tovarishch @Hanssen .

Dular completion report

What was delivered

Milestone 1: Phone identity + M-Pesa deposit ramp: OTP verification via Africa’s Talking, database-backed phone → Fiber pubkey registry with public lookup, production Daraja STK Push deposits settling through Fiber, RUSD credited after settlement.

Milestone 2: USSD interface (simulator-tested): full menu (balance, send, receive, deposit, PIN), 20 Africa’s Talking simulator sessions committed under verification/milestone-2/. No production dial code, a dedicated code was required for crypto services and is out of budget, so this stays simulator-only.

Milestone 3 + approved pivot: self-custody web wallet: per committee feedback the app moved from operator-ledger to Fiber-native. Browser runs the Fiber wallet (keys generated and PIN-encrypted on-device), phone numbers map to user-owned Fiber identities, phone-number sends and standard Fiber invoice send/receive (including external Fiber wallets) settle over Fiber, not an internal ledger. 53 automated tests pass, lint and build clean.

How to verify

curl https://dular.vercel.app/api/health
curl https://dular.vercel.app/api/verification/pilot | python3 -m json.tool
curl https://dular.vercel.app/api/registry/lookup?phone=%2B254718948041

Live counts at reporting time: 30 users, 31 channels, 57 successful Fiber payments, 32 completed ramp orders. Each channel entry carries its funding tx hash + explorer URL; each ramp order links its redacted verification record.

Reminder: Fiber payment hashes are off-chain identifiers, verify via Fiber RPC get_payment/list_payments. CKB Explorer verifies the channel funding cells (FundingLock 0x6c67887fe201ee0c7853f1682c0b77c0e6214044c156c7558269390a8afa6d7c, RUSD 0x1142755a044bf2ee358cba9f2da187ce928c91cd4dc8692ded0337efa677d21a). Reference multi-hop proof: Fiber 0x20fd6c4a9d9e207420b4f55b4ae095eee9840fca1678afc89f9065298fe4a9e2, funding 0xefdb791ac44ba1af435ae2b22f5572862519865990185d3c0d0cd5bd068e9e39 and 0x6156f3a8f46063d529f74df2a40407fc79ac70322615d2e862875eedf2b6a79c.

Pilot results (n=23)

  • Avg ratings (/5): onboarding 3.96, deposit 3.70, send 3.96, reliability 3.39
  • Would use again: 19/23.
  • 7 reported no issues. Remaining feedback clusters: STK/liquidity messaging, invoice expiry and QR edge cases, Swahili coverage, recovery-phrase backup, PIN naming. Full responses: verification/milestone-3/pilot_feedback.csv

Stated limits

  • Feedback coverage 23/30 (onboarding hit 30).
  • RUSD is a capped testnet pilot asset, not production money.
  • USSD is simulator-only.

Requesting committee review and close-out on the above evidence. Thank you for the support and the architecture guidance that made the Fiber-native pivot happen.

2 Likes

Hi, @duongja,

We are very pleased to see your reply so promptly.
Congratulations – the Dular project has officially entered the finalization and evaluation phase.
The committee will review the submitted materials as soon as possible.

Warm regards,
xingtian

4 Likes

Hello @xingtianchunyan , any updates?

I’ve also shared our founder findings from building this, loops vs wallets, the missing identity layer, where the real margins are, and the offline-receiver problem we’re tackling next here: link

Built from our pilot, written for Fiber/CKB builders. Pushback welcome, especially on Finding 4.

2 Likes