You are viewing a single comment's thread:

RE: 6 Jars Transfert Java form - Dev tiny project

si cela peux aider je me permet de mettre le code que sa me fait
If this can help, I will allow myself to put the code that it gives me

Hive Transfer Tool - @hive-103505

Hive Transfer Tool

Compte: @hive-103505

    <div class="balance-display">
        <p>Solde HIVE: <span id="hiveBalance">Chargement...</span></p>
        <p>Solde HBD: <span id="hbdBalance">Chargement...</span></p>
    </div>
    
    <button id="refreshBalance">Actualiser les soldes</button>
    <div id="balanceStatus" class="status-message"></div>
</div>

<div class="container">
    <h2>Configuration des transferts</h2>
    
    <div class="token-selector">
        <button id="hiveBtn" class="token-btn active">Utiliser HIVE</button>
        <button id="hbdBtn" class="token-btn">Utiliser HBD</button>
    </div>
    
    <label for="amount">Montant total à transférer:</label>
    <input type="number" id="amount" step="0.001" min="0" placeholder="Entrez le montant">
    
    <div class="transfer-list">
        <h3>Répartition automatique:</h3>
        <div class="transfer-item"><span>@invest-time</span><span>5%</span></div>
        <div class="transfer-item"><span>@token-thx</span><span>10%</span></div>
        <div class="transfer-item"><span>@gestion.alive</span><span>10%</span></div>
        <div class="transfer-item"><span>@hive103505.fun</span><span>10%</span></div>
        <div class="transfer-item"><span>@vote-com</span><span>55%</span></div>
    </div>
    
    <button id="executeTransfer" disabled>Exécuter le transfert</button>
    <div id="transferStatus" class="status-message"></div>
    
    <div id="jsonResult">Les détails du transfert apparaîtront ici...</div>
</div>

