diff --git a/package-lock.json b/package-lock.json index f4fc011..4b8b8cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,10 @@ "pinia-plugin-persistedstate": "^3.1.0", "sass": "^1.62.1", "swiper": "^9.4.1", - "viem": "^1.4.1", + "viem": "^1.5.4", "vue": "^3.3.2", "vue-router": "^4.2.0", + "wagmi": "^1.3.9", "web3": "^v1.9.0" }, "devDependencies": { @@ -1274,6 +1275,80 @@ "node": ">=14.16" } }, + "node_modules/@tanstack/query-core": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.6.tgz", + "integrity": "sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-persist-client-core": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-4.32.6.tgz", + "integrity": "sha512-MJJ7CldvT5HOel50h/3wOZZwVlIcroFD5Vxn8vPsfo2C0qQ208ilmN/81JWutm/lWy4n2BjnCrrWv6HvVI7S0w==", + "dependencies": { + "@tanstack/query-core": "4.32.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-sync-storage-persister": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-4.32.6.tgz", + "integrity": "sha512-hTwNo5O5EvydbfdVvwnwY0nIrNg1BxKEV4WAA8A+0NP9yc/9xoWy8RxbIkcz1p4JN2JhagaTKek8Fa5h5KitsA==", + "dependencies": { + "@tanstack/query-persist-client-core": "4.32.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.6.tgz", + "integrity": "sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg==", + "dependencies": { + "@tanstack/query-core": "4.32.6", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-query-persist-client": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-4.32.6.tgz", + "integrity": "sha512-EmNnYpvFYpxS4j5WFeNmfVVBxqq4RDnEFDBZwNKRfb4pzukcx/hcWtwqFk7Qj0EI4Dk8QGl239MEYwJbAc83tQ==", + "dependencies": { + "@tanstack/query-persist-client-core": "4.32.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^4.32.6" + } + }, "node_modules/@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -5991,6 +6066,20 @@ "node": ">=0.10.0" } }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6369,6 +6458,16 @@ "node": ">=14.0.0" } }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -7193,15 +7292,16 @@ } }, "node_modules/viem": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/viem/-/viem-1.4.1.tgz", - "integrity": "sha512-MtaoBHDSJDqa+QyXKG5d+S6EQSebRO0tzw6anSP4zC7AbC614vMeg9Y8LbkmEkWCw8swFYkort+H9l7GkWB0uA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/viem/-/viem-1.5.4.tgz", + "integrity": "sha512-/B2KbAiTqiPd6fzJgz4pgS879IXbHfO44RP/0nsRvBEuFJvHQlekNIAHTa4d3LPlsHWAM8GcH4m2P5ZvtEHVxA==", "dependencies": { "@adraffy/ens-normalize": "1.9.0", "@noble/curves": "1.0.0", "@noble/hashes": "1.3.0", "@scure/bip32": "1.3.0", "@scure/bip39": "1.2.0", + "@types/ws": "^8.5.4", "@wagmi/chains": "1.6.0", "abitype": "0.9.3", "isomorphic-ws": "5.0.0", @@ -7246,6 +7346,14 @@ } ] }, + "node_modules/viem/node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/viem/node_modules/abitype": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.3.tgz", @@ -7395,6 +7503,39 @@ "vue": "^3.2.0" } }, + "node_modules/wagmi": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-1.3.9.tgz", + "integrity": "sha512-BQbl+vWLNpLraXd/MWsl1P3I41l7DHrujx6qshIa1HDV7Mdh0GNrDuluRYBtuK2bBx9WM/Fjw45Ef2aKADan9A==", + "funding": [ + { + "type": "gitcoin", + "url": "https://wagmi.sh/gitcoin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "dependencies": { + "@tanstack/query-sync-storage-persister": "^4.27.1", + "@tanstack/react-query": "^4.28.0", + "@tanstack/react-query-persist-client": "^4.28.0", + "@wagmi/core": "1.3.8", + "abitype": "0.8.7", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "typescript": ">=5.0.4", + "viem": ">=0.3.35" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/web3": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", @@ -8929,6 +9070,44 @@ "defer-to-connect": "^2.0.1" } }, + "@tanstack/query-core": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.6.tgz", + "integrity": "sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==" + }, + "@tanstack/query-persist-client-core": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-4.32.6.tgz", + "integrity": "sha512-MJJ7CldvT5HOel50h/3wOZZwVlIcroFD5Vxn8vPsfo2C0qQ208ilmN/81JWutm/lWy4n2BjnCrrWv6HvVI7S0w==", + "requires": { + "@tanstack/query-core": "4.32.6" + } + }, + "@tanstack/query-sync-storage-persister": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-4.32.6.tgz", + "integrity": "sha512-hTwNo5O5EvydbfdVvwnwY0nIrNg1BxKEV4WAA8A+0NP9yc/9xoWy8RxbIkcz1p4JN2JhagaTKek8Fa5h5KitsA==", + "requires": { + "@tanstack/query-persist-client-core": "4.32.6" + } + }, + "@tanstack/react-query": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.6.tgz", + "integrity": "sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg==", + "requires": { + "@tanstack/query-core": "4.32.6", + "use-sync-external-store": "^1.2.0" + } + }, + "@tanstack/react-query-persist-client": { + "version": "4.32.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-4.32.6.tgz", + "integrity": "sha512-EmNnYpvFYpxS4j5WFeNmfVVBxqq4RDnEFDBZwNKRfb4pzukcx/hcWtwqFk7Qj0EI4Dk8QGl239MEYwJbAc83tQ==", + "requires": { + "@tanstack/query-persist-client-core": "4.32.6" + } + }, "@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -12659,6 +12838,17 @@ "loose-envify": "^1.1.0" } }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "optional": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -12937,6 +13127,16 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "optional": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -13570,15 +13770,16 @@ } }, "viem": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/viem/-/viem-1.4.1.tgz", - "integrity": "sha512-MtaoBHDSJDqa+QyXKG5d+S6EQSebRO0tzw6anSP4zC7AbC614vMeg9Y8LbkmEkWCw8swFYkort+H9l7GkWB0uA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/viem/-/viem-1.5.4.tgz", + "integrity": "sha512-/B2KbAiTqiPd6fzJgz4pgS879IXbHfO44RP/0nsRvBEuFJvHQlekNIAHTa4d3LPlsHWAM8GcH4m2P5ZvtEHVxA==", "requires": { "@adraffy/ens-normalize": "1.9.0", "@noble/curves": "1.0.0", "@noble/hashes": "1.3.0", "@scure/bip32": "1.3.0", "@scure/bip39": "1.2.0", + "@types/ws": "^8.5.4", "@wagmi/chains": "1.6.0", "abitype": "0.9.3", "isomorphic-ws": "5.0.0", @@ -13603,6 +13804,14 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "requires": { + "@types/node": "*" + } + }, "abitype": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.3.tgz", @@ -13670,6 +13879,19 @@ "@vue/devtools-api": "^6.5.0" } }, + "wagmi": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-1.3.9.tgz", + "integrity": "sha512-BQbl+vWLNpLraXd/MWsl1P3I41l7DHrujx6qshIa1HDV7Mdh0GNrDuluRYBtuK2bBx9WM/Fjw45Ef2aKADan9A==", + "requires": { + "@tanstack/query-sync-storage-persister": "^4.27.1", + "@tanstack/react-query": "^4.28.0", + "@tanstack/react-query-persist-client": "^4.28.0", + "@wagmi/core": "1.3.8", + "abitype": "0.8.7", + "use-sync-external-store": "^1.2.0" + } + }, "web3": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", diff --git a/package.json b/package.json index a456fae..49379c7 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,10 @@ "pinia-plugin-persistedstate": "^3.1.0", "sass": "^1.62.1", "swiper": "^9.4.1", - "viem": "^1.4.1", + "viem": "^1.5.4", "vue": "^3.3.2", "vue-router": "^4.2.0", + "wagmi": "^1.3.9", "web3": "^v1.9.0" }, "devDependencies": { diff --git a/public/assets/img/Icon.png b/public/assets/img/Icon.png new file mode 100644 index 0000000..1750647 Binary files /dev/null and b/public/assets/img/Icon.png differ diff --git a/public/assets/img/winner.png b/public/assets/img/winner.png new file mode 100644 index 0000000..b00a1f5 Binary files /dev/null and b/public/assets/img/winner.png differ diff --git a/src/App.vue b/src/App.vue index 109be82..a0254ce 100644 --- a/src/App.vue +++ b/src/App.vue @@ -70,28 +70,18 @@ onMounted(async () => { handleWindowSizeChange(); // initContracts - await walletStore.init(); - await tokenStore.initV2(); - await memeBurnerStore.init(); - await rewardLockerStore.init(); - await memeBurnerStore.init(); + // await walletStore.init(); + // await tokenStore.initV2(); + // await memeBurnerStore.init(); + // await rewardLockerStore.init(); + // await memeBurnerStore.init(); // await multiCallStore.init(); //Memeburner Contract - const account = getAccount(); - - console.log("account", account); - if (account.address) { - walletStore.address = account.address; - walletStore.connected = true; - } - //init - roundsStore.currentRound = parseInt( - await memeBurnerStore.getCurrentRound() - ); - console.log("roundsStore.currentRound", roundsStore.currentRound); - roundsStore.activeRound = roundsStore.currentRound; + // roundsStore.currentRound = parseInt(await memeBurnerStore.getCurrentRound()); + // console.log("roundsStore.currentRound", roundsStore.currentRound); + // roundsStore.activeRound = roundsStore.currentRound; await roundsStore.fillRound(roundsStore.activeRound); //events @@ -145,10 +135,10 @@ onMounted(async () => { - showPanel = value)"/> - - - + (showPanel = value)" /> + + + diff --git a/src/components/ConnectWallet.vue b/src/components/ConnectWallet.vue index 6a442f8..1457449 100644 --- a/src/components/ConnectWallet.vue +++ b/src/components/ConnectWallet.vue @@ -1,15 +1,19 @@ - Connect Wallet - - - - - - {{ connector.name }} - - - disconnect - Connected: {{ walletStore.connected }} + Connect Wallet + + + + + + {{ connector.name }} + + + disconnect + Connected: {{ walletStore.connected }} - \ No newline at end of file + diff --git a/src/main.js b/src/main.js index c8ed0ac..a670d83 100644 --- a/src/main.js +++ b/src/main.js @@ -14,13 +14,14 @@ import { library } from '@fortawesome/fontawesome-svg-core' import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' /* import specific icons */ -import { faArrowDown, faSpinner ,faPlus, faCaretLeft, faCaretRight, faBars, faAnglesRight } from "@fortawesome/free-solid-svg-icons"; +import { faArrowDown, faArrowRight, faSpinner ,faPlus, faCaretLeft, faCaretRight, faBars, faAnglesRight, faChevronDown, faChevronUp } from "@fortawesome/free-solid-svg-icons"; import { faDiscord, faTwitter, faTelegram } from "@fortawesome/free-brands-svg-icons"; /* add icons to the library */ library.add( - faArrowDown, + faArrowDown, + faArrowRight, faDiscord, faTwitter, faTelegram, @@ -29,7 +30,9 @@ library.add( faCaretLeft, faCaretRight, faBars, - faAnglesRight + faAnglesRight, + faChevronDown, + faChevronUp ); const app = createApp(App) diff --git a/src/router/index.js b/src/router/index.js index eb398c6..1d19e13 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,5 +1,16 @@ import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' +import { useWalletStoreV2 } from "@/stores/walletV2"; +import { useTokenStore } from "@/stores/tokens"; +import { useContractStore } from "@/stores/contracts"; +import { useMemeburnerStore } from "@/stores/memeburner"; +import { useRewardLockerStore } from "@/stores/rewardlocker"; +import { useMultiCallStore } from "@/stores/multicall"; +import { useRoundsStore } from "@/stores/rounds"; + +import { + getAccount, +} from "@wagmi/core"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -27,7 +38,38 @@ const router = createRouter({ name: "Wagmi", component: () => import("../views/WagmiView.vue"), }, + { + path: "/profile", + name: "Profile", + component: () => import("../views/ProfileView.vue"), + }, ], }); +router.beforeEach(async (to, from) => { + //init + const tokenStore = useTokenStore(); + const memeBurnerStore = useMemeburnerStore(); + const rewardLockerStore = useRewardLockerStore(); + const roundsStore = useRoundsStore(); + const walletStore = useWalletStoreV2(); + + if (!walletStore.publicClient) { + await walletStore.init(); + await tokenStore.initV2(); + await memeBurnerStore.init(); + await rewardLockerStore.init(); + await memeBurnerStore.init(); + + + if (!roundsStore.currentRound) { + roundsStore.currentRound = parseInt(await memeBurnerStore.getCurrentRound()); + console.log("roundsStore.currentRound", roundsStore.currentRound); + roundsStore.activeRound = roundsStore.currentRound; + } + } + // initContracts + return true; +}); + export default router diff --git a/src/stores/rounds.js b/src/stores/rounds.js index b4430f4..7c274ad 100644 --- a/src/stores/rounds.js +++ b/src/stores/rounds.js @@ -4,6 +4,7 @@ import { useTokenStore } from "./tokens"; import { useRewardLockerStore } from "./rewardlocker"; import { useWalletStore } from "./wallet"; import { useWalletStoreV2 } from "./walletV2"; +import { multicall } from "@wagmi/core"; export const useRoundsStore = defineStore("rounds", { @@ -22,6 +23,37 @@ export const useRoundsStore = defineStore("rounds", { async init() { //fill initial round }, + async loadRewardsRounds() { + const walletStore = useWalletStoreV2(); + const rewardLockerStore = useRewardLockerStore(); + + console.log("this.currentRound", this.currentRound); + const contracts = [] + for (let index = 0; index < this.currentRound; index++) { + console.log("load round: " + index); + // await this.fillRound(index) + + contracts.push({ + ...rewardLockerStore.contract, + functionName: "getTotalRewardsOf", + args: [walletStore.address, [index +1]], + }); + } + + const data = await multicall({ + contracts, + }); + console.log("data123abc", data); + // var test = await rewardLockerStore.getTotalRewardsOf(walletStore.address, rounds) + for (let index = 0; index < data.length; index++) { + const element = data[index]; + if (!this.rounds[index]) { + this.rounds[index] = {}; + } + this.rounds[index].round = index + 1 + this.rounds[index].rewards_total = element.result + } + }, async updateCurrentRound(sacrificedToken) { const tokenStore = useTokenStore(); const memeBurnerStore = useMemeburnerStore(); @@ -31,7 +63,7 @@ export const useRoundsStore = defineStore("rounds", { this.rounds[this.currentRound].token[tokenIndex].amount = data[tokenIndex].result[1]; }, - async fillRound() { + async fillRound(roundNumber) { console.log("fillRound"); const memeBurnerStore = useMemeburnerStore(); const tokenStore = useTokenStore(); @@ -41,25 +73,25 @@ export const useRoundsStore = defineStore("rounds", { // if (this.activeRound === this.currentRound) { // console.log("activeRound is not completed"); // } else - if (!this.rounds[this.activeRound]) { - console.log("round not filled --> fill round"); - console.log("vor error"); - var data = await memeBurnerStore.getSacrificedRound(this.activeRound) - let rewardData = null; - if (walletStore.connected) { - rewardData = await rewardLockerStore.getRewardsForAllToken(this.activeRound); - } - console.log("rewardData123", rewardData); - - var goal = await memeBurnerStore.getGoal(this.activeRound); - console.log("goal", goal); + if (!this.rounds[roundNumber]?.goal) { + console.log("round not filled --> fill round"); + console.log("vor error"); + var data = await memeBurnerStore.getSacrificedRound(roundNumber) + let rewardData = null; + if (walletStore.connected) { + rewardData = await rewardLockerStore.getRewardsForAllToken(roundNumber); + } + console.log("rewardData123", rewardData); + + var goal = await memeBurnerStore.getGoal(roundNumber); + console.log("goal", goal); var tokenArray = [] var rewards_clan = 0 var rewards_sacrifice = 0 for (let index = 0; index < data.length; index++) { var tokenData = {}; const token = tokenStore.token[index]; - var testcoef = await rewardLockerStore.getSacrificedTokenCoefficient(this.activeRound, token.contractAddress); + var testcoef = await rewardLockerStore.getSacrificedTokenCoefficient(roundNumber, token.contractAddress); @@ -69,31 +101,31 @@ export const useRoundsStore = defineStore("rounds", { tokenData.vampname = token.vamp.name; tokenData.amount = data[index].result[1]; tokenData.getAmountToReachGoal= await memeBurnerStore.getAmountToReachGoal(token.contractAddress); - if (this.currentRound !== this.activeRound && walletStore.connected) { + if (this.currentRound !== roundNumber && walletStore.connected) { const clanwin = (Number(testcoef) / 10000 - 1) * Number(rewardData[index].result); - const sacrificeRewards = Number(rewardData[index].result) - clanwin; + const sacrificeRewards = Number(rewardData[index].result) - clanwin; tokenData.rewards_ges = BigInt(rewardData[index].result); tokenData.rewards_clan = BigInt(clanwin); tokenData.rewards_sacrifice = BigInt(sacrificeRewards); rewards_clan = rewards_clan + (clanwin / Math.pow(10, token.decimals)); - rewards_sacrifice = + rewards_sacrifice = rewards_sacrifice + sacrificeRewards / Math.pow(10, token.decimals); - } - tokenArray.push(tokenData); } - const goalInBLD = await memeBurnerStore.getGoalInBLD(this.activeRound); - this.rounds[this.activeRound] = { - goal: goal[0], - goalInBLD: goalInBLD / BigInt(Math.pow(10, tokenStore.memeToken.decimals)), - expirationTimestamp: goal[1], - rewards_clan: BigInt(rewards_clan), - rewards_sacrifice: BigInt(rewards_sacrifice), - rewards_total: BigInt(rewards_clan + rewards_sacrifice), - token: tokenArray, - }; - console.log("this.rounds[this.activeRound]", this.rounds[this.activeRound]); + tokenArray.push(tokenData); + } + const goalInBLD = await memeBurnerStore.getGoalInBLD(roundNumber); + this.rounds[roundNumber] = { + goal: goal[0], + goalInBLD: goalInBLD / BigInt(Math.pow(10, tokenStore.memeToken.decimals)), + expirationTimestamp: goal[1], + rewards_clan: BigInt(rewards_clan), + rewards_sacrifice: BigInt(rewards_sacrifice), + rewards_total: BigInt(rewards_clan + rewards_sacrifice), + token: tokenArray, + }; + console.log("this.rounds[roundNumber]", this.rounds[roundNumber]); } else { console.log("round already filled"); } diff --git a/src/stores/walletV2.js b/src/stores/walletV2.js index 9e63626..1b7df62 100644 --- a/src/stores/walletV2.js +++ b/src/stores/walletV2.js @@ -79,6 +79,15 @@ export const useWalletStoreV2 = defineStore("walletV2", { webSocketPublicClient, }); this.publicClient = publicClient; + + console.log("hier123"); + const account = getAccount(); + + console.log("account123abc", account); + if (account.address) { + this.address = account.address; + this.connected = true; + } // await this.isConnected(); // const goerliKey = import.meta.env.VITE_GOERLI_KEY; // if (this.connected) { diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 649d2af..4937f79 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -19,6 +19,7 @@ const days = ref(null); const hours = ref(null); const minutes = ref(null); const seconds = ref(null); +const openTutorial = ref(false); const timer = ref(null); const modules = [Navigation]; const isMobile = inject("isMobile"); @@ -26,14 +27,14 @@ const isMobile = inject("isMobile"); async function prevSlide() { if (activeRound.value > 1) { activeRound.value--; - await roundsStore.fillRound(); + await roundsStore.fillRound(activeRound.value); } } async function nextSlide() { if (activeRound.value < currentRound.value) { activeRound.value++; - await roundsStore.fillRound(); + await roundsStore.fillRound(activeRound.value); } } @@ -49,9 +50,7 @@ onBeforeUnmount(() => { }); function timeBetweenDates() { - const dateEntered = new Date( - Number(getCurrentRoundData.value?.expirationTimestamp) * 1000 - ); + const dateEntered = new Date(Number(getCurrentRoundData.value?.expirationTimestamp) * 1000); if (dateEntered) { var now = new Date(); @@ -172,18 +171,31 @@ function timeBetweenDates() { - Tutorial - When you sacrifice your meme, the $ETH is put into an immutable $BLOOD/ETH liquidity position. - When your clan wins, you get extra $BLOOD rewards that you can trade. - - - - Tokenomics - 100% clan owned. No team %, no pre-mine - - + + Tutorial + + + + - + + When you sacrifice your meme, the $ETH is put into an immutable $BLOOD/ETH liquidity position. + When your clan wins, you get extra $BLOOD rewards that you can trade. + + + Tokenomics + 100% clan owned. No team %, no pre-mine + + + + + + $BLOOD is 100% + community owned. + No team %, no pre-mine. + + + @@ -286,6 +298,15 @@ function timeBetweenDates() { margin-bottom: 64px @media (min-width: 992px) width: 655px + .tutorial-header + display: flex + justify-content: center + gap: 16px + font-size: 24px + margin-bottom: 40px + .tutorial-text + font-size: 18px + .bloodline-wrapper .bloodline-inner diff --git a/src/views/ProfileView.vue b/src/views/ProfileView.vue new file mode 100644 index 0000000..48b7bf8 --- /dev/null +++ b/src/views/ProfileView.vue @@ -0,0 +1,364 @@ + + + Profile + + + 0x12345...812d + + + Total Rewards + + + + Claimed + TODO + + + + + + Unclaimed + TODO + + + + Stake + Unstake + + + + + + + Bloodline Clan + Most sacrificed + + + + + + $PEPE + + + + + + Total Sacrifice + + + 1,2b + + + + $PEPE + + + 139m + + + + $SHIB + + + 0 + + + + $ELON + + + + + + + + Cycles + + Cycle + Reward + + + + + + {{ round.round }} + + active + + + {{ Number(round.rewards_total / BigInt(Math.pow(10, 18))) }} $BDL + + + + + + + + + + + + Sacrifice Reward + +2,000 $BDL + + + + 2b PEPE + + 1,500 $BDL + + + 10m SHIB + + 500 $BDL + + + + + + + + Staking Bonus + +1,000 $BDL + + + + Staked + + 1,000 $BDL + + + + + + + + Competition Bonus + +200 $BDL + + + + + + $PEPE + + 1,000 $BDL + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock index 38f4fb4..058b10b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -734,6 +734,40 @@ dependencies: defer-to-connect "^2.0.1" +"@tanstack/query-core@4.32.6": + version "4.32.6" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.6.tgz" + integrity sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA== + +"@tanstack/query-persist-client-core@4.32.6": + version "4.32.6" + resolved "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-4.32.6.tgz" + integrity sha512-MJJ7CldvT5HOel50h/3wOZZwVlIcroFD5Vxn8vPsfo2C0qQ208ilmN/81JWutm/lWy4n2BjnCrrWv6HvVI7S0w== + dependencies: + "@tanstack/query-core" "4.32.6" + +"@tanstack/query-sync-storage-persister@^4.27.1": + version "4.32.6" + resolved "https://registry.npmjs.org/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-4.32.6.tgz" + integrity sha512-hTwNo5O5EvydbfdVvwnwY0nIrNg1BxKEV4WAA8A+0NP9yc/9xoWy8RxbIkcz1p4JN2JhagaTKek8Fa5h5KitsA== + dependencies: + "@tanstack/query-persist-client-core" "4.32.6" + +"@tanstack/react-query-persist-client@^4.28.0": + version "4.32.6" + resolved "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-4.32.6.tgz" + integrity sha512-EmNnYpvFYpxS4j5WFeNmfVVBxqq4RDnEFDBZwNKRfb4pzukcx/hcWtwqFk7Qj0EI4Dk8QGl239MEYwJbAc83tQ== + dependencies: + "@tanstack/query-persist-client-core" "4.32.6" + +"@tanstack/react-query@^4.28.0", "@tanstack/react-query@^4.32.6": + version "4.32.6" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.6.tgz" + integrity sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg== + dependencies: + "@tanstack/query-core" "4.32.6" + use-sync-external-store "^1.2.0" + "@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": version "5.1.1" resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" @@ -835,6 +869,13 @@ dependencies: "@types/node" "*" +"@types/ws@^8.5.4": + version "8.5.5" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz" + integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== + dependencies: + "@types/node" "*" + "@vitejs/plugin-vue@^4.2.3": version "4.2.3" resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz" @@ -956,7 +997,7 @@ abitype "0.8.7" eventemitter3 "^4.0.7" -"@wagmi/core@^1.3.8": +"@wagmi/core@^1.3.8", "@wagmi/core@1.3.8": version "1.3.8" resolved "https://registry.npmjs.org/@wagmi/core/-/core-1.3.8.tgz" integrity sha512-OYSxikoMizqVnpSkFTwGE7PwFaz2k0PXteSiI0W2Mtk4j4sZzRFdP+9AWeDB6AYm0yU3WvgN1IATx0EEBKUe3w== @@ -4033,7 +4074,15 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -"react@^16.8.0 || ^17.0.0 || ^18.0.0", react@>=16.8: +"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0": + version "18.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +"react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.2.0, react@>=16.8, react@>=17.0.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -4237,6 +4286,13 @@ sass@*, sass@^1.62.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" @@ -4680,7 +4736,7 @@ url-set-query@^1.0.0: resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== -use-sync-external-store@1.2.0: +use-sync-external-store@^1.2.0, use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== @@ -4768,16 +4824,17 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -viem@^1.0.0, viem@^1.4.1, viem@>=0.3.35: - version "1.4.1" - resolved "https://registry.npmjs.org/viem/-/viem-1.4.1.tgz" - integrity sha512-MtaoBHDSJDqa+QyXKG5d+S6EQSebRO0tzw6anSP4zC7AbC614vMeg9Y8LbkmEkWCw8swFYkort+H9l7GkWB0uA== +viem@^1.0.0, viem@^1.5.4, viem@>=0.3.35: + version "1.5.4" + resolved "https://registry.npmjs.org/viem/-/viem-1.5.4.tgz" + integrity sha512-/B2KbAiTqiPd6fzJgz4pgS879IXbHfO44RP/0nsRvBEuFJvHQlekNIAHTa4d3LPlsHWAM8GcH4m2P5ZvtEHVxA== dependencies: "@adraffy/ens-normalize" "1.9.0" "@noble/curves" "1.0.0" "@noble/hashes" "1.3.0" "@scure/bip32" "1.3.0" "@scure/bip39" "1.2.0" + "@types/ws" "^8.5.4" "@wagmi/chains" "1.6.0" abitype "0.9.3" isomorphic-ws "5.0.0" @@ -4830,6 +4887,18 @@ vue-router@^4.2.0: "@vue/server-renderer" "3.3.4" "@vue/shared" "3.3.4" +wagmi@^1.3.9: + version "1.3.9" + resolved "https://registry.npmjs.org/wagmi/-/wagmi-1.3.9.tgz" + integrity sha512-BQbl+vWLNpLraXd/MWsl1P3I41l7DHrujx6qshIa1HDV7Mdh0GNrDuluRYBtuK2bBx9WM/Fjw45Ef2aKADan9A== + dependencies: + "@tanstack/query-sync-storage-persister" "^4.27.1" + "@tanstack/react-query" "^4.28.0" + "@tanstack/react-query-persist-client" "^4.28.0" + "@wagmi/core" "1.3.8" + abitype "0.8.7" + use-sync-external-store "^1.2.0" + web3-bzz@1.10.0: version "1.10.0" resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz"
100% clan owned. No team %, no pre-mine