import {
PrivoraProvider,
usePrivoraContext,
useEncrypt,
useDecryptReveal
} from '@privora/react';
import {
ConnectionProvider,
WalletProvider,
useWallet
} from '@solana/wallet-adapter-react';
// Wallet setup wrapper
function AppWithWallet() {
const { signMessage, connected } = useWallet();
return (
<PrivoraProvider
rpcUrl={process.env.NEXT_PUBLIC_RPC_URL!}
autoInitialize={connected}
signMessage={signMessage}
>
<OrderBook />
</PrivoraProvider>
);
}
// Main orderbook component
function OrderBook() {
const { privora, userCrypto, isInitialized, isInitializing, error } = usePrivoraContext();
if (error) return <div>Error: {error}</div>;
if (isInitializing) return <div>Connecting to Privora...</div>;
if (!isInitialized) return <div>Please connect your wallet</div>;
return (
<div>
<SubmitOrderForm privora={privora} userCrypto={userCrypto} />
<OrderList userCrypto={userCrypto} />
</div>
);
}
// Order submission form
function SubmitOrderForm({ privora, userCrypto }) {
const [price, setPrice] = useState('');
const { encryptAndSubmit, isEncrypting, isSubmitting, error } = useEncrypt(privora, userCrypto);
const handleSubmit = async (e: FormEvent) => {
e.preventDefault();
const result = await encryptAndSubmit(Number(price), 'u8');
if (result) {
// Save result for later display
saveOrder({
hash: result.hash,
userCiphertext: result.userCiphertext,
userNonce: result.userNonce,
});
setPrice('');
}
};
return (
<form onSubmit={handleSubmit}>
<input
value={price}
onChange={e => setPrice(e.target.value)}
placeholder="Price (0-255)"
/>
<button disabled={isEncrypting || isSubmitting}>
{isEncrypting ? 'Encrypting...' : isSubmitting ? 'Submitting...' : 'Submit'}
</button>
{error && <p className="error">{error}</p>}
</form>
);
}
// Display order with reveal functionality
function OrderCard({ order, userCrypto }) {
const priceField = {
ciphertext: order.userCiphertext,
nonce: order.userNonce,
dataType: 'u8' as const,
};
const [state, { toggle }] = useDecryptReveal(priceField, userCrypto);
return (
<div className="order-card">
<span>Price: {state.revealed ? state.value : '****'}</span>
<button onClick={toggle}>
{state.revealed ? 'Hide' : 'Reveal'}
</button>
</div>
);
}