No. 01 · A savings circle on Arc

A savings circle that shows its work.

EqubFlow runs a rotating savings group on Arc. It checks that every contribution really arrived, explains each decision in plain words, and can only pay the person whose turn it is.

Test money. No real value. Built for the Tameion hackathon.
No. 02 · How a round works

How a round works.

STAGE: COLLECTARC TESTNET VERIFIED
Active state:

Each member sends their share to the group's safety lock.

No. 03 · Check it yourself

Do not take our word for it.

Pick a demo circle. Your browser re-computes the record from the first entry and tells you whether anything was changed.

In-Browser WebCrypto Verifier
Chain broken at entry #.
#1group_created: Circle of six created on Arc Testnet with 4 members.
c018249fae…837461
#2rules_frozen: Rules version 1 frozen: fingerprint 3f9a72c918ae902148bf901b0849201948ba170cef
d128394018…384729
#3contribution_matched: Alice contribution of 10000 base units matched on Arc Testnet.
e239482019…384729
#4proposal_approved: Selam's late payment accepted by 2 members. Latency recorded.
f340592019…384729
#5payout_authorized: Round 1 pot of 40000 base units released to Alice (Recipient).
0451602019…384729
No. 04 · Where the assistant decides

Where the assistant decides.

Situation
The assistant may choose
Code forbids
A payment is shortExample
Ask for the rest, hold, or escalate
Counting the full amount
A payment is lateExample
Accept it with the lateness recorded, apply the group's late rule, or escalate
Accepting without a decision
A payment comes from an unknown senderExample
Hold it, or ask who sent it
Crediting any member
A member missed the deadlineExample
Cover from reserve, delay the payout, pay a reduced pot, or escalate
Paying more than was collected plus approved cover
A member asks to swap turnsExample
Recommend yes or no
Swapping without the approvals the rules require
Idle money sits between roundsExample
Keep it liquid, move a bounded share, or redeem
Moving money when a round is live or locked

The assistant never moves money. Software checks every choice, and a separate process sends payments.

No. 05 · What it cannot do

What it cannot do.

Deterministic Safety Pipeline
Assistant
Suggests
→
Checker
Is choice allowed?
→
Authorizer
Writes record
→
Executor
Only part that pays
→
Pot
1. It cannot choose who gets paid.
2. It cannot pay twice for one round.
3. It cannot act while the circle is paused.
4. It cannot change the rules during a cycle.
Honest note: Today the pot is held by a wallet that the executor controls. A small contract on Arc that limits even a compromised executor is designed in the project documents and is being tested on testnet.
No. 06 · Built on Arc

Built on Arc.

1. Payments settle in USDC on Arc, with a public receipt link.Arc Explorer >>
2. Member and pot wallets are created with Circle's developer-controlled wallets.Circle Documentation >>
3. Idle funds were tested with USYC on Arc testnet: a deposit and a redemption both completed.Teller: 0x9fdF…105A
4. The code and tests are public under Apache-2.0.GitHub Repository >>
No. 07 · The evidence so far

The evidence so far.

Metric
Real group
Simulated runs
People taking partNot yet4
Rounds completedNot yet1
USDC moved (test money)Not yet0.40 USDC
Decisions recordedNot yet20
Discrepancies resolvedNot yet1 (Late)
Automated tests passingNot yet73 of 73
Last generated: 2026-10-12T13:34:29ZHow we count >>

Only real people making their own decisions count as real.

No. 08 · Honest limits

What this demo is, and what it is not.

This demo is
It is not
A small circle of six people using test money
A bank, a lender or a real-money product
Rounds sped up from weeks to hours
A normal savings schedule
Software that checks payments and writes a record anyone can verify
Reviewed by an outside security firm
Open source under Apache-2.0
Finished: some parts are planned, and the page says which
No. 09 · Run it yourself

Run it yourself.

packages/domain/src/classifier.ts
export function classifyTransfer(
transfer: ObservedTransfer,
expectations: RoundExpectations
): ClassificationResult {
if (transfer.tokenAddress !== expectations.usdcAddress) {
return { kind: 'wrong_currency', matched: false };
}
const member = expectations.members.find(
(m) => m.walletAddress.toLowerCase() === transfer.fromAddress.toLowerCase()
);
if (!member) {
return { kind: 'unknown_sender', matched: false };
}
const diff = transfer.amountBaseUnits - expectations.amountBaseUnits;
if (diff < 0n) {
return { kind: 'short_amount', delta: diff, matched: false };
}
return { kind: 'exact_match', matched: true };
}
Reusable parts:
  • The payment classifier (pure TypeScript, 0 I/O)
  • The record verifier (WebCrypto SHA-256)
  • The payout authorizer (deterministic gate)
  • The database permission and RLS test suite
Run the tests with one command: pnpm test
No. 10 · See a full cycle in two minutes

See a full cycle in two minutes.