Send SOL with PhantomApp

PHOTO EMBED

Wed Feb 01 2023 18:39:22 GMT+0000 (Coordinated Universal Time)

Saved by @luisjdominguezp ##javascript

import logo from './logo.svg';
import './App.css';
import {LAMPORTS_PER_SOL, Connection, Transaction, PublicKey, SystemProgram} from "@solana/web3.js"
import {useState} from 'react';
import * as buffer from "buffer";
window.Buffer = buffer.Buffer;

function App() {
  const [lamports, setLamports] = useState(0);
  let wallet;

  function connectWallet(){
    console.log("Connecting...");
    (async() => {
      try {
        const resp = await window.solana.connect();
        wallet = resp;
      } catch (err) {

      }
    })();
    window.solana.on("connect", () => console.log("Connected"))

  }

  function signInTransactionAndSendMoney(lamports){
    (async() => {
      const network = "https://api.devnet.solana.com";
      const connection = new Connection(network);

      lamports = lamports * LAMPORTS_PER_SOL;

      try{
        const destPubkeyStr = "WALLETD_DESTINO";
        console.log("starting sendMoney");
        const destPubKey = new PublicKey(destPubkeyStr);
        const walletAccountInfo = await connection.getAccountInfo(
          wallet.publicKey
        );
        console.log("wallet data size", walletAccountInfo?.data.length);

        const receiverAccountInfo = await connection.getAccountInfo(destPubKey);
        console.log("receiver data size", receiverAccountInfo?.data.length);

        const instruction = SystemProgram.transfer({
          fromPubkey: wallet.publicKey,
          toPubkey: destPubKey,
          lamports,
        });
        let trans = await setWalletTransaction(instruction, connection);
        let signature = await signAndSendTransaction(trans, connection);
        let result = await connection.confirmTransaction(signature, "singleGossip");
        console.log("money sent", result);
      } catch (e){
        console.warn("Failed", e);
      }

    })()

  }

  async function signAndSendTransaction(transaction, connection){
    const { signature } = await window.solana.signAndSendTransaction(transaction);
    await connection.confirmTransaction(signature);

    console.log("sign transaction");
    console.log("send raw transacion");
    return signature;
  }

  async function setWalletTransaction(instruction, connection){
    const transaction = new Transaction();
    transaction.add(instruction);
    transaction.feePayer = wallet.publicKey;
    let hash = await connection.getRecentBlockhash();
    console.log("blockhash", hash);
    transaction.recentBlockhash = hash.blockhash;
    return transaction;
  }

  function sendLamports(){
    console.log("sending: " + lamports)
    signInTransactionAndSendMoney(lamports);
  }


  return (
    <div className="App">
      <br></br>
      <button onClick={connectWallet}>connect wallet</button>
      <input onChange={e => setLamports(e.target.value)} type={'number'}>
      </input>
      <button onClick={sendLamports}>Send Sol</button>
    </div>
  );
}

export default App;
content_copyCOPY