Compare commits

...

2 Commits

Author SHA1 Message Date
hueso
2c04e6f0de add Rootstock testnet 2024-07-18 19:23:53 -03:00
hueso
ce3fc962d6 fix chain detection 2024-07-18 19:23:09 -03:00
8 changed files with 96 additions and 2 deletions

24
src/assets/rootstock.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -7,6 +7,7 @@ const getTokenAddress = (network?: NetworkEnum): string => {
const possibleTokenAddresses: { [key: string]: string } = { const possibleTokenAddresses: { [key: string]: string } = {
Ethereum: "0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00", Ethereum: "0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00",
Polygon: "0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29", Polygon: "0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29",
Rootstock: "0xfE841c74250e57640390f46d914C88d22C51e82e",
}; };
return possibleTokenAddresses[network ? network : etherStore.networkName]; return possibleTokenAddresses[network ? network : etherStore.networkName];
@ -18,6 +19,7 @@ const getP2PixAddress = (network?: NetworkEnum): string => {
const possibleP2PixAddresses: { [key: string]: string } = { const possibleP2PixAddresses: { [key: string]: string } = {
Ethereum: "0x2414817FF64A114d91eCFA16a834d3fCf69103d4", Ethereum: "0x2414817FF64A114d91eCFA16a834d3fCf69103d4",
Polygon: "0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00", Polygon: "0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00",
Rootstock: "0x98ba35eb14b38D6Aa709338283af3e922476dE34",
}; };
return possibleP2PixAddresses[network ? network : etherStore.networkName]; return possibleP2PixAddresses[network ? network : etherStore.networkName];
@ -29,6 +31,7 @@ const getProviderUrl = (): string => {
const possibleProvidersUrls: { [key: string]: string } = { const possibleProvidersUrls: { [key: string]: string } = {
Ethereum: import.meta.env.VITE_GOERLI_API_URL, Ethereum: import.meta.env.VITE_GOERLI_API_URL,
Polygon: import.meta.env.VITE_MUMBAI_API_URL, Polygon: import.meta.env.VITE_MUMBAI_API_URL,
Rootstock: import.meta.env.VITE_RSK_API_URL,
}; };
return possibleProvidersUrls[etherStore.networkName]; return possibleProvidersUrls[etherStore.networkName];
@ -39,16 +42,18 @@ const possibleChains: { [key: string]: NetworkEnum } = {
"5": NetworkEnum.ethereum, "5": NetworkEnum.ethereum,
"0x13881": NetworkEnum.polygon, "0x13881": NetworkEnum.polygon,
"80001": NetworkEnum.polygon, "80001": NetworkEnum.polygon,
"31": NetworkEnum.rootstock,
}; };
const network2Chain: { [key: string]: string } = { const network2Chain: { [key: string]: string } = {
Ethereum: "0x5", Ethereum: "0x5",
Polygon: "0x13881", Polygon: "0x13881",
Localhost: "0x7a69", Localhost: "0x7a69",
Rootstock: "0x1f",
}; };
const isPossibleNetwork = (networkChain: string): boolean => { const isPossibleNetwork = (networkChain: string): boolean => {
if (Object.keys(possibleChains).includes(networkChain)) { if (Object.keys(possibleChains).includes(networkChain.toString())) {
return true; return true;
} }
return false; return false;

View File

@ -21,6 +21,10 @@ const getNetworksLiquidity = async (): Promise<void> => {
import.meta.env.VITE_MUMBAI_API_URL, import.meta.env.VITE_MUMBAI_API_URL,
80001 80001
); // mumbai provider ); // mumbai provider
const rootstockProvider = new ethers.providers.JsonRpcProvider(
import.meta.env.VITE_RSK_API_URL,
31
); // rootstock provider
const p2pContractGoerli = new ethers.Contract( const p2pContractGoerli = new ethers.Contract(
getP2PixAddress(NetworkEnum.ethereum), getP2PixAddress(NetworkEnum.ethereum),
@ -33,6 +37,12 @@ const getNetworksLiquidity = async (): Promise<void> => {
mumbaiProvider mumbaiProvider
); );
const p2pContractRootstock = new ethers.Contract(
getP2PixAddress(NetworkEnum.rootstock),
p2pix.abi,
rootstockProvider
);
etherStore.setLoadingNetworkLiquidity(true); etherStore.setLoadingNetworkLiquidity(true);
const depositListGoerli = await getValidDeposits( const depositListGoerli = await getValidDeposits(
getTokenAddress(NetworkEnum.ethereum), getTokenAddress(NetworkEnum.ethereum),
@ -45,7 +55,12 @@ const getNetworksLiquidity = async (): Promise<void> => {
); );
etherStore.setDepositsValidListGoerli(depositListGoerli); etherStore.setDepositsValidListGoerli(depositListGoerli);
const depositListRootstock = await getValidDeposits(
getTokenAddress(NetworkEnum.rootstock),
p2pContractRootstock
);
etherStore.setDepositsValidListMumbai(depositListMumbai); etherStore.setDepositsValidListMumbai(depositListMumbai);
etherStore.setDepositsValidListRootstock(depositListRootstock);
etherStore.setLoadingNetworkLiquidity(false); etherStore.setLoadingNetworkLiquidity(false);
}; };

View File

@ -1,7 +1,7 @@
import { useEtherStore } from "@/store/ether"; import { useEtherStore } from "@/store/ether";
import { getContract, getProvider } from "./provider"; import { getContract, getProvider } from "./provider";
import { getTokenAddress, possibleChains } from "./addresses"; import { getTokenAddress, possibleChains, isPossibleNetwork } from "./addresses";
import mockToken from "@/utils/smart_contract_files/MockToken.json"; import mockToken from "@/utils/smart_contract_files/MockToken.json";
@ -21,6 +21,10 @@ const updateWalletStatus = async (): Promise<void> => {
const signer = provider.getSigner(); const signer = provider.getSigner();
const { chainId } = await provider.getNetwork(); const { chainId } = await provider.getNetwork();
if(!isPossibleNetwork(chainId.toString())){
window.alert("Invalid chain!:"+chainId);
return;
}
etherStore.setNetworkName(possibleChains[chainId]); etherStore.setNetworkName(possibleChains[chainId]);
const mockTokenContract = new ethers.Contract( const mockTokenContract = new ethers.Contract(

View File

@ -30,6 +30,7 @@ const hasLiquidity = ref<boolean>(true);
const validDecimals = ref<boolean>(true); const validDecimals = ref<boolean>(true);
const selectedGoerliDeposit = ref<ValidDeposit>(); const selectedGoerliDeposit = ref<ValidDeposit>();
const selectedMumbaiDeposit = ref<ValidDeposit>(); const selectedMumbaiDeposit = ref<ValidDeposit>();
const selectedRootstockDeposit = ref<ValidDeposit>();
// Emits // Emits
const emit = defineEmits(["tokenBuy"]); const emit = defineEmits(["tokenBuy"]);
@ -70,6 +71,7 @@ const verifyLiquidity = (): void => {
enableConfirmButton.value = false; enableConfirmButton.value = false;
selectedGoerliDeposit.value = undefined; selectedGoerliDeposit.value = undefined;
selectedMumbaiDeposit.value = undefined; selectedMumbaiDeposit.value = undefined;
selectedRootstockDeposit.value = undefined;
if (tokenValue.value <= 0) { if (tokenValue.value <= 0) {
enableWalletButton.value = false; enableWalletButton.value = false;

View File

@ -7,6 +7,7 @@ import { NetworkEnum } from "@/model/NetworkEnum";
import { connectProvider, requestNetworkChange } from "@/blockchain/provider"; import { connectProvider, requestNetworkChange } from "@/blockchain/provider";
import ethereumImage from "@/assets/ethereum.svg"; import ethereumImage from "@/assets/ethereum.svg";
import polygonImage from "@/assets/polygon.svg"; import polygonImage from "@/assets/polygon.svg";
import rootstockImage from "@/assets/rootstock.svg";
// Store reference // Store reference
const etherStore = useEtherStore(); const etherStore = useEtherStore();
@ -58,6 +59,7 @@ const getNetworkImage = (networkName: NetworkEnum): string => {
let validImages = { let validImages = {
Ethereum: ethereumImage, Ethereum: ethereumImage,
Polygon: polygonImage, Polygon: polygonImage,
Rootstock: rootstockImage,
Localhost: ethereumImage, Localhost: ethereumImage,
}; };
@ -233,6 +235,8 @@ onClickOutside(infoMenuRef, () => {
<img <img
alt="Choosed network image" alt="Choosed network image"
:src="getNetworkImage(etherStore.networkName)" :src="getNetworkImage(etherStore.networkName)"
height="24"
width="24"
/> />
<span <span
class="default-text group-hover:text-gray-900 lg-view" class="default-text group-hover:text-gray-900 lg-view"
@ -269,6 +273,23 @@ onClickOutside(infoMenuRef, () => {
> >
<div class="mt-2"> <div class="mt-2">
<div class="bg-white rounded-md z-10"> <div class="bg-white rounded-md z-10">
<div
class="menu-button gap-2 px-4 rounded-md cursor-pointer"
@click="networkChange(NetworkEnum.rootstock)"
>
<img
alt="Rootstock image"
width="20"
height="20"
src="@/assets/rootstock.svg"
/>
<span class="text-gray-900 py-4 text-end font-semibold text-sm">
Rootstock
</span>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<div <div
class="menu-button gap-2 px-4 rounded-md cursor-pointer" class="menu-button gap-2 px-4 rounded-md cursor-pointer"
@click="networkChange(NetworkEnum.ethereum)" @click="networkChange(NetworkEnum.ethereum)"
@ -468,6 +489,23 @@ onClickOutside(infoMenuRef, () => {
> >
<div class="pl-4 mt-2 h-full"> <div class="pl-4 mt-2 h-full">
<div class="bg-white rounded-md z-10 h-full"> <div class="bg-white rounded-md z-10 h-full">
<div
class="menu-button gap-2 sm:px-4 rounded-md cursor-pointer py-2"
@click="networkChange(NetworkEnum.rootstock)"
>
<img
alt="Rootstock image"
width="20"
height="20"
src="@/assets/rootstock.svg"
/>
<span class="text-gray-900 py-4 text-end font-bold text-sm">
Rootstock
</span>
</div>
<div class="w-full flex justify-center pb-12">
<hr class="w-4/5" />
</div>
<div <div
class="menu-button gap-2 sm:px-4 rounded-md cursor-pointer py-2" class="menu-button gap-2 sm:px-4 rounded-md cursor-pointer py-2"
@click="networkChange(NetworkEnum.ethereum)" @click="networkChange(NetworkEnum.ethereum)"

View File

@ -1,4 +1,5 @@
export enum NetworkEnum { export enum NetworkEnum {
ethereum = "Ethereum", ethereum = "Ethereum",
polygon = "Polygon", polygon = "Polygon",
rootstock = "Rootstock",
} }

View File

@ -13,6 +13,8 @@ export const useEtherStore = defineStore("ether", {
depositsValidListGoerli: [] as ValidDeposit[], depositsValidListGoerli: [] as ValidDeposit[],
// Depósitos válidos para compra MUMBAI // Depósitos válidos para compra MUMBAI
depositsValidListMumbai: [] as ValidDeposit[], depositsValidListMumbai: [] as ValidDeposit[],
// Depósitos válidos para compra ROOTSTOCK
depositsValidListRootstock: [] as ValidDeposit[],
loadingWalletTransactions: false, loadingWalletTransactions: false,
loadingNetworkLiquidity: false, loadingNetworkLiquidity: false,
}), }),
@ -38,6 +40,9 @@ export const useEtherStore = defineStore("ether", {
setDepositsValidListMumbai(depositsValidList: ValidDeposit[]) { setDepositsValidListMumbai(depositsValidList: ValidDeposit[]) {
this.depositsValidListMumbai = depositsValidList; this.depositsValidListMumbai = depositsValidList;
}, },
setDepositsValidListRootstock(depositsValidList: ValidDeposit[]) {
this.depositsValidListRootstock = depositsValidList;
},
setLoadingWalletTransactions(isLoadingWalletTransactions: boolean) { setLoadingWalletTransactions(isLoadingWalletTransactions: boolean) {
this.loadingWalletTransactions = isLoadingWalletTransactions; this.loadingWalletTransactions = isLoadingWalletTransactions;
}, },