All projects

Founding Engineer · 2024

Australian Solana Crypto Exchange

Founding engineer on a regulated Solana exchange.

Role
Founding Engineer
Years
2024
Client identity redacted under NDA.

Overview

A Solana trading product operating under a regulated currency exchange licence. From a chat interface a user could create a wallet, deposit fiat, get a quote, confirm a trade and see it filled. It looked like a chat app, but behind it was a licensed exchange holding real user funds on a public chain.

I was the founding engineer. My responsibilities included the custody architecture, the security setup and the work to get ready for audit. The product is owned and operated by its own team.

Custody architecture

For a licensed exchange holding user funds on a public chain, custody is the part that can sink the company if it goes wrong. The version that went to production had four properties.

Private keys are not in the database

An early version stored the private key on the wallet record. Before launch we removed that column entirely. The database holds only the public address and metadata, so a database snapshot can't leak funds.

Encrypted at rest with KMS envelope encryption

Encrypted key material lives in object storage, wrapped with AWS KMS envelope encryption. KMS holds the master key, backed by an HSM. Decrypting a private key takes a KMS call, which is logged and controlled by IAM.

Signing happens in an isolated function

The API that handles user conversations never sees a plaintext private key. When a trade needs signing, the API passes the user and wallet IDs to a separate function. That function is the only part of the system that fetches the encrypted key, decrypts it through KMS, builds the keypair in memory, signs the transaction and returns it. Someone who compromised the chat-side API still couldn't move funds with that alone.

Last-mile guard on the response

Before it returns, the signing function scans its response for anything that looks like a private key. If a later change ever put key material in a response by accident, the function would refuse to send it.

Audit

An external firm ran a formal penetration test before launch. We worked through the findings and shipped the fixes before the product went live.

The product is operated, owned and licensed by its own team. The client name and product brand are withheld under a non-disclosure agreement.

More projects

All projects