Merge branch 'list-tokens' of https://github.com/liftlearning/P2Pix-Front-End into list-tokens

This commit is contained in:
EsioFreitas 2022-12-15 12:33:54 -03:00
commit a1c27c3da6
8 changed files with 169 additions and 124 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.9 MiB

After

Width:  |  Height:  |  Size: 744 KiB

View File

@ -1,18 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import CustomButton from "@/components/CustomButton.vue"; import CustomButton from "@/components/CustomButton.vue";
import { BigNumber } from "ethers";
import blockchain from "../utils/blockchain"; import blockchain from "../utils/blockchain";
// props and store references // props
const props = defineProps({ const props = defineProps({
lastWalletTransactions: Array, lastWalletReleaseTransactions: Array,
tokenAmmount: BigNumber, tokenAmount: Number,
}); });
const teste = (amount: any) => { // Emits
console.log(amount); const emit = defineEmits(["makeAnotherTransaction"]);
console.log("Teste");
};
const formatEventsAmount = (amount: any) => { const formatEventsAmount = (amount: any) => {
try { try {
@ -42,9 +39,7 @@ const openEtherscanUrl = (url: string) => {
> >
<div> <div>
<p>Tokens recebidos</p> <p>Tokens recebidos</p>
<p class="text-2xl text-gray-900"> <p class="text-2xl text-gray-900">{{ props.tokenAmount }} BRZ</p>
{{ teste(props.tokenAmmount) }} BRZ
</p>
</div> </div>
<div class="my-5"> <div class="my-5">
<p> <p>
@ -57,67 +52,60 @@ const openEtherscanUrl = (url: string) => {
@buttonClicked="() => {}" @buttonClicked="() => {}"
/> />
</div> </div>
</div>
<div class="blur-container-row">
<button <button
type="button" type="button"
class="border-amber-500 border-2 rounded default-button text-white p-2 px-50 w-full" class="border-amber-500 border-2 rounded default-button text-white p-2 px-50 min-w-[198px]"
@click="() => {}" @click="emit('makeAnotherTransaction')"
> >
Fazer nova transação Fazer nova transação
</button> </button>
<button
type="button"
class="border-amber-500 border-2 rounded default-button text-white p-2"
@click="() => {}"
>
Desconectar
</button>
</div> </div>
<div class="text-container mt-10"> <div class="text-container mt-16">
<span class="text font-extrabold text-3xl max-w-[50rem]" <span class="text font-extrabold text-3xl max-w-[50rem]"
>Últimas transações >Últimas transações
</span> </span>
</div> </div>
<div class="blur-container"> <div class="blur-container min-w-[80%] gap-8">
<div class="flex flex-row justify-between w-full px-8">
<span class="text-xs text-gray-50 font-medium">Valor</span>
<span class="text-xs text-gray-50 font-medium">Tipo de transação</span>
<span class="text-xs text-gray-50 font-medium">Checar transação</span>
</div>
<div <div
class="flex flex-row justify-between w-full bg-white p-5 rounded-lg" class="flex flex-row justify-between w-full bg-white px-6 py-4 rounded-lg"
v-for="deposit in lastWalletTransactions" v-for="release in lastWalletReleaseTransactions"
:key="deposit?.blockNumber" :key="release?.blockNumber"
> >
<p class="last-deposit-info"> <span class="last-release-info">
{{ formatEventsAmount(deposit?.args.amount) }} BRZ {{ formatEventsAmount(release?.args.amount) }} BRZ
</p> </span>
<p class="last-deposit-info"> <span class="last-release-info">
{{ {{ "Compra" }}
deposit?.event == "DepositAdded" </span>
? "Depósito"
: deposit?.event == "LockAdded"
? "Reserva"
: "Compra"
}}
</p>
<div <div
class="flex gap-2 cursor-pointer items-center" class="flex gap-2 cursor-pointer items-center"
@click=" @click="
openEtherscanUrl( openEtherscanUrl(
`https://etherscan.io/tx/${deposit?.transactionHash}` `https://etherscan.io/tx/${release?.transactionHash}`
) )
" "
> >
<p class="last-deposit-info">Etherscan</p> <span class="last-release-info">Etherscan</span>
<img alt="Redirect image" src="@/assets/redirect.svg" /> <img alt="Redirect image" src="@/assets/redirect.svg" />
</div> </div>
</div> </div>
<button <div class="flex justify-center w-full right-6 mt-2">
type="button" <button
class="text-white mt-2" type="button"
@click="() => {}" class="text-white"
v-if="lastWalletTransactions?.length != 0" @click="() => {}"
> v-if="lastWalletReleaseTransactions?.length != 0"
Carregar mais >
</button> Carregar mais
<p class="font-bold" v-if="lastWalletTransactions?.length == 0"> </button>
</div>
<p class="font-bold" v-if="lastWalletReleaseTransactions?.length == 0">
Não nenhuma transação anterior Não nenhuma transação anterior
</p> </p>
</div> </div>
@ -145,11 +133,11 @@ p {
} }
.blur-container { .blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 w-1/3; @apply flex flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10 w-auto;
} }
.last-deposit-info { .last-release-info {
@apply font-medium text-base; @apply font-medium text-base text-gray-900;
} }
input[type="number"] { input[type="number"] {

View File

@ -69,7 +69,6 @@ const validatePix = async () => {
<template> <template>
<div class="page"> <div class="page">
<h2>{{ e2eId }}</h2>
<div class="text-container"> <div class="text-container">
<span class="text font-extrabold text-2xl max-w-[30rem]"> <span class="text font-extrabold text-2xl max-w-[30rem]">
Utilize o QR Code ou copie o código para realizar o Pix Utilize o QR Code ou copie o código para realizar o Pix

View File

@ -60,9 +60,11 @@ const verifyLiquidity = () => {
if (!walletAddress.value || tokenValue.value <= 0) return; if (!walletAddress.value || tokenValue.value <= 0) return;
depositsAddedList.value.find((element) => { depositsAddedList.value.find((element) => {
const p2pixTokenValue = blockchain.formatBigNumber(element.args.amount); const p2pixTokenValue = Number(
blockchain.formatBigNumber(element.args.amount)
);
if ( if (
tokenValue.value!! <= Number(p2pixTokenValue) && tokenValue.value!! <= p2pixTokenValue &&
tokenValue.value!! != 0 && tokenValue.value!! != 0 &&
element.args.seller !== walletAddress.value element.args.seller !== walletAddress.value
) { ) {

View File

@ -38,7 +38,6 @@ const formatWalletBalance = (): string => {
src="@/assets/logo.svg" src="@/assets/logo.svg"
width="75" width="75"
height="75" height="75"
@load="connectMetaMask()"
/> />
<div class="flex gap-4 items-center"> <div class="flex gap-4 items-center">
<button <button

View File

@ -21,7 +21,6 @@ const updateWalletStatus = async () => {
const walletAddress = await provider.send("eth_requestAccounts", []); const walletAddress = await provider.send("eth_requestAccounts", []);
const balance = await contract.balanceOf(walletAddress[0]); const balance = await contract.balanceOf(walletAddress[0]);
etherStore.setBalance(formatBigNumber(balance)); etherStore.setBalance(formatBigNumber(balance));
etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0])); etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0]));
}; };
@ -48,8 +47,8 @@ const splitTokens = async () => {
} }
}; };
// get wallet transactions // get all wallet transactions
const listTransactionByWalletAddress = async ( const listAllTransactionByWalletAddress = async (
walletAddress: string walletAddress: string
): Promise<any[] | undefined> => { ): Promise<any[] | undefined> => {
const provider = getProvider(); const provider = getProvider();
@ -76,6 +75,62 @@ const listTransactionByWalletAddress = async (
); );
}; };
// get wallet's deposit transactions
const listDepositTransactionByWalletAddress = async (
walletAddress: string
): Promise<any[] | undefined> => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const filterDeposits = p2pContract.filters.DepositAdded([walletAddress]);
const eventsDeposits = await p2pContract.queryFilter(filterDeposits);
return eventsDeposits.sort((a, b) => {
return b.blockNumber - a.blockNumber;
});
};
// get wallet's lock transactions
const listLockTransactionByWalletAddress = async (
walletAddress: string
): Promise<any[] | undefined> => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const filterAddedLocks = p2pContract.filters.LockAdded([walletAddress]);
const eventsAddedLocks = await p2pContract.queryFilter(filterAddedLocks);
return eventsAddedLocks.sort((a, b) => {
return b.blockNumber - a.blockNumber;
});
};
// get wallet's release transactions
const listReleaseTransactionByWalletAddress = async (
walletAddress: string
): Promise<any[] | undefined> => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const filterReleasedLocks = p2pContract.filters.LockReleased([walletAddress]);
const eventsReleasedLocks = await p2pContract.queryFilter(
filterReleasedLocks
);
return eventsReleasedLocks.sort((a, b) => {
return b.blockNumber - a.blockNumber;
});
};
// Update events at store methods // Update events at store methods
const updateDepositAddedEvents = async () => { const updateDepositAddedEvents = async () => {
const etherStore = useEtherStore(); const etherStore = useEtherStore();
@ -194,14 +249,14 @@ const mapDeposits = async (depositId: BigNumber) => {
const signer = provider.getSigner(); const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const deposit = await contract.mapDeposits(depositId.toNumber()); const deposit = await contract.mapDeposits(depositId);
return deposit; return deposit;
}; };
// Lock methods // Lock methods
// Gets value from user's form to create a lock in the blockchain // Gets value from user's form to create a lock in the blockchain
const addLock = async (depositId: Number, amount: Number) => { const addLock = async (depositId: BigNumber, amount: Number) => {
const etherStore = useEtherStore(); const etherStore = useEtherStore();
const provider = getProvider(); const provider = getProvider();
@ -212,17 +267,19 @@ const addLock = async (depositId: Number, amount: Number) => {
// Make lock // Make lock
const oldEventsLen = etherStore.locksAddedList.length; const oldEventsLen = etherStore.locksAddedList.length;
const lock = await p2pContract.lock( const lock = await p2pContract.lock(
depositId, depositId, // BigNumber
etherStore.walletAddress, etherStore.walletAddress, // String "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" (Example)
ethers.constants.AddressZero, ethers.constants.AddressZero, // String "0x0000000000000000000000000000000000000000"
0, 0,
ethers.utils.parseEther(amount.toString()), formatEther(String(amount)), // BigNumber
[] []
); );
lock.wait(); lock.wait();
while (etherStore.locksAddedList.length === oldEventsLen) { while (etherStore.locksAddedList.length === oldEventsLen) {
await updateLockAddedEvents(); await updateLockAddedEvents();
} }
return lock; return lock;
}; };
@ -236,17 +293,14 @@ const mapLocks = async (lockId: string) => {
const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const lock = await contract.mapLocks(lockId); const lock = await contract.mapLocks(lockId);
console.log(lock);
console.log("Expiration block = ", Number(lock.expirationBlock));
return lock; return lock;
}; };
// Releases lock by specific ID and other additional data // Releases lock by specific ID and other additional data
const releaseLock = async ( const releaseLock = async (
pixKey: string, pixKey: string,
amount: string, amount: Number,
e2eId: Number, e2eId: string,
lockId: string lockId: string
) => { ) => {
const provider = getProvider(); const provider = getProvider();
@ -258,7 +312,7 @@ const releaseLock = async (
const messageToSign = ethers.utils.solidityKeccak256( const messageToSign = ethers.utils.solidityKeccak256(
["string", "uint256", "uint256"], ["string", "uint256", "uint256"],
[pixKey, formatEther(amount), e2eId] [pixKey, formatEther(String(amount)), formatEther(e2eId)]
); );
const messageHashBytes = ethers.utils.arrayify(messageToSign); const messageHashBytes = ethers.utils.arrayify(messageToSign);
@ -268,7 +322,13 @@ const releaseLock = async (
const signer = provider.getSigner(); const signer = provider.getSigner();
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const release = await p2pContract.release(lockId, e2eId, sig.r, sig.s, sig.v); const release = await p2pContract.release(
lockId,
formatEther(e2eId),
sig.r,
sig.s,
sig.v
);
release.wait(); release.wait();
await updateLockReleasedEvents(); await updateLockReleasedEvents();
@ -289,8 +349,12 @@ const formatBigNumber = (num: BigNumber) => {
export default { export default {
connectProvider, connectProvider,
formatEther, formatEther,
updateWalletStatus,
splitTokens, splitTokens,
listTransactionByWalletAddress, listAllTransactionByWalletAddress,
listReleaseTransactionByWalletAddress,
listDepositTransactionByWalletAddress,
listLockTransactionByWalletAddress,
addDeposit, addDeposit,
mapDeposits, mapDeposits,
formatBigNumber, formatBigNumber,

View File

@ -24,18 +24,18 @@ const tokenAmount = ref<number>();
const lockTransactionHash = ref<string>(""); const lockTransactionHash = ref<string>("");
const lockId = ref<string>(""); const lockId = ref<string>("");
const loadingRelease = ref<Boolean>(false); const loadingRelease = ref<Boolean>(false);
const lastWalletTransactions = ref<any[] | undefined>([]); const lastWalletReleaseTransactions = ref<any[] | undefined>([]);
const confirmBuyClick = async ({ selectedDeposit, tokenValue }: any) => { const confirmBuyClick = async ({ selectedDeposit, tokenValue }: any) => {
// finish buy screen // finish buy screen
console.log(selectedDeposit);
let depositDetail; let depositDetail;
// depositId is BigNumber type object
const depositId = selectedDeposit["args"]["depositID"]; const depositId = selectedDeposit["args"]["depositID"];
await blockchain await blockchain
.mapDeposits(depositId) .mapDeposits(depositId)
.then((deposit) => (depositDetail = deposit)); .then((deposit) => (depositDetail = deposit));
tokenAmount.value = tokenValue; tokenAmount.value = tokenValue;
pixTarget.value = depositDetail?.pixTarget; pixTarget.value = String(depositDetail?.pixTarget);
// Makes lock with deposit ID and the Amount // Makes lock with deposit ID and the Amount
if (depositDetail) { if (depositDetail) {
@ -61,35 +61,27 @@ const releaseTransaction = async ({ e2eId }: any) => {
const findLockId = locksAddedList.value.find((element) => { const findLockId = locksAddedList.value.find((element) => {
if (element.transactionHash === lockTransactionHash.value) { if (element.transactionHash === lockTransactionHash.value) {
lockId.value = element.args.lockID; lockId.value = element.args.lockID; // BigNumber type
return true; return true;
} }
return false; return false;
}); });
if (findLockId) { if (findLockId) {
console.log(
pixTarget.value,
String(tokenAmount.value),
Number(e2eId),
lockId.value
);
const release = await blockchain.releaseLock( const release = await blockchain.releaseLock(
pixTarget.value, pixTarget.value, // String
String(tokenAmount.value), tokenAmount.value ?? 0, // Number
Number(e2eId), e2eId, // String
lockId.value lockId.value // String
); );
release.wait(); release.wait();
lastWalletTransactions.value = lastWalletReleaseTransactions.value =
await blockchain.listTransactionByWalletAddress( await blockchain.listReleaseTransactionByWalletAddress(
walletAddress.value.toLowerCase() walletAddress.value.toLowerCase()
); );
console.log(tokenAmount); await blockchain.updateWalletStatus();
loadingRelease.value = false; loadingRelease.value = false;
} }
}; };
@ -115,8 +107,9 @@ const releaseTransaction = async ({ e2eId }: any) => {
<div v-if="flowStep == Step.List"> <div v-if="flowStep == Step.List">
<ListComponent <ListComponent
v-if="!loadingRelease" v-if="!loadingRelease"
:last-wallet-release-transactions="lastWalletReleaseTransactions"
:tokenAmount="tokenAmount" :tokenAmount="tokenAmount"
:last-wallet-transactions="lastWalletTransactions" @make-another-transaction="flowStep = Step.Search"
/> />
<ValidationComponent <ValidationComponent
v-if="loadingRelease" v-if="loadingRelease"

View File

@ -15,7 +15,7 @@ const depositValue = ref<Number>();
const depositPixKey = ref<string>(""); const depositPixKey = ref<string>("");
// Split tokens between wallets in wallets.json // Split tokens between wallets in wallets.json
const splitTokens = () => { const splitTokens = async () => {
blockchain.splitTokens(); blockchain.splitTokens();
}; };
@ -40,13 +40,15 @@ const mockDeposit = () => {
// Get specific deposit data by its ID // Get specific deposit data by its ID
const mapDeposit = (depositId: BigNumber) => { const mapDeposit = (depositId: BigNumber) => {
blockchain.mapDeposits(depositId); const deposit = blockchain.mapDeposits(depositId);
return deposit;
}; };
// Lock methods // Lock methods
// Get specific lock data by its ID // Get specific lock data by its ID
const mapLock = (lockId: string) => { const mapLock = (lockId: string) => {
blockchain.mapLocks(lockId); const lock = blockchain.mapLocks(lockId);
return lock;
}; };
</script> </script>