Add Polkadot RPCs to the Dapp examples and wallet (#44)
Co-authored-by: Ben Kremer <contact@bkrem.dev>
This commit is contained in:
		
							parent
							
								
									6a77191dd3
								
							
						
					
					
						commit
						1406ce3999
					
				| @ -11,6 +11,7 @@ | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@ethereumjs/tx": "^3.5.0", | ||||
|     "@polkadot/util-crypto": "^10.1.2", | ||||
|     "@solana/web3.js": "^1.36.0", | ||||
|     "@walletconnect/encoding": "^1.0.1", | ||||
|     "@walletconnect/qrcode-modal": "^1.7.8", | ||||
|  | ||||
							
								
								
									
										17
									
								
								dapps/react-dapp-v2/public/assets/westend-logo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								dapps/react-dapp-v2/public/assets/westend-logo.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 27 KiB | 
| @ -1,12 +1,29 @@ | ||||
| import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; | ||||
| import { ChainsMap } from "caip-api"; | ||||
| import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants"; | ||||
| 
 | ||||
| import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; | ||||
| import { | ||||
|   NamespaceMetadata, | ||||
|   ChainMetadata, | ||||
|   ChainRequestRender, | ||||
| } from "../helpers"; | ||||
| 
 | ||||
| export const PolkadotChainData: ChainsMap = { | ||||
|   ["91b171bb158e2d3848fa23a9f1c25182"]: { | ||||
|     id: "polkadot:91b171bb158e2d3848fa23a9f1c25182", | ||||
|     name: "Polkadot Mainnet", | ||||
|     rpc: ["wss://rpc.polkadot.io"], | ||||
|     slip44: 0, | ||||
|     testnet: false, | ||||
|   }, | ||||
|   ["e143f23803ac50e8f6f8e62695d1ce9e"]: { | ||||
|     id: "polkadot:e143f23803ac50e8f6f8e62695d1ce9e", | ||||
|     name: "Polkadot Testnet (Westend)", | ||||
|     rpc: ["wss://westend-rpc.polkadot.io"], | ||||
|     slip44: 0, | ||||
|     testnet: false, | ||||
|   }, | ||||
| }; | ||||
| 
 | ||||
| export const PolkadotMetadata: NamespaceMetadata = { | ||||
|   // eslint-disable-next-line no-useless-computed-key
 | ||||
|   ["91b171bb158e2d3848fa23a9f1c25182"]: { | ||||
| @ -15,6 +32,10 @@ export const PolkadotMetadata: NamespaceMetadata = { | ||||
|       "polkadot:91b171bb158e2d3848fa23a9f1c25182.png", | ||||
|     rgb: "230, 1, 122", | ||||
|   }, | ||||
|   ["e143f23803ac50e8f6f8e62695d1ce9e"]: { | ||||
|     logo: "/assets/westend-logo.svg", | ||||
|     rgb: "218, 104, 167", | ||||
|   }, | ||||
| }; | ||||
| 
 | ||||
| export function getChainMetadata(chainId: string): ChainMetadata { | ||||
|  | ||||
| @ -8,6 +8,7 @@ export const DEFAULT_MAIN_CHAINS = [ | ||||
|   "eip155:42220", | ||||
|   "cosmos:cosmoshub-4", | ||||
|   "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ", | ||||
|   "polkadot:91b171bb158e2d3848fa23a9f1c25182", | ||||
| ]; | ||||
| 
 | ||||
| export const DEFAULT_TEST_CHAINS = [ | ||||
| @ -18,6 +19,7 @@ export const DEFAULT_TEST_CHAINS = [ | ||||
|   "eip155:421611", | ||||
|   "eip155:44787", | ||||
|   "solana:8E9rvCKLFQia2Y35HXjjpWzj8weVo44K", | ||||
|   "polkadot:e143f23803ac50e8f6f8e62695d1ce9e", | ||||
| ]; | ||||
| 
 | ||||
| export const DEFAULT_CHAINS = [...DEFAULT_MAIN_CHAINS, ...DEFAULT_TEST_CHAINS]; | ||||
| @ -71,5 +73,15 @@ export enum DEFAULT_SOLANA_METHODS { | ||||
| 
 | ||||
| export enum DEFAULT_SOLANA_EVENTS {} | ||||
| 
 | ||||
| /** | ||||
|  * POLKADOT | ||||
|  */ | ||||
| export enum DEFAULT_POLKADOT_METHODS { | ||||
|   POLKADOT_SIGN_TRANSACTION = "polkadot_signTransaction", | ||||
|   POLKADOT_SIGN_MESSAGE = "polkadot_signMessage", | ||||
| } | ||||
| 
 | ||||
| export enum DEFAULT_POLKADOT_EVENTS {} | ||||
| 
 | ||||
| export const DEFAULT_GITHUB_REPO_URL = | ||||
|   "https://github.com/WalletConnect/web-examples/tree/main/dapps/react-dapp-v2"; | ||||
|  | ||||
| @ -7,6 +7,7 @@ import { | ||||
|   useState, | ||||
| } from "react"; | ||||
| import { SolanaChainData } from "../chains/solana"; | ||||
| import { PolkadotChainData } from "../chains/polkadot"; | ||||
| 
 | ||||
| import { ChainNamespaces, getAllChainNamespaces } from "../helpers"; | ||||
| 
 | ||||
| @ -41,6 +42,8 @@ export function ChainDataContextProvider({ | ||||
|         try { | ||||
|           if (namespace === "solana") { | ||||
|             chains = SolanaChainData; | ||||
|           } else if (namespace === "polkadot") { | ||||
|             chains = PolkadotChainData; | ||||
|           } else { | ||||
|             chains = await apiGetChainNamespace(namespace); | ||||
|           } | ||||
|  | ||||
| @ -29,8 +29,10 @@ import { | ||||
|   DEFAULT_COSMOS_METHODS, | ||||
|   DEFAULT_EIP155_METHODS, | ||||
|   DEFAULT_SOLANA_METHODS, | ||||
|   DEFAULT_POLKADOT_METHODS, | ||||
| } from "../constants"; | ||||
| import { useChainData } from "./ChainDataContext"; | ||||
| import { signatureVerify, cryptoWaitReady } from "@polkadot/util-crypto"; | ||||
| 
 | ||||
| /** | ||||
|  * Types | ||||
| @ -61,6 +63,10 @@ interface IContext { | ||||
|     testSignMessage: TRpcRequestCallback; | ||||
|     testSignTransaction: TRpcRequestCallback; | ||||
|   }; | ||||
|   polkadotRpc: { | ||||
|     testSignMessage: TRpcRequestCallback; | ||||
|     testSignTransaction: TRpcRequestCallback; | ||||
|   }; | ||||
|   rpcResult?: IFormattedRpcResponse | null; | ||||
|   isRpcRequestPending: boolean; | ||||
|   isTestnet: boolean; | ||||
| @ -613,7 +619,77 @@ export function JsonRpcContextProvider({ | ||||
|       } | ||||
|     ), | ||||
|   }; | ||||
|   // -------- POLKADOT RPC METHODS --------
 | ||||
| 
 | ||||
|   const polkadotRpc = { | ||||
|     testSignTransaction: _createJsonRpcRequestHandler( | ||||
|       async (chainId: string, address: string): Promise<IFormattedRpcResponse> => { | ||||
|         // Below example is a scale encoded payload for system.remark("this is a test wallet-connect remark") transaction.
 | ||||
|         // decode url: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/extrinsics/decode/0x00019074686973206973206120746573742077616c6c65742d636f6e6e6563742072656d61726b
 | ||||
|         const transactionPayload = | ||||
|           "0x00019074686973206973206120746573742077616c6c65742d636f6e6e6563742072656d61726b05010000222400000d00000091b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3dc1f37ce7899cf20f63f5ea343f33e9e7b229c7e245049c2a7afc236861fc8b4"; | ||||
|         try { | ||||
|           const result = await client!.request<{ payload: string; signature: string }>({ | ||||
|             chainId, | ||||
|             topic: session!.topic, | ||||
|             request: { | ||||
|               method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_TRANSACTION, | ||||
|               params: { | ||||
|                 address, | ||||
|                 transactionPayload, | ||||
|               }, | ||||
|             }, | ||||
|           }); | ||||
|            | ||||
|           // sr25519 signatures need to wait for WASM to load
 | ||||
|           await cryptoWaitReady(); | ||||
|           const { isValid: valid } = signatureVerify(transactionPayload, result.signature, address); | ||||
|            | ||||
|           return { | ||||
|             method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_TRANSACTION, | ||||
|             address, | ||||
|             valid, | ||||
|             result: result.signature, | ||||
|           }; | ||||
|         } catch (error: any) { | ||||
|           throw new Error(error); | ||||
|         } | ||||
|       }, | ||||
|     ), | ||||
|     testSignMessage: _createJsonRpcRequestHandler( | ||||
|       async (chainId: string, address: string): Promise<IFormattedRpcResponse> => { | ||||
|          | ||||
|         const message = `This is an example message to be signed - ${Date.now()}`; | ||||
| 
 | ||||
|         try { | ||||
|           const result = await client!.request<{ signature: string }>({ | ||||
|             chainId, | ||||
|             topic: session!.topic, | ||||
|             request: { | ||||
|               method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_MESSAGE, | ||||
|               params: { | ||||
|                 address, | ||||
|                 message, | ||||
|               }, | ||||
|             }, | ||||
|           }); | ||||
| 
 | ||||
|           // sr25519 signatures need to wait for WASM to load
 | ||||
|           await cryptoWaitReady(); | ||||
|           const { isValid: valid } = signatureVerify(message, result.signature, address); | ||||
| 
 | ||||
|           return { | ||||
|             method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_MESSAGE, | ||||
|             address, | ||||
|             valid, | ||||
|             result: result.signature, | ||||
|           }; | ||||
|         } catch (error: any) { | ||||
|           throw new Error(error); | ||||
|         } | ||||
|       }, | ||||
|     ), | ||||
|   }; | ||||
|   return ( | ||||
|     <JsonRpcContext.Provider | ||||
|       value={{ | ||||
| @ -621,6 +697,7 @@ export function JsonRpcContextProvider({ | ||||
|         ethereumRpc, | ||||
|         cosmosRpc, | ||||
|         solanaRpc, | ||||
|         polkadotRpc, | ||||
|         rpcResult: result, | ||||
|         isRpcRequestPending: pending, | ||||
|         isTestnet, | ||||
|  | ||||
| @ -6,6 +6,8 @@ import { | ||||
|   DEFAULT_EIP_155_EVENTS, | ||||
|   DEFAULT_SOLANA_EVENTS, | ||||
|   DEFAULT_SOLANA_METHODS, | ||||
|   DEFAULT_POLKADOT_EVENTS, | ||||
|   DEFAULT_POLKADOT_METHODS, | ||||
| } from "../constants"; | ||||
| 
 | ||||
| export const getNamespacesFromChains = (chains: string[]) => { | ||||
| @ -28,6 +30,8 @@ export const getSupportedMethodsByNamespace = (namespace: string) => { | ||||
|       return Object.values(DEFAULT_COSMOS_METHODS); | ||||
|     case "solana": | ||||
|       return Object.values(DEFAULT_SOLANA_METHODS); | ||||
|     case "polkadot": | ||||
|       return Object.values(DEFAULT_POLKADOT_METHODS); | ||||
|     default: | ||||
|       throw new Error(`No default methods for namespace: ${namespace}`); | ||||
|   } | ||||
| @ -41,6 +45,8 @@ export const getSupportedEventsByNamespace = (namespace: string) => { | ||||
|       return Object.values(DEFAULT_COSMOS_EVENTS); | ||||
|     case "solana": | ||||
|       return Object.values(DEFAULT_SOLANA_EVENTS); | ||||
|     case "polkadot": | ||||
|       return Object.values(DEFAULT_POLKADOT_EVENTS); | ||||
|     default: | ||||
|       throw new Error(`No default events for namespace: ${namespace}`); | ||||
|   } | ||||
|  | ||||
| @ -11,6 +11,7 @@ import { | ||||
|   DEFAULT_EIP155_METHODS, | ||||
|   DEFAULT_MAIN_CHAINS, | ||||
|   DEFAULT_SOLANA_METHODS, | ||||
|   DEFAULT_POLKADOT_METHODS, | ||||
|   DEFAULT_TEST_CHAINS, | ||||
| } from "../constants"; | ||||
| import { AccountAction, setLocaleStorageTestnetFlag } from "../helpers"; | ||||
| @ -64,6 +65,7 @@ const Home: NextPage = () => { | ||||
|     ethereumRpc, | ||||
|     cosmosRpc, | ||||
|     solanaRpc, | ||||
|     polkadotRpc, | ||||
|     isRpcRequestPending, | ||||
|     rpcResult, | ||||
|     isTestnet, | ||||
| @ -185,6 +187,26 @@ const Home: NextPage = () => { | ||||
|     ]; | ||||
|   }; | ||||
| 
 | ||||
|   const getPolkadotActions = (): AccountAction[] => { | ||||
|     const onSignTransaction = async (chainId: string, address: string) => { | ||||
|       openRequestModal(); | ||||
|       await polkadotRpc.testSignTransaction(chainId, address); | ||||
|     }; | ||||
|     const onSignMessage = async (chainId: string, address: string) => { | ||||
|       openRequestModal(); | ||||
|       await polkadotRpc.testSignMessage(chainId, address); | ||||
|     }; | ||||
|     return [ | ||||
|       { | ||||
|         method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_TRANSACTION, | ||||
|         callback: onSignTransaction, | ||||
|       }, | ||||
|       { | ||||
|         method: DEFAULT_POLKADOT_METHODS.POLKADOT_SIGN_MESSAGE, | ||||
|         callback: onSignMessage, | ||||
|       }, | ||||
|     ]; | ||||
|   }; | ||||
|   const getBlockchainActions = (chainId: string) => { | ||||
|     const [namespace] = chainId.split(":"); | ||||
|     switch (namespace) { | ||||
| @ -194,6 +216,8 @@ const Home: NextPage = () => { | ||||
|         return getCosmosActions(); | ||||
|       case "solana": | ||||
|         return getSolanaActions(); | ||||
|       case "polkadot": | ||||
|         return getPolkadotActions(); | ||||
|       default: | ||||
|         break; | ||||
|     } | ||||
|  | ||||
| @ -1966,6 +1966,16 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.4.tgz#0134c4cd5df39033347614ce5fc26af485ac9048" | ||||
|   integrity sha512-5Pl1tdMJWLy4rvzU1ecx0nHWgDPqoYuvYoXE/5X0Clu9si/yOuBIj573F2kOTY7mu0LX2wgCJVSnyK0abHBxIw== | ||||
| 
 | ||||
| "@noble/hashes@1.1.2": | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" | ||||
|   integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== | ||||
| 
 | ||||
| "@noble/secp256k1@1.6.3": | ||||
|   version "1.6.3" | ||||
|   resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" | ||||
|   integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== | ||||
| 
 | ||||
| "@nodelib/fs.scandir@2.1.5": | ||||
|   version "2.1.5" | ||||
|   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" | ||||
| @ -2015,6 +2025,135 @@ | ||||
|     schema-utils "^2.6.5" | ||||
|     source-map "^0.7.3" | ||||
| 
 | ||||
| "@polkadot/networks@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-10.1.2.tgz#a42c93c5dd1f56b99ca50ec9d4e8076088148086" | ||||
|   integrity sha512-67ZPqdhLYDGNX1jMEa3+hujh9j30Dr9AdqgdjE8Z3GdWoEVRp9Zda3DXMnDIQlRBQ32pRZty7dFhIq61Bv/whQ== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/util" "10.1.2" | ||||
|     "@substrate/ss58-registry" "^1.25.0" | ||||
| 
 | ||||
| "@polkadot/util-crypto@^10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-10.1.2.tgz#60779ad64e79542a06302ae7d9a2515482b563f4" | ||||
|   integrity sha512-lSgxSLF/XkksL8St3kyw8SCLic0JvyIf8uOezQZYyjSJKT3Gl8gGu9wCAKNAmboU0FgO8cnLO9AcAEkhCHvnyw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@noble/hashes" "1.1.2" | ||||
|     "@noble/secp256k1" "1.6.3" | ||||
|     "@polkadot/networks" "10.1.2" | ||||
|     "@polkadot/util" "10.1.2" | ||||
|     "@polkadot/wasm-crypto" "^6.3.1" | ||||
|     "@polkadot/x-bigint" "10.1.2" | ||||
|     "@polkadot/x-randomvalues" "10.1.2" | ||||
|     "@scure/base" "1.1.1" | ||||
|     ed2curve "^0.3.0" | ||||
|     tweetnacl "^1.0.3" | ||||
| 
 | ||||
| "@polkadot/util@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-10.1.2.tgz#2eded0c159c16c4a3c48ff45c4ced05c62fb4660" | ||||
|   integrity sha512-gYSpJyrrw5gZWgTVu6PJ1PBUzi3GqwmaK6XRgi4deHmQRn9TEXTToGtHmleJWnaTCRW8Vvh5B5RNNV2C/+va4w== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-bigint" "10.1.2" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
|     "@polkadot/x-textdecoder" "10.1.2" | ||||
|     "@polkadot/x-textencoder" "10.1.2" | ||||
|     "@types/bn.js" "^5.1.0" | ||||
|     bn.js "^5.2.1" | ||||
| 
 | ||||
| "@polkadot/wasm-bridge@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-6.3.1.tgz#439fa78e80947a7cb695443e1f64b25c30bb1487" | ||||
|   integrity sha512-1TYkHsb9AEFhU9uZj3biEnN2yKQNzdrwSjiTvfCYnt97pnEkKsZI6cku+YPZQv5w/x9CQa5Yua9e2DVVZSivGA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-asmjs@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.3.1.tgz#e8f469c9cf4a7709c8131a96f857291953f3e30a" | ||||
|   integrity sha512-zbombRfA5v/mUWQQhgg2YwaxhRmxRIrvskw65x+lruax3b6xPBFDs7yplopiJU3r8h2pTgQvX/DUksvqz2TCRQ== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-init@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.3.1.tgz#b590220c53c94b9a54d5dc236d0cbe943db76706" | ||||
|   integrity sha512-9yaUBcu+snwjJLmPPGl3cyGRQ1afyFGm16qzTM0sgG/ZCfUlK4uk8KWZe+sBUKgoxb2oXY7Y4WklKgQI1YBdfw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-bridge" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-asmjs" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-wasm" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-wasm@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.3.1.tgz#67f720e7f9694fef096abe9d60abbac02e032383" | ||||
|   integrity sha512-idSlzKGVzCfeCMRHsacRvqwojSaTadFxL/Dbls4z1thvfa3U9Ku0d2qVtlwg7Hj+tYWDiuP8Kygs+6bQwfs0XA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-util" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto@^6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.3.1.tgz#63f5798aca2b2ff0696f190e6862d9781d8f280c" | ||||
|   integrity sha512-OO8h0qeVkqp4xYZaRVl4iuWOEtq282pNBHDKb6SOJuI2g59eWGcKh4EQU9Me2VP6qzojIqptrkrVt7KQXC68gA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-bridge" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-asmjs" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-init" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-wasm" "6.3.1" | ||||
|     "@polkadot/wasm-util" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-util@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.3.1.tgz#439ebb68a436317af388ed6438b8f879df3afcda" | ||||
|   integrity sha512-12oAv5J7Yoc9m6jixrSaQCxpOkWOyzHx3DMC8qmLjRiwdBWxqLmImOVRVnFsbaxqSbhBIHRuJphVxWE+GZETDg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/x-bigint@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-10.1.2.tgz#5070af6a3a5aa66eba85597837ce6eb44ad7dc02" | ||||
|   integrity sha512-TCwv3NjQdfLb7CBYR8EA5t0CrMfYx3IF4hKjctuplL+mDNI0VzNn4qVKW62AjouI8kMbn7VyBPfoBeuYX8Ixrw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-global@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-10.1.2.tgz#66c2ceb6ef5043bc6bddd5e944f35e64e9d6a0a9" | ||||
|   integrity sha512-//r3NVLYdYQs0So0IK8Pa0pnL5pPi0geQWE6qjTtPD0oszuN9SUDqDlFQj3I3vqQOwgybbzBGNYRRinP8B2xUg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/x-randomvalues@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-10.1.2.tgz#8a0f15eb0558f837dd10060ad808707fe8b64c05" | ||||
|   integrity sha512-KOu6iZWye9KD6qoahiqZ0alrT/5FSGL4XXLhVSg69xAqD6yG2oi2aKA6cZpDU19uZGqVneqsgpebDsrZ0nLUEg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-textdecoder@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-10.1.2.tgz#833627fc55b388483857de922b534b70fc349a0a" | ||||
|   integrity sha512-liMlSSKfLGTvcUPz1fMicH2HoKLgSjzxFYsbNfXJOe9GobQfSrAOcprM0j4gNJqN5EoZhze9Sf1rMTORQwomtg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-textencoder@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-10.1.2.tgz#a728a89d117456749211fcf520ca0e846654df89" | ||||
|   integrity sha512-bSMvesZ43Er6+jogt9IfwWN/E8bhkl4a9nNnpyS/vTh+j6n/DfDQrvYpKDpRIn7oJA6lfs/mL9Jo5jjJTngaxg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" | ||||
| @ -2101,6 +2240,11 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" | ||||
|   integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== | ||||
| 
 | ||||
| "@scure/base@1.1.1": | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" | ||||
|   integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== | ||||
| 
 | ||||
| "@sinonjs/commons@^1.7.0": | ||||
|   version "1.8.3" | ||||
|   resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" | ||||
| @ -2279,6 +2423,11 @@ | ||||
|     "@stablelib/random" "^1.0.1" | ||||
|     "@stablelib/wipe" "^1.0.1" | ||||
| 
 | ||||
| "@substrate/ss58-registry@^1.25.0": | ||||
|   version "1.25.0" | ||||
|   resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.25.0.tgz#0fcd8c9c0e53963a88fbed41f2cbd8a1a5c74cde" | ||||
|   integrity sha512-LmCH4QJRdHaeLsLTPSgJaXguMoIW+Ig9fA9LRPpeya9HefVAJ7gZuUYinldv+QmX7evNm5CL0rspNUS8l1DvXg== | ||||
| 
 | ||||
| "@surma/rollup-plugin-off-main-thread@^1.1.1": | ||||
|   version "1.4.2" | ||||
|   resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" | ||||
| @ -5652,6 +5801,13 @@ duplexify@^3.4.2, duplexify@^3.6.0: | ||||
|     readable-stream "^2.0.0" | ||||
|     stream-shift "^1.0.0" | ||||
| 
 | ||||
| ed2curve@^0.3.0: | ||||
|   version "0.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" | ||||
|   integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== | ||||
|   dependencies: | ||||
|     tweetnacl "1.x.x" | ||||
| 
 | ||||
| ee-first@1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" | ||||
| @ -12947,7 +13103,7 @@ tweetnacl-util@^0.15.0: | ||||
|   resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" | ||||
|   integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== | ||||
| 
 | ||||
| tweetnacl@^1.0.0, tweetnacl@^1.0.3: | ||||
| tweetnacl@1.x.x, tweetnacl@^1.0.0, tweetnacl@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" | ||||
|   integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== | ||||
|  | ||||
| @ -13,6 +13,7 @@ | ||||
|     "@cosmjs/proto-signing": "0.28.4", | ||||
|     "@json-rpc-tools/utils": "1.7.6", | ||||
|     "@nextui-org/react": "1.0.8-beta.5", | ||||
|     "@polkadot/keyring": "^10.1.2", | ||||
|     "@solana/web3.js": "1.43.0", | ||||
|     "@walletconnect/sign-client": "2.0.0-rc.1", | ||||
|     "@walletconnect/utils": "2.0.0-rc.1", | ||||
|  | ||||
							
								
								
									
										9
									
								
								wallets/react-wallet-v2/public/chain-logos/polkadot.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								wallets/react-wallet-v2/public/chain-logos/polkadot.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| <svg width="800" height="800" viewBox="0 0 800 800" fill="none" xmlns="http://www.w3.org/2000/svg"> | ||||
| <rect width="800" height="800" rx="400" fill="#E6007A"/> | ||||
| <path d="M400.072 246.038C452.666 246.038 495.302 221.181 495.302 190.519C495.302 159.857 452.666 135 400.072 135C347.478 135 304.843 159.857 304.843 190.519C304.843 221.181 347.478 246.038 400.072 246.038Z" fill="white"/> | ||||
| <path d="M400.072 664.364C452.666 664.364 495.302 639.507 495.302 608.845C495.302 578.183 452.666 553.326 400.072 553.326C347.478 553.326 304.843 578.183 304.843 608.845C304.843 639.507 347.478 664.364 400.072 664.364Z" fill="white"/> | ||||
| <path d="M267.363 322.89C293.66 277.233 293.489 227.785 266.982 212.443C240.475 197.102 197.668 221.677 171.371 267.333C145.074 312.989 145.245 362.438 171.753 377.779C198.26 393.121 241.066 368.546 267.363 322.89Z" fill="white"/> | ||||
| <path d="M628.731 532.027C655.028 486.371 654.872 436.931 628.382 421.6C601.893 406.269 559.101 430.852 532.804 476.508C506.507 522.165 506.663 571.605 533.153 586.936C559.643 602.267 602.434 577.684 628.731 532.027Z" fill="white"/> | ||||
| <path d="M266.996 586.923C293.503 571.582 293.674 522.133 267.377 476.477C241.08 430.821 198.274 406.246 171.766 421.587C145.259 436.929 145.088 486.377 171.385 532.034C197.682 577.69 240.488 602.265 266.996 586.923Z" fill="white"/> | ||||
| <path d="M628.405 377.792C654.894 362.461 655.051 313.02 628.754 267.364C602.457 221.708 559.665 197.124 533.175 212.455C506.686 227.787 506.53 277.227 532.827 322.883C559.124 368.539 601.915 393.123 628.405 377.792Z" fill="white"/> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										17
									
								
								wallets/react-wallet-v2/public/chain-logos/westend.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								wallets/react-wallet-v2/public/chain-logos/westend.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 27 KiB | 
| @ -3,6 +3,7 @@ import SessionProposalModal from '@/views/SessionProposalModal' | ||||
| import SessionSendTransactionModal from '@/views/SessionSendTransactionModal' | ||||
| import SessionSignCosmosModal from '@/views/SessionSignCosmosModal' | ||||
| import SessionRequestModal from '@/views/SessionSignModal' | ||||
| import SessionSignPolkadotModal from '@/views/SessionSignPolkadotModal' | ||||
| import SessionSignSolanaModal from '@/views/SessionSignSolanaModal' | ||||
| import SessionSignTypedDataModal from '@/views/SessionSignTypedDataModal' | ||||
| import SessionUnsuportedMethodModal from '@/views/SessionUnsuportedMethodModal' | ||||
| @ -21,6 +22,7 @@ export default function Modal() { | ||||
|       {view === 'SessionUnsuportedMethodModal' && <SessionUnsuportedMethodModal />} | ||||
|       {view === 'SessionSignCosmosModal' && <SessionSignCosmosModal />} | ||||
|       {view === 'SessionSignSolanaModal' && <SessionSignSolanaModal />} | ||||
|       {view === 'SessionSignPolkadotModal' && <SessionSignPolkadotModal />} | ||||
|     </NextModal> | ||||
|   ) | ||||
| } | ||||
|  | ||||
							
								
								
									
										35
									
								
								wallets/react-wallet-v2/src/data/PolkadotData.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								wallets/react-wallet-v2/src/data/PolkadotData.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| /** | ||||
|  * Types | ||||
|  */ | ||||
| export type TPolkadotChain = keyof typeof POLKADOT_MAINNET_CHAINS | ||||
| 
 | ||||
| /** | ||||
|  * Chains | ||||
|  */ | ||||
| export const POLKADOT_MAINNET_CHAINS = { | ||||
|   'polkadot:91b171bb158e2d3848fa23a9f1c25182': { | ||||
|     chainId: '91b171bb158e2d3848fa23a9f1c25182', | ||||
|     name: 'Polkadot', | ||||
|     logo: '/chain-logos/polkadot.svg', | ||||
|     rgb: '230, 1, 122', | ||||
|     rpc: '' | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export const POLKADOT_TEST_CHAINS = { | ||||
|   'polkadot:e143f23803ac50e8f6f8e62695d1ce9e': { | ||||
|     chainId: 'e143f23803ac50e8f6f8e62695d1ce9e', | ||||
|     name: 'Polkadot Westend', | ||||
|     logo: '/chain-logos/westend.svg', | ||||
|     rgb: '218, 104, 167', | ||||
|     rpc: '' | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Methods | ||||
|  */ | ||||
| export const POLKADOT_SIGNING_METHODS = { | ||||
|   POLKADOT_SIGN_TRANSACTION: 'polkadot_signTransaction', | ||||
|   POLKADOT_SIGN_MESSAGE: 'polkadot_signMessage' | ||||
| } | ||||
| @ -2,6 +2,7 @@ import SettingsStore from '@/store/SettingsStore' | ||||
| import { createOrRestoreCosmosWallet } from '@/utils/CosmosWalletUtil' | ||||
| import { createOrRestoreEIP155Wallet } from '@/utils/EIP155WalletUtil' | ||||
| import { createOrRestoreSolanaWallet } from '@/utils/SolanaWalletUtil' | ||||
| import { createOrRestorePolkadotWallet } from '@/utils/PolkadotWalletUtil' | ||||
| import { createSignClient } from '@/utils/WalletConnectUtil' | ||||
| import { useCallback, useEffect, useState } from 'react' | ||||
| 
 | ||||
| @ -13,10 +14,12 @@ export default function useInitialization() { | ||||
|       const { eip155Addresses } = createOrRestoreEIP155Wallet() | ||||
|       const { cosmosAddresses } = await createOrRestoreCosmosWallet() | ||||
|       const { solanaAddresses } = await createOrRestoreSolanaWallet() | ||||
|       const { polkadotAddresses } = await createOrRestorePolkadotWallet() | ||||
| 
 | ||||
|       SettingsStore.setEIP155Address(eip155Addresses[0]) | ||||
|       SettingsStore.setCosmosAddress(cosmosAddresses[0]) | ||||
|       SettingsStore.setSolanaAddress(solanaAddresses[0]) | ||||
|       SettingsStore.setPolkadotAddress(polkadotAddresses[0]) | ||||
| 
 | ||||
|       await createSignClient() | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| import { COSMOS_SIGNING_METHODS } from '@/data/COSMOSData' | ||||
| import { EIP155_SIGNING_METHODS } from '@/data/EIP155Data' | ||||
| import { SOLANA_SIGNING_METHODS } from '@/data/SolanaData' | ||||
| import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData' | ||||
| import ModalStore from '@/store/ModalStore' | ||||
| import { signClient } from '@/utils/WalletConnectUtil' | ||||
| import { SignClientTypes } from '@walletconnect/types' | ||||
| @ -48,7 +49,9 @@ export default function useWalletConnectEventsManager(initialized: boolean) { | ||||
|         case SOLANA_SIGNING_METHODS.SOLANA_SIGN_MESSAGE: | ||||
|         case SOLANA_SIGNING_METHODS.SOLANA_SIGN_TRANSACTION: | ||||
|           return ModalStore.open('SessionSignSolanaModal', { requestEvent, requestSession }) | ||||
| 
 | ||||
|         case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE: | ||||
|         case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_TRANSACTION: | ||||
|           return ModalStore.open('SessionSignPolkadotModal', { requestEvent, requestSession }) | ||||
|         default: | ||||
|           return ModalStore.open('SessionUnsuportedMethodModal', { requestEvent, requestSession }) | ||||
|       } | ||||
|  | ||||
							
								
								
									
										60
									
								
								wallets/react-wallet-v2/src/lib/PolkadotLib.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								wallets/react-wallet-v2/src/lib/PolkadotLib.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | ||||
| import { Keyring } from '@polkadot/keyring' | ||||
| import { cryptoWaitReady, mnemonicGenerate } from '@polkadot/util-crypto' | ||||
| import { KeyringPair } from '@polkadot/keyring/types' | ||||
| import { stringToU8a, u8aToHex, hexToU8a } from '@polkadot/util' | ||||
| import { HexString } from '@polkadot/util/types' | ||||
| 
 | ||||
| /** | ||||
|  * Types | ||||
|  */ | ||||
| interface IInitArguments { | ||||
|   mnemonic?: string | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Library | ||||
|  */ | ||||
| export default class PolkadotLib { | ||||
|   keypair: KeyringPair | ||||
|   mnemonic: string | ||||
| 
 | ||||
|   constructor(keypair: KeyringPair, mnemonic: string) { | ||||
|     this.keypair = keypair | ||||
|     this.mnemonic = mnemonic | ||||
|   } | ||||
| 
 | ||||
|   static async init({ mnemonic }: IInitArguments) { | ||||
|     // wait till  WASM is initialized, in case it is not initialized already (WASM is required for 'sr25519').
 | ||||
|     await cryptoWaitReady() | ||||
| 
 | ||||
|     // create a keyring to load the account.
 | ||||
|     const keyring = new Keyring({ type: 'sr25519', ss58Format: 1 }) | ||||
| 
 | ||||
|     mnemonic = mnemonic || mnemonicGenerate() | ||||
|     const keypair = keyring.createFromUri(mnemonic) | ||||
| 
 | ||||
|     return new PolkadotLib(keypair, mnemonic) | ||||
|   } | ||||
| 
 | ||||
|   public getAddress() { | ||||
|     return this.keypair.address | ||||
|   } | ||||
| 
 | ||||
|   public getMnemonic() { | ||||
|     return this.mnemonic | ||||
|   } | ||||
| 
 | ||||
|   public async signMessage(message: string) { | ||||
|     // create the message, actual signature and verify
 | ||||
|     const messageU8a = stringToU8a(message) | ||||
|     const sigU8a = this.keypair.sign(messageU8a) | ||||
|     const signature = u8aToHex(sigU8a) | ||||
|     return { signature } | ||||
|   } | ||||
| 
 | ||||
|   public async signTransaction(payload: HexString) { | ||||
|     const sigU8a = this.keypair.sign(hexToU8a(payload), { withType: true }) | ||||
|     const signature = u8aToHex(sigU8a) | ||||
|     return { payload, signature } | ||||
|   } | ||||
| } | ||||
| @ -4,13 +4,16 @@ import PageHeader from '@/components/PageHeader' | ||||
| import { COSMOS_MAINNET_CHAINS } from '@/data/COSMOSData' | ||||
| import { EIP155_MAINNET_CHAINS, EIP155_TEST_CHAINS } from '@/data/EIP155Data' | ||||
| import { SOLANA_MAINNET_CHAINS, SOLANA_TEST_CHAINS } from '@/data/SolanaData' | ||||
| import { POLKADOT_MAINNET_CHAINS, POLKADOT_TEST_CHAINS } from '@/data/PolkadotData' | ||||
| import SettingsStore from '@/store/SettingsStore' | ||||
| import { Text } from '@nextui-org/react' | ||||
| import { Fragment } from 'react' | ||||
| import { useSnapshot } from 'valtio' | ||||
| 
 | ||||
| export default function HomePage() { | ||||
|   const { testNets, eip155Address, cosmosAddress, solanaAddress } = useSnapshot(SettingsStore.state) | ||||
|   const { testNets, eip155Address, cosmosAddress, solanaAddress, polkadotAddress } = useSnapshot( | ||||
|     SettingsStore.state | ||||
|   ) | ||||
| 
 | ||||
|   return ( | ||||
|     <Fragment> | ||||
| @ -29,6 +32,9 @@ export default function HomePage() { | ||||
|       {Object.values(SOLANA_MAINNET_CHAINS).map(({ name, logo, rgb }) => ( | ||||
|         <AccountCard key={name} name={name} logo={logo} rgb={rgb} address={solanaAddress} /> | ||||
|       ))} | ||||
|       {Object.values(POLKADOT_MAINNET_CHAINS).map(({ name, logo, rgb }) => ( | ||||
|         <AccountCard key={name} name={name} logo={logo} rgb={rgb} address={polkadotAddress} /> | ||||
|       ))} | ||||
| 
 | ||||
|       {testNets ? ( | ||||
|         <Fragment> | ||||
| @ -41,6 +47,9 @@ export default function HomePage() { | ||||
|           {Object.values(SOLANA_TEST_CHAINS).map(({ name, logo, rgb }) => ( | ||||
|             <AccountCard key={name} name={name} logo={logo} rgb={rgb} address={solanaAddress} /> | ||||
|           ))} | ||||
|           {Object.values(POLKADOT_TEST_CHAINS).map(({ name, logo, rgb }) => ( | ||||
|             <AccountCard key={name} name={name} logo={logo} rgb={rgb} address={polkadotAddress} /> | ||||
|           ))} | ||||
|         </Fragment> | ||||
|       ) : null} | ||||
|     </Fragment> | ||||
|  | ||||
| @ -20,6 +20,7 @@ interface State { | ||||
|     | 'SessionUnsuportedMethodModal' | ||||
|     | 'SessionSignCosmosModal' | ||||
|     | 'SessionSignSolanaModal' | ||||
|     | 'SessionSignPolkadotModal' | ||||
|   data?: ModalData | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -9,6 +9,7 @@ interface State { | ||||
|   eip155Address: string | ||||
|   cosmosAddress: string | ||||
|   solanaAddress: string | ||||
|   polkadotAddress: string | ||||
| } | ||||
| 
 | ||||
| /** | ||||
| @ -19,7 +20,8 @@ const state = proxy<State>({ | ||||
|   account: 0, | ||||
|   eip155Address: '', | ||||
|   cosmosAddress: '', | ||||
|   solanaAddress: '' | ||||
|   solanaAddress: '', | ||||
|   polkadotAddress: '' | ||||
| }) | ||||
| 
 | ||||
| /** | ||||
| @ -44,6 +46,10 @@ const SettingsStore = { | ||||
|     state.solanaAddress = solanaAddress | ||||
|   }, | ||||
| 
 | ||||
|   setPolkadotAddress(polkadotAddress: string) { | ||||
|     state.polkadotAddress = polkadotAddress | ||||
|   }, | ||||
| 
 | ||||
|   toggleTestNets() { | ||||
|     state.testNets = !state.testNets | ||||
|     if (state.testNets) { | ||||
|  | ||||
| @ -94,6 +94,13 @@ export function isSolanaChain(chain: string) { | ||||
|   return chain.includes('solana') | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Check if chain is part of POLKADOT standard | ||||
|  */ | ||||
| export function isPolkadotChain(chain: string) { | ||||
|   return chain.includes('polkadot') | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Formats chainId to its name | ||||
|  */ | ||||
|  | ||||
| @ -0,0 +1,33 @@ | ||||
| import { POLKADOT_SIGNING_METHODS } from '@/data/PolkadotData' | ||||
| import { getWalletAddressFromParams } from '@/utils/HelperUtil' | ||||
| import { polkadotAddresses, polkadotWallets } from '@/utils/PolkadotWalletUtil' | ||||
| import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' | ||||
| import { SignClientTypes } from '@walletconnect/types' | ||||
| import { getSdkError } from '@walletconnect/utils' | ||||
| 
 | ||||
| export async function approvePolkadotRequest( | ||||
|   requestEvent: SignClientTypes.EventArguments['session_request'] | ||||
| ) { | ||||
|   const { params, id } = requestEvent | ||||
|   const { request } = params | ||||
|   const wallet = polkadotWallets[getWalletAddressFromParams(polkadotAddresses, params)] | ||||
| 
 | ||||
|   switch (request.method) { | ||||
|     case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE: | ||||
|       const signature = await wallet.signMessage(request.params.message) | ||||
|       return formatJsonRpcResult(id, signature) | ||||
| 
 | ||||
|     case POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_TRANSACTION: | ||||
|       const signedTx = await wallet.signTransaction(request.params.transactionPayload) | ||||
|       return formatJsonRpcResult(id, signedTx) | ||||
| 
 | ||||
|     default: | ||||
|       throw new Error(getSdkError('INVALID_METHOD').message) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export function rejectPolkadotRequest(request: SignClientTypes.EventArguments['session_request']) { | ||||
|   const { id } = request | ||||
| 
 | ||||
|   return formatJsonRpcError(id, getSdkError('USER_REJECTED_METHODS').message) | ||||
| } | ||||
							
								
								
									
										43
									
								
								wallets/react-wallet-v2/src/utils/PolkadotWalletUtil.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								wallets/react-wallet-v2/src/utils/PolkadotWalletUtil.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| import PolkadotLib from '@/lib/PolkadotLib' | ||||
| 
 | ||||
| export let wallet1: PolkadotLib | ||||
| export let wallet2: PolkadotLib | ||||
| export let polkadotWallets: Record<string, PolkadotLib> | ||||
| export let polkadotAddresses: string[] | ||||
| 
 | ||||
| let address1: string | ||||
| let address2: string | ||||
| 
 | ||||
| /** | ||||
|  * Utilities | ||||
|  */ | ||||
| export async function createOrRestorePolkadotWallet() { | ||||
|   const mnemonic1 = localStorage.getItem('POLKADOT_MNEMONIC_1') | ||||
|   const mnemonic2 = localStorage.getItem('POLKADOT_MNEMONIC_2') | ||||
| 
 | ||||
|   if (mnemonic1 && mnemonic2) { | ||||
|     wallet1 = await PolkadotLib.init({ mnemonic: mnemonic1 }) | ||||
|     wallet2 = await PolkadotLib.init({ mnemonic: mnemonic2 }) | ||||
|   } else { | ||||
|     wallet1 = await PolkadotLib.init({}) | ||||
|     wallet2 = await PolkadotLib.init({}) | ||||
| 
 | ||||
|     // Don't store mnemonic in local storage in a production project!
 | ||||
|     localStorage.setItem('POLKADOT_MNEMONIC_1', wallet1.getMnemonic()) | ||||
|     localStorage.setItem('POLKADOT_MNEMONIC_2', wallet2.getMnemonic()) | ||||
|   } | ||||
| 
 | ||||
|   address1 = wallet1.getAddress() | ||||
|   address2 = wallet2.getAddress() | ||||
| 
 | ||||
|   polkadotWallets = { | ||||
|     [address1]: wallet1, | ||||
|     [address2]: wallet2 | ||||
|   } | ||||
|   polkadotAddresses = Object.keys(polkadotWallets) | ||||
| 
 | ||||
|   return { | ||||
|     polkadotWallets, | ||||
|     polkadotAddresses | ||||
|   } | ||||
| } | ||||
| @ -5,7 +5,8 @@ import SessionProposalChainCard from '@/components/SessionProposalChainCard' | ||||
| import ModalStore from '@/store/ModalStore' | ||||
| import { cosmosAddresses } from '@/utils/CosmosWalletUtil' | ||||
| import { eip155Addresses } from '@/utils/EIP155WalletUtil' | ||||
| import { isCosmosChain, isEIP155Chain, isSolanaChain } from '@/utils/HelperUtil' | ||||
| import { polkadotAddresses } from '@/utils/PolkadotWalletUtil' | ||||
| import { isCosmosChain, isEIP155Chain, isSolanaChain, isPolkadotChain } from '@/utils/HelperUtil' | ||||
| import { solanaAddresses } from '@/utils/SolanaWalletUtil' | ||||
| import { signClient } from '@/utils/WalletConnectUtil' | ||||
| import { Button, Divider, Modal, Text } from '@nextui-org/react' | ||||
| @ -112,6 +113,15 @@ export default function SessionProposalModal() { | ||||
|           chain={chain} | ||||
|         /> | ||||
|       ) | ||||
|     } else if (isPolkadotChain(chain)) { | ||||
|       return ( | ||||
|         <ProposalSelectSection | ||||
|           addresses={polkadotAddresses} | ||||
|           selectedAddresses={selectedAccounts[chain]} | ||||
|           onSelect={onSelectAccount} | ||||
|           chain={chain} | ||||
|         /> | ||||
|       ) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -0,0 +1,78 @@ | ||||
| import ProjectInfoCard from '@/components/ProjectInfoCard' | ||||
| import RequestDataCard from '@/components/RequestDataCard' | ||||
| import RequesDetailsCard from '@/components/RequestDetalilsCard' | ||||
| import RequestMethodCard from '@/components/RequestMethodCard' | ||||
| import RequestModalContainer from '@/components/RequestModalContainer' | ||||
| import ModalStore from '@/store/ModalStore' | ||||
| import { approvePolkadotRequest, rejectPolkadotRequest } from '@/utils/PolkadotRequestHandlerUtil' | ||||
| import { signClient } from '@/utils/WalletConnectUtil' | ||||
| import { Button, Divider, Modal, Text } from '@nextui-org/react' | ||||
| import { Fragment } from 'react' | ||||
| 
 | ||||
| export default function SessionSignPolkadotModal() { | ||||
|   // Get request and wallet data from store
 | ||||
|   const requestEvent = ModalStore.state.data?.requestEvent | ||||
|   const requestSession = ModalStore.state.data?.requestSession | ||||
| 
 | ||||
|   // Ensure request and wallet are defined
 | ||||
|   if (!requestEvent || !requestSession) { | ||||
|     return <Text>Missing request data</Text> | ||||
|   } | ||||
| 
 | ||||
|   // Get required request data
 | ||||
|   const { topic, params } = requestEvent | ||||
|   const { request, chainId } = params | ||||
| 
 | ||||
|   // Handle approve action (logic varies based on request method)
 | ||||
|   async function onApprove() { | ||||
|     if (requestEvent) { | ||||
|       const response = await approvePolkadotRequest(requestEvent) | ||||
|       await signClient.respond({ | ||||
|         topic, | ||||
|         response | ||||
|       }) | ||||
|       ModalStore.close() | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // Handle reject action
 | ||||
|   async function onReject() { | ||||
|     if (requestEvent) { | ||||
|       const response = rejectPolkadotRequest(requestEvent) | ||||
|       await signClient.respond({ | ||||
|         topic, | ||||
|         response | ||||
|       }) | ||||
|       ModalStore.close() | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return ( | ||||
|     <Fragment> | ||||
|       <RequestModalContainer title="Sign Message"> | ||||
|         <ProjectInfoCard metadata={requestSession.peer.metadata} /> | ||||
| 
 | ||||
|         <Divider y={2} /> | ||||
| 
 | ||||
|         <RequesDetailsCard chains={[chainId ?? '']} protocol={requestSession.relay.protocol} /> | ||||
| 
 | ||||
|         <Divider y={2} /> | ||||
| 
 | ||||
|         <RequestDataCard data={params} /> | ||||
| 
 | ||||
|         <Divider y={2} /> | ||||
| 
 | ||||
|         <RequestMethodCard methods={[request.method]} /> | ||||
|       </RequestModalContainer> | ||||
| 
 | ||||
|       <Modal.Footer> | ||||
|         <Button auto flat color="error" onClick={onReject}> | ||||
|           Reject | ||||
|         </Button> | ||||
|         <Button auto flat color="success" onClick={onApprove}> | ||||
|           Approve | ||||
|         </Button> | ||||
|       </Modal.Footer> | ||||
|     </Fragment> | ||||
|   ) | ||||
| } | ||||
| @ -100,6 +100,13 @@ | ||||
|   dependencies: | ||||
|     regenerator-runtime "^0.13.4" | ||||
| 
 | ||||
| "@babel/runtime@^7.18.9": | ||||
|   version "7.18.9" | ||||
|   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" | ||||
|   integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== | ||||
|   dependencies: | ||||
|     regenerator-runtime "^0.13.4" | ||||
| 
 | ||||
| "@babel/template@^7.16.7": | ||||
|   version "7.16.7" | ||||
|   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" | ||||
| @ -1106,11 +1113,21 @@ | ||||
|     "@react-types/shared" "3.11.0" | ||||
|     "@stitches/react" "1.2.7" | ||||
| 
 | ||||
| "@noble/hashes@1.1.2": | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" | ||||
|   integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== | ||||
| 
 | ||||
| "@noble/hashes@^1": | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" | ||||
|   integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== | ||||
| 
 | ||||
| "@noble/secp256k1@1.6.3": | ||||
|   version "1.6.3" | ||||
|   resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" | ||||
|   integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== | ||||
| 
 | ||||
| "@nodelib/fs.scandir@2.1.5": | ||||
|   version "2.1.5" | ||||
|   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" | ||||
| @ -1146,6 +1163,144 @@ | ||||
|     enc-utils "^3.0.0" | ||||
|     randombytes "^2.1.0" | ||||
| 
 | ||||
| "@polkadot/keyring@^10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-10.1.2.tgz#a7e70bd091d2ceb48e7fee005cc3dbe6cf8c8d32" | ||||
|   integrity sha512-b6hP3JFGYjsNNT3NO7I8fWRPqovgL4IvjvLttkfzpM6eM1zRRupqQ+Q50Jdl/3YUcr26PcxQcdRqJku4WyDABg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/util" "10.1.2" | ||||
|     "@polkadot/util-crypto" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/networks@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-10.1.2.tgz#a42c93c5dd1f56b99ca50ec9d4e8076088148086" | ||||
|   integrity sha512-67ZPqdhLYDGNX1jMEa3+hujh9j30Dr9AdqgdjE8Z3GdWoEVRp9Zda3DXMnDIQlRBQ32pRZty7dFhIq61Bv/whQ== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/util" "10.1.2" | ||||
|     "@substrate/ss58-registry" "^1.25.0" | ||||
| 
 | ||||
| "@polkadot/util-crypto@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-10.1.2.tgz#60779ad64e79542a06302ae7d9a2515482b563f4" | ||||
|   integrity sha512-lSgxSLF/XkksL8St3kyw8SCLic0JvyIf8uOezQZYyjSJKT3Gl8gGu9wCAKNAmboU0FgO8cnLO9AcAEkhCHvnyw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@noble/hashes" "1.1.2" | ||||
|     "@noble/secp256k1" "1.6.3" | ||||
|     "@polkadot/networks" "10.1.2" | ||||
|     "@polkadot/util" "10.1.2" | ||||
|     "@polkadot/wasm-crypto" "^6.3.1" | ||||
|     "@polkadot/x-bigint" "10.1.2" | ||||
|     "@polkadot/x-randomvalues" "10.1.2" | ||||
|     "@scure/base" "1.1.1" | ||||
|     ed2curve "^0.3.0" | ||||
|     tweetnacl "^1.0.3" | ||||
| 
 | ||||
| "@polkadot/util@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-10.1.2.tgz#2eded0c159c16c4a3c48ff45c4ced05c62fb4660" | ||||
|   integrity sha512-gYSpJyrrw5gZWgTVu6PJ1PBUzi3GqwmaK6XRgi4deHmQRn9TEXTToGtHmleJWnaTCRW8Vvh5B5RNNV2C/+va4w== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-bigint" "10.1.2" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
|     "@polkadot/x-textdecoder" "10.1.2" | ||||
|     "@polkadot/x-textencoder" "10.1.2" | ||||
|     "@types/bn.js" "^5.1.0" | ||||
|     bn.js "^5.2.1" | ||||
| 
 | ||||
| "@polkadot/wasm-bridge@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-6.3.1.tgz#439fa78e80947a7cb695443e1f64b25c30bb1487" | ||||
|   integrity sha512-1TYkHsb9AEFhU9uZj3biEnN2yKQNzdrwSjiTvfCYnt97pnEkKsZI6cku+YPZQv5w/x9CQa5Yua9e2DVVZSivGA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-asmjs@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.3.1.tgz#e8f469c9cf4a7709c8131a96f857291953f3e30a" | ||||
|   integrity sha512-zbombRfA5v/mUWQQhgg2YwaxhRmxRIrvskw65x+lruax3b6xPBFDs7yplopiJU3r8h2pTgQvX/DUksvqz2TCRQ== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-init@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.3.1.tgz#b590220c53c94b9a54d5dc236d0cbe943db76706" | ||||
|   integrity sha512-9yaUBcu+snwjJLmPPGl3cyGRQ1afyFGm16qzTM0sgG/ZCfUlK4uk8KWZe+sBUKgoxb2oXY7Y4WklKgQI1YBdfw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-bridge" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-asmjs" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-wasm" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto-wasm@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.3.1.tgz#67f720e7f9694fef096abe9d60abbac02e032383" | ||||
|   integrity sha512-idSlzKGVzCfeCMRHsacRvqwojSaTadFxL/Dbls4z1thvfa3U9Ku0d2qVtlwg7Hj+tYWDiuP8Kygs+6bQwfs0XA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-util" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-crypto@^6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.3.1.tgz#63f5798aca2b2ff0696f190e6862d9781d8f280c" | ||||
|   integrity sha512-OO8h0qeVkqp4xYZaRVl4iuWOEtq282pNBHDKb6SOJuI2g59eWGcKh4EQU9Me2VP6qzojIqptrkrVt7KQXC68gA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/wasm-bridge" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-asmjs" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-init" "6.3.1" | ||||
|     "@polkadot/wasm-crypto-wasm" "6.3.1" | ||||
|     "@polkadot/wasm-util" "6.3.1" | ||||
| 
 | ||||
| "@polkadot/wasm-util@6.3.1": | ||||
|   version "6.3.1" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.3.1.tgz#439ebb68a436317af388ed6438b8f879df3afcda" | ||||
|   integrity sha512-12oAv5J7Yoc9m6jixrSaQCxpOkWOyzHx3DMC8qmLjRiwdBWxqLmImOVRVnFsbaxqSbhBIHRuJphVxWE+GZETDg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/x-bigint@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-10.1.2.tgz#5070af6a3a5aa66eba85597837ce6eb44ad7dc02" | ||||
|   integrity sha512-TCwv3NjQdfLb7CBYR8EA5t0CrMfYx3IF4hKjctuplL+mDNI0VzNn4qVKW62AjouI8kMbn7VyBPfoBeuYX8Ixrw== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-global@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-10.1.2.tgz#66c2ceb6ef5043bc6bddd5e944f35e64e9d6a0a9" | ||||
|   integrity sha512-//r3NVLYdYQs0So0IK8Pa0pnL5pPi0geQWE6qjTtPD0oszuN9SUDqDlFQj3I3vqQOwgybbzBGNYRRinP8B2xUg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
| 
 | ||||
| "@polkadot/x-randomvalues@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-10.1.2.tgz#8a0f15eb0558f837dd10060ad808707fe8b64c05" | ||||
|   integrity sha512-KOu6iZWye9KD6qoahiqZ0alrT/5FSGL4XXLhVSg69xAqD6yG2oi2aKA6cZpDU19uZGqVneqsgpebDsrZ0nLUEg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-textdecoder@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-10.1.2.tgz#833627fc55b388483857de922b534b70fc349a0a" | ||||
|   integrity sha512-liMlSSKfLGTvcUPz1fMicH2HoKLgSjzxFYsbNfXJOe9GobQfSrAOcprM0j4gNJqN5EoZhze9Sf1rMTORQwomtg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@polkadot/x-textencoder@10.1.2": | ||||
|   version "10.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-10.1.2.tgz#a728a89d117456749211fcf520ca0e846654df89" | ||||
|   integrity sha512-bSMvesZ43Er6+jogt9IfwWN/E8bhkl4a9nNnpyS/vTh+j6n/DfDQrvYpKDpRIn7oJA6lfs/mL9Jo5jjJTngaxg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.18.9" | ||||
|     "@polkadot/x-global" "10.1.2" | ||||
| 
 | ||||
| "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" | ||||
| @ -1635,6 +1790,11 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0" | ||||
|   integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw== | ||||
| 
 | ||||
| "@scure/base@1.1.1": | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" | ||||
|   integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== | ||||
| 
 | ||||
| "@solana/buffer-layout-utils@^0.2.0": | ||||
|   version "0.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" | ||||
| @ -1835,6 +1995,18 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.7.tgz#aea2403fac726db66d1740d29557e3910b1a1dc7" | ||||
|   integrity sha512-6AxpUag7OW55ANzRnuy7R15FEyQeZ66fytVo3BBilFIU0mfo3t49CAMcEAL/A1SbhSj/FCdWkn/XrbjGBTJTzg== | ||||
| 
 | ||||
| "@substrate/ss58-registry@^1.25.0": | ||||
|   version "1.25.0" | ||||
|   resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.25.0.tgz#0fcd8c9c0e53963a88fbed41f2cbd8a1a5c74cde" | ||||
|   integrity sha512-LmCH4QJRdHaeLsLTPSgJaXguMoIW+Ig9fA9LRPpeya9HefVAJ7gZuUYinldv+QmX7evNm5CL0rspNUS8l1DvXg== | ||||
| 
 | ||||
| "@types/bn.js@^5.1.0": | ||||
|   version "5.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" | ||||
|   integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== | ||||
|   dependencies: | ||||
|     "@types/node" "*" | ||||
| 
 | ||||
| "@types/connect@^3.4.33": | ||||
|   version "3.4.35" | ||||
|   resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" | ||||
| @ -2832,6 +3004,13 @@ doctrine@^3.0.0: | ||||
|   dependencies: | ||||
|     esutils "^2.0.2" | ||||
| 
 | ||||
| ed2curve@^0.3.0: | ||||
|   version "0.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" | ||||
|   integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== | ||||
|   dependencies: | ||||
|     tweetnacl "1.x.x" | ||||
| 
 | ||||
| elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: | ||||
|   version "6.5.4" | ||||
|   resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" | ||||
| @ -5131,7 +5310,7 @@ tunnel-agent@^0.6.0: | ||||
|   dependencies: | ||||
|     safe-buffer "^5.0.1" | ||||
| 
 | ||||
| tweetnacl@^1.0.0, tweetnacl@^1.0.3: | ||||
| tweetnacl@1.x.x, tweetnacl@^1.0.0, tweetnacl@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" | ||||
|   integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user