diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 746b5e8b..d3af997b 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- app: [ethereum, solana, near, zeta, tia, sei, osmosis, mantra, injective, fetch, dydx, cronos, atom, kava, ada, sui, xtz, ton, trx]
+ app: [ethereum, solana, near, zeta, tia, sei, osmosis, mantra, injective, fetch, dydx, cronos, atom, kava, ada, sui, xtz, ton, trx, ksm, dot]
steps:
- name: Checkout
@@ -55,6 +55,8 @@ jobs:
xtz) echo "project_id=${{ secrets.VERCEL_PROJECT_ID_XTZ }}" >> $GITHUB_OUTPUT ;;
ton) echo "project_id=${{ secrets.VERCEL_PROJECT_ID_TON }}" >> $GITHUB_OUTPUT ;;
trx) echo "project_id=${{ secrets.VERCEL_PROJECT_ID_TRX }}" >> $GITHUB_OUTPUT ;;
+ ksm) echo "project_id=${{ secrets.VERCEL_PROJECT_ID_KSM }}" >> $GITHUB_OUTPUT ;;
+ dot) echo "project_id=${{ secrets.VERCEL_PROJECT_ID_DOT }}" >> $GITHUB_OUTPUT ;;
esac
- name: Pull Vercel Environment Information
diff --git a/apps/dot/.gitignore b/apps/dot/.gitignore
new file mode 100644
index 00000000..e985853e
--- /dev/null
+++ b/apps/dot/.gitignore
@@ -0,0 +1 @@
+.vercel
diff --git a/apps/dot/index.html b/apps/dot/index.html
new file mode 100644
index 00000000..2297f334
--- /dev/null
+++ b/apps/dot/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Minitel - Polkadot Transaction Decoder
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/dot/package.json b/apps/dot/package.json
new file mode 100644
index 00000000..aa5c6016
--- /dev/null
+++ b/apps/dot/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@protocols/dot",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite --port 3019",
+ "build": "tsc && vite build",
+ "preview": "vite preview",
+ "lint": "tsc && biome check ./src",
+ "format": "biome check ./src --write --unsafe"
+ },
+ "dependencies": {
+ "@protocols/shared": "workspace:*",
+ "@protocols/substrate-shared": "workspace:*",
+ "@protocols/ui": "workspace:*",
+ "@uiw/react-json-view": "^2.0.0-alpha.36",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.13",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "typescript": "^5.0.0",
+ "vite": "^7.0.0",
+ "vite-plugin-node-polyfills": "^0.24.0"
+ }
+}
\ No newline at end of file
diff --git a/apps/dot/public/favicon.svg b/apps/dot/public/favicon.svg
new file mode 100644
index 00000000..db737df8
--- /dev/null
+++ b/apps/dot/public/favicon.svg
@@ -0,0 +1,14 @@
+
diff --git a/apps/dot/src/App.tsx b/apps/dot/src/App.tsx
new file mode 100644
index 00000000..c8c1df0f
--- /dev/null
+++ b/apps/dot/src/App.tsx
@@ -0,0 +1,26 @@
+import { getCurrentProtocol, PROTOCOLS, type Protocol } from '@protocols/shared';
+import { Background, cn, Header, ProtocolTransactionDecoder } from '@protocols/ui';
+import { dotAdapter } from '@/dot-adapter';
+
+const currentProtocol = getCurrentProtocol();
+
+function App() {
+ const onChangeProtocol = (protocol: Protocol) => {
+ const protocolUrl = import.meta.env.DEV ? protocol.localUrl : protocol.url;
+ window.open(protocolUrl, '_blank', 'noopener,noreferrer');
+ };
+
+ return (
+
+ );
+}
+
+export default App;
diff --git a/apps/dot/src/dot-adapter.tsx b/apps/dot/src/dot-adapter.tsx
new file mode 100644
index 00000000..95190d27
--- /dev/null
+++ b/apps/dot/src/dot-adapter.tsx
@@ -0,0 +1,9 @@
+import { DOT } from '@protocols/shared';
+import { createSubstrateAdapter } from '@protocols/substrate-shared';
+
+export const dotAdapter = createSubstrateAdapter({
+ protocol: DOT,
+ name: 'dot',
+ displayName: 'Dot',
+ token: 'DOT',
+});
diff --git a/apps/dot/src/index.css b/apps/dot/src/index.css
new file mode 100644
index 00000000..a74e20a2
--- /dev/null
+++ b/apps/dot/src/index.css
@@ -0,0 +1 @@
+@import "@protocols/ui/styles/globals.css";
diff --git a/apps/dot/src/main.tsx b/apps/dot/src/main.tsx
new file mode 100644
index 00000000..858c3b52
--- /dev/null
+++ b/apps/dot/src/main.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from '@/App';
+import '@/index.css';
+
+if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ document.documentElement.classList.add('dark');
+}
+
+// Listen for system theme changes
+window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
+ document.documentElement.classList.toggle('dark', e.matches);
+});
+
+// biome-ignore lint/style/noNonNullAssertion:
+ReactDOM.createRoot(document.getElementById('root')!).render(
+
+
+ ,
+);
diff --git a/apps/dot/src/vite-env.d.ts b/apps/dot/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/apps/dot/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/apps/dot/tsconfig.json b/apps/dot/tsconfig.json
new file mode 100644
index 00000000..b1fc29bb
--- /dev/null
+++ b/apps/dot/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"],
+ "@protocols/ui": ["../../packages/ui/src"],
+ "@protocols/shared": ["../../packages/shared/src"]
+ }
+ },
+ "include": ["src"]
+}
diff --git a/apps/dot/tsconfig.node.json b/apps/dot/tsconfig.node.json
new file mode 100644
index 00000000..8e5c8449
--- /dev/null
+++ b/apps/dot/tsconfig.node.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "skipLibCheck": true
+ },
+ "include": ["vite.config.ts"]
+}
\ No newline at end of file
diff --git a/apps/dot/vercel.json b/apps/dot/vercel.json
new file mode 100644
index 00000000..671d9a39
--- /dev/null
+++ b/apps/dot/vercel.json
@@ -0,0 +1,6 @@
+{
+ "installCommand": "bun install --cwd ../../",
+ "buildCommand": "bun --cwd ../../ --filter @protocols/dot build",
+ "outputDirectory": "dist",
+ "framework": null
+}
\ No newline at end of file
diff --git a/apps/dot/vite.config.ts b/apps/dot/vite.config.ts
new file mode 100644
index 00000000..9708c0d0
--- /dev/null
+++ b/apps/dot/vite.config.ts
@@ -0,0 +1,27 @@
+import path from 'node:path';
+import tailwindcss from '@tailwindcss/vite';
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
+import { nodePolyfills } from 'vite-plugin-node-polyfills';
+
+export default defineConfig({
+ plugins: [
+ react(),
+ tailwindcss(),
+ nodePolyfills({
+ include: ['buffer'],
+ globals: {
+ Buffer: true,
+ global: true,
+ process: true,
+ },
+ }),
+ ],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ '@protocols/ui': path.resolve(__dirname, '../../packages/ui/src'),
+ '@protocols/shared': path.resolve(__dirname, '../../packages/shared/src'),
+ },
+ },
+});
diff --git a/apps/ksm/.gitignore b/apps/ksm/.gitignore
new file mode 100644
index 00000000..e985853e
--- /dev/null
+++ b/apps/ksm/.gitignore
@@ -0,0 +1 @@
+.vercel
diff --git a/apps/ksm/index.html b/apps/ksm/index.html
new file mode 100644
index 00000000..0409f815
--- /dev/null
+++ b/apps/ksm/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Minitel - Kusama Transaction Decoder
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/ksm/package.json b/apps/ksm/package.json
new file mode 100644
index 00000000..c5e4d4e8
--- /dev/null
+++ b/apps/ksm/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@protocols/ksm",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite --port 3020",
+ "build": "tsc && vite build",
+ "preview": "vite preview",
+ "lint": "tsc && biome check ./src",
+ "format": "biome check ./src --write --unsafe"
+ },
+ "dependencies": {
+ "@protocols/shared": "workspace:*",
+ "@protocols/substrate-shared": "workspace:*",
+ "@protocols/ui": "workspace:*",
+ "@uiw/react-json-view": "^2.0.0-alpha.36",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.13",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "typescript": "^5.0.0",
+ "vite": "^7.0.0",
+ "vite-plugin-node-polyfills": "^0.24.0"
+ }
+}
diff --git a/apps/ksm/public/favicon.svg b/apps/ksm/public/favicon.svg
new file mode 100644
index 00000000..db737df8
--- /dev/null
+++ b/apps/ksm/public/favicon.svg
@@ -0,0 +1,14 @@
+
diff --git a/apps/ksm/src/App.tsx b/apps/ksm/src/App.tsx
new file mode 100644
index 00000000..f7f232de
--- /dev/null
+++ b/apps/ksm/src/App.tsx
@@ -0,0 +1,28 @@
+import { getCurrentProtocol, KSM, PROTOCOLS, type Protocol } from '@protocols/shared';
+import { createSubstrateAdapter } from '@protocols/substrate-shared';
+import { Background, cn, Header, ProtocolTransactionDecoder } from '@protocols/ui';
+
+const currentProtocol = getCurrentProtocol();
+
+function App() {
+ const onChangeProtocol = (protocol: Protocol) => {
+ const protocolUrl = import.meta.env.DEV ? protocol.localUrl : protocol.url;
+ window.open(protocolUrl, '_blank', 'noopener,noreferrer');
+ };
+
+ return (
+
+ );
+}
+
+export default App;
diff --git a/apps/ksm/src/index.css b/apps/ksm/src/index.css
new file mode 100644
index 00000000..a74e20a2
--- /dev/null
+++ b/apps/ksm/src/index.css
@@ -0,0 +1 @@
+@import "@protocols/ui/styles/globals.css";
diff --git a/apps/ksm/src/main.tsx b/apps/ksm/src/main.tsx
new file mode 100644
index 00000000..858c3b52
--- /dev/null
+++ b/apps/ksm/src/main.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from '@/App';
+import '@/index.css';
+
+if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ document.documentElement.classList.add('dark');
+}
+
+// Listen for system theme changes
+window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
+ document.documentElement.classList.toggle('dark', e.matches);
+});
+
+// biome-ignore lint/style/noNonNullAssertion:
+ReactDOM.createRoot(document.getElementById('root')!).render(
+
+
+ ,
+);
diff --git a/apps/ksm/src/vite-env.d.ts b/apps/ksm/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/apps/ksm/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/apps/ksm/tsconfig.json b/apps/ksm/tsconfig.json
new file mode 100644
index 00000000..4fc0c472
--- /dev/null
+++ b/apps/ksm/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"],
+ "@protocols/ui": ["../../packages/ui/src"],
+ "@protocols/shared": ["../../packages/shared/src"],
+ "@protocols/cosmos-shared": ["../../packages/cosmos-shared/src"]
+ }
+ },
+ "include": ["src"]
+}
diff --git a/apps/ksm/tsconfig.node.json b/apps/ksm/tsconfig.node.json
new file mode 100644
index 00000000..8e5c8449
--- /dev/null
+++ b/apps/ksm/tsconfig.node.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "skipLibCheck": true
+ },
+ "include": ["vite.config.ts"]
+}
\ No newline at end of file
diff --git a/apps/ksm/vercel.json b/apps/ksm/vercel.json
new file mode 100644
index 00000000..5114be03
--- /dev/null
+++ b/apps/ksm/vercel.json
@@ -0,0 +1,6 @@
+{
+ "installCommand": "bun install --cwd ../../",
+ "buildCommand": "bun --cwd ../../ --filter @protocols/zeta build",
+ "outputDirectory": "dist",
+ "framework": null
+}
\ No newline at end of file
diff --git a/apps/ksm/vite.config.ts b/apps/ksm/vite.config.ts
new file mode 100644
index 00000000..32f0ee65
--- /dev/null
+++ b/apps/ksm/vite.config.ts
@@ -0,0 +1,28 @@
+import path from 'node:path';
+import tailwindcss from '@tailwindcss/vite';
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
+import { nodePolyfills } from 'vite-plugin-node-polyfills';
+
+export default defineConfig({
+ plugins: [
+ react(),
+ tailwindcss(),
+ nodePolyfills({
+ include: ['buffer'],
+ globals: {
+ Buffer: true,
+ global: true,
+ process: true,
+ },
+ }),
+ ],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ '@protocols/ui': path.resolve(__dirname, '../../packages/ui/src'),
+ '@protocols/shared': path.resolve(__dirname, '../../packages/shared/src'),
+ '@protocols/cosmos-shared': path.resolve(__dirname, '../../packages/cosmos-shared/src'),
+ },
+ },
+});
diff --git a/bun.lock b/bun.lock
index b2ece368..bcfa92c6 100644
--- a/bun.lock
+++ b/bun.lock
@@ -77,6 +77,27 @@
"vite-plugin-node-polyfills": "^0.24.0",
},
},
+ "apps/dot": {
+ "name": "@protocols/dot",
+ "version": "0.0.0",
+ "dependencies": {
+ "@protocols/shared": "workspace:*",
+ "@protocols/substrate-shared": "workspace:*",
+ "@protocols/ui": "workspace:*",
+ "@uiw/react-json-view": "^2.0.0-alpha.36",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1",
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.13",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "typescript": "^5.0.0",
+ "vite": "^7.0.0",
+ "vite-plugin-node-polyfills": "^0.24.0",
+ },
+ },
"apps/dydx": {
"name": "@protocols/dydx",
"version": "0.0.0",
@@ -184,6 +205,27 @@
"vite-plugin-node-polyfills": "^0.24.0",
},
},
+ "apps/ksm": {
+ "name": "@protocols/ksm",
+ "version": "0.0.0",
+ "dependencies": {
+ "@protocols/shared": "workspace:*",
+ "@protocols/substrate-shared": "workspace:*",
+ "@protocols/ui": "workspace:*",
+ "@uiw/react-json-view": "^2.0.0-alpha.36",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1",
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.13",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
+ "@vitejs/plugin-react": "^4.0.0",
+ "typescript": "^5.0.0",
+ "vite": "^7.0.0",
+ "vite-plugin-node-polyfills": "^0.24.0",
+ },
+ },
"apps/mantra": {
"name": "@protocols/mantra",
"version": "0.0.0",
@@ -450,6 +492,25 @@
"react": "^19.1.1",
},
},
+ "packages/substrate-shared": {
+ "name": "@protocols/substrate-shared",
+ "version": "1.0.0",
+ "dependencies": {
+ "@polkadot/api": "^14.3.1",
+ "@polkadot/types": "^14.3.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "@protocols/shared": "workspace:*",
+ "blakejs": "^1.2.1",
+ },
+ "devDependencies": {
+ "@types/react": "^19.0.0",
+ "typescript": "^5.0.0",
+ },
+ "peerDependencies": {
+ "react": "^19.1.1",
+ },
+ },
"packages/ui": {
"name": "@protocols/ui",
"version": "1.0.0",
@@ -923,6 +984,80 @@
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
+ "@polkadot-api/json-rpc-provider": ["@polkadot-api/json-rpc-provider@0.0.1", "", {}, "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA=="],
+
+ "@polkadot-api/json-rpc-provider-proxy": ["@polkadot-api/json-rpc-provider-proxy@0.1.0", "", {}, "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg=="],
+
+ "@polkadot-api/metadata-builders": ["@polkadot-api/metadata-builders@0.3.2", "", { "dependencies": { "@polkadot-api/substrate-bindings": "0.6.0", "@polkadot-api/utils": "0.1.0" } }, "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg=="],
+
+ "@polkadot-api/observable-client": ["@polkadot-api/observable-client@0.3.2", "", { "dependencies": { "@polkadot-api/metadata-builders": "0.3.2", "@polkadot-api/substrate-bindings": "0.6.0", "@polkadot-api/utils": "0.1.0" }, "peerDependencies": { "@polkadot-api/substrate-client": "0.1.4", "rxjs": ">=7.8.0" } }, "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug=="],
+
+ "@polkadot-api/substrate-bindings": ["@polkadot-api/substrate-bindings@0.6.0", "", { "dependencies": { "@noble/hashes": "^1.3.1", "@polkadot-api/utils": "0.1.0", "@scure/base": "^1.1.1", "scale-ts": "^1.6.0" } }, "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw=="],
+
+ "@polkadot-api/substrate-client": ["@polkadot-api/substrate-client@0.1.4", "", { "dependencies": { "@polkadot-api/json-rpc-provider": "0.0.1", "@polkadot-api/utils": "0.1.0" } }, "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A=="],
+
+ "@polkadot-api/utils": ["@polkadot-api/utils@0.1.0", "", {}, "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA=="],
+
+ "@polkadot/api": ["@polkadot/api@14.3.1", "", { "dependencies": { "@polkadot/api-augment": "14.3.1", "@polkadot/api-base": "14.3.1", "@polkadot/api-derive": "14.3.1", "@polkadot/keyring": "^13.2.3", "@polkadot/rpc-augment": "14.3.1", "@polkadot/rpc-core": "14.3.1", "@polkadot/rpc-provider": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/types-augment": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/types-create": "14.3.1", "@polkadot/types-known": "14.3.1", "@polkadot/util": "^13.2.3", "@polkadot/util-crypto": "^13.2.3", "eventemitter3": "^5.0.1", "rxjs": "^7.8.1", "tslib": "^2.8.0" } }, "sha512-ZBKSXEVJa1S1bnmpnA7KT/fX3sJDIJOdVD9Hp3X+G73yvXzuK5k1Mn5z9bD/AcMs/HAGcbuYU+b9+b9IByH9YQ=="],
+
+ "@polkadot/api-augment": ["@polkadot/api-augment@14.3.1", "", { "dependencies": { "@polkadot/api-base": "14.3.1", "@polkadot/rpc-augment": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/types-augment": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-PE6DW+8kRhbnGKn7qCF7yM6eEt/kqrY8bh1i0RZcPY9QgwXW4bZZrtMK4WssX6Z70NTEoOW6xHYIjc7gFZuz8g=="],
+
+ "@polkadot/api-base": ["@polkadot/api-base@14.3.1", "", { "dependencies": { "@polkadot/rpc-core": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/util": "^13.2.3", "rxjs": "^7.8.1", "tslib": "^2.8.0" } }, "sha512-GZT6rTpT3HYZ/C3rLPjoX3rX3DOxNG/zgts+jKjNrCumAeZkVq5JErKIX8/3f2TVaE2Kbqniy3d1TH/AL4HBPA=="],
+
+ "@polkadot/api-derive": ["@polkadot/api-derive@14.3.1", "", { "dependencies": { "@polkadot/api": "14.3.1", "@polkadot/api-augment": "14.3.1", "@polkadot/api-base": "14.3.1", "@polkadot/rpc-core": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/util": "^13.2.3", "@polkadot/util-crypto": "^13.2.3", "rxjs": "^7.8.1", "tslib": "^2.8.0" } }, "sha512-PhqUEJCY54vXtIaoYqGUtJY06wHd/K0cBmBz9yCLxp8UZkLoGWhfJRTruI25Jnucf9awS5cZKYqbsoDrL09Oqg=="],
+
+ "@polkadot/keyring": ["@polkadot/keyring@13.5.6", "", { "dependencies": { "@polkadot/util": "13.5.6", "@polkadot/util-crypto": "13.5.6", "tslib": "^2.8.0" } }, "sha512-Ybe6Mflrh96FKR5tfEaf/93RxJD7x9UigseNOJW6Yd8LF+GesdxrqmZD7zh+53Hb7smGQWf/0FCfwhoWZVgPUQ=="],
+
+ "@polkadot/networks": ["@polkadot/networks@13.5.6", "", { "dependencies": { "@polkadot/util": "13.5.6", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" } }, "sha512-9HqUIBOHnz9x/ssPb0aOD/7XcU8vGokEYpLoNgexFNIJzqDgrDHXR197iFpkbMqA/+98zagrvYUyPYj1yYs9Jw=="],
+
+ "@polkadot/rpc-augment": ["@polkadot/rpc-augment@14.3.1", "", { "dependencies": { "@polkadot/rpc-core": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-Z8Hp8fFHwFCiTX0bBCDqCZ4U26wLIJl1NRSjJTsAr+SS68pYZBDGCwhKztpKGqndk1W1akRUaxrkGqYdIFmspQ=="],
+
+ "@polkadot/rpc-core": ["@polkadot/rpc-core@14.3.1", "", { "dependencies": { "@polkadot/rpc-augment": "14.3.1", "@polkadot/rpc-provider": "14.3.1", "@polkadot/types": "14.3.1", "@polkadot/util": "^13.2.3", "rxjs": "^7.8.1", "tslib": "^2.8.0" } }, "sha512-FV2NPhFwFxmX8LqibDcGc6IKTBqmvwr7xwF2OA60Br4cX+AQzMSVpFlfQcETll+0M+LnRhqGKGkP0EQWXaSowA=="],
+
+ "@polkadot/rpc-provider": ["@polkadot/rpc-provider@14.3.1", "", { "dependencies": { "@polkadot/keyring": "^13.2.3", "@polkadot/types": "14.3.1", "@polkadot/types-support": "14.3.1", "@polkadot/util": "^13.2.3", "@polkadot/util-crypto": "^13.2.3", "@polkadot/x-fetch": "^13.2.3", "@polkadot/x-global": "^13.2.3", "@polkadot/x-ws": "^13.2.3", "eventemitter3": "^5.0.1", "mock-socket": "^9.3.1", "nock": "^13.5.5", "tslib": "^2.8.0" }, "optionalDependencies": { "@substrate/connect": "0.8.11" } }, "sha512-NF/Z/7lzT+jp5LZzC49g+YIjRzXVI0hFag3+B+4zh6E/kKADdF59EHj2Im4LDhRGOnEO9AE4H6/UjNEbZ94JtA=="],
+
+ "@polkadot/types": ["@polkadot/types@14.3.1", "", { "dependencies": { "@polkadot/keyring": "^13.2.3", "@polkadot/types-augment": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/types-create": "14.3.1", "@polkadot/util": "^13.2.3", "@polkadot/util-crypto": "^13.2.3", "rxjs": "^7.8.1", "tslib": "^2.8.0" } }, "sha512-O748XgCLDQYxS5nQ6TJSqW88oC4QNIoNVlWZC2Qq4SmEXuSzaNHQwSVtdyPRJCCc4Oi1DCQvGui4O+EukUl7HA=="],
+
+ "@polkadot/types-augment": ["@polkadot/types-augment@14.3.1", "", { "dependencies": { "@polkadot/types": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-SC4M6TBlgCglNz+gRbvfoVRDz0Vyeev6v0HeAdw0H6ayEW4BXUdo5bFr0092bdS5uTrEPgiSyUry5TJs2KoXig=="],
+
+ "@polkadot/types-codec": ["@polkadot/types-codec@14.3.1", "", { "dependencies": { "@polkadot/util": "^13.2.3", "@polkadot/x-bigint": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-3y3RBGd+8ebscGbNUOjqUjnRE7hgicgid5LtofHK3O1EDcJQJnYBDkJ7fOAi96CDgHsg+f2FWWkBWEPgpOQoMQ=="],
+
+ "@polkadot/types-create": ["@polkadot/types-create@14.3.1", "", { "dependencies": { "@polkadot/types-codec": "14.3.1", "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-F4EBvF3Zvym0xrkAA5Yz01IAVMepMV3w2Dwd0C9IygEAQ5sYLLPHmf72/aXn+Ag+bSyT2wlJHpDc+nEBXNQ3Gw=="],
+
+ "@polkadot/types-known": ["@polkadot/types-known@14.3.1", "", { "dependencies": { "@polkadot/networks": "^13.2.3", "@polkadot/types": "14.3.1", "@polkadot/types-codec": "14.3.1", "@polkadot/types-create": "14.3.1", "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-58b3Yc7+sxwNjs8axmrA9OCgnxmEKIq7XCH2VxSgLqTeqbohVtxwUSCW/l8NPrq1nxzj4J2sopu0PPg8/++q4g=="],
+
+ "@polkadot/types-support": ["@polkadot/types-support@14.3.1", "", { "dependencies": { "@polkadot/util": "^13.2.3", "tslib": "^2.8.0" } }, "sha512-MfVe4iIOJIfBr+gj8Lu8gwIvhnO6gDbG5LeaKAjY6vS6Oh0y5Ztr8NdMIl8ccSpoyt3LqIXjfApeGzHiLzr6bw=="],
+
+ "@polkadot/util": ["@polkadot/util@13.5.6", "", { "dependencies": { "@polkadot/x-bigint": "13.5.6", "@polkadot/x-global": "13.5.6", "@polkadot/x-textdecoder": "13.5.6", "@polkadot/x-textencoder": "13.5.6", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "tslib": "^2.8.0" } }, "sha512-V+CkW2VdhcMWvl7eXdmlCLGqLxrKvXZtXE76KBbPP5n0Z+8DqQ58IHNOE9xe2LOgqDwIzdLlOUwkyF9Zj19y+Q=="],
+
+ "@polkadot/util-crypto": ["@polkadot/util-crypto@13.5.6", "", { "dependencies": { "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", "@polkadot/networks": "13.5.6", "@polkadot/util": "13.5.6", "@polkadot/wasm-crypto": "^7.5.1", "@polkadot/wasm-util": "^7.5.1", "@polkadot/x-bigint": "13.5.6", "@polkadot/x-randomvalues": "13.5.6", "@scure/base": "^1.1.7", "tslib": "^2.8.0" } }, "sha512-1l+t5lVc9UWxvbJe7/3V+QK8CwrDPuQjDK6FKtDZgZCU0JRrjySOxV0J4PeDIv8TgXZtbIcQFVUhIsJTyKZZJQ=="],
+
+ "@polkadot/wasm-bridge": ["@polkadot/wasm-bridge@7.5.1", "", { "dependencies": { "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*", "@polkadot/x-randomvalues": "*" } }, "sha512-E+N3CSnX3YaXpAmfIQ+4bTyiAqJQKvVcMaXjkuL8Tp2zYffClWLG5e+RY15Uh+EWfUl9If4y6cLZi3D5NcpAGQ=="],
+
+ "@polkadot/wasm-crypto": ["@polkadot/wasm-crypto@7.5.1", "", { "dependencies": { "@polkadot/wasm-bridge": "7.5.1", "@polkadot/wasm-crypto-asmjs": "7.5.1", "@polkadot/wasm-crypto-init": "7.5.1", "@polkadot/wasm-crypto-wasm": "7.5.1", "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*", "@polkadot/x-randomvalues": "*" } }, "sha512-acjt4VJ3w19v7b/SIPsV/5k9s6JsragHKPnwoZ0KTfBvAFXwzz80jUzVGxA06SKHacfCUe7vBRlz7M5oRby1Pw=="],
+
+ "@polkadot/wasm-crypto-asmjs": ["@polkadot/wasm-crypto-asmjs@7.5.1", "", { "dependencies": { "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*" } }, "sha512-jAg7Uusk+xeHQ+QHEH4c/N3b1kEGBqZb51cWe+yM61kKpQwVGZhNdlWetW6U23t/BMyZArIWMsZqmK/Ij0PHog=="],
+
+ "@polkadot/wasm-crypto-init": ["@polkadot/wasm-crypto-init@7.5.1", "", { "dependencies": { "@polkadot/wasm-bridge": "7.5.1", "@polkadot/wasm-crypto-asmjs": "7.5.1", "@polkadot/wasm-crypto-wasm": "7.5.1", "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*", "@polkadot/x-randomvalues": "*" } }, "sha512-Obu4ZEo5jYO6sN31eqCNOXo88rPVkP9TrUOyynuFCnXnXr8V/HlmY/YkAd9F87chZnkTJRlzak17kIWr+i7w3A=="],
+
+ "@polkadot/wasm-crypto-wasm": ["@polkadot/wasm-crypto-wasm@7.5.1", "", { "dependencies": { "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*" } }, "sha512-S2yQSGbOGTcaV6UdipFVyEGanJvG6uD6Tg7XubxpiGbNAblsyYKeFcxyH1qCosk/4qf+GIUwlOL4ydhosZflqg=="],
+
+ "@polkadot/wasm-util": ["@polkadot/wasm-util@7.5.1", "", { "dependencies": { "tslib": "^2.7.0" }, "peerDependencies": { "@polkadot/util": "*" } }, "sha512-sbvu71isFhPXpvMVX+EkRnUg/+54Tx7Sf9BEMqxxoPj7cG1I/MKeDEwbQz6MaU4gm7xJqvEWCAemLFcXfHQ/2A=="],
+
+ "@polkadot/x-bigint": ["@polkadot/x-bigint@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "tslib": "^2.8.0" } }, "sha512-HpqZJ9ud94iK/+0Ofacw7QdtvzFp6SucBBml4XwWZTWoLaLOGDsO7FoWE7yCuwPbX8nLgIM6YmQBeUoZmBtVqQ=="],
+
+ "@polkadot/x-fetch": ["@polkadot/x-fetch@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "node-fetch": "^3.3.2", "tslib": "^2.8.0" } }, "sha512-gqx8c6lhnD7Qht+56J+4oeTA8YZ9bAPqzOt2cRJf9MTplMy44W6671T2p6hA3QMvzy4aBTxMie3uKc4tGpLu4A=="],
+
+ "@polkadot/x-global": ["@polkadot/x-global@13.5.6", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-iw97n0Bnl2284WgAK732LYR4DW6w5+COfBfHzkhiHqs5xwPEwWMgWGrf2hM8WAQqNIz6Ni8w/jagucPyQBur3Q=="],
+
+ "@polkadot/x-randomvalues": ["@polkadot/x-randomvalues@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "tslib": "^2.8.0" }, "peerDependencies": { "@polkadot/util": "13.5.6", "@polkadot/wasm-util": "*" } }, "sha512-w1F9G7FxrJ7+hGC8bh9/VpPH4KN8xmyzgiQdR7+rVB2V8KsKQBQidG69pj5Kwsh3oODOz0yQYsTG6Rm6TAJbGA=="],
+
+ "@polkadot/x-textdecoder": ["@polkadot/x-textdecoder@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "tslib": "^2.8.0" } }, "sha512-jTGeYCxFh89KRrP7bNj1CPqKO36Onsi0iA6A+5YtRS5wjdQU+/OFM/EHLTP2nvkvZo/tOkOewMR9sausisUvVQ=="],
+
+ "@polkadot/x-textencoder": ["@polkadot/x-textencoder@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "tslib": "^2.8.0" } }, "sha512-iVwz9+OrYCEF9QbNfr9M206mmWvY/AhDmGPfAIeTR4fRgKGVYqcP8RIF8iu/x0MVQWqiVO3vlhlUk7MfrmAnoQ=="],
+
+ "@polkadot/x-ws": ["@polkadot/x-ws@13.5.6", "", { "dependencies": { "@polkadot/x-global": "13.5.6", "tslib": "^2.8.0", "ws": "^8.18.0" } }, "sha512-247ktVp/iE57NTXjFpHaoPoDcvoEPb8+16r2Eq0IBQ2umOV7P6KmxvdNx5eFUvRsgXvBpNwUXE1WVnXjK/eDtA=="],
+
"@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="],
"@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="],
@@ -951,6 +1086,8 @@
"@protocols/cronos": ["@protocols/cronos@workspace:apps/cronos"],
+ "@protocols/dot": ["@protocols/dot@workspace:apps/dot"],
+
"@protocols/dydx": ["@protocols/dydx@workspace:apps/dydx"],
"@protocols/ethereum": ["@protocols/ethereum@workspace:apps/ethereum"],
@@ -961,6 +1098,8 @@
"@protocols/kava": ["@protocols/kava@workspace:apps/kava"],
+ "@protocols/ksm": ["@protocols/ksm@workspace:apps/ksm"],
+
"@protocols/mantra": ["@protocols/mantra@workspace:apps/mantra"],
"@protocols/near": ["@protocols/near@workspace:apps/near"],
@@ -973,6 +1112,8 @@
"@protocols/solana": ["@protocols/solana@workspace:apps/solana"],
+ "@protocols/substrate-shared": ["@protocols/substrate-shared@workspace:packages/substrate-shared"],
+
"@protocols/sui": ["@protocols/sui@workspace:apps/sui"],
"@protocols/tia": ["@protocols/tia@workspace:apps/tia"],
@@ -1175,6 +1316,16 @@
"@stablelib/wipe": ["@stablelib/wipe@1.0.1", "", {}, "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="],
+ "@substrate/connect": ["@substrate/connect@0.8.11", "", { "dependencies": { "@substrate/connect-extension-protocol": "^2.0.0", "@substrate/connect-known-chains": "^1.1.5", "@substrate/light-client-extension-helpers": "^1.0.0", "smoldot": "2.0.26" } }, "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw=="],
+
+ "@substrate/connect-extension-protocol": ["@substrate/connect-extension-protocol@2.2.2", "", {}, "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA=="],
+
+ "@substrate/connect-known-chains": ["@substrate/connect-known-chains@1.10.3", "", {}, "sha512-OJEZO1Pagtb6bNE3wCikc2wrmvEU5x7GxFFLqqbz1AJYYxSlrPCGu4N2og5YTExo4IcloNMQYFRkBGue0BKZ4w=="],
+
+ "@substrate/light-client-extension-helpers": ["@substrate/light-client-extension-helpers@1.0.0", "", { "dependencies": { "@polkadot-api/json-rpc-provider": "^0.0.1", "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", "@polkadot-api/observable-client": "^0.3.0", "@polkadot-api/substrate-client": "^0.1.2", "@substrate/connect-extension-protocol": "^2.0.0", "@substrate/connect-known-chains": "^1.1.5", "rxjs": "^7.8.1" }, "peerDependencies": { "smoldot": "2.x" } }, "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg=="],
+
+ "@substrate/ss58-registry": ["@substrate/ss58-registry@1.51.0", "", {}, "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ=="],
+
"@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="],
"@tailwindcss/node": ["@tailwindcss/node@4.1.14", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.0", "lightningcss": "1.30.1", "magic-string": "^0.30.19", "source-map-js": "^1.2.1", "tailwindcss": "4.1.14" } }, "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw=="],
@@ -1227,6 +1378,8 @@
"@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="],
+ "@types/bn.js": ["@types/bn.js@5.2.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q=="],
+
"@types/bs58check": ["@types/bs58check@2.1.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA=="],
"@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
@@ -1515,6 +1668,8 @@
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
+ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
+
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
"deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="],
@@ -1651,6 +1806,8 @@
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
+ "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
+
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
"finalhandler": ["finalhandler@1.1.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="],
@@ -1669,6 +1826,8 @@
"form-data": ["form-data@4.0.4", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow=="],
+ "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
+
"freeport-async": ["freeport-async@2.0.0", "", {}, "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ=="],
"fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="],
@@ -1987,6 +2146,8 @@
"mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
+ "mock-socket": ["mock-socket@9.3.1", "", {}, "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw=="],
+
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"msrcrypto": ["msrcrypto@1.5.8", "", {}, "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q=="],
@@ -2005,8 +2166,12 @@
"nested-error-stacks": ["nested-error-stacks@2.0.1", "", {}, "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A=="],
+ "nock": ["nock@13.5.6", "", { "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", "propagate": "^2.0.0" } }, "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ=="],
+
"node-addon-api": ["node-addon-api@5.1.0", "", {}, "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="],
+ "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
+
"node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="],
"node-forge": ["node-forge@1.3.1", "", {}, "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="],
@@ -2121,6 +2286,8 @@
"prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
+ "propagate": ["propagate@2.0.1", "", {}, "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag=="],
+
"protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="],
"proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
@@ -2217,7 +2384,7 @@
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
- "rxjs": ["rxjs@6.6.7", "", { "dependencies": { "tslib": "^1.9.0" } }, "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="],
+ "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="],
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
@@ -2225,6 +2392,8 @@
"sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="],
+ "scale-ts": ["scale-ts@1.6.1", "", {}, "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g=="],
+
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
"secp256k1": ["secp256k1@5.0.1", "", { "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" } }, "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA=="],
@@ -2269,6 +2438,8 @@
"slugify": ["slugify@1.6.6", "", {}, "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw=="],
+ "smoldot": ["smoldot@2.0.26", "", { "dependencies": { "ws": "^8.8.1" } }, "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig=="],
+
"source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
@@ -2369,7 +2540,7 @@
"ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
- "tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="],
+ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"tty-browserify": ["tty-browserify@0.0.1", "", {}, "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="],
@@ -2447,6 +2618,8 @@
"wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="],
+ "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
+
"webcrypto-core": ["webcrypto-core@1.8.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.3.13", "@peculiar/json-schema": "^1.1.12", "asn1js": "^3.0.5", "pvtsutils": "^1.3.5", "tslib": "^2.7.0" } }, "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A=="],
"webcrypto-shim": ["webcrypto-shim@0.1.7", "", {}, "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg=="],
@@ -2583,6 +2756,10 @@
"@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
+ "@ledgerhq/devices/rxjs": ["rxjs@6.6.7", "", { "dependencies": { "tslib": "^1.9.0" } }, "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="],
+
+ "@ledgerhq/hw-transport-web-ble/rxjs": ["rxjs@6.6.7", "", { "dependencies": { "tslib": "^1.9.0" } }, "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="],
+
"@mysten/sui/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
"@mysten/sui/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
@@ -2625,11 +2802,13 @@
"@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
- "@peculiar/asn1-schema/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "@polkadot-api/substrate-bindings/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
+
+ "@polkadot/util-crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
- "@peculiar/json-schema/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "@polkadot/util-crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
- "@peculiar/webcrypto/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "@polkadot/x-fetch/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
"@react-native/babel-preset/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="],
@@ -2655,8 +2834,6 @@
"@solana/web3.js/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
- "@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="],
"@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="],
@@ -2671,6 +2848,8 @@
"@taquito/utils/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
+ "@types/bn.js/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="],
+
"@types/bs58check/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="],
"@types/connect/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="],
@@ -2683,14 +2862,10 @@
"anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
- "aria-hidden/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"asn1.js/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="],
"asn1.js/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
- "asn1js/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"babel-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
"babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
@@ -2757,6 +2932,8 @@
"ethers/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="],
+ "ethers/tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="],
+
"ethers/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="],
"ethjs-unit/bn.js": ["bn.js@4.11.6", "", {}, "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA=="],
@@ -2873,8 +3050,6 @@
"public-encrypt/bn.js": ["bn.js@4.11.6", "", {}, "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA=="],
- "pvtsutils/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"queue/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
"react-devtools-core/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="],
@@ -2889,12 +3064,6 @@
"react-native/ws": ["ws@6.2.3", "", { "dependencies": { "async-limiter": "~1.0.0" } }, "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA=="],
- "react-remove-scroll/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
- "react-remove-scroll-bar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
- "react-style-singleton/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"readable-stream/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
"requireg/resolve": ["resolve@1.7.1", "", { "dependencies": { "path-parse": "^1.0.5" } }, "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw=="],
@@ -2907,8 +3076,6 @@
"rpc-websockets/@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
- "rxjs/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="],
-
"send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="],
"send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="],
@@ -2943,16 +3110,10 @@
"tonweb/bn.js": ["bn.js@5.1.1", "", {}, "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA=="],
- "use-callback-ref/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
- "use-sidecar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"util/inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
"viem/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
- "webcrypto-core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
-
"whatwg-url-without-unicode/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="],
"whatwg-url-without-unicode/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
@@ -2997,6 +3158,10 @@
"@jest/types/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="],
+ "@ledgerhq/devices/rxjs/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="],
+
+ "@ledgerhq/hw-transport-web-ble/rxjs/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="],
+
"@near-js/accounts/@near-js/crypto/@noble/curves": ["@noble/curves@1.8.1", "", { "dependencies": { "@noble/hashes": "1.7.1" } }, "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ=="],
"@near-js/crypto/@noble/curves/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="],
@@ -3063,6 +3228,8 @@
"@taquito/utils/@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
+ "@types/bn.js/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="],
+
"@types/bs58check/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="],
"@types/connect/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="],
diff --git a/packages/shared/src/config/protocols.tsx b/packages/shared/src/config/protocols.tsx
index 386a018a..7917445f 100644
--- a/packages/shared/src/config/protocols.tsx
+++ b/packages/shared/src/config/protocols.tsx
@@ -2,11 +2,13 @@ import {
AdaIcon,
CosmosIcon,
CronosIcon,
+ DotIcon,
DydxIcon,
EthereumIcon,
FetchIcon,
InjectiveIcon,
KavaIcon,
+ KsmIcon,
NearIcon,
OmIcon,
OsmosisIcon,
@@ -22,7 +24,7 @@ import {
type CosmosToken = 'ATOM' | 'TIA' | 'ZETA' | 'OSMO' | 'DYDX' | 'FET' | 'INJ' | 'KAVA' | 'OM' | 'CRO' | 'SEI';
-export type Token = CosmosToken | 'ETH' | 'NEAR' | 'SOL' | 'ADA' | 'SUI' | 'XTZ' | 'TON' | 'TRX';
+export type Token = CosmosToken | 'ETH' | 'NEAR' | 'SOL' | 'ADA' | 'SUI' | 'XTZ' | 'TON' | 'TRX' | 'DOT' | 'KSM';
export type Protocol = {
token: Token;
@@ -184,6 +186,22 @@ export const XTZ = {
localUrl: 'http://localhost:3016',
} satisfies Protocol;
+export const DOT = {
+ token: 'DOT',
+ name: 'Dot',
+ icon: ,
+ url: 'https://dot.minitel.app',
+ localUrl: 'http://localhost:3019',
+} satisfies Protocol;
+
+export const KSM = {
+ token: 'KSM',
+ name: 'Kusama',
+ icon: ,
+ url: 'https://ksm.minitel.app',
+ localUrl: 'http://localhost:3020',
+} satisfies Protocol;
+
export const PROTOCOLS: Protocol[] = [
ETH,
SOL,
@@ -204,6 +222,8 @@ export const PROTOCOLS: Protocol[] = [
XTZ,
TON,
TRX,
+ DOT,
+ KSM,
];
export const getCurrentProtocol = () => {
diff --git a/packages/substrate-shared/package.json b/packages/substrate-shared/package.json
new file mode 100644
index 00000000..ad453669
--- /dev/null
+++ b/packages/substrate-shared/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@protocols/substrate-shared",
+ "version": "1.0.0",
+ "type": "module",
+ "exports": {
+ ".": {
+ "import": "./src/index.ts",
+ "types": "./src/index.ts"
+ }
+ },
+ "scripts": {
+ "dev": "tsc --watch",
+ "build": "tsc",
+ "lint": "biome check .",
+ "format": "biome format --write ."
+ },
+ "dependencies": {
+ "@polkadot/api": "^14.3.1",
+ "@polkadot/types": "^14.3.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "blakejs": "^1.2.1",
+ "@protocols/shared": "workspace:*"
+ },
+ "devDependencies": {
+ "typescript": "^5.0.0",
+ "@types/react": "^19.0.0"
+ },
+ "peerDependencies": {
+ "react": "^19.1.1"
+ }
+}
diff --git a/packages/substrate-shared/src/index.ts b/packages/substrate-shared/src/index.ts
new file mode 100644
index 00000000..391d305e
--- /dev/null
+++ b/packages/substrate-shared/src/index.ts
@@ -0,0 +1,3 @@
+export * from './parser';
+export * from './substrate/substrateWsClient';
+export * from './substrate-adapter';
diff --git a/packages/substrate-shared/src/parser.ts b/packages/substrate-shared/src/parser.ts
new file mode 100644
index 00000000..b1d3d785
--- /dev/null
+++ b/packages/substrate-shared/src/parser.ts
@@ -0,0 +1,105 @@
+import type { AnyJson } from '@polkadot/types/types';
+import { compactToU8a, u8aConcat } from '@polkadot/util';
+import { SubstrateWsClient } from './substrate/substrateWsClient';
+
+const chains = {
+ DOT: {
+ chainName: 'Polkadot',
+ specName: 'polkadot',
+ rpcUrl: 'wss://rpc.polkadot.io',
+ },
+ KSM: {
+ chainName: 'Kusama',
+ specName: 'kusama',
+ rpcUrl: 'wss://kusama-rpc.polkadot.io',
+ },
+};
+
+export type SupportedSubstrateChains = keyof typeof chains;
+
+const wsClients: {
+ [key in SupportedSubstrateChains]?: SubstrateWsClient;
+} = {};
+
+export const getWsClient = async (chain: SupportedSubstrateChains) => {
+ if (wsClients[chain]?.isConnected) {
+ return wsClients[chain];
+ }
+
+ const wsClient = new SubstrateWsClient(chains[chain].rpcUrl);
+ await wsClient.connect();
+ wsClients[chain] = wsClient;
+ return wsClient;
+};
+
+export const parseSubstrateTx = async (token: SupportedSubstrateChains, txRaw: string): Promise => {
+ const wsClient = await getWsClient(token);
+
+ if (!wsClient || !wsClient.client) {
+ throw new Error('Failed to connect to Substrate RPC');
+ }
+
+ try {
+ // Remove 0x prefix if present
+ const cleanedInput = txRaw.trim().startsWith('0x') ? txRaw.trim().substring(2) : txRaw.trim();
+
+ // Check if the input is a JSON payload (SignerPayloadJSON)
+ let methodHex = cleanedInput;
+ let signerPayloadJson: Record | null = null;
+
+ try {
+ // Try to decode as hex to string to check if it's JSON
+ const possibleJson = Buffer.from(cleanedInput, 'hex').toString('utf8');
+ if (possibleJson.startsWith('{')) {
+ const parsed = JSON.parse(possibleJson);
+ if (parsed.method) {
+ // This is a SignerPayloadJSON format
+ signerPayloadJson = parsed;
+ methodHex = parsed.method.startsWith('0x') ? parsed.method.substring(2) : parsed.method;
+ }
+ }
+ } catch {
+ // Not JSON, continue with raw hex
+ }
+
+ // Convert hex string to Uint8Array
+ const txBytes = new Uint8Array(methodHex.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16)) || []);
+
+ const decodedExtrinsic = wsClient.client.createType('Call', txBytes);
+ const prefixed = u8aConcat(compactToU8a(decodedExtrinsic.encodedLength), txBytes);
+ const extrinsicPayload = wsClient.client.createType('ExtrinsicPayload', prefixed).toHuman() as Record<
+ string,
+ unknown
+ >;
+
+ // Remove the method field as it will be included in the decoded extrinsic
+ delete extrinsicPayload.method;
+
+ // If we have a signer payload JSON, merge it with the decoded data
+ const result = {
+ ...decodedExtrinsic.toHuman(),
+ ...extrinsicPayload,
+ };
+
+ if (signerPayloadJson) {
+ // Add fields from the signer payload that aren't in the decoded extrinsic
+ Object.assign(result, {
+ address: signerPayloadJson.address,
+ blockHash: signerPayloadJson.blockHash,
+ blockNumber: signerPayloadJson.blockNumber,
+ era: signerPayloadJson.era,
+ genesisHash: signerPayloadJson.genesisHash,
+ nonce: signerPayloadJson.nonce,
+ specVersion: signerPayloadJson.specVersion,
+ tip: signerPayloadJson.tip,
+ transactionVersion: signerPayloadJson.transactionVersion,
+ version: signerPayloadJson.version,
+ });
+ }
+
+ return result as AnyJson;
+ } catch (error) {
+ console.error('Error parsing substrate tx', error);
+ throw new Error('Error parsing substrate tx');
+ }
+};
diff --git a/packages/substrate-shared/src/substrate-adapter.tsx b/packages/substrate-shared/src/substrate-adapter.tsx
new file mode 100644
index 00000000..742ced68
--- /dev/null
+++ b/packages/substrate-shared/src/substrate-adapter.tsx
@@ -0,0 +1,71 @@
+import type { AnyJson } from '@polkadot/types/types';
+import { u8aToHex } from '@polkadot/util';
+import type { Protocol, ProtocolAdapter } from '@protocols/shared';
+import { getWsClient, parseSubstrateTx, type SupportedSubstrateChains } from './parser';
+
+const computeSubstrateHash = async (token: SupportedSubstrateChains, rawTx: string): Promise => {
+ try {
+ const input = rawTx.trim();
+ const cleanedInput = input.startsWith('0x') ? input.substring(2) : input;
+
+ // Decode hex to get the SignerPayloadJSON
+ const jsonString = Buffer.from(cleanedInput, 'hex').toString('utf8');
+ const payload = JSON.parse(jsonString);
+
+ // Get the WebSocket client to access the Polkadot API registry
+ const wsClient = await getWsClient(token);
+ if (!wsClient || !wsClient.client) {
+ throw new Error('Failed to connect to Substrate RPC');
+ }
+
+ const { registry } = wsClient.client;
+
+ // Encode SignerPayload fields in order (matches API's signer_payload.toRaw().data)
+ // Format v5: method + era + nonce + tip + assetId + specVersion + transactionVersion + genesisHash + blockHash + mode
+ const encodedFields = [
+ registry.createType('Call', payload.method).toU8a(),
+ registry.createType('ExtrinsicEra', payload.era).toU8a(),
+ registry.createType('Compact', payload.nonce).toU8a(),
+ registry.createType('Compact', payload.tip).toU8a(),
+ payload.assetId ? registry.createType('Option', payload.assetId).toU8a() : new Uint8Array([0x00]),
+ registry.createType('u32', payload.specVersion).toU8a(),
+ registry.createType('u32', payload.transactionVersion).toU8a(),
+ registry.createType('Hash', payload.genesisHash).toU8a(),
+ registry.createType('Hash', payload.blockHash).toU8a(),
+ payload.mode !== undefined ? registry.createType('u8', payload.mode).toU8a() : new Uint8Array([0x00]),
+ ];
+
+ const signingPayload = new Uint8Array(encodedFields.reduce((acc, field) => acc + field.length, 0));
+ let offset = 0;
+ for (const field of encodedFields) {
+ signingPayload.set(field, offset);
+ offset += field.length;
+ }
+
+ return u8aToHex(signingPayload).substring(2);
+ } catch (error) {
+ console.error('Failed to compute Substrate hash:', error);
+ throw new Error('Failed to compute Substrate hash');
+ }
+};
+
+export const createSubstrateAdapter = ({
+ name,
+ displayName,
+ protocol,
+ token,
+}: {
+ name: string;
+ displayName: string;
+ protocol: Protocol;
+ token: SupportedSubstrateChains;
+}): ProtocolAdapter => {
+ return {
+ protocol,
+ name,
+ displayName,
+ placeholder: 'Paste your transaction as hex',
+ parseTransaction: async (rawTx) => parseSubstrateTx(token, rawTx),
+ computeHash: async (rawTx) => computeSubstrateHash(token, rawTx),
+ };
+};
diff --git a/packages/substrate-shared/src/substrate/substrateWsClient.ts b/packages/substrate-shared/src/substrate/substrateWsClient.ts
new file mode 100644
index 00000000..a277d506
--- /dev/null
+++ b/packages/substrate-shared/src/substrate/substrateWsClient.ts
@@ -0,0 +1,31 @@
+import { ApiPromise, WsProvider } from '@polkadot/api';
+
+export class SubstrateWsClient {
+ public client: ApiPromise | null = null;
+ public isConnected = false;
+ private rpcUrl: string;
+
+ constructor(rpcUrl: string) {
+ this.rpcUrl = rpcUrl;
+ }
+
+ async connect(): Promise {
+ try {
+ const wsProvider = new WsProvider(this.rpcUrl);
+ this.client = await ApiPromise.create({ provider: wsProvider });
+ this.isConnected = true;
+ } catch (error) {
+ console.error('Failed to connect to Substrate RPC:', error);
+ this.isConnected = false;
+ throw new Error('Failed to connect to Substrate RPC');
+ }
+ }
+
+ async disconnect(): Promise {
+ if (this.client) {
+ await this.client.disconnect();
+ this.isConnected = false;
+ this.client = null;
+ }
+ }
+}
diff --git a/packages/substrate-shared/tsconfig.json b/packages/substrate-shared/tsconfig.json
new file mode 100644
index 00000000..8d55dc98
--- /dev/null
+++ b/packages/substrate-shared/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "src"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/ui/src/components/icons.tsx b/packages/ui/src/components/icons.tsx
index e7da6b06..07f6f3c4 100644
--- a/packages/ui/src/components/icons.tsx
+++ b/packages/ui/src/components/icons.tsx
@@ -594,3 +594,47 @@ export const TrxIcon = (props: React.SVGProps & { ref?: React.Ref
);
};
+
+export const DotIcon = (props: React.SVGProps & { ref?: React.Ref }) => {
+ return (
+
+ );
+};
+
+export const KsmIcon = (props: React.SVGProps & { ref?: React.Ref }) => {
+ return (
+
+ );
+};