Merge branch 'develop' into transaction-history

This commit is contained in:
RcleydsonR 2022-12-30 17:07:54 -03:00
commit 43ba937a07
9 changed files with 463 additions and 91 deletions

View File

@ -2,27 +2,16 @@
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 { useEtherStore } from "@/store/ether";
import { storeToRefs } from "pinia";
// Store reference
const etherStore = useEtherStore();
const { walletAddress, depositsAddedList } = storeToRefs(etherStore);
// Reactive state // Reactive state
const tokenValue = ref(0); const tokenValue = ref(0);
const enableSelectButton = ref(false); const enableSelectButton = ref(false);
const hasLiquidity = ref(true); const hasLiquidity = ref(true);
const validDecimals = ref(true); const validDecimals = ref(true);
const selectedDeposit = ref();
// Emits // Emits
const emit = defineEmits(["tokenBuy"]); const emit = defineEmits(["tokenBuy"]);
// Blockchain methods
const connectAccount = async () => {};
// Debounce methods // Debounce methods
const handleInputEvent = (event: any) => { const handleInputEvent = (event: any) => {
const { value } = event.target; const { value } = event.target;
@ -35,8 +24,6 @@ const handleInputEvent = (event: any) => {
return; return;
} }
validDecimals.value = true; validDecimals.value = true;
// verifyLiquidity();
}; };
// Enable button methods // Enable button methods
@ -49,31 +36,6 @@ const decimalCount = (num: Number) => {
return 0; return 0;
}; };
// Verify if there is a valid deposit to buy
// const verifyLiquidity = () => {
// enableSelectButton.value = false;
// selectedDeposit.value = null;
// if (!walletAddress.value || tokenValue.value <= 0) return;
// depositsAddedList.value.find((element) => {
// const p2pixTokenValue = blockchain.formatBigNumber(element.args.amount);
// if (
// tokenValue.value!! <= Number(p2pixTokenValue) &&
// tokenValue.value!! != 0 &&
// element.args.seller !== walletAddress.value
// ) {
// enableSelectButton.value = true;
// hasLiquidity.value = true;
// selectedDeposit.value = element;
// return true;
// }
// return false;
// });
// if (!enableSelectButton.value) {
// hasLiquidity.value = false;
// }
// };
</script> </script>
<template> <template>

View File

