Skip to content

Commit 6ed5288

Browse files
authored
add GcV token as voting token for Fantom (gitcoinco#2225)
* add GcV token as voting token for Fantom * add GcV to explorer * remove manifest link * add canVote to payout tokens * add defaultForVOting * remove unused import
1 parent 66742a5 commit 6ed5288

8 files changed

Lines changed: 69 additions & 14 deletions

File tree

packages/grant-explorer/public/index.html

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@
88
<meta name="git-sha" content="%REACT_APP_GIT_SHA%" />
99
<meta name="description" content="Create & Manage Rounds" />
1010
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
11-
<!--
12-
manifest.json provides metadata used when your web app is installed on a
13-
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
14-
-->
15-
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
1611
<!--
1712
Notice the use of %PUBLIC_URL% in the tags above.
1813
It will be replaced with the URL of the `public` folder during the build.
21.7 KB
Loading

packages/grant-explorer/src/features/api/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,9 @@ export type PayoutToken = {
200200
default?: boolean;
201201
redstoneTokenId?: string;
202202
permitVersion?: string;
203+
//TODO: remove if the previous default was intended to be used as defaultForVoting
204+
defaultForVoting: boolean;
205+
//TODO: split PayoutTokens and VotingTokens in
206+
// 2 different types/lists and remove the following attribute
207+
canVote: boolean;
203208
};

packages/grant-explorer/src/features/api/utils.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export const TokenNamesAndLogos: Record<string, string> = {
6363
ETH: "./logos/ethereum-eth-logo.svg",
6464
OP: "./logos/optimism-logo.svg",
6565
PGN: "./logos/pgn-logo.svg",
66+
GcV: "./logos/fantom-gcv-logo.png",
6667
};
6768

6869
const MAINNET_TOKENS: PayoutToken[] = [
@@ -73,6 +74,8 @@ const MAINNET_TOKENS: PayoutToken[] = [
7374
decimal: 18,
7475
logo: TokenNamesAndLogos["DAI"],
7576
redstoneTokenId: RedstoneTokenIds["DAI"],
77+
defaultForVoting: false,
78+
canVote: true,
7679
},
7780
{
7881
name: "ETH",
@@ -81,6 +84,8 @@ const MAINNET_TOKENS: PayoutToken[] = [
8184
decimal: 18,
8285
logo: TokenNamesAndLogos["ETH"],
8386
redstoneTokenId: RedstoneTokenIds["ETH"],
87+
defaultForVoting: true,
88+
canVote: true,
8489
},
8590
];
8691

@@ -93,6 +98,8 @@ const OPTIMISM_MAINNET_TOKENS: PayoutToken[] = [
9398
logo: TokenNamesAndLogos["DAI"],
9499
redstoneTokenId: RedstoneTokenIds["DAI"],
95100
permitVersion: "2",
101+
defaultForVoting: false,
102+
canVote: true,
96103
},
97104
{
98105
name: "ETH",
@@ -101,6 +108,8 @@ const OPTIMISM_MAINNET_TOKENS: PayoutToken[] = [
101108
decimal: 18,
102109
logo: TokenNamesAndLogos["ETH"],
103110
redstoneTokenId: RedstoneTokenIds["ETH"],
111+
defaultForVoting: true,
112+
canVote: true,
104113
},
105114
];
106115

@@ -112,6 +121,8 @@ const FANTOM_MAINNET_TOKENS: PayoutToken[] = [
112121
decimal: 18,
113122
logo: TokenNamesAndLogos["FTM"],
114123
redstoneTokenId: RedstoneTokenIds["FTM"],
124+
defaultForVoting: false,
125+
canVote: false,
115126
},
116127
{
117128
name: "FTM",
@@ -120,6 +131,8 @@ const FANTOM_MAINNET_TOKENS: PayoutToken[] = [
120131
decimal: 18,
121132
logo: TokenNamesAndLogos["FTM"],
122133
redstoneTokenId: RedstoneTokenIds["FTM"],
134+
defaultForVoting: false,
135+
canVote: false,
123136
},
124137
{
125138
name: "BUSD",
@@ -128,6 +141,8 @@ const FANTOM_MAINNET_TOKENS: PayoutToken[] = [
128141
decimal: 18,
129142
logo: TokenNamesAndLogos["BUSD"],
130143
redstoneTokenId: RedstoneTokenIds["BUSD"],
144+
defaultForVoting: false,
145+
canVote: false,
131146
},
132147
{
133148
name: "DAI",
@@ -136,6 +151,18 @@ const FANTOM_MAINNET_TOKENS: PayoutToken[] = [
136151
decimal: 18,
137152
logo: TokenNamesAndLogos["DAI"],
138153
redstoneTokenId: RedstoneTokenIds["DAI"],
154+
defaultForVoting: false,
155+
canVote: false,
156+
},
157+
{
158+
name: "GcV",
159+
chainId: ChainId.FANTOM_MAINNET_CHAIN_ID,
160+
address: "0x83791638da5EB2fAa432aff1c65fbA47c5D29510",
161+
decimal: 18,
162+
logo: TokenNamesAndLogos["GcV"],
163+
redstoneTokenId: RedstoneTokenIds["DAI"], // We use DAI to keep the valueless token to 1$
164+
defaultForVoting: true,
165+
canVote: true,
139166
},
140167
];
141168

@@ -148,6 +175,8 @@ const GOERLI_TESTNET_TOKENS: PayoutToken[] = [
148175
logo: TokenNamesAndLogos["USDC"],
149176
redstoneTokenId: RedstoneTokenIds["USDC"],
150177
permitVersion: "2",
178+
defaultForVoting: false,
179+
canVote: true,
151180
},
152181
{
153182
name: "DAI",
@@ -156,6 +185,8 @@ const GOERLI_TESTNET_TOKENS: PayoutToken[] = [
156185
decimal: 18,
157186
logo: TokenNamesAndLogos["DAI"],
158187
redstoneTokenId: RedstoneTokenIds["DAI"],
188+
defaultForVoting: false,
189+
canVote: true,
159190
},
160191
{
161192
name: "ETH",
@@ -164,6 +195,8 @@ const GOERLI_TESTNET_TOKENS: PayoutToken[] = [
164195
decimal: 18,
165196
logo: TokenNamesAndLogos["ETH"],
166197
redstoneTokenId: RedstoneTokenIds["ETH"],
198+
defaultForVoting: true,
199+
canVote: true,
167200
},
168201
];
169202

@@ -175,6 +208,8 @@ const FANTOM_TESTNET_TOKENS: PayoutToken[] = [
175208
decimal: 18,
176209
logo: TokenNamesAndLogos["DAI"],
177210
redstoneTokenId: RedstoneTokenIds["DAI"],
211+
defaultForVoting: true,
212+
canVote: true,
178213
},
179214
];
180215

@@ -186,6 +221,8 @@ const PGN_TESTNET_TOKENS: PayoutToken[] = [
186221
decimal: 18,
187222
logo: TokenNamesAndLogos["DAI"],
188223
redstoneTokenId: RedstoneTokenIds["DAI"],
224+
defaultForVoting: false,
225+
canVote: true,
189226
},
190227
{
191228
name: "ETH",
@@ -194,6 +231,8 @@ const PGN_TESTNET_TOKENS: PayoutToken[] = [
194231
decimal: 18,
195232
logo: TokenNamesAndLogos["ETH"],
196233
redstoneTokenId: RedstoneTokenIds["ETH"],
234+
defaultForVoting: true,
235+
canVote: true,
197236
},
198237
];
199238

@@ -205,6 +244,8 @@ const PGN_MAINNET_TOKENS: PayoutToken[] = [
205244
decimal: 18,
206245
logo: TokenNamesAndLogos["ETH"],
207246
redstoneTokenId: RedstoneTokenIds["ETH"],
247+
defaultForVoting: true,
248+
canVote: true,
208249
},
209250
];
210251

packages/grant-explorer/src/features/round/ViewCartPage/CartWithProjects.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function CartWithProjects({ cart, chainId }: Props) {
2929
const selectedPayoutToken = chainToPayoutToken[chainId];
3030
const payoutTokenOptions: PayoutToken[] = getPayoutTokenOptions(
3131
Number(chainId)
32-
);
32+
).filter((p) => p.canVote);
3333

3434
const { data, error, loading } = useTokenPrice(
3535
selectedPayoutToken.redstoneTokenId

packages/grant-explorer/src/store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { create } from "zustand";
33
import { persist } from "zustand/middleware";
44
import { CartProject, PayoutToken } from "./features/api/types";
55
import { payoutTokensMap } from "./features/api/utils";
6-
import { zeroAddress } from "viem";
76

87
interface CartState {
98
projects: CartProject[];
@@ -21,7 +20,8 @@ const ethOnlyPayoutTokens = Object.fromEntries(
2120
([key, value]) =>
2221
[
2322
Number(key) as ChainId,
24-
value.find((token) => token.address === zeroAddress) ?? value[0],
23+
value.find((token) => token.defaultForVoting && token.canVote) ??
24+
value[0],
2525
] as [ChainId, PayoutToken]
2626
)
2727
) as Record<ChainId, PayoutToken>;

packages/round-manager/src/features/api/contracts.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ const roundFactoryMap: ChainIdToStringMap = {
6969
[ChainId.GOERLI_CHAIN_ID]: "0x24F9EBFAdf095e0afe3d98635ee83CD72e49B5B0",
7070
[ChainId.OPTIMISM_MAINNET_CHAIN_ID]:
7171
"0x04E753cFB8c8D1D7f776f7d7A033740961b6AEC2",
72-
[ChainId.FANTOM_MAINNET_CHAIN_ID]: "",
73-
[ChainId.FANTOM_TESTNET_CHAIN_ID]: "",
72+
[ChainId.FANTOM_MAINNET_CHAIN_ID]:
73+
"0xfb08d1fD3a7c693677eB096E722ABf4Ae63B0B95",
74+
[ChainId.FANTOM_TESTNET_CHAIN_ID]:
75+
"0x8AdFcF226dfb2fA73788Ad711C958Ba251369cb3",
7476
[ChainId.PGN_TESTNET]: "0x0479b9DA9f287539FEBd597350B1eBaEBF7479ac",
7577
[ChainId.PGN]: "0x8AdFcF226dfb2fA73788Ad711C958Ba251369cb3",
7678
};
@@ -95,8 +97,10 @@ const qfVotingStrategyFactoryMap: ChainIdToStringMap = {
9597
[ChainId.GOERLI_CHAIN_ID]: "0x06A6Cc566c5A88E77B1353Cdc3110C2e6c828e38",
9698
[ChainId.OPTIMISM_MAINNET_CHAIN_ID]:
9799
"0x838C5e10dcc1e54d62761d994722367BA167AC22",
98-
[ChainId.FANTOM_MAINNET_CHAIN_ID]: "",
99-
[ChainId.FANTOM_TESTNET_CHAIN_ID]: "",
100+
[ChainId.FANTOM_MAINNET_CHAIN_ID]:
101+
"0x534d2AAc03dCd0Cb3905B591BAf04C14A95426AB",
102+
[ChainId.FANTOM_TESTNET_CHAIN_ID]:
103+
"0x545B282A50EaeA01A619914d44105437036CbB36",
100104
[ChainId.PGN_TESTNET]: "0xE8027a807Bb85e57da4B7A5ecE65b0aBDf231ce8",
101105
[ChainId.PGN]: "0x2AFA4bE0f2468347A2F086c2167630fb1E58b725",
102106
};
@@ -116,8 +120,10 @@ const merklePayoutStrategyFactoryMap: ChainIdToStringMap = {
116120
[ChainId.GOERLI_CHAIN_ID]: "0xE2Bf906f7d10F059cE65769F53fe50D8E0cC7cBe",
117121
[ChainId.OPTIMISM_MAINNET_CHAIN_ID]:
118122
"0xB5365543cdDa2C795AD104F4cB784EF3DB1CD383",
119-
[ChainId.FANTOM_MAINNET_CHAIN_ID]: "",
120-
[ChainId.FANTOM_TESTNET_CHAIN_ID]: "",
123+
[ChainId.FANTOM_MAINNET_CHAIN_ID]:
124+
"0xFA1D9FF7F885757fc20Fdd9D78B72F88B00Cff77",
125+
[ChainId.FANTOM_TESTNET_CHAIN_ID]:
126+
"0x5b55728e41154562ee80027C1247B13382692e5C",
121127
[ChainId.PGN_TESTNET]: "0xE42D1Da8d75Cf1d6f6C460DAa3f1b10a79D689B1",
122128
[ChainId.PGN]: "0x27efa1C90e097c980c669AB1a6e326AD4164f1Cb",
123129
};

packages/round-manager/src/features/api/utils.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ const FANTOM_MAINNET_TOKENS: PayoutToken[] = [
143143
logo: TokenNamesAndLogos["DAI"],
144144
redstoneTokenId: RedstoneTokenIds["DAI"],
145145
},
146+
{
147+
name: "GcV",
148+
chainId: ChainId.FANTOM_MAINNET_CHAIN_ID,
149+
address: "0x83791638da5EB2fAa432aff1c65fbA47c5D29510",
150+
decimal: 18,
151+
logo: TokenNamesAndLogos["GcV"],
152+
redstoneTokenId: RedstoneTokenIds["DAI"], // We use DAI for the price
153+
},
146154
];
147155

148156
const GOERLI_TESTNET_TOKENS: PayoutToken[] = [

0 commit comments

Comments
 (0)