Skip to content

Commit 37eeb52

Browse files
committed
feat: add unicorn.eth integration
1 parent 66f9ceb commit 37eeb52

File tree

6 files changed

+932
-47
lines changed

6 files changed

+932
-47
lines changed

.env.example

+2
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ NEXT_PUBLIC_MIXPANEL=
1717
NEXT_PUBLIC_FIAT_ON_RAMP=true
1818
NEXT_PUBLIC_SUBGRAPH_API_KEY=
1919
NEXT_PUBLIC_IS_CYPRESS_ENABLED=false
20+
NEXT_PUBLIC_THIRDWEB_CLIENT_ID=
21+
NEXT_PUBLIC_UNICORN_FACTORY_ADDRESS=

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"@safe-global/safe-apps-provider": "^0.18.4",
5050
"@safe-global/safe-apps-sdk": "^9.1.0",
5151
"@tanstack/react-query": "^5.62.8",
52+
"@thirdweb-dev/wagmi-adapter": "^0.2.64",
5253
"@visx/annotation": "^3.3.0",
5354
"@visx/axis": "^2.14.0",
5455
"@visx/curve": "^2.1.0",
@@ -83,6 +84,7 @@
8384
"react-number-format": "^4.9.1",
8485
"reflect-metadata": "^0.1.13",
8586
"remark-gfm": "^3.0.1",
87+
"thirdweb": "^5.96.4",
8688
"tiny-invariant": "^1.3.1",
8789
"viem": "^2.13.0",
8890
"wagmi": "^2.10.2",

pages/_app.page.tsx

+41-38
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { Web3ContextProvider } from 'src/libs/web3-data-provider/Web3Provider';
2121
import { useRootStore } from 'src/store/root';
2222
import { SharedDependenciesProvider } from 'src/ui-config/SharedDependenciesProvider';
2323
import { wagmiConfig } from 'src/ui-config/wagmiConfig';
24+
import { ThirdwebProvider } from 'thirdweb/react';
2425
import { WagmiProvider } from 'wagmi';
2526
import { useShallow } from 'zustand/shallow';
2627

