Code Examples

Integration Examples

Real-world code examples for integrating PROOF Protocol into your financial services.

Basic Integration

Simple fetch() wrapper for any API call

import { ProofClient, VisibilityLevel } from '@proof-protocol/sdk';

const proof = new ProofClient({
  privateKey: process.env.PROOF_PRIVATE_KEY
});

// Wrap any fetch call
const response = await proof.record(
  fetch('https://api.example.com/data')
);

const data = await response.json();
console.log('Record ID:', response.proof.recordId);
console.log('Transaction:', response.proof.transactionHash);

Express.js Middleware

Automatic compliance for Express API routes

import express from 'express';
import { ProofClient } from '@proof-protocol/sdk';

const app = express();
const proof = new ProofClient({
  privateKey: process.env.PROOF_PRIVATE_KEY
});

// Middleware to record all POST/PUT/DELETE requests
app.use(async (req, res, next) => {
  if (['POST', 'PUT', 'DELETE'].includes(req.method)) {
    const originalSend = res.send;

    res.send = async function(data) {
      // Record the request + response
      await proof.record(
        Promise.resolve({
          url: req.originalUrl,
          method: req.method,
          body: req.body,
          response: data
        }),
        {
          visibility: VisibilityLevel.PRIVATE,
          metadata: {
            userId: req.user?.id,
            endpoint: req.path,
            timestamp: new Date().toISOString()
          }
        }
      );

      originalSend.call(this, data);
    };
  }
  next();
});

app.post('/api/trade', async (req, res) => {
  // Your trade logic here
  const result = await processTrade(req.body);
  res.json(result);
  // Automatically recorded by middleware!
});

app.listen(3000);

Next.js API Routes

MiFID II compliance for Next.js serverless functions

// pages/api/trade.js
import { ProofClient, VisibilityLevel } from '@proof-protocol/sdk';

const proof = new ProofClient({
  privateKey: process.env.PROOF_PRIVATE_KEY
});

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ error: 'Method not allowed' });
  }

  try {
    // Your business logic
    const tradeResult = await executeTrade(req.body);

    // Record on blockchain
    const proofResponse = await proof.record(
      Promise.resolve({
        endpoint: '/api/trade',
        request: req.body,
        response: tradeResult,
        user: req.session.user.id
      }),
      {
        visibility: VisibilityLevel.PRIVATE,
        metadata: {
          userId: req.session.user.id,
          tradeId: tradeResult.id,
          amount: req.body.amount,
          asset: req.body.asset
        }
      }
    );

    // Return result with proof
    res.status(200).json({
      success: true,
      trade: tradeResult,
      proof: {
        txHash: proofResponse.proof.transactionHash,
        recordId: proofResponse.proof.recordId,
        timestamp: proofResponse.proof.timestamp
      }
    });
  } catch (error) {
    console.error('Trade failed:', error);
    res.status(500).json({ error: 'Trade execution failed' });
  }
}

Privacy Controls

Using different privacy levels based on data sensitivity

import { ProofClient, VisibilityLevel } from '@proof-protocol/sdk';

const proof = new ProofClient({
  privateKey: process.env.PROOF_PRIVATE_KEY
});

// PUBLIC: Regulatory filings (fully transparent)
await proof.record(
  fetch('/api/quarterly-report'),
  { visibility: VisibilityLevel.PUBLIC }
);

// PRIVATE: Client data (only you can access)
await proof.record(
  fetch('/api/client/sensitive-data'),
  {
    visibility: VisibilityLevel.PRIVATE,
    metadata: { clientId: 'client_123' }
  }
);

// SHARED: Multi-party access (Professional+ plan)
await proof.record(
  fetch('/api/consortium/shared-data'),
  {
    visibility: VisibilityLevel.SHARED,
    sharedWith: [
      '0x1234...', // Regulator address
      '0x5678...'  // Auditor address
    ],
    metadata: { dataType: 'audit_trail' }
  }
);

More Examples Coming Soon

We're adding new examples regularly. Join our beta to get early access to advanced integration patterns.