Skip to content

Commit 6243b58

Browse files
committed
feat: extension ethereum, added data for unique chains
1 parent dd494b6 commit 6243b58

1 file changed

Lines changed: 86 additions & 2 deletions

File tree

src/ExtensionTools/ethereum.ts

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export interface IEthereumRequestAccountsResult {
33
selectedAddress: string | null
44
info: {
55
extensionFound: boolean
6+
uniqueChainName?: UNIQUE_CHAIN,
67
chainId?: string
78
chainIdNumber?: number
89
userRejected?: boolean
@@ -23,6 +24,20 @@ export interface AddEthereumChainParameter {
2324
iconUrls?: string[] // Currently ignored
2425
}
2526

27+
type UNIQUE_CHAIN = 'unique' | 'quartz' | 'opal' | 'sapphire'
28+
const UNIQUE_CHAIN_IDS: Record<UNIQUE_CHAIN, number> = {
29+
unique: 8880,
30+
quartz: 8881,
31+
opal: 8882,
32+
sapphire: 8883
33+
}
34+
const chainNameByChainId: Record<number, UNIQUE_CHAIN> = {
35+
8880: 'unique',
36+
8881: 'quartz',
37+
8882: 'opal',
38+
8883: 'sapphire'
39+
}
40+
2641

2742
export const requestAccounts = async (): Promise<IEthereumRequestAccountsResult> => {
2843
if (typeof window === 'undefined' || !(window as any).ethereum) {
@@ -32,13 +47,16 @@ export const requestAccounts = async (): Promise<IEthereumRequestAccountsResult>
3247
let accounts: string[] = []
3348
try {
3449
accounts = await ethereum.request({method: 'eth_requestAccounts'})
50+
const chainIdNumber = parseInt(ethereum.chainId, 16)
51+
3552
return {
3653
accounts,
3754
selectedAddress: ethereum.selectedAddress,
3855
info: {
3956
extensionFound: true,
4057
chainId: ethereum.chainId,
41-
chainIdNumber: parseInt(ethereum.chainId, 16),
58+
chainIdNumber,
59+
uniqueChainName: chainNameByChainId[chainIdNumber],
4260
},
4361
}
4462
} catch (error: any) {
@@ -71,7 +89,7 @@ export const getAccounts = async (): Promise<IEthereumRequestAccountsResult> =>
7189
}
7290
}
7391

74-
export const addChainToMetamask = async(chainData: AddEthereumChainParameter): Promise<void> => {
92+
export const addChainToMetamask = async (chainData: AddEthereumChainParameter): Promise<void> => {
7593
const safeGetAccountsResult = await getAccounts()
7694
if (!safeGetAccountsResult.info.extensionFound) {
7795
throw new Error(`No browser extension found`)
@@ -94,8 +112,74 @@ export const addChainToMetamask = async(chainData: AddEthereumChainParameter): P
94112
}
95113
}
96114

115+
116+
export const UNIQUE_CHAINS_DATA_FOR_EXTENSIONS: Record<UNIQUE_CHAIN, AddEthereumChainParameter> = {
117+
unique: {
118+
chainId: "0x22b0",
119+
chainName: 'Unique',
120+
nativeCurrency: {
121+
name: 'Unique',
122+
symbol: 'UNQ',
123+
decimals: 18,
124+
},
125+
rpcUrls: [`https://rpc.unique.network`],
126+
iconUrls: [`https://ipfs.unique.network/ipfs/QmbJ7CGZ2GxWMp7s6jy71UGzRsMe4w3KANKXDAExYWdaFR`],
127+
blockExplorerUrls: ['https://uniquescan.io/unique/'],
128+
},
129+
130+
131+
quartz: {
132+
chainId: "0x22b1",
133+
chainName: "Quartz by Unique",
134+
nativeCurrency: {
135+
name: 'Quartz',
136+
symbol: 'QTZ',
137+
decimals: 18,
138+
},
139+
rpcUrls: [`https://rpc-quartz.unique.network`],
140+
iconUrls: [`https://ipfs.unique.network/ipfs/QmaGPdccULQEFcCGxzstnmE8THfac2kSiGwvWRAiaRq4dp`],
141+
blockExplorerUrls: ['https://uniquescan.io/quartz/'],
142+
},
143+
opal: {
144+
chainId: "0x22b2",
145+
chainName: "Opal by Unique",
146+
nativeCurrency: {
147+
name: 'Opal',
148+
symbol: 'OPL',
149+
decimals: 18,
150+
},
151+
rpcUrls: [`https://rpc-opal.unique.network`],
152+
iconUrls: [`https://ipfs.unique.network/ipfs/QmYJDpmWyjDa3H6BxweFmQXk4fU8b1GU7M9EqYcaUNvXzc`],
153+
blockExplorerUrls: ['https://uniquescan.io/opal/'],
154+
},
155+
sapphire: {
156+
chainId: "0x22b3",
157+
chainName: "Sapphire by Unique",
158+
nativeCurrency: {
159+
name: 'Quartz',
160+
symbol: 'QTZ',
161+
decimals: 18,
162+
},
163+
rpcUrls: [`https://rpc-sapphire.unique.network`],
164+
iconUrls: [`https://ipfs.unique.network/ipfs/Qmd1PGt4cDRjFbh4ihP5QKEd4XQVwN1MkebYKdF56V74pf`],
165+
blockExplorerUrls: ['https://uniquescan.io/sapphire/'],
166+
},
167+
}
168+
169+
const AddUniqueChainToMetamask: Record<UNIQUE_CHAIN, () => Promise<void>> = {
170+
unique: () => addChainToMetamask(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.unique),
171+
quartz: () => addChainToMetamask(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.quartz),
172+
opal: () => addChainToMetamask(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.opal),
173+
sapphire: () => addChainToMetamask(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.sapphire),
174+
}
175+
176+
export type {UNIQUE_CHAIN}
177+
97178
export const Ethereum = {
98179
requestAccounts,
99180
getAccounts,
100181
addChainToMetamask,
182+
UNIQUE_CHAIN_IDS,
183+
UNIQUE_CHAINS_DATA_FOR_EXTENSIONS,
184+
AddUniqueChainToMetamask,
101185
}

0 commit comments

Comments
 (0)