Add Polkadot RPCs to the Dapp examples and wallet (#44)

Co-authored-by: Ben Kremer <contact@bkrem.dev>
This commit is contained in:
hamidra 2022-08-11 02:43:12 -07:00 committed by GitHub
parent 6a77191dd3
commit 1406ce3999
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 821 additions and 8 deletions

View File

@ -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",

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -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 {

View File

@ -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";

View File

@ -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);
}

View File

@ -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,

View File

@ -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}`);
}

View File

@ -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;
}

View File

@ -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==

View File

@ -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",

View 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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -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>
)
}

View 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'
}

View File

@ -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()

View File

@ -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 })
}

View 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 }
}
}

View File

@ -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>

View File

@ -20,6 +20,7 @@ interface State {
| 'SessionUnsuportedMethodModal'
| 'SessionSignCosmosModal'
| 'SessionSignSolanaModal'
| 'SessionSignPolkadotModal'
data?: ModalData
}

View File

@ -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) {

View File

@ -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
*/

View File

@ -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)
}

View 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
}
}

View File

@ -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}
/>
)
}
}

View File

@ -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>
)
}

View File

@ -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==