remove implementation ofsearch by money and only allow to search by token ammount

This commit is contained in:
RcleydsonR 2022-11-25 20:27:57 -03:00
parent f47f711bd9
commit fc508734a2
6 changed files with 147 additions and 136 deletions

View File

@ -4,18 +4,18 @@ const props = defineProps({
isDisabled: Boolean, isDisabled: Boolean,
}); });
const emit = defineEmits(["clicked"]); const emit = defineEmits(["buttonClicked"]);
</script> </script>
<template> <template>
<button <button
type="button" type="button"
class="button" class="button"
@click="emit('clicked')" @click="emit('buttonClicked')"
v-bind:class="{ 'opacity-70': isDisabled }" v-bind:class="{ 'opacity-70': props.isDisabled }"
:disabled="isDisabled" :disabled="props.isDisabled ? props.isDisabled : false"
> >
{{ text }} {{ props.text }}
</button> </button>
</template> </template>

View File

@ -2,90 +2,85 @@
import { ref } from "vue"; import { ref } from "vue";
import CustomButton from "../components/CustomButton.vue"; import CustomButton from "../components/CustomButton.vue";
import { debounce } from "@/utils/debounce"; import { debounce } from "@/utils/debounce";
import { ethers } from "ethers";
import { useEtherStore } from "@/store/ether"; import { useEtherStore } from "@/store/ether";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import blockchain from "../utils/blockchain"; import blockchain from "../utils/blockchain";
const TAX_CONVERSION = 1.005
const etherStore = useEtherStore(); const etherStore = useEtherStore();
const { depositList } = storeToRefs(etherStore); const { walletAddress, depositList } = storeToRefs(etherStore);
const searchClick = () => { const tokenValue = ref(0);
console.log("pass the deposit and token value ammount to next screen")
};
const valueToToken = ref<Number>(0);
const enableSelectButton = ref(false); const enableSelectButton = ref(false);
const hasLiquidity = ref(true); const hasLiquidity = ref(true);
const selectedDeposit = ref(); const selectedDeposit = ref();
const valueConversion = (event: any) => { const handleInputEvent = (event: any) => {
const { value } = event.target const { value } = event.target;
valueToToken.value = Number(value) / TAX_CONVERSION tokenValue.value = Number(value);
verifyLiquidity();
};
const verifyLiquidity = () => {
enableSelectButton.value = false; enableSelectButton.value = false;
selectedDeposit.value = null; selectedDeposit.value = null;
depositList.value.forEach((deposit) => { if (!walletAddress.value) return;
const p2pixTokenValue = blockchain.verifyDepositAmmount(deposit.args.amount);
if(valueToToken.value!! <= Number(p2pixTokenValue) && valueToToken.value!! != 0){ depositList.value.forEach((deposit) => {
const p2pixTokenValue = blockchain.verifyDepositAmmount(
deposit.args.amount
);
if (
tokenValue.value!! <= Number(p2pixTokenValue) &&
tokenValue.value!! != 0
) {
enableSelectButton.value = true; enableSelectButton.value = true;
hasLiquidity.value = true; hasLiquidity.value = true;
selectedDeposit.value = deposit; selectedDeposit.value = deposit;
return; return;
} }
}) });
if (!enableSelectButton.value) { if (!enableSelectButton.value) {
hasLiquidity.value = false hasLiquidity.value = false;
}
} }
};
const emit = defineEmits(["tokenBuy"]);
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<div class="text-container"> <div class="text-container">
<span class="text font-extrabold text-5xl max-w-[29rem]" <span class="text font-extrabold text-5xl max-w-[29rem]"
>Adquira crypto com apenas um Pix</span >Adquira cripto com apenas um Pix</span
> >
<span class="text font-medium text-base max-w-[28rem]" <span class="text font-medium text-base max-w-[28rem]"
>Digite um valor, selecione uma oferta, conecta sua carteira e receba a >Digite um valor, confira a oferta, conecte sua carteira e receba os
crypto após realizar o Pix</span tokens após realizar o Pix</span
> >
</div> </div>
<div <div
class="flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-1/3 mt-10" class="flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-1/3 mt-10"
> >
<div
class="flex justify-between w-full bg-white px-8 py-5 rounded-lg border-y-10 relative gap-2"
>
<p class="text-xl font-normal text-gray-900" v-if="valueToToken != undefined && valueToToken != 0">R$</p>
<input
type="number"
class="border-none outline-none text-lg text-gray-900 w-full"
v-bind:class="{ 'font-semibold': valueToToken != undefined, 'text-xl': valueToToken != undefined}"
placeholder="Digite o valor que deseja pagar"
@input="debounce(valueConversion, 500)($event)"
step=".01"
/>
<p class="text-xl font-normal text-gray-900" v-if="valueToToken == undefined || valueToToken == 0">R$</p>
</div>
<div <div
class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10"
> >
<div
class="bg-emerald-400 px-3 py-2.5 rounded-lg absolute bottom-position w-8 h-8"
>
<img alt="Ethereum image" src="@/assets/arrow.svg"/>
</div>
<div class="flex justify-between w-full items-center"> <div class="flex justify-between w-full items-center">
<p class="text-3xl text-gray-900">{{valueToToken.toFixed(3)}}</p> <input
<div class="flex flex-row p-2 px-3 bg-gray-300 rounded-full"> type="number"
class="border-none outline-none text-lg text-gray-900 w-auto"
v-bind:class="{
'font-semibold': tokenValue != undefined,
'text-xl': tokenValue != undefined,
}"
@input="debounce(handleInputEvent, 500)($event)"
step=".01"
/>
<div class="flex flex-row p-2 px-3 bg-gray-300 rounded-full w-fit">
<img alt="Ethereum image" class="mr-3" src="@/assets/brz.svg" /> <img alt="Ethereum image" class="mr-3" src="@/assets/brz.svg" />
<p class="text-gray-900 text-lg">BRZ</p> <p class="text-gray-900 text-lg">BRZ</p>
</div> </div>
@ -93,20 +88,40 @@ const valueConversion = (event: any) => {
<div class="custom-divide py-2"></div> <div class="custom-divide py-2"></div>
<div class="flex justify-between pt-2" v-if="hasLiquidity"> <div class="flex justify-between pt-2" v-if="hasLiquidity">
<p class="text-gray-500 font-normal text-sm w-fit">~ ETH 0,00 (+0,121%)</p> <p class="text-gray-500 font-normal text-sm w-auto">
~ R$ {{ tokenValue.toFixed(2) }}
</p>
<div class="flex gap-2"> <div class="flex gap-2">
<img alt="Polygon image" src="@/assets/polygon.svg" width="24px" height="24px"/> <img
<img alt="Ethereum image" src="@/assets/ethereum.svg" width="24px" height="24px"/> alt="Polygon image"
src="@/assets/polygon.svg"
width="24"
height="24"
/>
<img
alt="Ethereum image"
src="@/assets/ethereum.svg"
width="24"
height="24"
/>
</div> </div>
</div> </div>
<div class="flex pt-2 justify-center" v-if="!hasLiquidity"> <div class="flex pt-2 justify-center" v-if="!hasLiquidity">
<span class="text-red-500 font-normal text-sm">Atualmente não liquidez nas redes para sua demanda</span> <span class="text-red-500 font-normal text-sm"
>Atualmente não liquidez nas redes para sua demanda</span
>
</div> </div>
</div> </div>
<CustomButton <CustomButton
:text="'Selecionar Oferta'" v-if="!walletAddress"
:text="'Conectar carteira'"
@buttonClicked="blockchain.connectProvider()"
/>
<CustomButton
v-if="walletAddress"
:text="'Confirmar compra'"
:is-disabled="!enableSelectButton" :is-disabled="!enableSelectButton"
@clicked="searchClick()" @buttonClicked="emit('tokenBuy')"
/> />
</div> </div>
</div> </div>
@ -135,12 +150,12 @@ const valueConversion = (event: any) => {
@apply text-gray-800 text-center; @apply text-gray-800 text-center;
} }
input[type='number'] { input[type="number"] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }
input[type=number]::-webkit-inner-spin-button, input[type="number"]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button { input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }
</style> </style>