@ -4,9 +4,11 @@ import CustomButton from "@/components/CustomButton.vue";
// Emits // Emits
const emit = defineEmits(["sendNetwork"]); const emit = defineEmits(["sendNetwork"]);
const sendNetworkHandle = () => { // props and store references
emit("sendNetwork"); const props = defineProps({
}; pixKey: String,
offer: Number,
});
</script> </script>
<template> <template>
@ -27,12 +29,12 @@ const sendNetworkHandle = () => {
> >
<div> <div>
<p>Tokens ofertados</p> <p>Tokens ofertados</p>
<p class="text-2xl text-gray-900">100 BRZ</p> <p class="text-2xl text-gray-900">{{ props.offer }} BRZ</p>
</div> </div>
<div class="my-3"> <div class="my-3">
<p>Chave Pix</p> <p>Chave Pix</p>
<p class="text-xl text-gray-900 break-words"> <p class="text-xl text-gray-900 break-words">
c02942far7047f6shri5ifh371908973 {{ props.pixKey }}
</p> </p>
</div> </div>
<div class="mb-5"> <div class="mb-5">
@ -44,7 +46,7 @@ const sendNetworkHandle = () => {
</div> </div>
<CustomButton <CustomButton
:text="'Enviar para a rede'" :text="'Enviar para a rede'"
@buttonClicked="sendNetworkHandle()" @buttonClicked="emit('sendNetwork')"
/> />
</div> </div>
</div> </div>

View File

@ -14,12 +14,6 @@ const validDecimals = ref(true);
// Emits // Emits
const emit = defineEmits(["approveTokens"]); const emit = defineEmits(["approveTokens"]);
// Blockchain methods
const approveTokensHandle = async () => {
console.log(offer.value, pixKey.value);
emit("approveTokens");
};
// Debounce methods // Debounce methods
const handleInputEvent = (event: any) => { const handleInputEvent = (event: any) => {
const { value } = event.target; const { value } = event.target;
@ -106,7 +100,7 @@ const decimalCount = (num: Number) => {
</div> </div>
<CustomButton <CustomButton
:text="'Aprovar tokens'" :text="'Aprovar tokens'"
@buttonClicked="approveTokensHandle()" @buttonClicked="emit('approveTokens', { offer, pixKey })"
/> />
</div> </div>
</div> </div>

View File

@ -221,7 +221,9 @@ const updateDepositAddedEvents = async () => {
const filterDeposits = p2pContract.filters.DepositAdded(null); const filterDeposits = p2pContract.filters.DepositAdded(null);
const eventsDeposits = await p2pContract.queryFilter(filterDeposits); const eventsDeposits = await p2pContract.queryFilter(filterDeposits);
etherStore.setDepositsAddedList(eventsDeposits); etherStore.setDepositsAddedList(eventsDeposits);
console.log("DEPOSITS", eventsDeposits);
}; };
const updateLockAddedEvents = async () => { const updateLockAddedEvents = async () => {
@ -239,6 +241,7 @@ const updateLockAddedEvents = async () => {
const filterLocks = p2pContract.filters.LockAdded(null); const filterLocks = p2pContract.filters.LockAdded(null);
const eventsLocks = await p2pContract.queryFilter(filterLocks); const eventsLocks = await p2pContract.queryFilter(filterLocks);
etherStore.setLocksAddedList(eventsLocks); etherStore.setLocksAddedList(eventsLocks);
console.log("LOCKS", eventsLocks);
}; };
const updateLockReleasedEvents = async () => { const updateLockReleasedEvents = async () => {
@ -253,9 +256,10 @@ const updateLockReleasedEvents = 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 filterLocks = p2pContract.filters.LockReleased(null); const filterReleases = p2pContract.filters.LockReleased(null);
const eventsLocks = await p2pContract.queryFilter(filterLocks); const eventsReleases = await p2pContract.queryFilter(filterReleases);
etherStore.setLocksReleasedList(eventsLocks); etherStore.setLocksReleasedList(eventsReleases);
console.log("RELEASES", eventsReleases);
}; };
// Provider methods // Provider methods
@ -284,8 +288,7 @@ const getProvider = (): ethers.providers.Web3Provider | null => {
}; };
// Deposit methods // Deposit methods
// Gets value and pix key from user's form to create a deposit in the blockchain const approveTokens = async (tokenQty: Number) => {
const addDeposit = async (tokenQty: Number, pixKey: string) => {
const provider = getProvider(); const provider = getProvider();
if (!provider) return; if (!provider) return;
@ -296,20 +299,61 @@ const addDeposit = async (tokenQty: Number, pixKey: string) => {
mockToken.abi, mockToken.abi,
signer signer
); );
const apprv = await tokenContract.approve(
addresses.p2pix,
formatEther(String(tokenQty))
);
await apprv.wait();
return apprv;
};
// Gets value and pix key from user's form to create a deposit in the blockchain
const addDeposit = async (tokenQty: Number, pixKey: String) => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
// First get the approval const deposit = await p2pContract.deposit(
addresses.token,
formatEther(String(tokenQty)),
pixKey,
ethers.utils.formatBytes32String("")
);
await deposit.wait();
await updateWalletStatus();
await updateDepositAddedEvents();
await updateValidDeposits();
};
const mockDeposit = async (tokenQty: Number, pixKey: String) => {
const provider = getProvider();
if (!provider) return;
const signer = provider.getSigner();
const tokenContract = new ethers.Contract(
addresses.token,
mockToken.abi,
signer
);
const apprv = await tokenContract.approve( const apprv = await tokenContract.approve(
addresses.p2pix, addresses.p2pix,
formatEther(String(tokenQty)) formatEther(String(tokenQty))
); );
await apprv.wait(); await apprv.wait();
// Now we make the deposit const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const deposit = await p2pContract.deposit( const deposit = await p2pContract.deposit(
addresses.token, addresses.token,
formatEther(String(tokenQty)), formatEther(String(tokenQty)),
pixKey pixKey,
ethers.utils.formatBytes32String("")
); );
await deposit.wait(); await deposit.wait();
@ -379,6 +423,7 @@ const addLock = async (depositId: BigNumber, amount: Number) => {
ethers.constants.AddressZero, // String "0x0000000000000000000000000000000000000000" ethers.constants.AddressZero, // String "0x0000000000000000000000000000000000000000"
0, 0,
formatEther(String(amount)), // BigNumber formatEther(String(amount)), // BigNumber
[],
[] []
); );
lock.wait(); lock.wait();
@ -419,8 +464,12 @@ const releaseLock = async (
); );
const messageToSign = ethers.utils.solidityKeccak256( const messageToSign = ethers.utils.solidityKeccak256(
["string", "uint256", "uint256"], ["string", "uint256", "bytes32"],
[pixKey, formatEther(String(amount)), formatEther(e2eId)] [
pixKey,
formatEther(String(amount)),
ethers.utils.formatBytes32String(e2eId),
]
); );
const messageHashBytes = ethers.utils.arrayify(messageToSign); const messageHashBytes = ethers.utils.arrayify(messageToSign);
@ -432,7 +481,8 @@ const releaseLock = async (
const release = await p2pContract.release( const release = await p2pContract.release(
lockId, lockId,
formatEther(e2eId), ethers.constants.AddressZero,
ethers.utils.formatBytes32String(e2eId),
sig.r, sig.r,
sig.s, sig.s,
sig.v sig.v
@ -465,9 +515,11 @@ export default {
listReleaseTransactionByWalletAddress, listReleaseTransactionByWalletAddress,
listDepositTransactionByWalletAddress, listDepositTransactionByWalletAddress,
listLockTransactionByWalletAddress, listLockTransactionByWalletAddress,
approveTokens,
addDeposit, addDeposit,
cancelDeposit, cancelDeposit,
withdrawDeposit, withdrawDeposit,
mockDeposit,
mapDeposits, mapDeposits,
formatBigNumber, formatBigNumber,
addLock, addLock,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,6 @@
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8" "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
], ],
"p2pix": "0x5FbDB2315678afecb367f032d93F642f64180aa3", "p2pix": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
"token": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" "token": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
} }