@@ -139,44 +140,46 @@ export default function MyApp(props: MyAppProps) {
139140
<NoSsr>
140141
<LanguageProvider>
141142
<WagmiProvider config={wagmiConfig}>
142-
<QueryClientProvider client={queryClient}>
143-
<ConnectKitProvider
144-
onDisconnect={cleanLocalStorage}
145-
onConnect={({ connectorId }) => setWalletType(connectorId)}
146-
>
147-
<Web3ContextProvider>
148-
<AppGlobalStyles>
149-
<AddressBlocked>
150-
<ModalContextProvider>
151-
<SharedDependenciesProvider>
152-
<AppDataProvider>
153-
<GasStationProvider>
154-
{getLayout(<Component {...pageProps} />)}
155-
<SupplyModal />
156-
<WithdrawModal />
157-
<BorrowModal />
158-
<RepayModal />
159-
<CollateralChangeModal />
160-
<DebtSwitchModal />
161-
<ClaimRewardsModal />
162-
<EmodeModal />
163-
<SwapModal />
164-
<FaucetModal />
165-
<TransactionEventHandler />
166-
<SwitchModal />
167-
<StakingMigrateModal />
168-
<BridgeModal />
169-
<ReadOnlyModal />
170-
</GasStationProvider>
171-
</AppDataProvider>
172-
</SharedDependenciesProvider>
173-
</ModalContextProvider>
174-
</AddressBlocked>
175-
</AppGlobalStyles>
176-
</Web3ContextProvider>
177-
</ConnectKitProvider>
178-
<ReactQueryDevtools initialIsOpen={false} />
179-
</QueryClientProvider>
143+
<ThirdwebProvider>
144+
<QueryClientProvider client={queryClient}>
145+
<ConnectKitProvider
146+
onDisconnect={cleanLocalStorage}
147+
onConnect={({ connectorId }) => setWalletType(connectorId)}
148+
>
149+
<Web3ContextProvider>
150+
<AppGlobalStyles>
151+
<AddressBlocked>
152+
<ModalContextProvider>
153+
<SharedDependenciesProvider>
154+
<AppDataProvider>
155+
<GasStationProvider>
156+
{getLayout(<Component {...pageProps} />)}
157+
<SupplyModal />
158+
<WithdrawModal />
159+
<BorrowModal />
160+
<RepayModal />
161+
<CollateralChangeModal />
162+
<DebtSwitchModal />
163+
<ClaimRewardsModal />
164+
<EmodeModal />
165+
<SwapModal />
166+
<FaucetModal />
167+
<TransactionEventHandler />
168+
<SwitchModal />
169+
<StakingMigrateModal />
170+
<BridgeModal />
171+
<ReadOnlyModal />
172+
</GasStationProvider>
173+
</AppDataProvider>
174+
</SharedDependenciesProvider>
175+
</ModalContextProvider>
176+
</AddressBlocked>
177+
</AppGlobalStyles>
178+
</Web3ContextProvider>
179+
</ConnectKitProvider>
180+
<ReactQueryDevtools initialIsOpen={false} />
181+
</QueryClientProvider>
182+
</ThirdwebProvider>
180183
</WagmiProvider>
181184
</LanguageProvider>
182185
</NoSsr>

public/unicorn.png

35.8 KB
Loading

src/ui-config/wagmiConfig.ts

+36
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { inAppWalletConnector } from '@thirdweb-dev/wagmi-adapter';
12
import { Emitter } from '@wagmi/core/internal';
23
import { getDefaultConfig } from 'connectkit';
34
import {
@@ -8,12 +9,45 @@ import {
89
FORK_RPC_URL,
910
networkConfigs,
1011
} from 'src/utils/marketsAndNetworksConfig';
12+
import { createThirdwebClient, defineChain as thirdwebDefineChain } from 'thirdweb';
1113
import { type Chain } from 'viem';
1214
import { createConfig, CreateConfigParameters, http } from 'wagmi';
15+
import { mainnet } from 'wagmi/chains';
1316
import { injected, safe } from 'wagmi/connectors';
1417

1518
import { prodNetworkConfig, testnetConfig } from './networksConfig';
1619

20+
const thirdwebClientId =
21+
process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID || '4e8c81182c3709ee441e30d776223354';
22+
const unicornFactoryAddress =
23+
process.env.NEXT_PUBLIC_UNICORN_FACTORY_ADDRESS || '0xD771615c873ba5a2149D5312448cE01D677Ee48A';
24+
25+
// Create Thirdweb Client
26+
const client = createThirdwebClient({
27+
clientId: thirdwebClientId,
28+
});
29+
30+
// Create the Unicorn Wallet Connector (using Thirdweb In-App Wallet)
31+
// Note: The chain specified here is for the smart account functionality as per Unicorn docs.
32+
const unicornConnector = inAppWalletConnector({
33+
client,
34+
smartAccount: {
35+
sponsorGas: true, // or false based on your needs / Unicorn requirements
36+
chain: thirdwebDefineChain(mainnet.id),
37+
factoryAddress: unicornFactoryAddress,
38+
},
39+
metadata: {
40+
name: 'Unicorn.eth',
41+
icon: '/unicorn.png',
42+
image: {
43+
src: '/unicorn.png',
44+
alt: 'Unicorn.eth',
45+
height: 100,
46+
width: 100,
47+
},
48+
},
49+
});
50+
1751
const testnetChains = Object.values(testnetConfig).map((config) => config.wagmiChain) as [
1852
Chain,
1953
...Chain[]
@@ -80,6 +114,8 @@ const connectorConfig = {
80114
emitter: new Emitter(''),
81115
};
82116

117+
prodCkConfig.connectors = [unicornConnector, ...(prodCkConfig.connectors || [])];
118+
83119
const connectors = prodCkConfig.connectors
84120
?.map((connector) => {
85121
// initialize the connector with the emitter so we can access the id

0 commit comments

Comments
 (0)