Skip to content

Commit

Permalink
Merge pull request #329 from decert-me/feat-wagmiv1
Browse files Browse the repository at this point in the history
feat: update wagmi v1
  • Loading branch information
0xdwong authored Jan 5, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents 82742c0 + 5fcfe4c commit c2af221
Showing 34 changed files with 1,651 additions and 1,158 deletions.
24 changes: 24 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module.exports = {
env: {
browser: true,
es2021: true,
},
// extends: ["eslint:recommended", "plugin:react/recommended"],
// overrides: [
// {
// env: {
// node: true,
// },
// files: [".eslintrc.{js,cjs}"],
// parserOptions: {
// sourceType: "script",
// },
// },
// ],
// parserOptions: {
// ecmaVersion: "latest",
// sourceType: "module",
// },
// plugins: ["react"],
// rules: {},
};
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -22,8 +22,6 @@
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"@web3modal/ethereum": "^2.3.3",
"@web3modal/react": "^2.3.3",
"ahooks": "^3.7.5",
"antd": "^5.1.7",
"axios": "^1.5.0",
@@ -48,7 +46,6 @@
"eslint": "^8.3.0",
"eslint-config-react-app": "^7.0.1",
"eslint-webpack-plugin": "^3.1.1",
"ethers": "^5.7.2",
"file-loader": "^6.2.0",
"fs-extra": "^10.0.0",
"github-markdown-css": "^5.2.0",
@@ -94,7 +91,8 @@
"style-loader": "^3.3.1",
"tailwindcss": "^3.0.2",
"terser-webpack-plugin": "^5.2.5",
"wagmi": "^0.12.12",
"viem": "^1.19.1",
"wagmi": "^1.4.6",
"web-vitals": "^2.1.4",
"webpack": "^5.64.4",
"webpack-dev-server": "^4.6.0",
@@ -114,9 +112,11 @@
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
"chrome >= 67",
"edge >= 79",
"firefox >= 68",
"opera >= 54",
"safari >= 14"
],
"development": [
"last 1 chrome version",
102 changes: 3 additions & 99 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,77 +1,6 @@
import i18n from 'i18next';
import { useEffect } from "react";
import BeforeRouterEnter from "@/components/BeforeRouterEnter";
import { WagmiConfig, configureChains, createClient } from 'wagmi'
import { goerli, mainnet, polygon, polygonMumbai } from 'wagmi/chains'
import { MetaMaskConnector } from 'wagmi/connectors/metaMask'
import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'
import { publicProvider } from 'wagmi/providers/public'
import { infuraProvider } from 'wagmi/providers/infura'
import MyProvider from './provider';
import { StyleProvider, legacyLogicalPropertiesTransformer } from '@ant-design/cssinjs';
import { EthereumClient, w3mConnectors, w3mProvider } from '@web3modal/ethereum'
import { Web3Modal } from '@web3modal/react'
import * as Sentry from "@sentry/react";
import { ConfigProvider } from 'antd';
require("@solana/wallet-adapter-react-ui/styles.css");

const sentryKey = process.env.REACT_APP_SENTRY_KEY;
if (sentryKey) {
Sentry.init({
dsn: sentryKey,
integrations: [
new Sentry.BrowserTracing({
// Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled
tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
}),
new Sentry.Replay(),
],
// Performance Monitoring
tracesSampleRate: process.env.REACT_APP_SENTRY_TRACES || 1.0, // Capture 100% of the transactions, reduce in production!
// Session Replay
replaysSessionSampleRate: process.env.REACT_APP_SENTRY_REPLAYS_SESSION || 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.
replaysOnErrorSampleRate: process.env.REACT_APP_SENTRY_REPLAYS_ON_ERROR || 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.
});
}


const projectId = process.env.REACT_APP_PROJECT_ID;
const infura = process.env.REACT_APP_INFURA_API_KEY;

const { chains, provider, webSocketProvider } = configureChains(
[mainnet, goerli, polygonMumbai, polygon],
[
// alchemyProvider({ apiKey: process.env.NEXT_PUBLIC_ALCHEMY_API_KEY! }),
infuraProvider({ apiKey: infura }),
publicProvider(),
],
{ targetQuorum: 1 },
)
const { publicClient } = configureChains(chains, [w3mProvider({ projectId })])
const web3modalClient = createClient({
autoConnect: true,
connectors: w3mConnectors({ projectId, chains }),
publicClient,
// webSocketProvider,
})

const wagmiClient = createClient({
autoConnect: true,
connectors: [
new MetaMaskConnector({ chains }),
new WalletConnectConnector({
chains,
options: {
projectId: projectId,
showQrModal: true
},
}),
],
provider,
webSocketProvider,
})

const ethereumClient = new EthereumClient(web3modalClient, chains)

export default function App() {

@@ -101,33 +30,8 @@ export default function App() {
},[])

return (
<>

{/* wagmi */}
<WagmiConfig client={wagmiClient}>
<StyleProvider hashPriority="high" transformers={[legacyLogicalPropertiesTransformer]}>
<ConfigProvider
theme={{
components: {
Progress: {
/* here is your component tokens */
gapDegree: 0
},
},
}}
>
<MyProvider>
<BeforeRouterEnter />
</MyProvider>
</ConfigProvider>
</StyleProvider>
</WagmiConfig>
<Web3Modal
projectId={projectId}
ethereumClient={ethereumClient}
// enableAccountView={false}
// enableExplorer={false}
/>
</>
<MyProvider>
<BeforeRouterEnter />
</MyProvider>
)
}
67 changes: 67 additions & 0 deletions src/Providers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { ConnectionProvider, WalletProvider } from "@solana/wallet-adapter-react";
import { WalletModalProvider } from "@solana/wallet-adapter-react-ui";
import { clusterApiUrl } from "@solana/web3.js";
import { coinbase, network, phantom, trust } from "./utils/solana";
import { WagmiConfig } from "wagmi";
import { wagmiConfig } from "./utils/wagmi";
import { ConfigProvider } from 'antd';
import { StyleProvider, legacyLogicalPropertiesTransformer } from '@ant-design/cssinjs';
import * as Sentry from "@sentry/react";
import { useMemo } from "react";
require("@solana/wallet-adapter-react-ui/styles.css");