<script>
    // Configuration
    const ACCOUNT = 'hive-103505';
    const DESTINATIONS = [
        { account: 'invest-time', percentage: 0.05 },
        { account: 'token-thx', percentage: 0.10 },
        { account: 'gestion.alive', percentage: 0.10 },
        { account: 'hive103505.fun', percentage: 0.10 },
        { account: 'vote-com', percentage: 0.55 }
    ];

    // Éléments DOM
    const hiveBalanceEl = document.getElementById('hiveBalance');
    const hbdBalanceEl = document.getElementById('hbdBalance');
    const refreshBalanceBtn = document.getElementById('refreshBalance');
    const balanceStatusEl = document.getElementById('balanceStatus');
    const hiveBtn = document.getElementById('hiveBtn');
    const hbdBtn = document.getElementById('hbdBtn');
    const amountInput = document.getElementById('amount');
    const executeTransferBtn = document.getElementById('executeTransfer');
    const transferStatusEl = document.getElementById('transferStatus');
    const jsonResultEl = document.getElementById('jsonResult');

    // Variables d'état
    let currentToken = 'HIVE';
    let hiveBalance = 0;
    let hbdBalance = 0;
    let keychainReady = false;

    // Initialisation
    document.addEventListener('DOMContentLoaded', () => {
        setupEventListeners();
        checkKeychain();
        loadBalances();
    });

    function setupEventListeners() {
        refreshBalanceBtn.addEventListener('click', loadBalances);
        hiveBtn.addEventListener('click', () => switchToken('HIVE'));
        hbdBtn.addEventListener('click', () => switchToken('HBD'));
        executeTransferBtn.addEventListener('click', executeTransfer);
        amountInput.addEventListener('input', validateAmount);
    }

    function switchToken(token) {
        currentToken = token;
        hiveBtn.classList.toggle('active', token === 'HIVE');
        hbdBtn.classList.toggle('active', token === 'HBD');
        updateAmountPlaceholder();
        validateAmount();
    }

    function updateAmountPlaceholder() {
        const maxAmount = currentToken === 'HIVE' ? hiveBalance : hbdBalance;
        amountInput.placeholder = `Maximum: ${maxAmount.toFixed(3)} ${currentToken}`;
        amountInput.max = maxAmount;
    }

    function validateAmount() {
        const amount = parseFloat(amountInput.value);
        const maxAmount = currentToken === 'HIVE' ? hiveBalance : hbdBalance;
        
        if (isNaN(amount) || amount <= 0 || amount > maxAmount) {
            executeTransferBtn.disabled = true;
        } else {
            executeTransferBtn.disabled = !keychainReady;
        }
    }

    function checkKeychain() {
        if (typeof hive_keychain !== 'undefined') {
            keychainReady = true;
            executeTransferBtn.disabled = false;
        } else {
            transferStatusEl.innerHTML = `
                <div class="error">
                    <strong>Hive Keychain non détecté!</strong><br>
                    L'extension est requise pour signer les transactions.<br>
                    <a href="https://chrome.google.com/webstore/detail/hive-keychain/jhgnkgkahckokgpeimmhlmkonjbkepgkb" target="_blank">Installer Hive Keychain</a>
                </div>
            `;
            keychainReady = false;
            executeTransferBtn.disabled = true;
        }
    }

    async function loadBalances() {
        balanceStatusEl.textContent = "Chargement des soldes...";
        balanceStatusEl.className = "status-message";
        
        try {
            const balances = await getBalancesFromApi();
            
            if (balances) {
                hiveBalance = parseFloat(balances.HIVE.split(' ')[0]);
                hbdBalance = parseFloat(balances.HBD.split(' ')[0]);

                hiveBalanceEl.textContent = hiveBalance.toFixed(3) + ' HIVE';
                hbdBalanceEl.textContent = hbdBalance.toFixed(3) + ' HBD';
                updateAmountPlaceholder();
                validateAmount();
                
                balanceStatusEl.textContent = "Soldes actualisés avec succès";
                balanceStatusEl.className = "status-message success";
            }
        } catch (error) {
            console.error('Error:', error);
            balanceStatusEl.textContent = `Erreur: ${error.message || "Impossible de charger les soldes"}`;
            balanceStatusEl.className = "status-message error";
        }
    }

    async function getBalancesFromApi() {
        try {
            const response = await fetch('https://api.hive.blog', {
                method: 'POST',
                body: JSON.stringify({
                    jsonrpc: "2.0",
                    method: "condenser_api.get_accounts",
                    params: [[ACCOUNT]],
                    id: 1
                }),
                headers: { 'Content-Type': 'application/json' }
            });
            
            const data = await response.json();
            if (data.result && data.result[0]) {
                return {
                    HIVE: data.result[0].balance,
                    HBD: data.result[0].hbd_balance
                };
            }
            throw new Error("Réponse API invalide");
        } catch (error) {
            throw new Error("API Hive indisponible");
        }
    }

    function executeTransfer() {
        if (!keychainReady) {
            transferStatusEl.innerHTML = '<div class="error">Hive Keychain non disponible</div>';
            return;
        }

        const amount = parseFloat(amountInput.value);
        if (isNaN(amount) || amount <= 0) {
            transferStatusEl.innerHTML = '<div class="error">Veuillez entrer un montant valide</div>';
            return;
        }

        const maxAmount = currentToken === 'HIVE' ? hiveBalance : hbdBalance;
        if (amount > maxAmount) {
            transferStatusEl.innerHTML = `<div class="error">Montant trop élevé. Solde disponible: ${maxAmount.toFixed(3)} ${currentToken}</div>`;
            return;
        }

        // Préparer les transferts
        const transfers = DESTINATIONS.map(dest => {
            const transferAmount = (amount * dest.percentage).toFixed(3);
            return {
                to: dest.account,
                amount: `${transferAmount} ${currentToken}`,
                memo: ''
            };
        });

        // Préparer la customJson
        const customJson = JSON.stringify({
            contractName: 'tokens',
            contractAction: 'transfer',
            contractPayload: {
                transfers: transfers
            }
        });

        // Afficher les détails
        jsonResultEl.innerHTML = `
            <strong>Détails du transfert:</strong><br>
            <pre>${JSON.stringify({
                from: ACCOUNT,
                token: currentToken,
                totalAmount: amount.toFixed(3),
                transfers: transfers
            }, null, 2)}</pre>
            <p>Hive Keychain va s'ouvrir pour signer la transaction...</p>
        `;

        // Désactiver le bouton pendant le traitement
        executeTransferBtn.disabled = true;
        executeTransferBtn.innerHTML = '<span class="loading"></span> Traitement en cours...';
        transferStatusEl.innerHTML = '<div>Préparation de la transaction...</div>';

        // Envoyer la transaction via Hive Keychain
        hive_keychain.requestCustomJson(
            ACCOUNT,
            'ssc-mainnet-hive', // ID de la chaîne
            'Posting', // Permissions requises
            customJson,
            'Transfert multiple', // Message de confirmation
            function(response) {
                if (response.success) {
                    transferStatusEl.innerHTML = `
                        <div class="success">
                            Transfert réussi!<br>
                            Transaction ID: ${response.result.id}
                        </div>
                    `;
                    jsonResultEl.innerHTML += `
                        <div class="success" style="margin-top: 10px; padding: 10px;">
                            <strong>Transaction confirmée:</strong><br>
                            ID: ${response.result.id}<br>
                            Block: ${response.result.block_num}
                        </div>
                    `;
                } else {
                    transferStatusEl.innerHTML = `
                        <div class="error">
                            Erreur lors du transfert: ${response.message}
                        </div>
                    `;
                }
                
                // Réactiver le bouton
                executeTransferBtn.disabled = false;
                executeTransferBtn.textContent = 'Exécuter le transfert';
                
                // Actualiser les soldes après 3 secondes
                setTimeout(loadBalances, 3000);
            }
        );
    }
</script>
0.00000678 BEE
1 comments

MErci, on verra.
Pour débugguer ce truc, faut tout comprendre avec les finesses, c'est plus compliqué, je trouve de débugguer un code, que de l'écrire soi-même :)
Mais vais voir ce que je peux en tirer dans les jours à venir :)
!PIZZA

0.00000678 BEE

Mais faut avouer que ton code est déjà plus abouti car il a clairement compris ce qu'était hive, puisque els soldes s'affichent correctement.

0E-8 BEE

sa me fera mon post du jour , en te citant bien évidement avec lien vers ton post , mais a quelque chose près on as le même lecteur ^^

!LOLZ

0E-8 BEE

!LOLZ

0.00013801 BEE