Skip to content

Configuration

Network Configuration

Midday SDK comes with pre-configured network settings for common environments.

Built-in Networks

const client = await Midday.Client.create({
networkConfig: Midday.Config.NETWORKS.local,
privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),
});

Custom Network

For custom deployments, provide the full network configuration:

const client = await Midday.Client.create({
networkConfig: {
networkId: 'testnet',
indexer: 'https://indexer.testnet.midnight.network/graphql',
indexerWS: 'wss://indexer.testnet.midnight.network/graphql/ws',
node: 'wss://node.testnet.midnight.network',
proofServer: 'https://proof.testnet.midnight.network',
},
seed: 'your-64-char-hex-seed',
privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),
});

ZK Configuration (Per-Contract)

Each contract has its own zk circuits. zkConfig is loaded when you load a contract, not at client creation.

From Path (Node.js)

const loaded = await client.loadContract({
module: CounterContract,
zkConfig: Midday.ZkConfig.fromPath('./contracts/counter'),
privateStateId: 'my-counter',
});

From URL (Browser)

const loaded = await client.loadContract({
module: CounterContract,
zkConfig: new Midday.ZkConfig.HttpZkConfigProvider('https://cdn.example.com/zk'),
privateStateId: 'my-counter',
});

Private State Provider

Private state stores contract-specific secrets that should never leave the client.

In-Memory (Development)

const privateStateProvider = Midday.PrivateState.inMemoryPrivateStateProvider();

IndexedDB (Browser)

const privateStateProvider = Midday.PrivateState.indexedDBPrivateStateProvider({
privateStateStoreName: 'my-app-private-state',
});

Wallet Configuration

Seed-Based (Node.js)

For server-side applications, provide a 64-character hex seed:

const client = await Midday.Client.create({
networkConfig: Midday.Config.NETWORKS.preview,
seed: 'your-64-char-hex-seed', // 32 bytes as hex
privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),
});

Wallet Factories

The SDK provides convenient wallet factories:

// From seed (Node.js) — positional args
const wallet = await Midday.Wallet.fromSeed(seed, networkConfig);
// From browser (Lace extension)
const wallet = await Midday.Wallet.fromBrowser('preview');
// Read-only (address only, no signing)
const wallet = Midday.Wallet.fromAddress('0x...');

Lace Wallet (Browser)

For browser applications, connect to the Lace wallet extension:

const wallet = await Midday.Wallet.fromBrowser('preview');
const client = await Midday.Client.create({
wallet,
privateStateProvider: Midday.PrivateState.indexedDBPrivateStateProvider({
privateStateStoreName: 'my-app'
}),
});

See the Browser Usage guide for more details.

Fee Relay

For browser apps where users don’t need to hold dust tokens:

const client = await Midday.Client.create({
wallet,
privateStateProvider: Midday.PrivateState.indexedDBPrivateStateProvider({
privateStateStoreName: 'my-app',
}),
feeRelay: { url: 'http://localhost:3002' },
});