const sentryKey = process.env.REACT_APP_SENTRY_KEY;
if (sentryKey) {
Sentry.init({
dsn: sentryKey,
integrations: [
new Sentry.BrowserTracing({
// Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled
tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
}),
new Sentry.Replay(),
],
// Performance Monitoring
tracesSampleRate: process.env.REACT_APP_SENTRY_TRACES || 1.0, // Capture 100% of the transactions, reduce in production!
// Session Replay
replaysSessionSampleRate: process.env.REACT_APP_SENTRY_REPLAYS_SESSION || 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.
replaysOnErrorSampleRate: process.env.REACT_APP_SENTRY_REPLAYS_ON_ERROR || 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.
});
}


export default function Providers({children}) {
window.Buffer = window.Buffer || require("buffer").Buffer;

const endpoint = useMemo(() => clusterApiUrl(network), [network]);
const wallets = useMemo(
() => [
coinbase, phantom, trust
],
[network]
);

return (
// solana
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={wallets} autoConnect>
<WalletModalProvider>
{/* wagmi */}
<WagmiConfig config={wagmiConfig}>
<StyleProvider hashPriority="high" transformers={[legacyLogicalPropertiesTransformer]}>
<ConfigProvider
theme={{
components: {
Progress: { gapDegree: 0},
}}}
>
{children}
</ConfigProvider>
</StyleProvider>
</WagmiConfig>

</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
)
}
96 changes: 47 additions & 49 deletions src/components/CustomChallenge/CustomClaim.js
Original file line number Diff line number Diff line change
@@ -5,8 +5,7 @@ import {
CloseOutlined
} from '@ant-design/icons';
import { getClaimHash, getQuests, hasClaimed, submitHash } from "../../request/api/public";
import { claim } from "../../controller";
import { useNetwork, useSigner, useSwitchNetwork, useWaitForTransaction } from "wagmi";
import { useNetwork, useSwitchNetwork, useWaitForTransaction } from "wagmi";
import { useEffect, useState } from "react";
import ModalLoading from "../CustomModal/ModalLoading";
import { GetScorePercent } from "@/utils/GetPercent";
@@ -28,7 +27,6 @@ export default function CustomClaim(props) {
const navigateTo = useNavigate();
const { chain } = useNetwork();
const { verify } = useVerifyToken();
const { data: signer } = useSigner();
let [open, setOpen] = useState();
let [link, setLink] = useState("");
let [status, setStatus] = useState(0);
@@ -51,7 +49,7 @@ export default function CustomClaim(props) {
let [isModalAirdropOpen, setIsModalAirdropOpen] = useState();
let [writeLoading, setWriteLoading] = useState();
const { isLoading } = useWaitForTransaction({
hash: claimHash,
hash: claimHash?.hash,
onSuccess() {
// 清除cache
const cache = JSON.parse(localStorage.getItem('decert.cache'));
@@ -80,53 +78,53 @@ export default function CustomClaim(props) {

const goclaim = async() => {

if (chain.id != defaultChainId) {
setIsSwitch(true);
return
}
// if (chain.id != defaultChainId) {
// setIsSwitch(true);
// return
// }

let hasHash = true;
await verify()
.catch(() => {
hasHash = false;
})
if (!hasHash) {
return
}
let obj = {...cliamObj};
obj.uri = obj.uri[obj.tokenId]
obj.score = GetScorePercent(cliamObj.totalScore, cliamObj.score);
setWriteLoading(true);
const signature = await getClaimHash(obj);
if (signature.message.indexOf("Question Updated") !== -1 || signature.message.indexOf("题目已更新") !== -1 ) {
Modal.warning({
...modalNotice({
t,
text: t("translation:message.error.challenge-modify"),
onOk: () => {navigateTo(0)},
icon: "😵"
}
)});
return
}
if (signature) {
claimHash = await claim(
obj.tokenId,
obj.score,
signature.data,
signer
)
setClaimHash(claimHash);
setWriteLoading(false);
// let hasHash = true;
// await verify()
// .catch(() => {
// hasHash = false;
// })
// if (!hasHash) {
// return
// }
// let obj = {...cliamObj};
// obj.uri = obj.uri[obj.tokenId]
// obj.score = GetScorePercent(cliamObj.totalScore, cliamObj.score);
// setWriteLoading(true);
// const signature = await getClaimHash(obj);
// if (signature.message.indexOf("Question Updated") !== -1 || signature.message.indexOf("题目已更新") !== -1 ) {
// Modal.warning({
// ...modalNotice({
// t,
// text: t("translation:message.error.challenge-modify"),
// onOk: () => {navigateTo(0)},
// icon: "😵"
// }
// )});
// return
// }
// if (signature) {
// claimHash = await claim(
// obj.tokenId,
// obj.score,
// signature.data,
// // signer
// )
// setClaimHash(claimHash);
// setWriteLoading(false);

if (claimHash) {
submitHash({hash: claimHash})
// 弹出等待框
setIsModalOpen(true);
}
}else{
setWriteLoading(false);
}
// if (claimHash) {
// submitHash({hash: claimHash})
// // 弹出等待框
// setIsModalOpen(true);
// }
// }else{
// setWriteLoading(false);
// }
}

const handleCancel = () => {
Loading

0 comments on commit c2af221

Please sign in to comment.