Midnight Setup
Complete development setup for building Midnight Network dApps
@meshsdk/midnight-setup
- Complete development setup for building Midnight Network dApps with zero-knowledge privacy and TypeScript support.
Getting Started
Install and set up @meshsdk/midnight-setup for building zero-knowledge privacy dApps on Midnight Network.
Installation
Install the Midnight setup package using your preferred package manager:
# Using npm
npm install @meshsdk/midnight-setup
# Using yarn
yarn add @meshsdk/midnight-setup
Quick Start
import { MidnightSetupAPI } from '@meshsdk/midnight-setup';
// Deploy a new contract
const api = await MidnightSetupAPI.deployContract(providers, contractInstance);
// Join an existing contract
const api = await MidnightSetupAPI.joinContract(providers, contractInstance, contractAddress);
// Get contract state
const state = await api.getContractState();
// Get ledger state
const ledgerState = await api.getLedgerState();
Core API Methods
Complete reference for MidnightSetupAPI methods and provider setup.
MidnightSetupAPI
The MidnightSetupAPI
is the main class for interacting with Midnight Network contracts.
Method | Description | Usage |
---|---|---|
deployContract(providers, contractInstance) | Deploy a new contract | Creates new contract instance |
joinContract(providers, contractInstance, address) | Join existing contract | Connect to deployed contract |
getContractState() | Read contract state | Get current contract data |
getLedgerState() | Read ledger state | Get blockchain data |
Deploy Contract
import { MidnightSetupAPI } from '@meshsdk/midnight-setup';
const api = await MidnightSetupAPI.deployContract(providers, contractInstance);
console.log('Contract deployed:', api.deployedContractAddress);
Join Contract
import { MidnightSetupAPI } from '@meshsdk/midnight-setup';
const contractAddress = "contract_address_here";
const api = await MidnightSetupAPI.joinContract(providers, contractInstance, contractAddress);
console.log('Connected to contract:', contractAddress);
Lace Wallet Integration
Complete Lace Beta Wallet integration for Midnight Network dApps.
Wallet Features
Feature | Description | Implementation |
---|---|---|
Connect Wallet | Connect to Lace Beta Wallet | wallet.enable() |
Disconnect Wallet | Disconnect from wallet | wallet.disconnect() |
Get Wallet State | Retrieve wallet address and keys | wallet.state() |
Deploy Contract | Deploy contracts through wallet | wallet.submitTransaction() |
Join Contract | Join existing contracts | wallet.balanceAndProveTransaction() |
Balance Transactions | Balance and prove transactions | Wallet API integration |
Wallet Provider Setup
// Connect to Lace Wallet
const wallet = window.midnight?.mnLace;
if (!wallet) {
throw new Error('Please install Lace Beta Wallet for Midnight Network');
}
// Enable wallet and get state
const walletAPI = await wallet.enable();
const walletState = await walletAPI.state();
const uris = await wallet.serviceUriConfig();
React Wallet Hook
import { useMidnightWallet } from './hooks/useMidnightWallet';
function App() {
const {
connectWallet,
disconnectWallet,
walletState,
isConnected
} = useMidnightWallet();
return (
<div>
{isConnected ? (
<button onClick={disconnectWallet}>Disconnect</button>
) : (
<button onClick={connectWallet}>Connect Wallet</button>
)}
</div>
);
}
Integration Examples
The fastest way to build on Midnight Network with pre-built smart contracts, complete API, and ready-to-use code snippets.
Installation
npm install @meshsdk/midnight-setup \
@midnight-ntwrk/dapp-connector-api@3.0.0 \
@midnight-ntwrk/midnight-js-fetch-zk-config-provider@2.0.2 \
@midnight-ntwrk/midnight-js-http-client-proof-provider@2.0.2 \
@midnight-ntwrk/midnight-js-indexer-public-data-provider@2.0.2 \
@midnight-ntwrk/midnight-js-level-private-state-provider@2.0.2 \
@midnight-ntwrk/midnight-js-network-id@2.0.2
Features
- Type-safe SDK - Full TypeScript support
- Provider abstraction - Easy wallet and network integration
- Contract state management - Query contract and ledger states
- Flexible contract support - Works with any Midnight smart contract
- Lightweight - Only 10.4 KB package size
- ESM & CJS - Supports both module systems
Quick Start
1. Setup Providers
import { FetchZkConfigProvider } from "@midnight-ntwrk/midnight-js-fetch-zk-config-provider";
import { httpClientProofProvider } from "@midnight-ntwrk/midnight-js-http-client-proof-provider";
import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
import { levelPrivateStateProvider } from "@midnight-ntwrk/midnight-js-level-private-state-provider";
import type { MidnightSetupContractProviders } from "@meshsdk/midnight-setup";
export async function setupProviders(): Promise<MidnightSetupContractProviders> {
const wallet = window.midnight?.mnLace;
if (!wallet) {
throw new Error("Please install Lace Beta Wallet for Midnight Network");
}
const walletAPI = await wallet.enable();
const walletState = await walletAPI.state();
const uris = await wallet.serviceUriConfig();
return {
privateStateProvider: levelPrivateStateProvider({
privateStateStoreName: "my-dapp-state",
}),
zkConfigProvider: new FetchZkConfigProvider(
window.location.origin,
fetch.bind(window),
),
proofProvider: httpClientProofProvider(uris.proverServerUri),
publicDataProvider: indexerPublicDataProvider(
uris.indexerUri,
uris.indexerWsUri,
),
walletProvider: {
coinPublicKey: walletState.coinPublicKey,
encryptionPublicKey: walletState.encryptionPublicKey,
balanceTx: (tx, newCoins) => {
return walletAPI.balanceAndProveTransaction(tx, newCoins);
},
},
midnightProvider: {
submitTx: (tx) => {
return walletAPI.submitTransaction(tx);
},
},
};
}
2. Deploy a Contract
import { MidnightSetupAPI } from "@meshsdk/midnight-setup";
import { setupProviders } from "./providers";
async function deployContract() {
const providers = await setupProviders();
const contractInstance = new MyContract({});
const api = await MidnightSetupAPI.deployContract(
providers,
contractInstance,
);
console.log("Contract deployed at:", api.deployedContractAddress);
return api;
}
3. Join Existing Contract
async function joinContract(contractAddress: string) {
const providers = await setupProviders();
const contractInstance = new MyContract({});
const api = await MidnightSetupAPI.joinContract(
providers,
contractInstance,
contractAddress,
);
return api;
}
4. Read Contract State
// Get contract state
const contractState = await api.getContractState();
console.log("Contract data:", contractState.data);
// Get ledger state
const ledgerState = await api.getLedgerState();
console.log("Message:", ledgerState.ledgerState?.message);