View File

@ -6,7 +6,7 @@ import mockToken from "./smart_contract_files/MockToken.json";
import p2pix from "./smart_contract_files/P2PIX.json"; import p2pix from "./smart_contract_files/P2PIX.json";
import addresses from "./smart_contract_files/localhost.json"; import addresses from "./smart_contract_files/localhost.json";
import { wallets } from "./smart_contract_files/wallets.json" import { wallets } from "./smart_contract_files/wallets.json";
const updateWalletStatus = async (walletAddress: string) => { const updateWalletStatus = async (walletAddress: string) => {
const etherStore = useEtherStore(); const etherStore = useEtherStore();
@ -44,7 +44,7 @@ const connectProvider = async () => {
const filter = p2pContract.filters.DepositAdded(null); const filter = p2pContract.filters.DepositAdded(null);
const events = await p2pContract.queryFilter(filter); const events = await p2pContract.queryFilter(filter);
console.log(events) console.log(events);
etherStore.setDepositList(events); etherStore.setDepositList(events);
connection.on("accountsChanged", (accounts: string[]) => { connection.on("accountsChanged", (accounts: string[]) => {
@ -60,12 +60,14 @@ const splitTokens = async () => {
const signer = provider.getSigner(); const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer); const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
for (var i = 0; i < wallets.length; i++){ for (let i = 0; i < wallets.length; i++) {
const tx = await contract.transfer(wallets[i], ethers.utils.parseEther("4000000.0")); const tx = await contract.transfer(
await tx.wait() wallets[i],
ethers.utils.parseEther("4000000.0")
);
await tx.wait();
updateWalletStatus(etherStore.walletAddress); updateWalletStatus(etherStore.walletAddress);
} }
}; };
const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => { const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
@ -75,16 +77,26 @@ const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
const signer = provider.getSigner(); const signer = provider.getSigner();
const tokenContract = new ethers.Contract(addresses.token, mockToken.abi, signer); const tokenContract = new ethers.Contract(
addresses.token,
mockToken.abi,
signer
);
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
// first get the approval // first get the approval
const apprv = await tokenContract.approve(addresses.p2pix, ethers.utils.parseEther(tokenQty)); const apprv = await tokenContract.approve(
addresses.p2pix,
ethers.utils.parseEther(tokenQty)
);
await apprv.wait(); await apprv.wait();
// deposit // deposit
const deposit = await p2pContract.deposit(addresses.token, ethers.utils.parseEther(tokenQty), pixKey); const deposit = await p2pContract.deposit(
addresses.token,
ethers.utils.parseEther(tokenQty),
pixKey
);
await deposit.wait(); await deposit.wait();
updateWalletStatus(etherStore.walletAddress); updateWalletStatus(etherStore.walletAddress);
@ -92,13 +104,11 @@ const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
const filter = p2pContract.filters.DepositAdded(null); const filter = p2pContract.filters.DepositAdded(null);
const events = await p2pContract.queryFilter(filter); const events = await p2pContract.queryFilter(filter);
console.log(events) console.log(events);
etherStore.setDepositList(events); etherStore.setDepositList(events);
}; };
const countDeposit = async () => { const countDeposit = async () => {
const provider = getProvider(); const provider = getProvider();
if (!provider) return; if (!provider) return;
@ -108,7 +118,7 @@ const countDeposit = async () => {
const count = await contract.depositCount(); const count = await contract.depositCount();
console.log(Number(count)) console.log(Number(count));
}; };
const mapDeposits = async (depositId: BigNumber) => { const mapDeposits = async (depositId: BigNumber) => {
@ -120,7 +130,7 @@ const mapDeposits = async (depositId: BigNumber) => {
const deposit = await contract.mapDeposits(depositId); const deposit = await contract.mapDeposits(depositId);
console.log(deposit) console.log(deposit);
}; };
const formatEther = (balance: string) => { const formatEther = (balance: string) => {
@ -129,9 +139,8 @@ const formatEther = (balance: string) => {
}; };
const verifyDepositAmmount = (ammountBigNumber: BigNumber): string => { const verifyDepositAmmount = (ammountBigNumber: BigNumber): string => {
return ethers.utils.formatEther(ammountBigNumber) return ethers.utils.formatEther(ammountBigNumber);
} };
const getProvider = (): ethers.providers.Web3Provider | null => { const getProvider = (): ethers.providers.Web3Provider | null => {
const window_ = window as any; const window_ = window as any;
@ -142,4 +151,12 @@ const getProvider = (): ethers.providers.Web3Provider | null => {
return new ethers.providers.Web3Provider(connection); return new ethers.providers.Web3Provider(connection);
}; };
export default { connectProvider, formatEther, splitTokens, mockDeposit, countDeposit, mapDeposits, verifyDepositAmmount }; export default {
connectProvider,
formatEther,
splitTokens,
mockDeposit,
countDeposit,
mapDeposits,
verifyDepositAmmount,
};

View File

@ -1,9 +1,9 @@
export const debounce = (func: any, delay: number) => { export const debounce = (func: any, delay: number) => {
let timer: any = null let timer: any = null;
return function (this: unknown, ...args: any) { return function (this: unknown, ...args: any) {
clearTimeout(timer) clearTimeout(timer);
timer = setTimeout(() => { timer = setTimeout(() => {
func.apply(this, args) func.apply(this, args);
}, delay) }, delay);
} };
} };

View File

@ -1,11 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import SearchComponent from "../components/SearchComponent.vue"; import SearchComponent from "../components/SearchComponent.vue";
const confirmBuyClick = () => {
// finish buy screen
console.log("compra confirmada");
};
</script> </script>
<template> <template>
<SearchComponent /> <SearchComponent @token-buy="confirmBuyClick()" />
</template> </template>
<style scoped> <style scoped></style>
</style>

View File

@ -7,7 +7,7 @@ import blockchain from "../utils/blockchain";
const etherStore = useEtherStore(); const etherStore = useEtherStore();
const { walletAddress, balance, depositList } = storeToRefs(etherStore); const { depositList } = storeToRefs(etherStore);
const depositValue = ref<Number>(); const depositValue = ref<Number>();
const depositPixKey = ref<string>(""); const depositPixKey = ref<string>("");
@ -25,38 +25,15 @@ const countDeposit = () => {
blockchain.countDeposit(); blockchain.countDeposit();
}; };
const formatWalletAddress = (): string => {
const walletAddressLength = walletAddress.value.length;
const initialText = walletAddress.value.substring(0, 5);
const finalText = walletAddress.value.substring(
walletAddressLength - 5,
walletAddressLength - 1
);
return `${initialText} ... ${finalText}`;
};
const mapDeposit = (depositId: BigNumber) => { const mapDeposit = (depositId: BigNumber) => {
blockchain.mapDeposits(depositId) blockchain.mapDeposits(depositId);
}
const formatWalletBalance = (): string => {
const formattedBalance = blockchain.formatEther(balance.value);
const fixed = formattedBalance.substring(0, 8);
return fixed;
}; };
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<div class="flex flex-col gap-4 justify-start items-start w-2/3"> <div class="flex flex-col gap-4 justify-start items-start w-2/3">
<button <button type="button" class="default-button" @click="countDeposit()">
type="button"
class="default-button"
@click="countDeposit()"
>
Contar depósitos Contar depósitos
</button> </button>
@ -75,26 +52,26 @@ const formatWalletBalance = (): string => {
v-model="depositPixKey" v-model="depositPixKey"
/> />
<button <button type="button" class="default-button" @click="mockDeposit()">
type="button"
class="default-button"
@click="mockDeposit()"
>
Mockar depósitos Mockar depósitos
</button> </button>
</div> </div>
<button <button type="button" class="default-button" @click="splitTokens()">
type="button"
class="default-button"
@click="splitTokens()"
>
Dividir tokens Dividir tokens
</button> </button>
</div> </div>
<ul class="flex flex-col justify-center items-center gap-4"> <ul class="flex flex-col justify-center items-center gap-4">
<li class="text-gray-900 font-semibold text-lg cursor-pointer border-2 border-amber-400 p-2 rounded-md bg-amber-200" v-for="deposit in depositList" :key="deposit['blockNumber']" @click="mapDeposit(deposit['args']['depositID'])">{{deposit['args']['0']}} : MRBZ {{blockchain.formatEther(deposit['args']['amount'])}} </li> <li
class="text-gray-900 font-semibold text-lg cursor-pointer border-2 border-amber-400 p-2 rounded-md bg-amber-200"
v-for="deposit in depositList"
:key="deposit['blockNumber']"
@click="mapDeposit(deposit['args']['depositID'])"
>
{{ deposit["args"]["0"] }} : MRBZ
{{ blockchain.formatEther(deposit["args"]["amount"]) }}
</li>
</ul> </ul>
</div> </div>
</template> </template>
@ -105,21 +82,20 @@ header {
} }
.default-button { .default-button {
@apply p-2 rounded border-2 border-amber-400 text-gray-50 font-extrabold text-base w-full @apply p-2 rounded border-2 border-amber-400 text-gray-50 font-extrabold text-base w-full;
} }
.default-input { .default-input {
@apply border-none outline-none text-lg text-gray-900 w-64 p-2 rounded-lg @apply border-none outline-none text-lg text-gray-900 w-64 p-2 rounded-lg;
} }
.page { .page {
@apply flex gap-8 mt-24 @apply flex gap-8 mt-24;
} }
@media (max-width: 1024px) { @media (max-width: 1024px) {
.page { .page {
@apply flex-wrap @apply flex-wrap;
} }
} }
</style> </style>