Latest Synced Block
46785909
PECU PRICE
$97.28 +3.4%
Total Volume Accumulated
$4,285,190,400
Order Book Depth (OBD)
$1,142,650,800
HD Vault Liquidity (HDVL)
$9,850,000,000
Generate Fees
24hr
$184,250
7D
$1,320,400
30D
$5,890,120
365D
$68,415,900

This is JSON + FIX, does this work?

📋
filename.json
const axios = require('axios');
const FIXparser = require('fixparser'); // Run: npm install fixparser axios

const RPC_URL = 'https://mainnet.pecunovus.net';

// 1. Fetch raw data from Pecu Novus RPC
async function fetchRawTreasuryData() {
    try {
        const response = await axios.post(RPC_URL, {
            jsonrpc: '2.0',
            method: 'eth_getTreasuryAddresses',
            params: [],
            id: new Date().getTime()
        });

        return response.data.result; // Expecting an array or object from the node
    } catch (error) {
        console.error('RPC Connection Error:', error.message);
        return null;
    }
}

// 2. Transform raw RPC data into your desired JSON format
async function getStructuredTreasuryData() {
    const rawData = await fetchRawTreasuryData();
    if (!rawData) return null;

    // Assuming rawData returns an array or object, map it to your schema:
    // (Adjust property mapping depending on exact array indices or object keys returned by the node)
    const structuredTreasuryData = {
        treasury_id: rawData.treasuryId || rawData[0] || "UNKNOWN_ID",
        registry_address: rawData.registryAddress || rawData[1] || "",
        real_treasury_address: rawData.realTreasuryAddress || rawData[2] || "",
        backs_token: rawData.backsToken || rawData[3] || "",
        backs_token_address: rawData.backsTokenAddress || rawData[4] || "",
        asset: rawData.asset || rawData[5] || "",
        amount: rawData.amount || rawData[6] || "0",
        lock_status: {
            immutability: rawData.immutability ?? false,
            withdrawal_permissions: rawData.withdrawalPermissions || "RESTRICTED",
            backing_freeze_status: rawData.backingFreezeStatus ?? false,
            auditability: rawData.auditability ?? true
        }
    };

    return structuredTreasuryData;
}

// 3. Convert the Structured JSON into a FIX Message and output JSON
async function processHootDexFeed() {
    const jsonPayload = await getStructuredTreasuryData();
    if (!jsonPayload) return;

    // Output the clean JSON format you requested
    console.log("--- HootDex Treasury JSON Output ---");
    console.log(JSON.stringify(jsonPayload, null, 2));

    // Initialize FIX Parser to wrap this data for institutional systems
    const fixParser = new FIXparser();
    const fixMessage = new FIXparser.Message();

    // Tag 35=W (Market Data / Custom Data Feed)
    fixMessage.header.push(new FIXparser.Field(35, 'W'));
    fixMessage.body.push(new FIXparser.Field(55, jsonPayload.backs_token || 'HOOTDEX-TREASURY'));
    fixMessage.body.push(new FIXparser.Field(60, new Date().toISOString()));

    // Map your JSON properties to custom FIX user tags (Tags 5000+)
    fixMessage.body.push(new FIXparser.Field(5001, jsonPayload.treasury_id));
    fixMessage.body.push(new FIXparser.Field(5002, jsonPayload.registry_address));
    fixMessage.body.push(new FIXparser.Field(5003, jsonPayload.real_treasury_address));
    fixMessage.body.push(new FIXparser.Field(5004, jsonPayload.amount));
    fixMessage.body.push(new FIXparser.Field(5005, String(jsonPayload.lock_status.immutability)));

    const encodedFixString = fixMessage.encode();
    console.log("\n--- Corresponding FIX Message ---");
    console.log(encodedFixString);
}

// Run the process (can be set to a cron or interval)
processHootDexFeed();
HootDex Live Treasury Feed

HootDex Treasury Live Feed

Querying Pecu Novus Node...
📄
filename.js
async function fetchAndDisplayTreasury() {
    const container = document.getElementById('treasury-card');

    try {
        // Replace '/api/treasury' with your backend route that handles the RPC call
        const response = await fetch('https://mainnet.pecunovus.net', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                jsonrpc: '2.0',
                method: 'eth_getTreasuryAddresses',
                params: [],
                id: 1
            })
        });

        const jsonResponse = await response.json();
        const rawData = jsonResponse.result;

        if (!rawData) {
            container.innerHTML = `<p style="color:red;">No treasury data returned.</p>`;
            return;
        }

        // Map raw response to your exact desired JSON schema format
        const treasuryData = {
            treasury_id: rawData.treasuryId || rawData[0] || "N/A",
            registry_address: rawData.registryAddress || rawData[1] || "N/A",
            real_treasury_address: rawData.realTreasuryAddress || rawData[2] || "N/A",
            backs_token: rawData.backsToken || rawData[3] || "N/A",
            backs_token_address: rawData.backsTokenAddress || rawData[4] || "N/A",
            asset: rawData.asset || rawData[5] || "N/A",
            amount: rawData.amount || rawData[6] || "0",
            lock_status: {
                immutability: rawData.immutability ?? true,
                withdrawal_permissions: rawData.withdrawalPermissions || "Locked",
                backing_freeze_status: rawData.backingFreezeStatus ?? false,
                auditability: rawData.auditability ?? true
            }
        };

        // Render the structured JSON nicely into the HTML page elements
        container.innerHTML = `
            <div class="treasury-item"><span class="label">Treasury ID:</span> <span class="value">${treasuryData.treasury_id}</span></div>
            <div class="treasury-item"><span class="label">Asset:</span> <span class="value">${treasuryData.asset}</span></div>
            <div class="treasury-item"><span class="label">Amount:</span> <span class="value">${treasuryData.amount}</span></div>
            <div class="treasury-item"><span class="label">Backs Token:</span> <span class="value">${treasuryData.backs_token}</span></div>
            <div class="treasury-item"><span class="label">Registry Address:</span> <span class="value">${treasuryData.registry_address}</span></div>
            <div class="treasury-item"><span class="label">Real Treasury:</span> <span class="value">${treasuryData.real_treasury_address}</span></div>
            
            <div class="lock-box">
                <strong>Lock Status:</strong>
                <div class="treasury-item"><span class="label">Immutability:</span> <span class="value">${treasuryData.lock_status.immutability}</span></div>
                <div class="treasury-item"><span class="label">Withdrawal Permissions:</span> <span class="value">${treasuryData.lock_status.withdrawal_permissions}</span></div>
                <div class="treasury-item"><span class="label">Backing Freeze Status:</span> <span class="value">${treasuryData.lock_status.backing_freeze_status}</span></div>
                <div class="treasury-item"><span class="label">Auditability:</span> <span class="value">${treasuryData.lock_status.auditability}</span></div>
            </div>
        `;

    } catch (error) {
        console.error('Error fetching HootDex data:', error);
        container.innerHTML = `<p style="color:red;">Error loading feed from Pecu Novus network.</p>`;
    }
}

// Run immediately on page load
fetchAndDisplayTreasury();

// Refresh data automatically every 15 seconds
setInterval(fetchAndDisplayTreasury, 15000);
error: Content is protected !!