View File

@ -36,7 +36,7 @@ const formatWalletAddress = (wallet: string): string => {
// Gets value and pix key from user's form to create a deposit in the blockchain // Gets value and pix key from user's form to create a deposit in the blockchain
const mockDeposit = () => { const mockDeposit = () => {
if (!depositValue.value || !depositPixKey.value) return; if (!depositValue.value || !depositPixKey.value) return;
blockchain.addDeposit(depositValue.value, depositPixKey.value); blockchain.mockDeposit(depositValue.value, depositPixKey.value);
}; };
// Get specific deposit data by its ID // Get specific deposit data by its ID

View File

@ -2,9 +2,9 @@
import WantSellComponent from "../components/SellerSteps/WantSellComponent.vue"; import WantSellComponent from "../components/SellerSteps/WantSellComponent.vue";
import SendNetwork from "../components/SellerSteps/SendNetwork.vue"; import SendNetwork from "../components/SellerSteps/SendNetwork.vue";
import ValidationComponent from "../components/LoadingComponent.vue"; import ValidationComponent from "../components/LoadingComponent.vue";
import blockchain from "../utils/blockchain";
import { ref } from "vue"; import { ref } from "vue";
import router from "@/router";
enum Step { enum Step {
Search, Search,
@ -15,41 +15,55 @@ enum Step {
const flowStep = ref<Step>(Step.Sell); const flowStep = ref<Step>(Step.Sell);
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const walletConnect = async () => { const offerValue = ref<number>();
flowStep.value = Step.Sell; const pixKeyBuyer = ref<string>("");
};
const approveTokens = async () => { // Verificar tipagem
const approveOffer = async ({ offer, pixKey }: any) => {
loading.value = true; loading.value = true;
setTimeout(() => { try {
loading.value = false; offerValue.value = offer;
pixKeyBuyer.value = pixKey;
await blockchain.approveTokens(Number(offerValue.value));
flowStep.value = Step.Network; flowStep.value = Step.Network;
}, 2000); loading.value = false;
} catch {
flowStep.value = Step.Sell;
loading.value = false;
}
}; };
const sendNetwork = async () => { const sendNetwork = async () => {
loading.value = true; loading.value = true;
setTimeout(() => { try {
if (offerValue.value && pixKeyBuyer.value) {
await blockchain.addDeposit(offerValue.value, pixKeyBuyer.value);
flowStep.value = Step.Sell;
loading.value = false;
}
} catch (err) {
console.log(err);
flowStep.value = Step.Network;
loading.value = false; loading.value = false;
router.push("/"); }
}, 2000);
}; };
</script> </script>
<template> <template>
<!-- <SellerSearchComponent
v-if="flowStep == Step.Search"
@token-buy="walletConnect"
/> -->
<div v-if="flowStep == Step.Sell"> <div v-if="flowStep == Step.Sell">
<WantSellComponent v-if="!loading" @approve-tokens="approveTokens" /> <WantSellComponent v-if="!loading" @approve-tokens="approveOffer" />
<ValidationComponent <ValidationComponent
v-if="loading" v-if="loading"
:message="'A transação está sendo enviada para a rede.'" :message="'A transação está sendo enviada para a rede.'"
/> />
</div> </div>
<div v-if="flowStep == Step.Network"> <div v-if="flowStep == Step.Network">
<SendNetwork v-if="!loading" @send-network="sendNetwork" /> <SendNetwork
:pixKey="pixKeyBuyer"
:offer="Number(offerValue)"
v-if="!loading"
@send-network="sendNetwork"
/>
<ValidationComponent <ValidationComponent
v-if="loading" v-if="loading"
:message="'A transação está sendo enviada para a rede.'" :message="'A transação está sendo enviada para a rede.'"