0

I am trying to build a simple web application that uses Solana Web3.js to facilitate token purchase on devnet through my phantom wallet. However, when I attempt to execute the buyTokens function, I encounter the following error in the browser console:

Uncaught ReferenceError: Buffer is not defined at buy-solana:9:29 (anonymous) @ buy-solana:9Understand this errorAI browser.js:48 Uncaught (in promise) ReferenceError: Buffer is not defined

I have included the Solana Web3.js library using the following script tag:-

<script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"></script>
<script src="https://bundle.run/[email protected]"></script>

My relevent part of code-

async function buyTokens() {
    const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl('devnet'));
    const transaction = new solanaWeb3.Transaction().add(
        solanaWeb3.SystemProgram.transfer({
            fromPubkey: new solanaWeb3.PublicKey(walletAddress),
            toPubkey: new solanaWeb3.PublicKey(solanaPublicKey),
            lamports: solanaWeb3.LAMPORTS_PER_SOL * solAmount,
        })
    );

    try {
        const signedTransaction = await window.solana.signTransaction(transaction);
        const signature = await connection.sendRawTransaction(signedTransaction.serialize());
        await connection.confirmTransaction(signature);
        alert(`Transaction sent: ${signature}`);
    } catch (error) {
        alert('Transaction failed: ' + error.message);
    }
}

Full code for your reference-

<!DOCTYPE html>
<html>
<head>
    <title>Buy AstroMatch Tokens - Solana</title>
    <script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"></script>
    <script src="https://bundle.run/[email protected]"></script>
    <script>
        if (!window.Buffer) {
            window.Buffer = Buffer; // Define Buffer globally if not already defined
        }
    </script>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            background: linear-gradient(to bottom, #f093fb, #f5576c);
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .card {
            background-color: #ffffff;
            padding: 30px;
            border-radius: 15px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
            text-align: center;
            width: 350px;
        }

        h2 {
            margin-bottom: 20px;
        }

        button {
            font-size: 16px;
            padding: 10px 20px;
            border: none;
            cursor: pointer;
            border-radius: 5px;
            background-color: #4caf50;
            color: white;
            transition: background-color 0.3s;
        }

        button:hover {
            background-color: #45a049;
        }

        #disconnect {
            background-color: #f44336;
            margin-top: 10px;
        }

        input {
            width: 100%;
            padding: 10px;
            margin-top: 15px;
            border-radius: 5px;
            border: 1px solid #ccc;
            font-size: 16px;
        }

        #status {
            margin-top: 15px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="card">
        <h2>Buy AstroMatch Tokens</h2>

        <button id="connect">Connect Wallet</button>
        <button id="disconnect" style="display:none;">Disconnect Wallet</button>

        <p id="status">Status: Not Connected</p>

        <form id="buyForm" style="display:none;">
            <label for="tokenAmount">Amount of Tokens:</label>
            <input type="number" id="tokenAmount" min="1" placeholder="Enter token amount">

            <p id="solanaInfo">1 SOL = 100,000 AMT</p>

            <button type="button" id="buyButton">Buy Tokens</button>
        </form>

        <p id="balance" style="margin-top: 20px;">Your Token Balance: 0 asas</p>
    </div>

    <script>
        const solanaPublicKey = 'KEYHERE'; // Your Solana wallet public key
        const tokenRate = 100000; // 1 SOL = 100,000 AMT

        let walletAddress = null;
        let userBalance = 0;

        async function connectWallet() {
            if (window.solana && window.solana.isPhantom) {
                try {
                    const response = await window.solana.connect();
                    walletAddress = response.publicKey.toString();
                    document.getElementById('status').textContent = `Status: Connected (${walletAddress})`;
                    document.getElementById('connect').style.display = 'none';
                    document.getElementById('disconnect').style.display = 'block';
                    document.getElementById('buyForm').style.display = 'block';
                    updateBalance();
                } catch (error) {
                    alert('Connection failed: ' + error.message);
                }
            } else {
                alert('Phantom wallet not detected. Please install it from https://phantom.app');
            }
        }

        function disconnectWallet() {
            walletAddress = null;
            document.getElementById('status').textContent = 'Status: Not Connected';
            document.getElementById('connect').style.display = 'block';
            document.getElementById('disconnect').style.display = 'none';
            document.getElementById('buyForm').style.display = 'none';
        }

        function updateBalance() {
            document.getElementById('balance').textContent = `Your Token Balance: ${userBalance} AMT`;
        }

        async function buyTokens() {
            const tokenAmount = parseInt(document.getElementById('tokenAmount').value);

            if (isNaN(tokenAmount) || tokenAmount <= 0) {
                alert('Please enter a valid number of tokens.');
                return;
            }

            const solAmount = tokenAmount / tokenRate;

            const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl('devnet'));
            const transaction = new solanaWeb3.Transaction().add(
                solanaWeb3.SystemProgram.transfer({
                    fromPubkey: new solanaWeb3.PublicKey(walletAddress),
                    toPubkey: new solanaWeb3.PublicKey(solanaPublicKey),
                    lamports: solanaWeb3.LAMPORTS_PER_SOL * solAmount,
                })
            );

            try {
                const signedTransaction = await window.solana.signTransaction(transaction);
                const signature = await connection.sendRawTransaction(signedTransaction.serialize());
                await connection.confirmTransaction(signature);
                alert(`Transaction sent: ${signature}`);
                userBalance += tokenAmount;
                updateBalance();
            } catch (error) {
                alert('Transaction failed: ' + error.message);
            }
        }

        document.getElementById('connect').addEventListener('click', connectWallet);
        document.getElementById('disconnect').addEventListener('click', disconnectWallet);
        document.getElementById('buyButton').addEventListener('click', buyTokens);
    </script>
</body>
</html>

Can you please help on this?

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.