Merge pull request #13 from liftlearning/smartcontract-update
update smart contract
This commit is contained in:
		
						commit
						4cb8cfb017
					
				| @ -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> | ||||||
|  | |||||||
| @ -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> | ||||||
|  | |||||||
| @ -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> | ||||||
|  | |||||||
| @ -170,7 +170,10 @@ const disconnectUser = () => { | |||||||
|           <div |           <div | ||||||
|             class="top-bar-info cursor-pointer" |             class="top-bar-info cursor-pointer" | ||||||
|             @click=" |             @click=" | ||||||
|               [(menuOpenToggle = !menuOpenToggle), (currencyMenuOpenToggle = false)] |               [ | ||||||
|  |                 (menuOpenToggle = !menuOpenToggle), | ||||||
|  |                 (currencyMenuOpenToggle = false), | ||||||
|  |               ] | ||||||
|             " |             " | ||||||
|             @mouseover="menuHoverToggle = true" |             @mouseover="menuHoverToggle = true" | ||||||
|             @mouseout="menuHoverToggle = false" |             @mouseout="menuHoverToggle = false" | ||||||
|  | |||||||
| @ -178,7 +178,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 () => { | ||||||
| @ -196,6 +198,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 () => { | ||||||
| @ -210,9 +213,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
 | ||||||
| @ -241,8 +245,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; | ||||||
| 
 | 
 | ||||||
| @ -253,20 +256,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(); | ||||||
| 
 | 
 | ||||||
| @ -306,6 +350,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(); | ||||||
| @ -346,8 +391,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); | ||||||
| @ -359,7 +408,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 | ||||||
| @ -391,7 +441,9 @@ export default { | |||||||
|   listReleaseTransactionByWalletAddress, |   listReleaseTransactionByWalletAddress, | ||||||
|   listDepositTransactionByWalletAddress, |   listDepositTransactionByWalletAddress, | ||||||
|   listLockTransactionByWalletAddress, |   listLockTransactionByWalletAddress, | ||||||
|  |   approveTokens, | ||||||
|   addDeposit, |   addDeposit, | ||||||
|  |   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
											
										
									
								
							| @ -3,6 +3,6 @@ | |||||||
|     "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", |     "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", | ||||||
|     "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" |     "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" | ||||||
|   ], |   ], | ||||||
|   "p2pix": "0x5FbDB2315678afecb367f032d93F642f64180aa3", |   "p2pix": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", | ||||||
|   "token": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" |   "token": "0x5FbDB2315678afecb367f032d93F642f64180aa3" | ||||||
| } | } | ||||||
| @ -1,5 +1,4 @@ | |||||||
| <script setup lang="ts"> | <script setup lang="ts"></script> | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <div class="page">Histórico de ofertas</div> |   <div class="page">Histórico de ofertas</div> | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| <script setup lang="ts"> | <script setup lang="ts"></script> | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <div class="page">Gerenciar Ofertas</div> |   <div class="page">Gerenciar Ofertas</div> | ||||||
|  | |||||||
| @ -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 | ||||||
|  | |||||||
| @ -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; |       loading.value = false; | ||||||
|     router.push("/"); |     } | ||||||
|   }, 2000); |   } catch (err) { | ||||||
|  |     console.log(err); | ||||||
|  |     flowStep.value = Step.Network; | ||||||
|  |     loading.value = false; | ||||||
|  |   } | ||||||
| }; | }; | ||||||
| </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.'" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user