Skip to main content

Getting Started

Requirements​

ToolVersion
Bun1.3.0
Postgres15 or later
Anchor CLI1.1.2
Solana CLI4.1.1
Rust1.89.0

The devnet commitment program is deployed at 5SwaBH3pXzEKhmL6pbqZ1JgeDiGaf6i5oVj8951RX9sm.

Install​

bun install

Database​

createdb toda
cd packages/db
bun x drizzle-kit migrate

Default connection:

postgres://postgres:postgres@localhost:5432/toda

Set DATABASE_URL when the local user or database differs.

Environment​

cp .env.example .env

Required values:

DATABASE_URL="postgres://.../toda"
JWT_SECRET="<at least 32 characters>"
MASTER_ENCRYPTION_KEY="<base64 32-byte key>"
TODA_PROGRAM_ID="5SwaBH3pXzEKhmL6pbqZ1JgeDiGaf6i5oVj8951RX9sm"

Generate an encryption key with openssl rand -base64 32.

MASTER_ENCRYPTION_KEY and JWT_SECRET can provide plaintext access. Store both in a secrets manager.

Anchor authority​

bin/dev-keypair.sh

The script creates and funds a devnet authority at ./authority-keypair.json. The file is gitignored.

Run​

bun run dev
ServiceURL
Dashboardhttp://localhost:3000
APIhttp://localhost:3001
Extension APIhttp://localhost:3002
Docshttp://localhost:3003

Run the anchor service separately:

bun run apps/api/src/worker/anchor.ts

Write a memory​

Connect a wallet in the dashboard and create an API key.

import { Toda } from "@toda/sdk";

const toda = new Toda({
apiUrl: "http://localhost:3001",
apiKey: process.env.TODA_API_KEY!,
});

const receipt = await toda.remember(
"Deployments run on Fridays.",
{ kind: "preference" },
);

The receipt is returned before anchoring.

await toda.verify(receipt.id); // false until anchored

The default seal policy commits at 64 pending leaves or after five minutes.

Read the commitment​

const tip = await readUserCommit(connection, new PublicKey(ownerPubkey));

console.log({
root: bytesToHex(tip.merkleRoot),
count: tip.memoryCount,
nonce: tip.nonce,
});

Build the programs​

anchor build
bun test programs/toda-commit/tests/ programs/toda-staking/tests/

After an IDL change, update the committed copies under packages/solana/src/idl/.

Next​