Skip to content

okrame/verbeth

Repository files navigation

Verbeth

E2EE messaging over the blockchain, using EVM logs as the only transport layer.

Built with

  • Noble – audited JS implementations for curves, hashes, secp256k1, and ML-KEM-768 (post-quantum)
  • TweetNaCl – for encryption/decryption with NaCl box
  • Ethers v6 – for all Ethereum interactions
  • Viem – specific for EIP-1271/6492 verification

How it works

To start a conversation, Alice emits a Handshake event with her ephemeral keys and an identity proof. Bob sees it, verifies her, and replies with a HandshakeResponse. They combine X25519 and ML-KEM-768 secrets to derive a shared root key that's secure against future quantum computers.

From there it's just encrypted MessageSent events back and forth. A Double Ratchet keeps churning keys forward so old messages stay safe even if something leaks later. Topics rotate too, making it hard for observers to link conversations across time.

Deployed Address

Verbeth goes through the proxy at 0x82C9c5475D63e4C9e959280e9066aBb24973a663. The current implementation behind it is VerbethV1 at 0x51670aB6eDE1d1B11C654CCA53b7D42080802326. Every deployment uses deterministic CREATE2, so the same address shows up on every supported chain:

Chain Chain ID
Base mainnet 8453
Base Sepolia 84532
Ethereum Sepolia 11155111

For mor in-depth explanations on like discoverability, identity key binding and non-repudiation head over to the docs.

Install

The SDK is published on npm as @verbeth/sdk. Drop it into any project with

npm install @verbeth/sdk

or with pnpm

pnpm add @verbeth/sdk

Build from source

If you want to hack on the protocol locally, clone the repo and build everything from scratch. You'll need pnpm since the workspace relies on it.

git clone https://github.com/okrame/verbeth.git
cd verbeth
pnpm install
pnpm run build

That compiles both the SDK and the contracts. The SDK lands in packages/sdk/dist with CJS and ESM outputs ready to be consumed.

To run the test suite

pnpm run test:unit         
pnpm run test:contracts     
pnpm run test:integration   

The integration tests need Anvil running, so run it in another terminal first with pnpm run anvil:start.