[SOLVED] Dex-like Uniswap

Ok have a look at where this error is coming; serverUrl is being used somewhere but it doesn’t exist. You can post a code snippet.

let currentTrade = {};

let currentSelectSide;

let tokens;

async function init() {

await Moralis.start({ serverUrl, appId });

await Moralis.enableWeb3();

await listAvailableTokens();

currentUser = Moralis.User.current();

if (currentUser) {

document.getElementById("swap_button").disabled = false;

}

}

async function listAvailableTokens() {

const result = await Moralis.Plugins.oneInch.getSupportedTokens({

chain: "bsc", // The blockchain you want to use (eth/bsc/polygon)

});

tokens = result.tokens;

tokens[“0xacfc95585d80ab62f67a14c566c1b7a49fe91167”] = {

address: "0xacfc95585d80ab62f67a14c566c1b7a49fe91167",

decimals: 18,

logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/8397.png",

name: "FEG Token",

symbol: "FEG",

};

tokens[“0x42981d0bfbAf196529376EE702F2a9Eb9092fcB5”] = {

address: "0x42981d0bfbAf196529376EE702F2a9Eb9092fcB5",

decimals: 18,

logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/16162.png",

name: "SafeMoon V2",

symbol: "SafeMoon",

};

let parent = document.getElementById(“token_list”);

for (const address in tokens) {

let token = tokens[address];

let div = document.createElement("div");

div.setAttribute("data-address", address);

div.className = "token_row";

let html = `

    <img class="token_list_img" src="${token.logoURI}">

    <span class="token_list_text">${token.symbol}</span>

    `;

div.innerHTML = html;

div.onclick = () => {

  selectToken(address);

};

parent.appendChild(div);

}

}

function selectToken(address) {

closeModal();

console.log(tokens);

currentTrade[currentSelectSide] = tokens[address];

console.log(currentTrade);

renderInterface();

getQuote();

}

function renderInterface() {

if (currentTrade.from) {

document.getElementById("from_token_img").src = currentTrade.from.logoURI;

document.getElementById("from_token_text").innerHTML =

  currentTrade.from.symbol;

}

if (currentTrade.to) {

document.getElementById("to_token_img").src = currentTrade.to.logoURI;

document.getElementById("to_token_text").innerHTML = currentTrade.to.symbol;

}

}

async function login() {

try {

currentUser = Moralis.User.current();

if (!currentUser) {

  currentUser = await Moralis.authenticate();

}

document.getElementById("swap_button").disabled = false;

} catch (error) {

console.log(error);

}

}

function openModal(side) {

currentSelectSide = side;

document.getElementById(“token_modal”).style.display = “block”;

}

function closeModal() {

document.getElementById(“token_modal”).style.display = “none”;

}

async function getQuote() {

if (

!currentTrade.from ||

!currentTrade.to ||

!document.getElementById("from_amount").value

)

return;

let amount = Number(

document.getElementById("from_amount").value *

  10 ** currentTrade.from.decimals

);

const quote = await Moralis.Plugins.oneInch.quote({

chain: "bsc", // The blockchain you want to use (eth/bsc/polygon)

fromTokenAddress: currentTrade.from.address, // The token you want to swap

toTokenAddress: currentTrade.to.address, // The token you want to receive

amount: amount,

});

console.log(quote);

document.getElementById(“gas_estimate”).innerHTML = quote.estimatedGas;

document.getElementById(“to_amount”).value =

quote.toTokenAmount / 10 ** quote.toToken.decimals;

}

async function trySwap() {

let address = Moralis.User.current().get(“ethAddress”);

let amount = Number(

document.getElementById("from_amount").value *

  10 ** currentTrade.from.decimals

);

if (currentTrade.from.symbol !== “BNB”) {

const allowance = await Moralis.Plugins.oneInch.hasAllowance({

  chain: "bsc", // The blockchain you want to use (eth/bsc/polygon)

  fromTokenAddress: currentTrade.from.address, // The token you want to swap

  fromAddress: address, // Your wallet address

  amount: amount,

});

console.log(allowance);

if (!allowance) {

  await Moralis.Plugins.oneInch.approve({

    chain: "bsc", // The blockchain you want to use (eth/bsc/polygon)

    tokenAddress: currentTrade.from.address, // The token you want to swap

    fromAddress: address, // Your wallet address

  });

}

}

try {

let receipt = await doSwap(address, amount);

alert("Swap Complete");

} catch (error) {

console.log(error);

}

}

function doSwap(userAddress, amount) {

return Moralis.Plugins.oneInch.swap({

chain: "bsc", // The blockchain you want to use (eth/bsc/polygon)

fromTokenAddress: currentTrade.from.address, // The token you want to swap

toTokenAddress: currentTrade.to.address, // The token you want to receive

amount: amount,

fromAddress: userAddress, // Your wallet address

slippage: 1,

});

}

init();

document.getElementById(“modal_close”).onclick = closeModal;

document.getElementById(“from_token_select”).onclick = () => {

openModal(“from”);

};

document.getElementById(“to_token_select”).onclick = () => {

openModal(“to”);

};

document.getElementById(“login_button”).onclick = login;

document.getElementById(“from_amount”).onblur = getQuote;

document.getElementById(“swap_button”).onclick = trySwap;

If that is the full file, then there’s no serverUrl or appId variables, you need to set this up as I mentioned in the previous post.

1 Like