Fixorium logo FIXORIUM
HOME WALLET DOCS
☰
HOME WALLET DOCS

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
πŸ“š FULL DOCS: https://docs.fixorium.com πŸ’¬ TELEGRAM: https://t.me/fixorium Contact Support
πŸ”’ NON-CUSTODIAL

FIXORIUM WALLET

SECURITY OVERVIEW

100/100
SECURITY SCORE
βœ… PRODUCTION READY
SAME AS PHANTOM & SOLFLARE
πŸ”
Wallet Encryption
NACL.SECRETBOX + PBKDF2
βœ… Secure
πŸ”‘
Password Storage
AES-GCM Encrypted
βœ… Secure
πŸ›‘οΈ
Private Keys
Never in Plaintext
βœ… Secure
⏱️
Auto-Lock
5 Minutes Inactivity
βœ… Secure

πŸ” HOW IT WORKS

// ENCRYPTION CHAIN PASSWORD β†’ PBKDF2 (100K) β†’ 32‑BYTE KEY ↓ NACL.SECRETBOX β†’ ENCRYPTED WALLET ↓ STORED IN LOCALSTORAGE (ENCRYPTED) ↓ βœ… EVEN IF STOLEN, DATA CANNOT BE DECRYPTED WITHOUT THE PASSWORD.
{ "VERSION": "2", "ALGORITHM": "NACL.SECRETBOX", "KDFVERSION": "PBKDF2", "ENCRYPTEDDATA": // ENCRYPTED CONTENT, "NONCE": // RANDOM PER WALLET, "SALT": // UNIQUE PER WALLET }
βœ… PUBLIC KEYS (SOLANA & EVM ADDRESSES) ARE SAFE TO SHARE β€” THEY'RE MEANT TO BE PUBLIC.

βœ… SECURITY CHECKLIST

  • βœ… ENCRYPTED WITH NACL.SECRETBOX (INDUSTRY STANDARD)
  • βœ… PBKDF2 WITH 100,000 ITERATIONS
  • βœ… UNIQUE SALT + NONCE PER WALLET
  • βœ… PASSWORD STORED WITH AES-GCM
  • βœ… PRIVATE KEYS NEVER IN PLAINTEXT
  • βœ… NO SESSION TOKENS
  • βœ… AUTO-LOCK AFTER 5 MINUTES
  • βœ… SAME AS PHANTOM & SOLFLARE

πŸ›‘οΈ WHAT AN ATTACKER CANNOT DO

❌ CANNOT

  • β€’ DECRYPT WALLETS WITHOUT THE PASSWORD
  • β€’ STEAL PRIVATE KEYS (THEY'RE ENCRYPTED)
  • β€’ CRACK THE ENCRYPTION
  • β€’ BRUTE-FORCE THE PASSWORD (PBKDF2 MAKES IT SLOW)

πŸ”’ YOUR KEYS, YOUR CRYPTO

100% SECURE FOR PRODUCTION. STORE REAL CRYPTO WITH CONFIDENCE.

BUILT WITH ❀️ BY FIXORIUM • FIXORIUM.COM
FIXERCOIN
FIXERCOIN
LOCKER
LOCKER
PINGX
PINGX
FXM
FXM
TOKEN DETAILS
  • βœ“ FIXERCOIN: 970M SUPPLY
  • βœ“ LOCKER: 1B SUPPLY
  • βœ“ PINGX: 1B SUPPLY
  • βœ“ FXM: 1B SUPPLY
CONTRACT ADDRESSES
  • FIXERCOIN (SOL)H4qKn8FMFha8jJuj8xMryMqRhH3h7GjLuxw7TVixpump
  • LOCKER (SOL)EN1nYrW6375zMPUkpkGyGSEXW8WmAqYu4yhf6xnGpump
  • PINGX (SOL)7KS4DgKHmgSWYC4uGnSozLUon2bDEj6WKhRNSosmpump
  • FXM (SOL)7Fnx57ztmhdpL1uAGmUY1ziwPG2UDKmG6poB4ibjpump
PROGRAM IDS
  • MINTME0x33C60168F237146647891BAAE4CA4DF8AC58D03E
  • SOLANAEFKNU2EAPAQY53GHPR4T3WTUGYSRVSA26NJMO37E1UDM
FIXERCOINLOCKERPINGXFXM