Skip to content

Commit

Permalink
feat: final code pushed
Browse files Browse the repository at this point in the history
  • Loading branch information
blocksan committed Dec 16, 2021
1 parent e0dc755 commit f84eb91
Show file tree
Hide file tree
Showing 4 changed files with 11,540 additions and 48 deletions.
11 changes: 11 additions & 0 deletions src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ function App() {
}
}

/**
* React will call this useEffect everytime there is update in the provider variable.
* Phantom provider provides 2 methods to listen on
* 1. connect -> This method gets triggered when the wallet connection is successful
* 2. disconnect -> This callback method gets triggered when the wallet gets disconnected from the application
*/

useEffect(() => {
if (provider) {
Expand All @@ -103,6 +109,11 @@ function App() {
}, [provider]);


/**
* React will call this useEffect only one time after page the loads
* We will check if the browser has Phantom wallet installed or not.
* If a phantom wallet is installed then it provides a "solana" variable on the window object.
*/
useEffect(() => {
if ("solana" in window && !provider) {
console.log("Phantom wallet present")
Expand Down
6 changes: 5 additions & 1 deletion src/pages/createNFT/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState } from 'react';
import { useParams, Link } from 'react-router-dom';
import { useParams, Link, useHistory } from 'react-router-dom';
import LoadingOverlay from 'react-loading-overlay';
import { CircularProgressbar, buildStyles } from 'react-circular-progressbar';
import domToImage from 'dom-to-image';
Expand All @@ -17,6 +17,8 @@ function GenerateNFT() {
const [playerName, setPlayerName] = useState('');
const [progress, setProgress] = useState(0);

const history = useHistory()

let { score, timeSpent } = useParams();
const [provider, setProvider] = useState(window.solana);

Expand Down Expand Up @@ -79,6 +81,8 @@ function GenerateNFT() {

clearInterval(inte);
setProgress(0);
alert("NFT created successfully")
history.push('/')
} catch (e) {
clearInterval(inte);
setProgress(0);
Expand Down
106 changes: 59 additions & 47 deletions src/utils/transferToken.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,62 @@
import {SystemProgram, Transaction} from '@solana/web3.js'

const createTransferTransaction = async (ownerPubkey, connection, fromTokenAccountPubkey, toTokenAccountPubkey, tokenToTransferLamports) => {

let transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: fromTokenAccountPubkey,
toPubkey: toTokenAccountPubkey,
lamports: tokenToTransferLamports
})
);
transaction.feePayer = ownerPubkey;
console.log('Getting recent blockhash');
transaction.recentBlockhash = (
await connection.getRecentBlockhash()
).blockhash;
return transaction;
};


export const transferCustomToken = async(provider, connection, tokenToTransfer, fromCustomTokenAccountPubkey, toCustomTokenAccountPubkey)=>{
import { SystemProgram, Transaction } from '@solana/web3.js'

const createTransferTransaction = async (ownerPubkey, connection, fromTokenAccountPubkey, toTokenAccountPubkey, tokenToTransferLamports) => {

let transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: fromTokenAccountPubkey,
toPubkey: toTokenAccountPubkey,
lamports: tokenToTransferLamports
})
);
transaction.feePayer = ownerPubkey;
console.log('Getting recent blockhash');
transaction.recentBlockhash = (
await connection.getRecentBlockhash()
).blockhash;
return transaction;
};

/**
* This utility function will transfer the token from one user wallet to another user's wallet
* @param {*} provider : provider of the phantom wallet
* @param {*} connection : connection to the solana cluster
* @param {*} tokenToTransfer : tokens to be transferred in lamports
* @param {*} fromTokenAccountPubkey : sender of the token
* @param {*} toTokenAccountPubkey : receiver of the token
* @returns
*/

export const transferCustomToken = async (provider, connection, tokenToTransfer, fromTokenAccountPubkey, toTokenAccountPubkey) => {

if (tokenToTransfer <= 0) {
return { status: false, error: "You can not transfer, Token to transfer should be greater than 0." }
}
const tokenToTransferLamports = tokenToTransfer * 1000000000
const transaction = await createTransferTransaction(provider.publicKey, connection, fromTokenAccountPubkey, toTokenAccountPubkey, tokenToTransferLamports);

if (transaction) {
try {
let signed = await provider.signTransaction(transaction);
console.log('Got signature, submitting transaction');

let signature = await connection.sendRawTransaction(signed.serialize());
console.log('Submitted transaction ' + signature + ', awaiting confirmation');

await connection.confirmTransaction(signature);
console.log('Transaction ' + signature + ' confirmed');

return { status: true, signature }

} catch (e) {

if(tokenToTransfer <= 0){
return {status: false, error: "You can not transfer, Token to transfer should be greater than 0."}
}
const tokenToTransferLamports = tokenToTransfer * 1000000000
const transaction = await createTransferTransaction(provider.publicKey,connection, fromCustomTokenAccountPubkey, toCustomTokenAccountPubkey, tokenToTransferLamports);

if (transaction) {
try {
let signed = await provider.signTransaction(transaction);
console.log('Got signature, submitting transaction');
let signature = await connection.sendRawTransaction(signed.serialize());
console.log(
'Submitted transaction ' + signature + ', awaiting confirmation'
);
await connection.confirmTransaction(signature);
console.log('Transaction ' + signature + ' confirmed');
return {status: true, signature}
} catch (e) {
console.warn(e);
console.log('Error: ' + e.message);
return {status: false, error: e.message}
}
}
return {
status: false,
error: "No transaction found"
console.warn(e);
console.log('Error: ' + e.message);
return { status: false, error: e.message }
}
}
return {
status: false,
error: "No transaction found"
}
}
Loading

0 comments on commit f84eb91

Please sign in to comment.