The approval call

Cryptocurrencies Demo with LiveKit and Voice AI: proof of concept. Jeff Lawson

A spoken confirmation, 57 seconds, with sound. On a live approval call the reader says a 6 ETH transfer back; the approver on the Android tablet says "Confirm, six ether." and the reader answers "Confirmed for Android." within a second. Both approvers then approve; Ethereum confirms the transfer.

What it is

CryptoDemo is a working proof of concept of a bank's shared platform for digital assets on Ethereum, Solana and Canton. Every transfer needs two approvals from two different enrolled devices; an isolated signing service then signs it in hardware.

Above a set amount (5 ETH, 5 SOL or 500 Canton units) a transfer is approved on a live call that only enrolled devices can join. The call runs on LiveKit, encrypted end to end under the call's own key. A witness on a separate machine gives each approver a challenge on the call, certifies their attendance with a key in its TPM 2.0 and records the call.

A voice joins the call too. It reads the transfer back and listens for each approver to confirm it by saying the amount. Deepgram turns speech into words, Claude Haiku reads what the words alone do not settle and Cartesia speaks. A spoken confirmation is advisory: it goes into the hash-chained history; signing never waits for it.

How the call uses LiveKit and the AI services

Diagram of the approval call: the approvers' devices on LiveKit's Flutter SDK; the platform, LiveKit's media server and the reader on the Mac; the witness and the signing service on an Ubuntu machine; Deepgram, Claude Haiku and Cartesia on the internet. Signalling travels inside each party's QUIC connection to the platform; the audio goes to the media server encrypted end to end; numbered steps follow one call.

Who joins each call, what each line carries and who can hear the audio. Open the diagram full size.

Found on the devices

All three came from the office run on the iPad, the Android tablet and the Mac, not from a test.

The reader went deaf

An approver who joined with the microphone closed was never heard: Deepgram ends a live stream after 10 seconds without audio. The reader keeps every approver's stream open with a keep-alive every 3 seconds and listens again when a new track arrives, so a microphone that comes on late is heard.

Two devices in one room howled

Each device played the call; the other's microphone picked it up and the sound went round. Each device has a switch that silences the call on that device alone. Silencing the incoming track did not hold: LiveKit's Flutter SDK announces a track before it starts it, then enables it as it starts. The switch therefore acts on the track's publication, a subscription setting the media server keeps.

The reader could confirm itself

In that same loop the reader's own voice reaches an approver's microphone. Its line "To confirm, say confirm and the amount: six ether." would then have counted as that approver's confirmation. The reader recognises its own lines (even as speech recognition mishears them) and never counts them.

972 ms at the median from the last sound of "Confirm, six ether." to the first sound of the reader's answer, heard by a listener on the Mac over twenty turns; within a second on the devices in the office.

Decisions

What it does not show

The whole video

Seven minutes, captioned, without sound: a transfer approved on a call from the Android tablet and the Mac, then the architecture.

Download the video Approval-Call_Jeff-Lawson.mp4 · MP4, 1920 × 1080 · 7 min 5 s · 24 MB

Specified and built

Built with Claude Code to Jeff Lawson's specification and rules: each plan approved before any code, each decision and review recorded as the work went, every rule's test seen to fail with a planted fault before it counted.

162 Rust tests for the platform, the signing service and the CA; 85 for the call, with 12 more against a real media server and the three speech and language services; 39 in the apps. Run in the office on a Mac, an iPad, an Android tablet and an Ubuntu machine whose keys are in its TPM 2.0.

The source code is available to review on request.