FIXORIUM ECOSYSTEM
DECENTRALIZED FINANCE INFRASTRUCTURE
6
Blockchains
0%
Trading Fees
100%
Non-Custodial
β
Possibilities
π
Developer Integration
βΌ
INTEGRATE FIXORIUM WALLET INTO YOUR APPLICATION
HOW IT WORKS
βΌ
COMPLETE FLOW:
1. YOUR APP GENERATES A REQUEST β OPENS FIXORIUM WALLET POPUP 2. USER CONNECTS WALLET (APPROVES CONNECTION) 3. YOUR APP RECEIVES CONNECTION CONFIRMATION VIA POSTMESSAGE 4. YOUR APP GENERATES TRANSACTION β OPENS FIXORIUM WALLET POPUP 5. USER APPROVES TRANSACTION 6. YOUR APP RECEIVES SIGNED TRANSACTION VIA POSTMESSAGE
π‘ TWO-STEP FLOW: Connection first, then transaction signing.
The wallet must be connected before signing transactions.
STEP 1: CONNECT WALLET
βΌ
JAVASCRIPT:
class FixoriumWalletConnector {
async connect() {
const requestId = 'conn_' + Date.now() + '_' + Math.random().toString(36).substring(2, 8);
const params = new URLSearchParams();
params.append('requestId', requestId);
params.append('appName', 'YOUR APP NAME');
params.append('appUrl', window.location.origin);
params.append('callbackUrl', window.location.origin + '/callback');
params.append('action', 'connect');
const url = 'https://wallet.fixorium.com.pk/approve?' + params.toString();
// Open popup
this.popup = window.open(url, 'FixoriumWallet', 'width=420,height=750');
// Listen for response
window.addEventListener('message', (event) => {
if (event.origin !== 'https://wallet.fixorium.com.pk') return;
const data = JSON.parse(event.data);
if (data.type === 'CONNECTION_APPROVED') {
console.log('β
Connected:', data.payload.publicKey);
// Save connection status
localStorage.setItem('fixorium_connection', JSON.stringify({
publicKey: data.payload.publicKey,
connected: true
}));
}
});
}
}
PARAMETERS:
requestId
β
REQUIRED - UNIQUE ID (e.g., conn_1234567890_abc123)
appName
β
REQUIRED - NAME OF YOUR APP
appUrl
β
REQUIRED - YOUR APP'S URL
action
β
REQUIRED - 'connect' for connection flow
callbackUrl
OPTIONAL - URL for callback response
π CONNECTION RESPONSE: The wallet sends
CONNECTION_APPROVED
with payload.publicKey via postMessage.
STEP 2: SIGN TRANSACTION
βΌ
JAVASCRIPT:
async function signTransaction(transactionData) {
// Check if wallet is connected
const connection = localStorage.getItem('fixorium_connection');
if (!connection) {
console.error('Wallet not connected. Please connect first.');
return;
}
const requestId = 'tx_' + Date.now() + '_' + Math.random().toString(36).substring(2, 8);
const params = new URLSearchParams();
params.append('requestId', requestId);
params.append('appName', 'YOUR APP NAME');
params.append('appUrl', window.location.origin);
params.append('callbackUrl', window.location.origin + '/callback');
params.append('action', 'sign');
// Include transaction data (base64 encoded)
const txBase64 = btoa(JSON.stringify(transactionData));
params.append('transaction', txBase64);
const url = 'https://wallet.fixorium.com.pk/approve?' + params.toString();
// Open popup
this.popup = window.open(url, 'FixoriumWallet', 'width=420,height=750');
// Listen for response
window.addEventListener('message', (event) => {
if (event.origin !== 'https://wallet.fixorium.com.pk') return;
const data = JSON.parse(event.data);
if (data.type === 'TRANSACTION_RESULT') {
if (data.payload.success) {
console.log('β
Transaction signed:', data.payload.signature);
} else {
console.error('β Transaction failed:', data.payload.error);
}
}
});
}
PARAMETERS:
requestId
β
REQUIRED - UNIQUE ID (e.g., tx_1234567890_abc123)
appName
β
REQUIRED - NAME OF YOUR APP
appUrl
β
REQUIRED - YOUR APP'S URL
action
β
REQUIRED - 'sign' for transaction flow
transaction
β
REQUIRED - BASE64 ENCODED TRANSACTION DATA
message
OPTIONAL - Message to sign (for message signing)
callbackUrl
OPTIONAL - URL for callback response
π TRANSACTION RESPONSE: The wallet sends
TRANSACTION_RESULT
with payload.signature and payload.success via postMessage.
REQUEST TYPES
βΌ
CONNECTION
CONNECT WALLET TO YOUR APP
?action=connect&appName=MyApp
TRANSACTION
SIGN & SEND TRANSACTION
?action=sign&transaction=BASE64_ENCODED_TX
MESSAGE
SIGN A MESSAGE
?action=sign&message=Hello+World
POSTMESSAGE
REAL-TIME COMMUNICATION
window.opener.postMessage()
POSTMESSAGE COMMUNICATION
βΌ
LISTEN FOR WALLET RESPONSES:
// Add this to your app to listen for wallet responses
window.addEventListener('message', function(event) {
// Only accept messages from Fixorium Wallet
if (event.origin !== 'https://wallet.fixorium.com.pk') return;
try {
const data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;
// CONNECTION APPROVED
if (data.type === 'CONNECTION_APPROVED') {
console.log('β
Wallet connected:', data.payload.publicKey);
// Save connection and update UI
localStorage.setItem('fixorium_connection', JSON.stringify({
publicKey: data.payload.publicKey,
connected: true
}));
}
// TRANSACTION RESULT
if (data.type === 'TRANSACTION_RESULT') {
if (data.payload.success) {
console.log('β
Transaction signed:', data.payload.signature);
// Handle successful transaction
} else {
console.log('β Transaction rejected');
}
}
// CONNECTION REJECTED
if (data.type === 'CONNECTION_REJECTED') {
console.log('β Connection rejected by user');
}
} catch (error) {
// Not a wallet message - ignore
}
});
π‘ TIP: Use postMessage for real-time communication without page redirects.
The wallet sends messages to
window.opener when in popup mode.
COMPLETE EXAMPLE
βΌ
REACT COMPONENT - FULL INTEGRATION:
import React, { useState, useEffect } from 'react';
function FixoriumWalletConnect() {
const [isConnected, setIsConnected] = useState(false);
const [publicKey, setPublicKey] = useState(null);
// Listen for wallet responses
useEffect(() => {
const handler = (event) => {
if (event.origin !== 'https://wallet.fixorium.com.pk') return;
try {
const data = JSON.parse(event.data);
if (data.type === 'CONNECTION_APPROVED') {
setPublicKey(data.payload.publicKey);
setIsConnected(true);
localStorage.setItem('fixorium_connection', JSON.stringify({
publicKey: data.payload.publicKey,
connected: true
}));
}
if (data.type === 'CONNECTION_REJECTED') {
console.log('Connection rejected');
}
if (data.type === 'TRANSACTION_RESULT') {
if (data.payload.success) {
console.log('β
Transaction signed!', data.payload.signature);
}
}
} catch (e) {
// Ignore
}
};
window.addEventListener('message', handler);
// Check for existing connection
const stored = localStorage.getItem('fixorium_connection');
if (stored) {
const data = JSON.parse(stored);
if (data.connected && data.publicKey) {
setPublicKey(data.publicKey);
setIsConnected(true);
}
}
return () => window.removeEventListener('message', handler);
}, []);
const connectWallet = () => {
const requestId = 'conn_' + Date.now() + '_' + Math.random().toString(36).substring(2, 8);
const params = new URLSearchParams();
params.append('requestId', requestId);
params.append('appName', 'My DApp');
params.append('appUrl', window.location.origin);
params.append('callbackUrl', window.location.origin + '/callback');
params.append('action', 'connect');
window.open(
'https://wallet.fixorium.com.pk/approve?' + params.toString(),
'FixoriumWallet',
'width=420,height=750'
);
};
const signTransaction = async (txData) => {
if (!isConnected) {
alert('Please connect wallet first');
return;
}
const requestId = 'tx_' + Date.now() + '_' + Math.random().toString(36).substring(2, 8);
const txBase64 = btoa(JSON.stringify(txData));
const params = new URLSearchParams();
params.append('requestId', requestId);
params.append('appName', 'My DApp');
params.append('appUrl', window.location.origin);
params.append('callbackUrl', window.location.origin + '/callback');
params.append('action', 'sign');
params.append('transaction', txBase64);
window.open(
'https://wallet.fixorium.com.pk/approve?' + params.toString(),
'FixoriumWallet',
'width=420,height=750'
);
};
return (
<div>
{isConnected ? (
<div>
<p>β
Connected: {publicKey.slice(0, 8)}...</p>
<button onClick={() => signTransaction({ amount: 1 })}>
Sign Transaction
</button>
</div>
) : (
<button onClick={connectWallet}>Connect Wallet</button>
)}
</div>
);
}
Solana
Ethereum
BNB Chain
Polygon
MintMe
Fixorium
FIXORIUM