Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb7b24f9aa | ||
|
|
f4e93cf2c2 | ||
|
|
85b2da734c | ||
|
|
5d03be1084 | ||
|
|
2261862097 | ||
|
|
20d3af56ec | ||
|
|
367633a612 | ||
|
|
b127f678e9 | ||
|
|
3404ad2945 | ||
|
|
4059615d66 | ||
|
|
be9739ee9f | ||
|
|
6ec09907a2 | ||
|
|
677a778833 | ||
|
|
fa90f0a747 | ||
|
|
e721c4f508 | ||
|
|
7f5bd09322 | ||
|
|
5d6244fc0b | ||
|
|
58f12c4257 | ||
|
|
038d20b5e7 | ||
|
|
c9d8c52567 | ||
|
|
3b85773636 | ||
|
|
269740b775 | ||
|
|
fc732b8c44 | ||
|
|
2c4deb3f9d | ||
|
|
ebcb6857ad | ||
|
|
0ff31d7980 | ||
|
|
d897f25546 | ||
|
|
3c431d5a01 | ||
|
|
55ae71125d | ||
|
|
fcd8cee7f6 | ||
|
|
8aa4e60c4c | ||
|
|
85665dfa20 | ||
|
|
5f8f3e6309 | ||
|
|
166845e367 | ||
|
|
7c7233efd1 | ||
|
|
cb7f0da916 | ||
|
|
7d654c236f | ||
|
|
6b4d9aac29 | ||
|
|
4f863ddc29 | ||
|
|
a4a85a3a5d | ||
|
|
2a6669c25d | ||
|
|
cb4c9fd90a | ||
|
|
28beb44374 | ||
|
|
4a4847b032 | ||
|
|
506c20a900 | ||
|
|
736656f34f | ||
|
|
31274916f9 | ||
|
|
6e1afdc2f8 | ||
|
|
fd26d223be | ||
|
|
86d8c81c27 | ||
|
|
2de22cbb31 | ||
|
|
c1b8098b9e | ||
|
|
ee0ed25a83 | ||
|
|
7ef452bdf0 | ||
|
|
eb41ab5bed | ||
|
|
6947b1e4d9 | ||
|
|
527b4f0eeb | ||
|
|
44f7443d13 | ||
|
|
2b800577a5 | ||
|
|
c9ca01e96b | ||
|
|
ca93f3337f | ||
|
|
557a681fe9 | ||
|
|
97b1fdf089 | ||
|
|
9971684972 | ||
|
|
04ab9dd77d | ||
|
|
b2bf9f4d53 | ||
|
|
4d629fd8ce | ||
|
|
37fa211fdb | ||
|
|
a4a9a3dead | ||
|
|
e025195a9b | ||
|
|
744e4c72d5 | ||
|
|
f23f0944a8 | ||
|
|
6e28612f34 | ||
|
|
57b0601f9b | ||
|
|
ee9d76639c | ||
|
|
db25938ad7 | ||
|
|
175b0ef307 | ||
|
|
944c50d015 | ||
|
|
191db8ea10 | ||
|
|
095db555ba | ||
|
|
a23989ca9d | ||
|
|
a82ebdf6f9 | ||
|
|
e6fbf01aa1 | ||
|
|
00876f0b64 | ||
|
|
22aab4a4e6 | ||
|
|
6971012f4a | ||
|
|
fc217b66ce | ||
|
|
fb42e8f7ee | ||
|
|
b4e3ed0a42 | ||
|
|
e1218157a3 | ||
|
|
2dc171639d | ||
|
|
4da1e8ba62 | ||
|
|
d498ad4424 | ||
|
|
9a9650261b | ||
|
|
6dfff0d40c | ||
|
|
0770bed5fd | ||
|
|
6fde7bc5a0 | ||
|
|
f55e88c116 | ||
|
|
abd4cfdd1f | ||
|
|
f261ea2924 | ||
|
|
f14d2681b1 | ||
|
|
b9be030f12 | ||
|
|
bc103d9479 | ||
|
|
c76c754741 | ||
|
|
bd21e730b3 | ||
|
|
a2cfdb8ca7 | ||
|
|
4857de9f38 | ||
|
|
d525b8c92d | ||
|
|
2afbce2652 | ||
|
|
3c7525649e | ||
|
|
6ebcc2dd6d | ||
|
|
120438d7e6 | ||
|
|
f5f1bc6f4f | ||
|
|
28d5302fd6 | ||
|
|
773cc29b11 | ||
|
|
a20c7eb2e5 | ||
|
|
487d0d9a57 | ||
|
|
a910e9ce6f | ||
|
|
1062de7aa8 | ||
|
|
4cabc67b24 | ||
|
|
13bc84e30b | ||
|
|
67fe7738d8 | ||
|
|
13c6b4e553 | ||
|
|
9306f9db92 | ||
|
|
62a30f258e | ||
|
|
81609aba59 | ||
|
|
301d73d13f | ||
|
|
92abf4463d | ||
|
|
b018f78b77 | ||
|
|
608117f04a | ||
|
|
2ac00565b0 | ||
|
|
673a59af58 | ||
|
|
aa394fe7cd | ||
|
|
ee7f2cc7f5 | ||
|
|
da6efc821e | ||
|
|
a3b884d437 | ||
|
|
560c054750 | ||
|
|
09621d0010 | ||
|
|
37a81d9594 | ||
|
|
62182bae03 | ||
|
|
2ee03a5f81 | ||
|
|
7a5a88a135 | ||
|
|
f4e0e2111f | ||
|
|
aac902011e | ||
|
|
a030330808 | ||
|
|
d108beafd4 | ||
|
|
90e20ed4d2 | ||
|
|
723ec10fa1 | ||
|
|
cf9082e03a | ||
|
|
3dce4fe04a | ||
|
|
55ebc4f0d9 | ||
|
|
ce2122e9fa | ||
|
|
0fb55fe633 | ||
|
|
adca13bc8c | ||
|
|
b939c3593c | ||
|
|
aa70b81a89 | ||
|
|
f3e1d6beda | ||
|
|
754bc4dc21 | ||
|
|
a8df82dfe0 | ||
|
|
4ff56f5cfe | ||
|
|
1fd9f04458 | ||
|
|
a28306f487 | ||
|
|
19941bcb61 | ||
|
|
2cb85866ab | ||
|
|
8556de1fa2 | ||
|
|
143d070d21 | ||
|
|
2a53b1121e | ||
|
|
0733137f79 | ||
|
|
cc918660cb | ||
|
|
3527f8c7d9 | ||
|
|
41caf2fd6d | ||
|
|
d407513dd1 | ||
|
|
bd76349552 | ||
|
|
0ec894b732 | ||
|
|
be4cb52dd3 | ||
|
|
456eaeeb94 | ||
|
|
0ec50b6159 | ||
|
|
98336fd2e5 | ||
|
|
7b3bbd3ef2 | ||
|
|
49afd1fe09 | ||
|
|
0df17104d5 | ||
|
|
db8434559e | ||
|
|
eaf9d97ae3 | ||
|
|
3e6d86b768 | ||
|
|
8aab41648e | ||
|
|
4a535c08c7 | ||
|
|
715486d54e | ||
|
|
1073dc14aa | ||
|
|
5cca95e855 | ||
|
|
942b623273 | ||
|
|
eea99656ad | ||
|
|
04b6df9ac5 | ||
|
|
d5132b56de |
@@ -11,6 +11,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: jacogr/action-approve@795afd1dd096a2071d7ec98740661af4e853b7da
|
- uses: jacogr/action-approve@795afd1dd096a2071d7ec98740661af4e853b7da
|
||||||
with:
|
with:
|
||||||
authors: jacogr
|
authors: jacogr, TarikGul
|
||||||
labels: -auto
|
labels: -auto
|
||||||
token: ${{ secrets.GH_PAT_BOT }}
|
token: ${{ secrets.GH_PAT_BOT }}
|
||||||
|
|||||||
@@ -12,13 +12,14 @@ jobs:
|
|||||||
YARN_ENABLE_SCRIPTS: false
|
YARN_ENABLE_SCRIPTS: false
|
||||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
- uses: denoland/setup-deno@v1
|
- uses: denoland/setup-deno@v1
|
||||||
with:
|
with:
|
||||||
deno-version: vx.x.x
|
# Deno v2 throws errors with specific types therefore we set it to the last version before v2
|
||||||
|
deno-version: v1.42.x
|
||||||
- name: ${{ matrix.step }}
|
- name: ${{ matrix.step }}
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ jobs:
|
|||||||
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT_BOT }}
|
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT_BOT }}
|
||||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.GH_PAT_BOT }}
|
token: ${{ secrets.GH_PAT_BOT }}
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
- name: ${{ matrix.step }}
|
- name: ${{ matrix.step }}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/dev authors & contributors
|
// Copyright 2017-2025 @polkadot/util authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
module.exports = require('@polkadot/dev/config/prettier.cjs');
|
module.exports = require('@polkadot/dev/config/prettier.cjs');
|
||||||
|
|||||||
Vendored
-363
File diff suppressed because one or more lines are too long
-550
File diff suppressed because one or more lines are too long
Vendored
-785
File diff suppressed because one or more lines are too long
+934
File diff suppressed because one or more lines are too long
+5
-8
@@ -1,18 +1,15 @@
|
|||||||
|
compressionLevel: mixed
|
||||||
|
|
||||||
|
enableGlobalCache: false
|
||||||
|
|
||||||
enableImmutableInstalls: false
|
enableImmutableInstalls: false
|
||||||
|
|
||||||
enableProgressBars: false
|
enableProgressBars: false
|
||||||
|
|
||||||
logFilters:
|
logFilters:
|
||||||
# Discard any "cannot be found in cache" messages
|
|
||||||
- code: YN0013
|
- code: YN0013
|
||||||
level: discard
|
level: discard
|
||||||
|
|
||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|
||||||
plugins:
|
yarnPath: .yarn/releases/yarn-4.5.1.cjs
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
|
||||||
spec: "@yarnpkg/plugin-interactive-tools"
|
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
|
|
||||||
spec: "@yarnpkg/plugin-version"
|
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-3.2.0.cjs
|
|
||||||
|
|||||||
+162
@@ -1,5 +1,167 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## 13.3.1 Jan 6, 2025
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Give compatibility for nodejs v22
|
||||||
|
- Fix `getSeparator` which fixes toLocaleString ([#1965](https://github.com/polkadot-js/common/pull/1965))
|
||||||
|
- 2025 Headers ([#1963](https://github.com/polkadot-js/common/pull/1963))
|
||||||
|
|
||||||
|
|
||||||
|
## 13.2.3 Nov 11, 2024
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Add Vara support to the Generic Ledger App ([#1958](https://github.com/polkadot-js/common/pull/1958)) (Thanks to https://github.com/breathx)
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Bump Dev to 0.82.1 ([#1959](https://github.com/polkadot-js/common/pull/1959))
|
||||||
|
|
||||||
|
|
||||||
|
## 13.2.2 Oct 28, 2024
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Add Polimec support to the Generic Ledger App ([#1945](https://github.com/polkadot-js/common/pull/1945)) (Thanks to https://github.com/lrazovic)
|
||||||
|
- Add Frequency to the Generic Ledger App ([#1955](https://github.com/polkadot-js/common/pull/1955)) (Thanks to https://github.com/wilwade)
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Bump yarn to 4.5.1 ([#1953](https://github.com/polkadot-js/common/pull/1953))
|
||||||
|
|
||||||
|
|
||||||
|
## 13.2.1 Oct 21, 2024
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Add bittensor to genericLedgerApps (Thanks to https://github.com/camfairchild) ([#1941](https://github.com/polkadot-js/common/pull/1941))
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Fix Deno CI Build ([#1947](https://github.com/polkadot-js/common/pull/1947))
|
||||||
|
- Bump yarn to 4.5.0 ([#1946](https://github.com/polkadot-js/common/pull/1946))
|
||||||
|
- Update Ledger Deps ([#1948](https://github.com/polkadot-js/common/pull/1948))
|
||||||
|
- Update WS and deps ([#1949](https://github.com/polkadot-js/common/pull/1949))
|
||||||
|
- Bump polkadot/wasm to 7.4.1 ([#1950](https://github.com/polkadot-js/common/pull/1950))
|
||||||
|
- Bump dev to 0.81.2 ([#1951](https://github.com/polkadot-js/common/pull/1951))
|
||||||
|
- Allows for CJS target in build
|
||||||
|
|
||||||
|
|
||||||
|
## 13.1.1 Sep 16, 2024
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
HydraDx - Hydration Rebrand Thanks to (https://github.com/jak-pan) ([#1923](https://github.com/polkadot-js/common/pull/1923))
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Update all deps that have patch releases ([#1934](https://github.com/polkadot-js/common/pull/1934))
|
||||||
|
- Bump yarn to 4.4.1 ([#1940](https://github.com/polkadot-js/common/pull/1940))
|
||||||
|
- Update ss58-registry to 1.50.0 ([#1937](https://github.com/polkadot-js/common/pull/1937))
|
||||||
|
- Update dev and typescript ([#1936](https://github.com/polkadot-js/common/pull/1936))
|
||||||
|
- Add Encointer and Integritee to Ledger, and adjust tests ([#1939](https://github.com/polkadot-js/common/pull/1939))
|
||||||
|
- This PR added the addition of `genericLedgerApps` and `prevLedgerRecord` objects. They both combine into `ledgerApps` in `hw-ledger/defaults`.
|
||||||
|
|
||||||
|
|
||||||
|
## 13.0.2 July 12, 2024
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Add peaq support for ledger (Thanks to https://github.com/lavish0000)
|
||||||
|
|
||||||
|
|
||||||
|
## 13.0.1 July 12, 2024
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- Add Support for latest Ledger App
|
||||||
|
- This deprecates `class Ledger` in favor of `class LedgerGeneric`
|
||||||
|
- More info in the following PR ([#1925](https://github.com/polkadot-js/common/pull/1925))
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Bump dev to 0.79.1
|
||||||
|
- Comments around pair encode/decode 1-3
|
||||||
|
- Bump ws, react-native, ss58Registry
|
||||||
|
- Bump yarn to 4.3.1
|
||||||
|
- Update CI to checkout and setup_node v4
|
||||||
|
|
||||||
|
|
||||||
|
## 12.6.2 Dec 18, 2023
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Update to latest `@polkadot/wasm-crypto`
|
||||||
|
- Upgrade dependencies to latest versions
|
||||||
|
|
||||||
|
|
||||||
|
## 12.6.1 Nov 18, 2023
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Ledger support for Quartz (Thanks to https://github.com/CertainLach)
|
||||||
|
- Add flag to disable same-version esm/cjs warnings (Thanks to https://github.com/forgetso)
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Adjust logger check for `process.env`
|
||||||
|
- Adjust `isRiscV` helper to check for `PVM\0` bytes
|
||||||
|
- Drop support for Node 16 (EOL 11 Sep 2023)
|
||||||
|
- Upgrade dependencies to latest stable versions
|
||||||
|
|
||||||
|
|
||||||
|
## 12.5.1 Sep 15, 2023
|
||||||
|
|
||||||
|
Contributed:
|
||||||
|
|
||||||
|
- Add `isRiskV` helper (Thanks to https://github.com/peetzweg)
|
||||||
|
- Ledger support for Enjin & Matrixchain (Thanks to https://github.com/leonardocustodio)
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Expand interface type comments (assists in-editor helpers)
|
||||||
|
- Upgrade dependencies to latest stable versions
|
||||||
|
|
||||||
|
|
||||||
|
## 12.4.2 Aug 23, 2023
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Fix `u8aTo{BigInt, Bn, Number}` for non-negative `i{8, 16, 32...}` inputs
|
||||||
|
- Extend `u8aToBuffer` with `hasBuffer` check
|
||||||
|
- Adjust util tests (extract input/output arrays)
|
||||||
|
|
||||||
|
|
||||||
|
## 12.4.1 Aug 17, 2023
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Add support for Ledger `signRaw`, as exposed by lower-level
|
||||||
|
- Update code to use `?.` shortcuts where appropriate
|
||||||
|
- Adjust `u8aToBuffer` & `isBuffer` typings to not require `Buffer`
|
||||||
|
- Use `stringify/import.meta.url` helpers in specs
|
||||||
|
- Upgrade dependencies to latest stable versions
|
||||||
|
|
||||||
|
|
||||||
|
## 12.3.2 Jun 12, 2023
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Adjust `SubstrateNetwork` typing with `HexString` genesisHash
|
||||||
|
- Re-export `Constructor<T>` type (deprecated, replaced with `Class<T>`)
|
||||||
|
|
||||||
|
|
||||||
|
## 12.3.1 Jun 11, 2023
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Only allow padding characters in base64 strings
|
||||||
|
- Expand typings for keyring meta with known keys
|
||||||
|
- Adjust object index access for stricter tsconfig settings
|
||||||
|
|
||||||
|
|
||||||
## 12.2.2 Jun 4, 2023
|
## 12.2.2 Jun 4, 2023
|
||||||
|
|
||||||
Changes:
|
Changes:
|
||||||
|
|||||||
+13
-4
@@ -1,13 +1,15 @@
|
|||||||
1622 Jaco 12.2.2 (#1839)
|
1674 Jaco Bump deps (#1912)
|
||||||
12 Carlo Sala feat(networks): support ledger for pendulum (#1739)
|
34 Tarik Gul 13.3.1 (#1966)
|
||||||
|
13 Carlo Sala feat(networks): add zeitgeist Ledger support (#1840)
|
||||||
9 Antoine Estienne Add eth uri keyring test (#1291)
|
9 Antoine Estienne Add eth uri keyring test (#1291)
|
||||||
6 Amaury Martiny Add tests from Rust (#283)
|
6 Amaury Martiny Add tests from Rust (#283)
|
||||||
5 Jakub Pánik Add HydraDX parachain to genesis (#1583)
|
6 Jakub Pánik HydraDX -> Hydration rebrand (#1923)
|
||||||
5 kwingram25 Add BN consts and timeToString (#610)
|
5 kwingram25 Add BN consts and timeToString (#610)
|
||||||
4 Adam Dossa Update Polymesh Genesis Hash (#1193)
|
4 Adam Dossa Update Polymesh Genesis Hash (#1193)
|
||||||
4 pan add bifrost kusama (#1626)
|
4 pan add bifrost kusama (#1626)
|
||||||
3 Luke Schoen docs: Fix example in readme since we use default imports (#243)
|
3 Luke Schoen docs: Fix example in readme since we use default imports (#243)
|
||||||
2 AndreasGassmann feat(dependencies): remove moment.js (#530)
|
2 AndreasGassmann feat(dependencies): remove moment.js (#530)
|
||||||
|
2 Cameron Fairchild Add bittensor details (#1783)
|
||||||
2 Gav Wood Fix stake:unstake (#182)
|
2 Gav Wood Fix stake:unstake (#182)
|
||||||
2 Hyungsuk Kang Add cross client Encryption/Decryption (#496)
|
2 Hyungsuk Kang Add cross client Encryption/Decryption (#496)
|
||||||
2 Jared Norris Add Sora network (#1306)
|
2 Jared Norris Add Sora network (#1306)
|
||||||
@@ -23,8 +25,9 @@
|
|||||||
1 amphineko chore: fix typo in versionDetect messages (#941)
|
1 amphineko chore: fix typo in versionDetect messages (#941)
|
||||||
1 Axel Chalon Simplify @polkadot/keyring KeyringPair (#419)
|
1 Axel Chalon Simplify @polkadot/keyring KeyringPair (#419)
|
||||||
1 Brad Larson [FIX] Adjust error message (#646)
|
1 Brad Larson [FIX] Adjust error message (#646)
|
||||||
1 Cameron Fairchild Add bittensor details (#1783)
|
|
||||||
1 Carlos Medeiros add hydradx to knownLedger (#1647)
|
1 Carlos Medeiros add hydradx to knownLedger (#1647)
|
||||||
|
1 Chris Get rid of warnings for dual esm and cjs packages of the same version (#1890)
|
||||||
|
1 Dmitrii Novikov Add `Vara` support to Generic Ledger App (#1958)
|
||||||
1 Eliott Teissonniere add nodle ledger specs (#1089)
|
1 Eliott Teissonniere add nodle ledger specs (#1089)
|
||||||
1 Guilane DENGUIR feat(VTB): Added support for VTB blockchain (#1651)
|
1 Guilane DENGUIR feat(VTB): Added support for VTB blockchain (#1651)
|
||||||
1 h4x3rotab Throws an error when signing with a locked keypair (#578)
|
1 h4x3rotab Throws an error when signing with a locked keypair (#578)
|
||||||
@@ -36,13 +39,17 @@
|
|||||||
1 JesseAbram added check if valid address to docs (#440)
|
1 JesseAbram added check if valid address to docs (#440)
|
||||||
1 joe petrowski Add example for multisig address creation (#590)
|
1 joe petrowski Add example for multisig address creation (#590)
|
||||||
1 kaelnew add ledger support for stafi (#1569)
|
1 kaelnew add ledger support for stafi (#1569)
|
||||||
|
1 Leonardo Custodio Ledger support (#1879)
|
||||||
|
1 Leonardo Razovic feat: add Polimec (#1945)
|
||||||
1 Lezek123 logger - wildcard include/exclude with DEBUG env (#932)
|
1 Lezek123 logger - wildcard include/exclude with DEBUG env (#932)
|
||||||
|
1 Lovish Arora Add peaq support for ledger (#1928)
|
||||||
1 Mario Neises remove redudant export (#257)
|
1 Mario Neises remove redudant export (#257)
|
||||||
1 Miguel Hervas Add CFG Ledger Support (#1057)
|
1 Miguel Hervas Add CFG Ledger Support (#1057)
|
||||||
1 Mikhail Fedosov feat: add 3dpass network (#1769)
|
1 Mikhail Fedosov feat: add 3dpass network (#1769)
|
||||||
1 Mohsan Riaz Add Ternoa for ledger hardware support (#1711)
|
1 Mohsan Riaz Add Ternoa for ledger hardware support (#1711)
|
||||||
1 nahuseyoum Reserving 65 for Aventus based on the new extended range (#871)
|
1 nahuseyoum Reserving 65 for Aventus based on the new extended range (#871)
|
||||||
1 Nantian add acala ledger config (#1485)
|
1 Nantian add acala ledger config (#1485)
|
||||||
|
1 peetzweg/ adds `isRiscV` guard function similar to isWasm (#1878)
|
||||||
1 qwer951123 Add acala genesis (#1161)
|
1 qwer951123 Add acala genesis (#1161)
|
||||||
1 Raoul Millais Fix yarn add instructions in x-global README (#873)
|
1 Raoul Millais Fix yarn add instructions in x-global README (#873)
|
||||||
1 Raymond Zhong Add Edgeware ledger app (#1006)
|
1 Raymond Zhong Add Edgeware ledger app (#1006)
|
||||||
@@ -54,6 +61,8 @@
|
|||||||
1 Tomokazu Kozuma fix comment (#1119)
|
1 Tomokazu Kozuma fix comment (#1119)
|
||||||
1 Tore19 Add stafi genesis hash (#1096)
|
1 Tore19 Add stafi genesis hash (#1096)
|
||||||
1 Wei Tang ss58: add Kulupu prefix to the list (#595)
|
1 Wei Tang ss58: add Kulupu prefix to the list (#595)
|
||||||
|
1 Wil Wade Add Frequency to the Generic Ledger App (#1955)
|
||||||
1 WoeOm Handing high precision scenes (#450)
|
1 WoeOm Handing high precision scenes (#450)
|
||||||
1 xx network Add xxnetwork genesis hash and ledger app (#1463)
|
1 xx network Add xxnetwork genesis hash and ledger app (#1463)
|
||||||
|
1 Yaroslav Bolyukin Add quartz support for ledger, update unique slip-0044 identifier (#1882)
|
||||||
1 Yuri Extra check for process for browser bundles (#923)
|
1 Yuri Extra check for process for browser bundles (#923)
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/dev authors & contributors
|
// Copyright 2017-2025 @polkadot/util authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import baseConfig from '@polkadot/dev/config/eslint';
|
import baseConfig from '@polkadot/dev/config/eslint';
|
||||||
|
|||||||
+7
-7
@@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common#readme",
|
"homepage": "https://github.com/polkadot-js/common#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"packageManager": "yarn@3.2.0",
|
"packageManager": "yarn@4.5.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
},
|
},
|
||||||
"sideEffects": false,
|
"sideEffects": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"versions": {
|
"versions": {
|
||||||
"git": "12.2.2",
|
"git": "13.3.1",
|
||||||
"npm": "12.2.2"
|
"npm": "13.3.1"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
@@ -37,10 +37,10 @@
|
|||||||
"test:one": "polkadot-dev-run-test --env browser"
|
"test:one": "polkadot-dev-run-test --env browser"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@polkadot/dev": "^0.75.16",
|
"@polkadot/dev": "^0.82.1",
|
||||||
"@types/node": "^20.2.5"
|
"@types/node": "^22.7.5"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"typescript": "^5.1.3"
|
"typescript": "^5.5.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger-transports#readme",
|
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger-transports#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -14,18 +14,18 @@
|
|||||||
},
|
},
|
||||||
"sideEffects": false,
|
"sideEffects": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"browser": "browser.js",
|
"browser": "browser.js",
|
||||||
"main": "node.js",
|
"main": "node.js",
|
||||||
"react-native": "react-native.js",
|
"react-native": "react-native.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ledgerhq/hw-transport": "^6.28.4",
|
"@ledgerhq/hw-transport": "^6.31.4",
|
||||||
"@ledgerhq/hw-transport-webhid": "^6.27.15",
|
"@ledgerhq/hw-transport-webhid": "^6.29.4",
|
||||||
"@ledgerhq/hw-transport-webusb": "^6.27.15",
|
"@ledgerhq/hw-transport-webusb": "^6.29.4",
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"tslib": "^2.5.3"
|
"tslib": "^2.8.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@ledgerhq/hw-transport-node-hid-singleton": "^6.28.12"
|
"@ledgerhq/hw-transport-node-hid-singleton": "^6.31.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import LedgerHid from '@ledgerhq/hw-transport-webhid';
|
import LedgerHid from '@ledgerhq/hw-transport-webhid';
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
export default [];
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { createDefs } from './util.js';
|
import { createDefs } from './util.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './empty.js';
|
export * from './empty.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import LedgerHid from '@ledgerhq/hw-transport-node-hid-singleton';
|
import LedgerHid from '@ledgerhq/hw-transport-node-hid-singleton';
|
||||||
|
|||||||
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger-transports authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger-transports authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
// (packageInfo imports will be kept as-is, user-editable)
|
||||||
|
|
||||||
import { detectPackage } from '@polkadot/util';
|
import { detectPackage } from '@polkadot/util';
|
||||||
|
|
||||||
import others from './detectOther.js';
|
|
||||||
import { packageInfo } from './packageInfo.js';
|
import { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
detectPackage(packageInfo, null, others);
|
detectPackage(packageInfo, null, []);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger-transports authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger-transports authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '12.2.2' };
|
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '13.3.1' };
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './empty.js';
|
export * from './empty.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// CJS, so we use import * syntax
|
// CJS, so we use import * syntax
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { Transport, TransportDef, TransportType } from './types.js';
|
import type { Transport, TransportDef, TransportType } from './types.js';
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger#readme",
|
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -13,16 +13,16 @@
|
|||||||
"url": "https://github.com/polkadot-js/common.git"
|
"url": "https://github.com/polkadot-js/common.git"
|
||||||
},
|
},
|
||||||
"sideEffects": [
|
"sideEffects": [
|
||||||
"./detectPackage.js",
|
"./packageDetect.js",
|
||||||
"./detectPackage.cjs"
|
"./packageDetect.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/hw-ledger-transports": "12.2.2",
|
"@polkadot/hw-ledger-transports": "13.3.1",
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"@zondax/ledger-substrate": "^0.40.7",
|
"@zondax/ledger-substrate": "1.0.0",
|
||||||
"tslib": "^2.5.3"
|
"tslib": "^2.8.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { SubstrateApp } from '@zondax/ledger-substrate';
|
||||||
|
import type { TransportDef, TransportType } from '@polkadot/hw-ledger-transports/types';
|
||||||
|
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerVersion } from './types.js';
|
||||||
|
|
||||||
|
import { newSubstrateApp } from '@zondax/ledger-substrate';
|
||||||
|
|
||||||
|
import { transports } from '@polkadot/hw-ledger-transports';
|
||||||
|
import { hexAddPrefix, u8aToBuffer, u8aWrapBytes } from '@polkadot/util';
|
||||||
|
|
||||||
|
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants.js';
|
||||||
|
import { ledgerApps } from './defaults.js';
|
||||||
|
|
||||||
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
|
type Chain = keyof typeof ledgerApps;
|
||||||
|
|
||||||
|
type WrappedResult = Awaited<ReturnType<SubstrateApp['getAddress' | 'getVersion' | 'sign']>>;
|
||||||
|
|
||||||
|
/** @internal Wraps a SubstrateApp call, checking the result for any errors which result in a rejection */
|
||||||
|
async function wrapError <T extends WrappedResult> (promise: Promise<T>): Promise<T> {
|
||||||
|
const result = await promise;
|
||||||
|
|
||||||
|
if (result.return_code !== LEDGER_SUCCESS_CODE) {
|
||||||
|
throw new Error(result.error_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal Wraps a sign/signRaw call and returns the associated signature */
|
||||||
|
function sign (method: 'sign' | 'signRaw', message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): (app: SubstrateApp) => Promise<LedgerSignature> {
|
||||||
|
return async (app: SubstrateApp): Promise<LedgerSignature> => {
|
||||||
|
const { signature } = await wrapError(app[method](account + accountOffset, change, addressIndex + addressOffset, u8aToBuffer(message)));
|
||||||
|
|
||||||
|
return {
|
||||||
|
signature: hexAddPrefix(signature.toString('hex'))
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name Ledger
|
||||||
|
*
|
||||||
|
* @description
|
||||||
|
* Legacy wrapper for a ledger app -
|
||||||
|
* - it connects automatically on use, creating an underlying interface as required
|
||||||
|
* - Promises reject with errors (unwrapped errors from @zondax/ledger-substrate)
|
||||||
|
* @deprecated Use LedgerGeneric for up to date integration with ledger
|
||||||
|
*/
|
||||||
|
export class Ledger {
|
||||||
|
readonly #ledgerName: string;
|
||||||
|
readonly #transportDef: TransportDef;
|
||||||
|
|
||||||
|
#app: SubstrateApp | null = null;
|
||||||
|
|
||||||
|
constructor (transport: TransportType, chain: Chain) {
|
||||||
|
const ledgerName = ledgerApps[chain];
|
||||||
|
const transportDef = transports.find(({ type }) => type === transport);
|
||||||
|
|
||||||
|
if (!ledgerName) {
|
||||||
|
throw new Error(`Unsupported Ledger chain ${chain}`);
|
||||||
|
} else if (!transportDef) {
|
||||||
|
throw new Error(`Unsupported Ledger transport ${transport}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#ledgerName = ledgerName;
|
||||||
|
this.#transportDef = transportDef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the address associated with a specific account & address offset. Optionally
|
||||||
|
* asks for on-device confirmation
|
||||||
|
*/
|
||||||
|
public async getAddress (confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerAddress> {
|
||||||
|
return this.withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
|
||||||
|
const { address, pubKey } = await wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
|
||||||
|
|
||||||
|
return {
|
||||||
|
address,
|
||||||
|
publicKey: hexAddPrefix(pubKey)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the version of the Ledger application on the device
|
||||||
|
*/
|
||||||
|
public async getVersion (): Promise<LedgerVersion> {
|
||||||
|
return this.withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
|
||||||
|
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await wrapError(app.getVersion());
|
||||||
|
|
||||||
|
return {
|
||||||
|
isLocked,
|
||||||
|
isTestMode,
|
||||||
|
version: [major, minor, patch]
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signs a transaction on the Ledger device
|
||||||
|
*/
|
||||||
|
public async sign (message: Uint8Array, accountOffset?: number, addressOffset?: number, options?: Partial<AccountOptions>): Promise<LedgerSignature> {
|
||||||
|
return this.withApp(sign('sign', message, accountOffset, addressOffset, options));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signs a message (non-transactional) on the Ledger device
|
||||||
|
*/
|
||||||
|
public async signRaw (message: Uint8Array, accountOffset?: number, addressOffset?: number, options?: Partial<AccountOptions>): Promise<LedgerSignature> {
|
||||||
|
return this.withApp(sign('signRaw', u8aWrapBytes(message), accountOffset, addressOffset, options));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* Returns a created SubstrateApp to perform operations against. Generally
|
||||||
|
* this is only used internally, to ensure consistent bahavior.
|
||||||
|
*/
|
||||||
|
async withApp <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> {
|
||||||
|
try {
|
||||||
|
if (!this.#app) {
|
||||||
|
const transport = await this.#transportDef.create();
|
||||||
|
|
||||||
|
// We need this override for the actual type passing - the Deno environment
|
||||||
|
// is quite a bit stricter and it yields invalids between the two (specifically
|
||||||
|
// since we mangle the imports from .default in the types for CJS/ESM and between
|
||||||
|
// esm.sh versions this yields problematic outputs)
|
||||||
|
//
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
|
||||||
|
this.#app = newSubstrateApp(transport as any, this.#ledgerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await fn(this.#app);
|
||||||
|
} catch (error) {
|
||||||
|
this.#app = null;
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { TransportDef, TransportType } from '@polkadot/hw-ledger-transports/types';
|
||||||
|
import type { AccountOptionsGeneric, LedgerAddress, LedgerSignature, LedgerVersion } from './types.js';
|
||||||
|
|
||||||
|
import { PolkadotGenericApp } from '@zondax/ledger-substrate';
|
||||||
|
|
||||||
|
import { transports } from '@polkadot/hw-ledger-transports';
|
||||||
|
import { hexAddPrefix, u8aToBuffer, u8aWrapBytes } from '@polkadot/util';
|
||||||
|
|
||||||
|
import { ledgerApps } from './defaults.js';
|
||||||
|
|
||||||
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
|
type Chain = keyof typeof ledgerApps;
|
||||||
|
|
||||||
|
type WrappedResult = Awaited<ReturnType<PolkadotGenericApp['getAddress' | 'getVersion' | 'sign' | 'signWithMetadata']>>;
|
||||||
|
|
||||||
|
// FIXME This type is a copy of the `class ResponseError`
|
||||||
|
// imported from `@zondax/ledger-js`. Happens because ledger-js includes
|
||||||
|
// circular dependencies. This is a hack to avoid versioning issues
|
||||||
|
// with Deno.
|
||||||
|
interface ResponseError {
|
||||||
|
errorMessage: string
|
||||||
|
returnCode: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal Wraps a PolkadotGenericApp call, checking the result for any errors which result in a rejection */
|
||||||
|
async function wrapError <T extends WrappedResult> (promise: Promise<T>): Promise<T> {
|
||||||
|
let result: T;
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = await promise;
|
||||||
|
} catch (e: unknown) {
|
||||||
|
// We check to see if the propogated error is the newer ResponseError type.
|
||||||
|
// The response code use to be part of the result, but with the latest breaking changes from 0.42.x
|
||||||
|
// the interface and it's types have completely changed.
|
||||||
|
if ((e as ResponseError).returnCode) {
|
||||||
|
throw new Error(`${(e as ResponseError).returnCode}: ${(e as ResponseError).errorMessage}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error((e as Error).message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal Wraps a sign/signRaw call and returns the associated signature */
|
||||||
|
function sign (method: 'sign' | 'signRaw', message: Uint8Array, slip44: number, accountIndex = 0, addressOffset = 0): (app: PolkadotGenericApp) => Promise<LedgerSignature> {
|
||||||
|
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
|
||||||
|
|
||||||
|
return async (app: PolkadotGenericApp): Promise<LedgerSignature> => {
|
||||||
|
const { signature } = await wrapError(app[method](bip42Path, u8aToBuffer(message)));
|
||||||
|
|
||||||
|
return {
|
||||||
|
signature: hexAddPrefix(signature.toString('hex'))
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @internal Wraps a signWithMetadata call and returns the associated signature */
|
||||||
|
function signWithMetadata (message: Uint8Array, slip44: number, accountIndex = 0, addressOffset = 0, { metadata }: Partial<AccountOptionsGeneric> = {}): (app: PolkadotGenericApp) => Promise<LedgerSignature> {
|
||||||
|
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
|
||||||
|
|
||||||
|
return async (app: PolkadotGenericApp): Promise<LedgerSignature> => {
|
||||||
|
if (!metadata) {
|
||||||
|
throw new Error('The metadata option must be present when using signWithMetadata');
|
||||||
|
}
|
||||||
|
|
||||||
|
const bufferMsg = Buffer.from(message);
|
||||||
|
|
||||||
|
const { signature } = await wrapError(app.signWithMetadata(bip42Path, bufferMsg, metadata));
|
||||||
|
|
||||||
|
return {
|
||||||
|
signature: hexAddPrefix(signature.toString('hex'))
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name Ledger
|
||||||
|
*
|
||||||
|
* @description
|
||||||
|
* A very basic wrapper for a ledger app -
|
||||||
|
* - it connects automatically on use, creating an underlying interface as required
|
||||||
|
* - Promises reject with errors (unwrapped errors from @zondax/ledger-substrate-js)
|
||||||
|
*/
|
||||||
|
export class LedgerGeneric {
|
||||||
|
readonly #transportDef: TransportDef;
|
||||||
|
readonly #slip44: number;
|
||||||
|
/**
|
||||||
|
* The chainId is represented by the chains token in all lowercase. Example: Polkadot -> dot
|
||||||
|
*/
|
||||||
|
readonly #chainId?: string;
|
||||||
|
/**
|
||||||
|
* The metaUrl is seen as a server url that the underlying `PolkadotGenericApp` will use to
|
||||||
|
* retrieve the signature given a tx blob, and a chainId. It is important to note that if you would like to avoid
|
||||||
|
* having any network calls made, use `signWithMetadata`, and avoid `sign`.
|
||||||
|
*/
|
||||||
|
readonly #metaUrl?: string;
|
||||||
|
|
||||||
|
#app: PolkadotGenericApp | null = null;
|
||||||
|
|
||||||
|
constructor (transport: TransportType, chain: Chain, slip44: number, chainId?: string, metaUrl?: string) {
|
||||||
|
const ledgerName = ledgerApps[chain];
|
||||||
|
const transportDef = transports.find(({ type }) => type === transport);
|
||||||
|
|
||||||
|
if (!ledgerName) {
|
||||||
|
throw new Error(`Unsupported Ledger chain ${chain}`);
|
||||||
|
} else if (!transportDef) {
|
||||||
|
throw new Error(`Unsupported Ledger transport ${transport}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#metaUrl = metaUrl;
|
||||||
|
this.#chainId = chainId;
|
||||||
|
this.#slip44 = slip44;
|
||||||
|
this.#transportDef = transportDef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Returns the address associated with a specific account & address offset. Optionally
|
||||||
|
* asks for on-device confirmation
|
||||||
|
*/
|
||||||
|
public async getAddress (ss58Prefix: number, confirm = false, accountIndex = 0, addressOffset = 0): Promise<LedgerAddress> {
|
||||||
|
const bip42Path = `m/44'/${this.#slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
|
||||||
|
|
||||||
|
return this.withApp(async (app: PolkadotGenericApp): Promise<LedgerAddress> => {
|
||||||
|
const { address, pubKey } = await wrapError(app.getAddress(bip42Path, ss58Prefix, confirm));
|
||||||
|
|
||||||
|
return {
|
||||||
|
address,
|
||||||
|
publicKey: hexAddPrefix(pubKey)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Returns the version of the Ledger application on the device
|
||||||
|
*/
|
||||||
|
public async getVersion (): Promise<LedgerVersion> {
|
||||||
|
return this.withApp(async (app: PolkadotGenericApp): Promise<LedgerVersion> => {
|
||||||
|
const { deviceLocked: isLocked, major, minor, patch, testMode: isTestMode } = await wrapError(app.getVersion());
|
||||||
|
|
||||||
|
return {
|
||||||
|
isLocked: !!isLocked,
|
||||||
|
isTestMode: !!isTestMode,
|
||||||
|
version: [major || 0, minor || 0, patch || 0]
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Signs a transaction on the Ledger device. This requires the LedgerGeneric class to be instantiated with `chainId`, and `metaUrl`
|
||||||
|
*/
|
||||||
|
public async sign (message: Uint8Array, accountIndex?: number, addressOffset?: number): Promise<LedgerSignature> {
|
||||||
|
return this.withApp(sign('sign', message, this.#slip44, accountIndex, addressOffset));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Signs a message (non-transactional) on the Ledger device
|
||||||
|
*/
|
||||||
|
public async signRaw (message: Uint8Array, accountIndex?: number, addressOffset?: number): Promise<LedgerSignature> {
|
||||||
|
return this.withApp(sign('signRaw', u8aWrapBytes(message), this.#slip44, accountIndex, addressOffset));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Signs a transaction on the ledger device provided some metadata.
|
||||||
|
*/
|
||||||
|
public async signWithMetadata (message: Uint8Array, accountIndex?: number, addressOffset?: number, options?: Partial<AccountOptionsGeneric>): Promise<LedgerSignature> {
|
||||||
|
return this.withApp(signWithMetadata(message, this.#slip44, accountIndex, addressOffset, options));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* Returns a created PolkadotGenericApp to perform operations against. Generally
|
||||||
|
* this is only used internally, to ensure consistent bahavior.
|
||||||
|
*/
|
||||||
|
async withApp <T> (fn: (app: PolkadotGenericApp) => Promise<T>): Promise<T> {
|
||||||
|
try {
|
||||||
|
if (!this.#app) {
|
||||||
|
const transport = await this.#transportDef.create();
|
||||||
|
|
||||||
|
// We need this override for the actual type passing - the Deno environment
|
||||||
|
// is quite a bit stricter and it yields invalids between the two (specifically
|
||||||
|
// since we mangle the imports from .default in the types for CJS/ESM and between
|
||||||
|
// esm.sh versions this yields problematic outputs)
|
||||||
|
//
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
|
||||||
|
this.#app = new PolkadotGenericApp(transport as any, this.#chainId, this.#metaUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await fn(this.#app);
|
||||||
|
} catch (error) {
|
||||||
|
this.#app = null;
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,126 +1,8 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { SubstrateApp } from '@zondax/ledger-substrate';
|
// This is necessary to ensure users still have access to class Ledger even though its deprecated.
|
||||||
import type { TransportDef, TransportType } from '@polkadot/hw-ledger-transports/types';
|
//
|
||||||
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerVersion } from './types.js';
|
// eslint-disable-next-line deprecation/deprecation
|
||||||
|
export { Ledger } from './Ledger.js';
|
||||||
import { newSubstrateApp } from '@zondax/ledger-substrate';
|
export { LedgerGeneric } from './LedgerGeneric.js';
|
||||||
|
|
||||||
import { transports } from '@polkadot/hw-ledger-transports';
|
|
||||||
import { hexAddPrefix, u8aToBuffer } from '@polkadot/util';
|
|
||||||
|
|
||||||
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants.js';
|
|
||||||
import { ledgerApps } from './defaults.js';
|
|
||||||
|
|
||||||
export { packageInfo } from './packageInfo.js';
|
|
||||||
|
|
||||||
type Chain = keyof typeof ledgerApps;
|
|
||||||
|
|
||||||
type WrappedResult = Awaited<ReturnType<SubstrateApp['getAddress' | 'getVersion' | 'sign']>>;
|
|
||||||
|
|
||||||
/** @internal Wraps a SubstrateApp call, checking the result for any errors which result in a rejection */
|
|
||||||
async function wrapError <T extends WrappedResult> (promise: Promise<T>): Promise<T> {
|
|
||||||
const result = await promise;
|
|
||||||
|
|
||||||
if (result.return_code !== LEDGER_SUCCESS_CODE) {
|
|
||||||
throw new Error(result.error_message);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name Ledger
|
|
||||||
*
|
|
||||||
* @description
|
|
||||||
* A very basic wrapper for a ledger app -
|
|
||||||
* - it connects automatically on use, creating an underlying interface as required
|
|
||||||
* - Promises reject with errors (unwrapped errors from @zondax/ledger-substrate)
|
|
||||||
*/
|
|
||||||
export class Ledger {
|
|
||||||
readonly #ledgerName: string;
|
|
||||||
readonly #transportDef: TransportDef;
|
|
||||||
|
|
||||||
#app: SubstrateApp | null = null;
|
|
||||||
|
|
||||||
constructor (transport: TransportType, chain: Chain) {
|
|
||||||
const ledgerName = ledgerApps[chain];
|
|
||||||
const transportDef = transports.find(({ type }) => type === transport);
|
|
||||||
|
|
||||||
if (!ledgerName) {
|
|
||||||
throw new Error(`Unsupported Ledger chain ${chain}`);
|
|
||||||
} else if (!transportDef) {
|
|
||||||
throw new Error(`Unsupported Ledger transport ${transport}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.#ledgerName = ledgerName;
|
|
||||||
this.#transportDef = transportDef;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the address associated with a specific account & address offset. Optionally
|
|
||||||
* asks for on-device confirmation
|
|
||||||
*/
|
|
||||||
public async getAddress (confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerAddress> {
|
|
||||||
return this.withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
|
|
||||||
const { address, pubKey } = await wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
|
|
||||||
|
|
||||||
return {
|
|
||||||
address,
|
|
||||||
publicKey: hexAddPrefix(pubKey)
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the version of the Ledger application on the device
|
|
||||||
*/
|
|
||||||
public async getVersion (): Promise<LedgerVersion> {
|
|
||||||
return this.withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
|
|
||||||
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await wrapError(app.getVersion());
|
|
||||||
|
|
||||||
return {
|
|
||||||
isLocked,
|
|
||||||
isTestMode,
|
|
||||||
version: [major, minor, patch]
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signs a transaction on the Ledger device
|
|
||||||
*/
|
|
||||||
public async sign (message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerSignature> {
|
|
||||||
return this.withApp(async (app: SubstrateApp): Promise<LedgerSignature> => {
|
|
||||||
const buffer = u8aToBuffer(message);
|
|
||||||
const { signature } = await wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
|
|
||||||
|
|
||||||
return {
|
|
||||||
signature: hexAddPrefix(signature.toString('hex'))
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* Returns a created SubstrateApp to perform operations against. Generally
|
|
||||||
* this is only used internally, to ensure consistent bahavior.
|
|
||||||
*/
|
|
||||||
async withApp <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> {
|
|
||||||
try {
|
|
||||||
if (!this.#app) {
|
|
||||||
const transport = await this.#transportDef.create();
|
|
||||||
|
|
||||||
this.#app = newSubstrateApp(transport, this.#ledgerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return await fn(this.#app);
|
|
||||||
} catch (error) {
|
|
||||||
this.#app = null;
|
|
||||||
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
|
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|
||||||
import { supportedApps } from '@zondax/ledger-substrate';
|
import { supportedApps } from '@zondax/ledger-substrate';
|
||||||
|
|
||||||
import { ledgerApps } from './defaults.js';
|
import { prevLedgerRecord } from './defaults.js';
|
||||||
|
|
||||||
describe('ledgerApps', (): void => {
|
describe('ledgerApps', (): void => {
|
||||||
for (const k of Object.keys(ledgerApps)) {
|
for (const k of Object.keys(prevLedgerRecord)) {
|
||||||
it(`${k} is available in @zondax/ledger-substrate`, (): void => {
|
it(`${k} is available in @zondax/ledger-substrate`, (): void => {
|
||||||
expect(
|
expect(
|
||||||
supportedApps.find(({ name }) =>
|
supportedApps.find(({ name }) =>
|
||||||
name === ledgerApps[k]
|
name === prevLedgerRecord[k]
|
||||||
)
|
)
|
||||||
).toBeDefined();
|
).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults/ledger.ts
|
// These map to the known name in the @zondax/ledger-substrate/supported_apps package
|
||||||
// and maps to the known name in the @zondax/ledger-substrate/supported_apps package
|
// but they do not reflect all ledger apps that are supported. Since ledger now has support for all
|
||||||
export const ledgerApps: Record<string, string> = {
|
// substrate chains via the PolkadotGenericApp, any new chains that need ledger support can be added to
|
||||||
|
// `genericLedgerApps` below.
|
||||||
|
export const prevLedgerRecord: Record<string, string> = {
|
||||||
acala: 'Acala',
|
acala: 'Acala',
|
||||||
ajuna: 'Ajuna',
|
ajuna: 'Ajuna',
|
||||||
'aleph-node': 'AlephZero',
|
'aleph-node': 'AlephZero',
|
||||||
@@ -15,6 +17,7 @@ export const ledgerApps: Record<string, string> = {
|
|||||||
darwinia: 'Darwinia',
|
darwinia: 'Darwinia',
|
||||||
'dock-mainnet': 'Dock',
|
'dock-mainnet': 'Dock',
|
||||||
edgeware: 'Edgeware',
|
edgeware: 'Edgeware',
|
||||||
|
enjin: 'Enjin',
|
||||||
equilibrium: 'Equilibrium',
|
equilibrium: 'Equilibrium',
|
||||||
genshiro: 'Genshiro',
|
genshiro: 'Genshiro',
|
||||||
hydradx: 'HydraDX',
|
hydradx: 'HydraDX',
|
||||||
@@ -22,15 +25,18 @@ export const ledgerApps: Record<string, string> = {
|
|||||||
karura: 'Karura',
|
karura: 'Karura',
|
||||||
khala: 'Khala',
|
khala: 'Khala',
|
||||||
kusama: 'Kusama',
|
kusama: 'Kusama',
|
||||||
|
matrixchain: 'Matrixchain',
|
||||||
nodle: 'Nodle',
|
nodle: 'Nodle',
|
||||||
origintrail: 'OriginTrail',
|
origintrail: 'OriginTrail',
|
||||||
parallel: 'Parallel',
|
parallel: 'Parallel',
|
||||||
|
peaq: 'Peaq',
|
||||||
pendulum: 'Pendulum',
|
pendulum: 'Pendulum',
|
||||||
phala: 'Phala',
|
phala: 'Phala',
|
||||||
picasso: 'Picasso',
|
picasso: 'Picasso',
|
||||||
polkadex: 'Polkadex',
|
polkadex: 'Polkadex',
|
||||||
polkadot: 'Polkadot',
|
polkadot: 'Polkadot',
|
||||||
polymesh: 'Polymesh',
|
polymesh: 'Polymesh',
|
||||||
|
quartz: 'Quartz',
|
||||||
sora: 'Sora',
|
sora: 'Sora',
|
||||||
stafi: 'Stafi',
|
stafi: 'Stafi',
|
||||||
statemine: 'Statemine',
|
statemine: 'Statemine',
|
||||||
@@ -38,5 +44,22 @@ export const ledgerApps: Record<string, string> = {
|
|||||||
ternoa: 'Ternoa',
|
ternoa: 'Ternoa',
|
||||||
unique: 'Unique',
|
unique: 'Unique',
|
||||||
vtb: 'VTB',
|
vtb: 'VTB',
|
||||||
xxnetwork: 'XXNetwork'
|
xxnetwork: 'XXNetwork',
|
||||||
|
zeitgeist: 'Zeitgeist'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Any chains moving forward that are supported by the PolkadotGenericApp from ledger will input their names below.
|
||||||
|
export const genericLedgerApps = {
|
||||||
|
bittensor: 'Bittensor',
|
||||||
|
encointer: 'Encointer',
|
||||||
|
frequency: 'Frequency',
|
||||||
|
integritee: 'Integritee',
|
||||||
|
polimec: 'Polimec',
|
||||||
|
vara: 'Vara'
|
||||||
|
};
|
||||||
|
|
||||||
|
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults/ledger.ts
|
||||||
|
export const ledgerApps: Record<string, string> = {
|
||||||
|
...prevLedgerRecord,
|
||||||
|
...genericLedgerApps
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
import { packageInfo as transportInfo } from '@polkadot/hw-ledger-transports/packageInfo';
|
|
||||||
import { packageInfo as utilInfo } from '@polkadot/util/packageInfo';
|
|
||||||
|
|
||||||
export default [transportInfo, utilInfo];
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
|
||||||
|
|
||||||
import { detectPackage } from '@polkadot/util';
|
|
||||||
|
|
||||||
import others from './detectOther.js';
|
|
||||||
import { packageInfo } from './packageInfo.js';
|
|
||||||
|
|
||||||
detectPackage(packageInfo, null, others);
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import './detectPackage.js';
|
import './packageDetect.js';
|
||||||
|
|
||||||
export * from './bundle.js';
|
export * from './bundle.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './index.js';
|
export * from './index.js';
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
// (packageInfo imports will be kept as-is, user-editable)
|
||||||
|
|
||||||
|
import { packageInfo as transportInfo } from '@polkadot/hw-ledger-transports/packageInfo';
|
||||||
|
import { detectPackage } from '@polkadot/util';
|
||||||
|
import { packageInfo as utilInfo } from '@polkadot/util/packageInfo';
|
||||||
|
|
||||||
|
import { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
|
detectPackage(packageInfo, null, [transportInfo, utilInfo]);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '12.2.2' };
|
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '13.3.1' };
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
// Copyright 2017-2025 @polkadot/hw-ledger authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
import type { HexString } from '@polkadot/util/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy Type that works with the `Ledger` class.
|
||||||
|
*/
|
||||||
export interface AccountOptions {
|
export interface AccountOptions {
|
||||||
/** The index of the account */
|
/** The index of the account */
|
||||||
account: number;
|
account: number;
|
||||||
@@ -12,6 +15,11 @@ export interface AccountOptions {
|
|||||||
change: number;
|
change: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AccountOptionsGeneric extends AccountOptions {
|
||||||
|
/** Option for PolkadotGenericApp.signWithMetadata */
|
||||||
|
metadata: Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
export interface LedgerAddress {
|
export interface LedgerAddress {
|
||||||
/** The ss58 encoded address */
|
/** The ss58 encoded address */
|
||||||
address: string;
|
address: string;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||||
"description": "Keyring management",
|
"description": "Keyring management",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
|
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -14,19 +14,19 @@
|
|||||||
"url": "https://github.com/polkadot-js/common.git"
|
"url": "https://github.com/polkadot-js/common.git"
|
||||||
},
|
},
|
||||||
"sideEffects": [
|
"sideEffects": [
|
||||||
"./detectPackage.js",
|
"./packageDetect.js",
|
||||||
"./detectPackage.cjs"
|
"./packageDetect.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"@polkadot/util-crypto": "12.2.2",
|
"@polkadot/util-crypto": "13.3.1",
|
||||||
"tslib": "^2.5.3"
|
"tslib": "^2.8.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"@polkadot/util-crypto": "12.2.2"
|
"@polkadot/util-crypto": "13.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// all external
|
// all external
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// default substrate dev phrase
|
// default substrate dev phrase
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
import { packageInfo as utilInfo } from '@polkadot/util/packageInfo';
|
|
||||||
import { packageInfo as cryptoInfo } from '@polkadot/util-crypto/packageInfo';
|
|
||||||
|
|
||||||
export default [utilInfo, cryptoInfo];
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
|
||||||
|
|
||||||
import { detectPackage } from '@polkadot/util';
|
|
||||||
|
|
||||||
import others from './detectOther.js';
|
|
||||||
import { packageInfo } from './packageInfo.js';
|
|
||||||
|
|
||||||
detectPackage(packageInfo, null, others);
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import './detectPackage.js';
|
import './packageDetect.js';
|
||||||
|
|
||||||
import { Keyring } from './bundle.js';
|
import { Keyring } from './bundle.js';
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './index.js';
|
export * from './index.js';
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
// (packageInfo imports will be kept as-is, user-editable)
|
||||||
|
|
||||||
|
import { detectPackage } from '@polkadot/util';
|
||||||
|
import { packageInfo as utilInfo } from '@polkadot/util/packageInfo';
|
||||||
|
import { packageInfo as cryptoInfo } from '@polkadot/util-crypto/packageInfo';
|
||||||
|
|
||||||
|
import { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
|
detectPackage(packageInfo, null, [cryptoInfo, utilInfo]);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '12.2.2' };
|
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '13.3.1' };
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,47 +1,52 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/types';
|
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/types';
|
||||||
import type { PairInfo } from './types.js';
|
|
||||||
|
|
||||||
import { u8aEq } from '@polkadot/util';
|
import { u8aEq } from '@polkadot/util';
|
||||||
import { jsonDecryptData } from '@polkadot/util-crypto';
|
import { jsonDecryptData } from '@polkadot/util-crypto';
|
||||||
|
|
||||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults.js';
|
import { PAIR_DIV, PAIR_HDR, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults.js';
|
||||||
|
|
||||||
const SEED_OFFSET = PKCS8_HEADER.length;
|
const SEED_OFFSET = PAIR_HDR.length;
|
||||||
|
|
||||||
type DecodeResult = PairInfo & {
|
/**
|
||||||
secretKey: Uint8Array;
|
* Decode a pair, taking into account the generation-specific formats and headers
|
||||||
};
|
*
|
||||||
|
* For divisor/headers, don't rely on the magic being static. These will
|
||||||
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, _encType?: EncryptedJsonEncoding | EncryptedJsonEncoding[]): DecodeResult {
|
* change between generations, aka with the long-awaited 4th generation
|
||||||
|
* of the format. The external decode interface is the only way to use and decode these.
|
||||||
|
**/
|
||||||
|
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, _encType?: EncryptedJsonEncoding | EncryptedJsonEncoding[]): { publicKey: Uint8Array; secretKey: Uint8Array } {
|
||||||
const encType = Array.isArray(_encType) || _encType === undefined
|
const encType = Array.isArray(_encType) || _encType === undefined
|
||||||
? _encType
|
? _encType
|
||||||
: [_encType];
|
: [_encType];
|
||||||
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
|
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
|
||||||
const header = decrypted.subarray(0, PKCS8_HEADER.length);
|
const header = decrypted.subarray(0, PAIR_HDR.length);
|
||||||
|
|
||||||
if (!u8aEq(header, PKCS8_HEADER)) {
|
// check the start header (generations 1-3)
|
||||||
throw new Error('Invalid Pkcs8 header found in body');
|
if (!u8aEq(header, PAIR_HDR)) {
|
||||||
|
throw new Error('Invalid encoding header found in body');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setup for generation 3 format
|
||||||
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
|
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
|
||||||
let divOffset = SEED_OFFSET + SEC_LENGTH;
|
let divOffset = SEED_OFFSET + SEC_LENGTH;
|
||||||
let divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
let divider = decrypted.subarray(divOffset, divOffset + PAIR_DIV.length);
|
||||||
|
|
||||||
// old-style, we have the seed here
|
// old-style (generation 1 & 2), we have the seed here
|
||||||
if (!u8aEq(divider, PKCS8_DIVIDER)) {
|
if (!u8aEq(divider, PAIR_DIV)) {
|
||||||
divOffset = SEED_OFFSET + SEED_LENGTH;
|
divOffset = SEED_OFFSET + SEED_LENGTH;
|
||||||
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
|
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
|
||||||
divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
divider = decrypted.subarray(divOffset, divOffset + PAIR_DIV.length);
|
||||||
|
|
||||||
if (!u8aEq(divider, PKCS8_DIVIDER)) {
|
// check the divisior at this point (already checked for generation 3)
|
||||||
throw new Error('Invalid Pkcs8 divider found in body');
|
if (!u8aEq(divider, PAIR_DIV)) {
|
||||||
|
throw new Error('Invalid encoding divider found in body');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const pubOffset = divOffset + PKCS8_DIVIDER.length;
|
const pubOffset = divOffset + PAIR_DIV.length;
|
||||||
const publicKey = decrypted.subarray(pubOffset, pubOffset + PUB_LENGTH);
|
const publicKey = decrypted.subarray(pubOffset, pubOffset + PUB_LENGTH);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,9 +1,20 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export const PKCS8_DIVIDER = new Uint8Array([161, 35, 3, 33, 0]);
|
/** public/secret section divider (generation 1-3, will change in 4, don't rely on value) */
|
||||||
export const PKCS8_HEADER = new Uint8Array([48, 83, 2, 1, 1, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32]);
|
export const PAIR_DIV = new Uint8Array([161, 35, 3, 33, 0]);
|
||||||
|
|
||||||
|
/** public/secret start block (generation 1-3, will change in 4, don't rely on value) */
|
||||||
|
export const PAIR_HDR = new Uint8Array([48, 83, 2, 1, 1, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32]);
|
||||||
|
|
||||||
|
/** length of a public key */
|
||||||
export const PUB_LENGTH = 32;
|
export const PUB_LENGTH = 32;
|
||||||
|
|
||||||
|
/** length of a salt */
|
||||||
export const SALT_LENGTH = 32;
|
export const SALT_LENGTH = 32;
|
||||||
|
|
||||||
|
/** length of a secret key */
|
||||||
export const SEC_LENGTH = 64;
|
export const SEC_LENGTH = 64;
|
||||||
|
|
||||||
|
/** length of a user-input seed */
|
||||||
export const SEED_LENGTH = 32;
|
export const SEED_LENGTH = 32;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
@@ -6,10 +6,10 @@
|
|||||||
import { NONCE_LENGTH, SCRYPT_LENGTH } from '@polkadot/util-crypto/json/constants';
|
import { NONCE_LENGTH, SCRYPT_LENGTH } from '@polkadot/util-crypto/json/constants';
|
||||||
|
|
||||||
import { createTestPairs } from '../testingPairs.js';
|
import { createTestPairs } from '../testingPairs.js';
|
||||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH } from './defaults.js';
|
import { PAIR_DIV, PAIR_HDR, PUB_LENGTH, SEC_LENGTH } from './defaults.js';
|
||||||
|
|
||||||
const PKCS8_LENGTH = PKCS8_DIVIDER.length + PKCS8_HEADER.length + PUB_LENGTH + SEC_LENGTH;
|
const DECODED_LENGTH = PAIR_DIV.length + PAIR_HDR.length + PUB_LENGTH + SEC_LENGTH;
|
||||||
const ENCODED_LENGTH = 16 + PKCS8_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
|
const ENCODED_LENGTH = 16 + DECODED_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
|
||||||
|
|
||||||
const keyring = createTestPairs({ type: 'ed25519' }, false);
|
const keyring = createTestPairs({ type: 'ed25519' }, false);
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ describe('encode', (): void => {
|
|||||||
it('returns PKCS8 when no passphrase supplied', (): void => {
|
it('returns PKCS8 when no passphrase supplied', (): void => {
|
||||||
expect(
|
expect(
|
||||||
keyring.alice.encodePkcs8()
|
keyring.alice.encodePkcs8()
|
||||||
).toHaveLength(PKCS8_LENGTH);
|
).toHaveLength(DECODED_LENGTH);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns encoded PKCS8 when passphrase supplied', (): void => {
|
it('returns encoded PKCS8 when passphrase supplied', (): void => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { PairInfo } from './types.js';
|
import type { PairInfo } from './types.js';
|
||||||
@@ -6,24 +6,23 @@ import type { PairInfo } from './types.js';
|
|||||||
import { u8aConcat } from '@polkadot/util';
|
import { u8aConcat } from '@polkadot/util';
|
||||||
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
|
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
|
||||||
|
|
||||||
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults.js';
|
import { PAIR_DIV, PAIR_HDR } from './defaults.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode a pair with the latest generation format (generation 3)
|
||||||
|
**/
|
||||||
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
|
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
|
||||||
if (!secretKey) {
|
if (!secretKey) {
|
||||||
throw new Error('Expected a valid secretKey to be passed to encode');
|
throw new Error('Expected a valid secretKey to be passed to encode');
|
||||||
}
|
}
|
||||||
|
|
||||||
const encoded = u8aConcat(
|
const encoded = u8aConcat(PAIR_HDR, secretKey, PAIR_DIV, publicKey);
|
||||||
PKCS8_HEADER,
|
|
||||||
secretKey,
|
|
||||||
PKCS8_DIVIDER,
|
|
||||||
publicKey
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!passphrase) {
|
if (!passphrase) {
|
||||||
return encoded;
|
return encoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this is only for generation 3 (previous generations are only handled in decoding)
|
||||||
const { params, password, salt } = scryptEncode(passphrase);
|
const { params, password, salt } = scryptEncode(passphrase);
|
||||||
const { encrypted, nonce } = naclEncrypt(encoded, password.subarray(0, 32));
|
const { encrypted, nonce } = naclEncrypt(encoded, password.subarray(0, 32));
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types.js';
|
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types.js';
|
||||||
import type { PairInfo } from './types.js';
|
import type { PairInfo } from './types.js';
|
||||||
@@ -165,7 +164,7 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
|||||||
setMeta: (additional: KeyringPair$Meta): void => {
|
setMeta: (additional: KeyringPair$Meta): void => {
|
||||||
meta = objectSpread({}, meta, additional);
|
meta = objectSpread({}, meta, additional);
|
||||||
},
|
},
|
||||||
sign: (message: HexString | string | Uint8Array, options: SignOptions = {}): Uint8Array => {
|
sign: (message: string | Uint8Array, options: SignOptions = {}): Uint8Array => {
|
||||||
if (isLocked(secretKey)) {
|
if (isLocked(secretKey)) {
|
||||||
throw new Error('Cannot sign with a locked key pair');
|
throw new Error('Cannot sign with a locked key pair');
|
||||||
}
|
}
|
||||||
@@ -192,10 +191,10 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
|||||||
unlock: (passphrase?: string): void => {
|
unlock: (passphrase?: string): void => {
|
||||||
return decodePkcs8(passphrase);
|
return decodePkcs8(passphrase);
|
||||||
},
|
},
|
||||||
verify: (message: HexString | string | Uint8Array, signature: HexString | string | Uint8Array, signerPublic: HexString | string | Uint8Array): boolean => {
|
verify: (message: string | Uint8Array, signature: string | Uint8Array, signerPublic: string | Uint8Array): boolean => {
|
||||||
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(signerPublic))).isValid;
|
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(signerPublic))).isValid;
|
||||||
},
|
},
|
||||||
vrfSign: (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
|
vrfSign: (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
|
||||||
if (isLocked(secretKey)) {
|
if (isLocked(secretKey)) {
|
||||||
throw new Error('Cannot sign with a locked key pair');
|
throw new Error('Cannot sign with a locked key pair');
|
||||||
}
|
}
|
||||||
@@ -208,7 +207,7 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
|||||||
|
|
||||||
return u8aConcat(vrfHash(proof, context, extra), proof);
|
return u8aConcat(vrfHash(proof, context, extra), proof);
|
||||||
},
|
},
|
||||||
vrfVerify: (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean => {
|
vrfVerify: (message: string | Uint8Array, vrfResult: Uint8Array, signerPublic: Uint8Array | string, context?: string | Uint8Array, extra?: string | Uint8Array): boolean => {
|
||||||
if (type === 'sr25519') {
|
if (type === 'sr25519') {
|
||||||
return sr25519VrfVerify(message, vrfResult, publicKey, context, extra);
|
return sr25519VrfVerify(message, vrfResult, publicKey, context, extra);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types.js';
|
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export interface PairInfo {
|
export interface PairInfo {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { KeyringPair, KeyringPairs } from './types.js';
|
import type { KeyringPair, KeyringPairs } from './types.js';
|
||||||
|
|
||||||
import { isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
|
import { isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||||
@@ -22,7 +21,7 @@ export class Pairs implements KeyringPairs {
|
|||||||
return Object.values(this.#map);
|
return Object.values(this.#map);
|
||||||
}
|
}
|
||||||
|
|
||||||
public get (address: HexString | string | Uint8Array): KeyringPair {
|
public get (address: string | Uint8Array): KeyringPair {
|
||||||
const pair = this.#map[decodeAddress(address).toString()];
|
const pair = this.#map[decodeAddress(address).toString()];
|
||||||
|
|
||||||
if (!pair) {
|
if (!pair) {
|
||||||
@@ -36,7 +35,7 @@ export class Pairs implements KeyringPairs {
|
|||||||
return pair;
|
return pair;
|
||||||
}
|
}
|
||||||
|
|
||||||
public remove (address: HexString | string | Uint8Array): void {
|
public remove (address: string | Uint8Array): void {
|
||||||
delete this.#map[decodeAddress(address).toString()];
|
delete this.#map[decodeAddress(address).toString()];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
import type { HexString } from '@polkadot/util/types';
|
||||||
@@ -119,7 +119,7 @@ function createMeta (name?: string, seed?: string) {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
isTesting: true,
|
isTesting: true,
|
||||||
name: name || (seed && seed.replace('//', '_').toLowerCase())
|
name: name || seed?.replace('//', '_').toLowerCase()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
@@ -42,9 +42,7 @@ describe('testingPairs', (): void => {
|
|||||||
const keyring = new Keyring({ type: 'ethereum' });
|
const keyring = new Keyring({ type: 'ethereum' });
|
||||||
const pair = keyring.createFromUri('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133');
|
const pair = keyring.createFromUri('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133');
|
||||||
|
|
||||||
expect(
|
expect(pair?.address).toEqual(TEST_ADD);
|
||||||
pair && pair.address
|
|
||||||
).toEqual(TEST_ADD);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('checks eth test addresses', (): void => {
|
describe('checks eth test addresses', (): void => {
|
||||||
@@ -62,6 +60,7 @@ describe('testingPairs', (): void => {
|
|||||||
'0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8',
|
'0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8',
|
||||||
'0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b'];
|
'0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b'];
|
||||||
|
|
||||||
|
// @ts-expect-error We should not delete from the maps, however this is a test
|
||||||
delete ring.nobody;
|
delete ring.nobody;
|
||||||
|
|
||||||
Object
|
Object
|
||||||
|
|||||||
@@ -1,23 +1,56 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||||
import type { KeyringOptions, KeyringPair } from './types.js';
|
import type { KeyringOptions, KeyringPair } from './types.js';
|
||||||
|
|
||||||
import { nobody } from './pair/nobody.js';
|
import { nobody } from './pair/nobody.js';
|
||||||
import { createTestKeyring } from './testing.js';
|
import { createTestKeyring } from './testing.js';
|
||||||
|
|
||||||
export interface TestKeyringMap {
|
export interface TestKeyringMap {
|
||||||
|
nobody: KeyringPair;
|
||||||
|
|
||||||
[index: string]: KeyringPair;
|
[index: string]: KeyringPair;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createTestPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
|
export interface TestKeyringMapSubstrate extends TestKeyringMap {
|
||||||
|
alice: KeyringPair;
|
||||||
|
bob: KeyringPair;
|
||||||
|
charlie: KeyringPair;
|
||||||
|
dave: KeyringPair;
|
||||||
|
eve: KeyringPair;
|
||||||
|
ferdie: KeyringPair;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TestKeyringMapEthereum extends TestKeyringMap {
|
||||||
|
Alith: KeyringPair;
|
||||||
|
Baltathar: KeyringPair;
|
||||||
|
Charleth: KeyringPair;
|
||||||
|
Dorothy: KeyringPair;
|
||||||
|
Ethan: KeyringPair;
|
||||||
|
Faith: KeyringPair;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DetectMap<O extends KeyringOptions | undefined> = DetectPairType<O> extends 'ethereum'
|
||||||
|
? TestKeyringMapEthereum
|
||||||
|
: TestKeyringMapSubstrate;
|
||||||
|
|
||||||
|
export type DetectPairType<O extends KeyringOptions | undefined> = O extends KeyringOptions
|
||||||
|
? O['type'] extends KeypairType
|
||||||
|
? O['type']
|
||||||
|
: 'sr25519'
|
||||||
|
: 'sr25519';
|
||||||
|
|
||||||
|
export function createTestPairs <O extends KeyringOptions, M = DetectMap<O>> (options?: O, isDerived = true): M {
|
||||||
const keyring = createTestKeyring(options, isDerived);
|
const keyring = createTestKeyring(options, isDerived);
|
||||||
const pairs = keyring.getPairs();
|
const pairs = keyring.getPairs();
|
||||||
const map: TestKeyringMap = { nobody: nobody() };
|
const map: TestKeyringMap = { nobody: nobody() };
|
||||||
|
|
||||||
for (const p of pairs) {
|
for (const p of pairs) {
|
||||||
map[p.meta.name as string] = p;
|
if (p.meta.name) {
|
||||||
|
map[p.meta.name] = p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
return map as M;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,78 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
import type { HexString } from '@polkadot/util/types';
|
||||||
import type { EncryptedJson, Keypair, KeypairType, Prefix } from '@polkadot/util-crypto/types';
|
import type { EncryptedJson, Keypair, KeypairType, Prefix } from '@polkadot/util-crypto/types';
|
||||||
|
|
||||||
export interface KeyringOptions {
|
export interface KeyringOptions {
|
||||||
/**
|
/** The ss58Format to use for address encoding (defaults to 42) */
|
||||||
* @description The ss58Format to use for address encoding (defaults to 42)
|
|
||||||
*/
|
|
||||||
ss58Format?: Prefix;
|
ss58Format?: Prefix;
|
||||||
/**
|
/** The type of keyring to create (defaults to ed25519) */
|
||||||
* @description The type of keyring to create (defaults to ed25519)
|
|
||||||
*/
|
|
||||||
type?: KeypairType;
|
type?: KeypairType;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type KeyringPair$Meta = Record<string, unknown>;
|
export interface KeyringPair$MetaHardware {
|
||||||
|
accountIndex?: number;
|
||||||
|
accountOffset?: number;
|
||||||
|
addressOffset?: number;
|
||||||
|
hardwareType?: 'ledger';
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$MetaFlags {
|
||||||
|
isDefaultAuthSelected?: boolean;
|
||||||
|
isExternal?: boolean;
|
||||||
|
isHardware?: boolean;
|
||||||
|
isHidden?: boolean;
|
||||||
|
isInjected?: boolean;
|
||||||
|
isMultisig?: boolean;
|
||||||
|
isProxied?: boolean;
|
||||||
|
isRecent?: boolean;
|
||||||
|
isTesting?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$MetaContract {
|
||||||
|
abi: string;
|
||||||
|
genesisHash?: HexString | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$MetaExtension {
|
||||||
|
source?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$MetaMultisig {
|
||||||
|
threshold?: number;
|
||||||
|
who?: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$MetaParent {
|
||||||
|
parentAddress?: string;
|
||||||
|
parentName?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KeyringPair$Meta extends KeyringPair$MetaExtension, KeyringPair$MetaFlags, KeyringPair$MetaHardware, KeyringPair$MetaMultisig, KeyringPair$MetaParent {
|
||||||
|
address?: string;
|
||||||
|
contract?: KeyringPair$MetaContract;
|
||||||
|
genesisHash?: HexString | null;
|
||||||
|
name?: string;
|
||||||
|
suri?: string;
|
||||||
|
tags?: string[];
|
||||||
|
type?: KeypairType;
|
||||||
|
whenCreated?: number;
|
||||||
|
whenEdited?: number;
|
||||||
|
whenUsed?: number;
|
||||||
|
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
export interface KeyringPair$Json extends EncryptedJson {
|
export interface KeyringPair$Json extends EncryptedJson {
|
||||||
/** The ss58 encoded address or the hex-encoded version (the latter is for ETH-compat chains) */
|
/** The ss58 encoded address or the hex-encoded version (the latter is for ETH-compat chains) */
|
||||||
address: string | HexString;
|
address: string;
|
||||||
/** The underlying metadata associated with the keypair */
|
/** The underlying metadata associated with the keypair */
|
||||||
meta: KeyringPair$Meta;
|
meta: KeyringPair$Meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SignOptions {
|
export interface SignOptions {
|
||||||
/**
|
/** Create a MultiSignature-compatible output with an indicator type */
|
||||||
* @description Create a MultiSignature-compatible output with an indicator type
|
|
||||||
**/
|
|
||||||
withType?: boolean;
|
withType?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,12 +89,12 @@ export interface KeyringPair {
|
|||||||
encodePkcs8 (passphrase?: string): Uint8Array;
|
encodePkcs8 (passphrase?: string): Uint8Array;
|
||||||
lock (): void;
|
lock (): void;
|
||||||
setMeta (meta: KeyringPair$Meta): void;
|
setMeta (meta: KeyringPair$Meta): void;
|
||||||
sign (message: HexString | string | Uint8Array, options?: SignOptions): Uint8Array;
|
sign (message: string | Uint8Array, options?: SignOptions): Uint8Array;
|
||||||
toJson (passphrase?: string): KeyringPair$Json;
|
toJson (passphrase?: string): KeyringPair$Json;
|
||||||
unlock (passphrase?: string): void;
|
unlock (passphrase?: string): void;
|
||||||
verify (message: HexString | string | Uint8Array, signature: Uint8Array, signerPublic: HexString | string | Uint8Array): boolean;
|
verify (message: string | Uint8Array, signature: Uint8Array, signerPublic: string | Uint8Array): boolean;
|
||||||
vrfSign (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): Uint8Array;
|
vrfSign (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array;
|
||||||
vrfVerify (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean;
|
vrfVerify (message: string | Uint8Array, vrfResult: Uint8Array, signerPublic: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface KeyringPairs {
|
export interface KeyringPairs {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||||
"description": "A list of all available Substrate networks and their applicable prefixes",
|
"description": "A list of all available Substrate networks and their applicable prefixes",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
|
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -15,14 +15,14 @@
|
|||||||
},
|
},
|
||||||
"sideEffects": false,
|
"sideEffects": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"@substrate/ss58-registry": "^1.40.0",
|
"@substrate/ss58-registry": "^1.51.0",
|
||||||
"tslib": "^2.5.3"
|
"tslib": "^2.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@polkadot/hw-ledger": "12.2.2"
|
"@polkadot/hw-ledger": "13.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
@@ -6,22 +6,33 @@
|
|||||||
import { ledgerApps } from '@polkadot/hw-ledger/defaults';
|
import { ledgerApps } from '@polkadot/hw-ledger/defaults';
|
||||||
import { isHex } from '@polkadot/util';
|
import { isHex } from '@polkadot/util';
|
||||||
|
|
||||||
import { knownGenesis, knownLedger } from './defaults/index.js';
|
import { knownGenesis, knownLedger, knownTestnet } from './defaults/index.js';
|
||||||
|
|
||||||
describe('defaults', (): void => {
|
describe('defaults', (): void => {
|
||||||
|
const genesisKeys = Object.keys(knownGenesis);
|
||||||
|
const ledgerKeys = Object.keys(knownLedger);
|
||||||
|
|
||||||
describe('genesis', (): void => {
|
describe('genesis', (): void => {
|
||||||
it('has hex values for all genesis chains', (): void => {
|
it('has hex values for all genesis chains', (): void => {
|
||||||
expect(
|
expect(
|
||||||
Object.keys(knownGenesis).filter((network) =>
|
genesisKeys.filter((network) =>
|
||||||
!knownGenesis[network].length ||
|
!knownGenesis[network].length ||
|
||||||
knownGenesis[network].some((g) => !isHex(g, 256))
|
knownGenesis[network].some((g) => !isHex(g, 256))
|
||||||
)
|
)
|
||||||
).toEqual([]);
|
).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('has no entries for testnets', (): void => {
|
||||||
|
expect(
|
||||||
|
genesisKeys.filter((network) =>
|
||||||
|
knownTestnet[network]
|
||||||
|
)
|
||||||
|
).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
it('has genesis for all Ledger chains', (): void => {
|
it('has genesis for all Ledger chains', (): void => {
|
||||||
expect(
|
expect(
|
||||||
Object.keys(knownLedger).filter((network) =>
|
ledgerKeys.filter((network) =>
|
||||||
!knownGenesis[network]
|
!knownGenesis[network]
|
||||||
)
|
)
|
||||||
).toEqual([]);
|
).toEqual([]);
|
||||||
@@ -31,7 +42,7 @@ describe('defaults', (): void => {
|
|||||||
describe('Ledger', (): void => {
|
describe('Ledger', (): void => {
|
||||||
it('has entries for each of the apps (hwledger -> networks)', (): void => {
|
it('has entries for each of the apps (hwledger -> networks)', (): void => {
|
||||||
expect(
|
expect(
|
||||||
Object.keys(knownLedger).filter((network) =>
|
ledgerKeys.filter((network) =>
|
||||||
!ledgerApps[network]
|
!ledgerApps[network]
|
||||||
)
|
)
|
||||||
).toEqual([]);
|
).toEqual([]);
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KnownGenesis } from '../types.js';
|
import type { KnownGenesis } from '../types.js';
|
||||||
|
|
||||||
// NOTE: In the case where the network was hard-spooned and multiple genesisHashes
|
// In the case where the network was hard-spooned and multiple genesisHashes
|
||||||
// are provided, it needs to be in reverse order, i.e. most-recent first, oldest
|
// are provided, it needs to be in reverse order, i.e. most-recent goes first,
|
||||||
// last. This make lookups for the current a simple genesisHash[0]
|
// oldest goes last. This make lookups for the current a simple genesisHash[0]
|
||||||
// (See Kusama as an example)
|
// where the latest ios always the first entry (See Kusama as an example)
|
||||||
|
//
|
||||||
|
// IMPORTANT: Apart from the test relays, this list is limited to live parachains
|
||||||
|
// and live production networks. It does not and should not contain any testnets,
|
||||||
|
// either stand-alone or connected to test relays such as Westend/Rococo
|
||||||
export const knownGenesis: KnownGenesis = {
|
export const knownGenesis: KnownGenesis = {
|
||||||
acala: [
|
acala: [
|
||||||
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
|
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
|
||||||
@@ -52,19 +56,32 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
edgeware: [
|
edgeware: [
|
||||||
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
|
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
|
||||||
],
|
],
|
||||||
|
encointer: [
|
||||||
|
'0x7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b'
|
||||||
|
],
|
||||||
|
enjin: [
|
||||||
|
'0xd8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9'
|
||||||
|
],
|
||||||
equilibrium: [
|
equilibrium: [
|
||||||
'0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
|
'0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
|
||||||
],
|
],
|
||||||
|
frequency: [
|
||||||
|
'0x4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1'
|
||||||
|
],
|
||||||
genshiro: [
|
genshiro: [
|
||||||
'0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
|
'0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
|
||||||
],
|
],
|
||||||
hydradx: [
|
hydradx: [
|
||||||
'0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d', // HydraDX Parachain
|
'0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d', // Hydration | HydraDX Parachain
|
||||||
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
|
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
|
||||||
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
|
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
|
||||||
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
|
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
|
||||||
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
|
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
|
||||||
],
|
],
|
||||||
|
integritee: [
|
||||||
|
'0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da', // on Kusama
|
||||||
|
'0xe13e7af377c64e83f95e0d70d5e5c3c01d697a84538776c5b9bbe0e7d7b6034c' // on Polkadot
|
||||||
|
],
|
||||||
'interlay-parachain': [
|
'interlay-parachain': [
|
||||||
'0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
|
'0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
|
||||||
],
|
],
|
||||||
@@ -82,6 +99,9 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
|
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
|
||||||
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
|
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
|
||||||
],
|
],
|
||||||
|
matrixchain: [
|
||||||
|
'0x3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615'
|
||||||
|
],
|
||||||
nodle: [
|
nodle: [
|
||||||
'0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
|
'0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
|
||||||
],
|
],
|
||||||
@@ -94,6 +114,9 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
parallel: [
|
parallel: [
|
||||||
'0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97'
|
'0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97'
|
||||||
],
|
],
|
||||||
|
peaq: [
|
||||||
|
'0xd2a5d385932d1f650dae03ef8e2748983779ee342c614f80854d32b8cd8fa48c'
|
||||||
|
],
|
||||||
pendulum: [
|
pendulum: [
|
||||||
'0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
|
'0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
|
||||||
],
|
],
|
||||||
@@ -104,6 +127,9 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
'0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc',
|
'0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc',
|
||||||
'0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
|
'0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
|
||||||
],
|
],
|
||||||
|
polimec: [
|
||||||
|
'0x7eb9354488318e7549c722669dcbdcdc526f1fef1420e7944667212f3601fdbd'
|
||||||
|
],
|
||||||
polkadex: [
|
polkadex: [
|
||||||
'0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c'
|
'0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c'
|
||||||
],
|
],
|
||||||
@@ -113,6 +139,9 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
polymesh: [
|
polymesh: [
|
||||||
'0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
|
'0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
|
||||||
],
|
],
|
||||||
|
quartz: [
|
||||||
|
'0xcd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554'
|
||||||
|
],
|
||||||
rococo: [
|
rococo: [
|
||||||
'0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
|
'0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
|
||||||
'0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
|
'0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
|
||||||
@@ -148,6 +177,9 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
unique: [
|
unique: [
|
||||||
'0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
|
'0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
|
||||||
],
|
],
|
||||||
|
vara: [
|
||||||
|
'0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763'
|
||||||
|
],
|
||||||
vtb: [
|
vtb: [
|
||||||
'0x286bc8414c7000ce1d6ee6a834e29a54c1784814b76243eb77ed0b2c5573c60f',
|
'0x286bc8414c7000ce1d6ee6a834e29a54c1784814b76243eb77ed0b2c5573c60f',
|
||||||
'0x7483b89572fb2bd687c7b9a93b242d0b237f9aba463aba07ec24503931038aaa'
|
'0x7483b89572fb2bd687c7b9a93b242d0b237f9aba463aba07ec24503931038aaa'
|
||||||
@@ -157,5 +189,8 @@ export const knownGenesis: KnownGenesis = {
|
|||||||
],
|
],
|
||||||
xxnetwork: [
|
xxnetwork: [
|
||||||
'0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
|
'0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
|
||||||
|
],
|
||||||
|
zeitgeist: [
|
||||||
|
'0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KnownIcon } from '../types.js';
|
import type { KnownIcon } from '../types.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export { knownGenesis } from './genesis.js';
|
export { knownGenesis } from './genesis.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KnownLedger } from '../types.js';
|
import type { KnownLedger } from '../types.js';
|
||||||
@@ -14,33 +14,44 @@ export const knownLedger: KnownLedger = {
|
|||||||
astar: 0x0000032a,
|
astar: 0x0000032a,
|
||||||
bifrost: 0x00000314,
|
bifrost: 0x00000314,
|
||||||
'bifrost-kusama': 0x00000314,
|
'bifrost-kusama': 0x00000314,
|
||||||
|
bittensor: 0x00000162,
|
||||||
centrifuge: 0x000002eb,
|
centrifuge: 0x000002eb,
|
||||||
composable: 0x00000162,
|
composable: 0x00000162,
|
||||||
darwinia: 0x00000162,
|
darwinia: 0x00000162,
|
||||||
'dock-mainnet': 0x00000252,
|
'dock-mainnet': 0x00000252,
|
||||||
edgeware: 0x0000020b,
|
edgeware: 0x0000020b,
|
||||||
|
encointer: 0x000001b2,
|
||||||
|
enjin: 0x00000483,
|
||||||
equilibrium: 0x05f5e0fd,
|
equilibrium: 0x05f5e0fd,
|
||||||
|
frequency: 0x0000082b,
|
||||||
genshiro: 0x05f5e0fc,
|
genshiro: 0x05f5e0fc,
|
||||||
hydradx: 0x00000162,
|
hydradx: 0x00000162,
|
||||||
|
integritee: 0x000007df,
|
||||||
'interlay-parachain': 0x00000162,
|
'interlay-parachain': 0x00000162,
|
||||||
karura: 0x000002ae,
|
karura: 0x000002ae,
|
||||||
khala: 0x000001b2,
|
khala: 0x000001b2,
|
||||||
kusama: 0x000001b2,
|
kusama: 0x000001b2,
|
||||||
|
matrixchain: 0x00000483,
|
||||||
nodle: 0x000003eb,
|
nodle: 0x000003eb,
|
||||||
origintrail: 0x00000162,
|
origintrail: 0x00000162,
|
||||||
parallel: 0x00000162,
|
parallel: 0x00000162,
|
||||||
|
peaq: 0x00000d0a,
|
||||||
pendulum: 0x00000162,
|
pendulum: 0x00000162,
|
||||||
phala: 0x00000162,
|
phala: 0x00000162,
|
||||||
picasso: 0x000001b2,
|
picasso: 0x000001b2,
|
||||||
|
polimec: 0x00000d10,
|
||||||
polkadex: 0x0000031f,
|
polkadex: 0x0000031f,
|
||||||
polkadot: 0x00000162,
|
polkadot: 0x00000162,
|
||||||
polymesh: 0x00000253,
|
polymesh: 0x00000253,
|
||||||
|
quartz: 0x00000277,
|
||||||
sora: 0x00000269,
|
sora: 0x00000269,
|
||||||
stafi: 0x0000038b,
|
stafi: 0x0000038b,
|
||||||
statemine: 0x000001b2, // common-good on Kusama, shares derivation
|
statemine: 0x000001b2, // common-good on Kusama, shares derivation
|
||||||
statemint: 0x00000162, // common-good on Polkadot, shares derivation
|
statemint: 0x00000162, // common-good on Polkadot, shares derivation
|
||||||
ternoa: 0x00003e3,
|
ternoa: 0x00003e3,
|
||||||
unique: 0x00000162,
|
unique: 0x00000295,
|
||||||
|
vara: 0x00001370,
|
||||||
vtb: 0x000002b6,
|
vtb: 0x000002b6,
|
||||||
xxnetwork: 0x000007a3
|
xxnetwork: 0x000007a3,
|
||||||
|
zeitgeist: 0x00000162
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KnownTestnet } from '../types.js';
|
import type { KnownTestnet } from '../types.js';
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
export default [];
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
@@ -115,6 +115,6 @@ describe('selectableNetworks', (): void => {
|
|||||||
|
|
||||||
it('has a sorted list (first external, last external)', (): void => {
|
it('has a sorted list (first external, last external)', (): void => {
|
||||||
expect(selectableNetworks[3].displayName).toEqual('3DP network');
|
expect(selectableNetworks[3].displayName).toEqual('3DP network');
|
||||||
expect(selectableNetworks[selectableNetworks.length - 1].displayName).toEqual('xx network');
|
expect(selectableNetworks[selectableNetworks.length - 1].displayName).toEqual('Zeitgeist');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// TODO: This was removed, really cannot recall the reason...
|
// TODO: This was removed, really cannot recall the reason...
|
||||||
// ... put it back, but keep it removed
|
// ... put it back, but keep it removed
|
||||||
// import './detectPackage';
|
// import './packageDetect.js';
|
||||||
|
|
||||||
export * from './interfaces.js';
|
export * from './interfaces.js';
|
||||||
export { packageInfo } from './packageInfo.js';
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { KnownSubstrate, Network, SubstrateNetwork } from './types.js';
|
import type { KnownSubstrate, Network, SubstrateNetwork } from './types.js';
|
||||||
@@ -29,8 +29,8 @@ function toExpanded (o: KnownSubstrate): SubstrateNetwork {
|
|||||||
n.isIgnored = n.isTestnet || (
|
n.isIgnored = n.isTestnet || (
|
||||||
!(
|
!(
|
||||||
o.standardAccount &&
|
o.standardAccount &&
|
||||||
o.decimals && o.decimals.length &&
|
o.decimals?.length &&
|
||||||
o.symbols && o.symbols.length
|
o.symbols?.length
|
||||||
) &&
|
) &&
|
||||||
o.prefix !== 42
|
o.prefix !== 42
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './index.js';
|
export * from './index.js';
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
// (packageInfo imports will be kept as-is, user-editable)
|
||||||
|
|
||||||
import { detectPackage } from '@polkadot/util';
|
import { detectPackage } from '@polkadot/util';
|
||||||
|
|
||||||
import others from './detectOther.js';
|
|
||||||
import { packageInfo } from './packageInfo.js';
|
import { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
detectPackage(packageInfo, null, others);
|
detectPackage(packageInfo, null, []);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/networks', path: 'auto', type: 'auto', version: '12.2.2' };
|
export const packageInfo = { name: '@polkadot/networks', path: 'auto', type: 'auto', version: '13.3.1' };
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
// Copyright 2017-2025 @polkadot/networks authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|
||||||
import known from '@substrate/ss58-registry';
|
import known from '@substrate/ss58-registry';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
|
||||||
|
|
||||||
const other = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'packages/networks/test/ss58registry.json'), 'utf-8')) as unknown;
|
import { stringify } from '@polkadot/util';
|
||||||
|
|
||||||
describe('@substrate/ss58-registry', (): void => {
|
describe('@substrate/ss58-registry', (): void => {
|
||||||
it('has known values', (): void => {
|
it('has known values', (): void => {
|
||||||
const json = JSON.stringify(known, null, 2);
|
const testUrl = new URL('../test/ss58registry.json', import.meta.url);
|
||||||
|
const json = stringify(known, 2);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
expect(JSON.parse(json)).toEqual(other);
|
expect(
|
||||||
|
JSON.parse(json)
|
||||||
|
).toEqual(
|
||||||
|
JSON.parse(
|
||||||
|
fs.readFileSync(testUrl, 'utf-8')
|
||||||
|
)
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (process.env.GITHUB_REPOSITORY) {
|
if (process.env['GITHUB_REPOSITORY']) {
|
||||||
console.error(json);
|
console.error(json);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(path.join(process.cwd(), 'packages/networks/test/ss58registry.json'), json, { flag: 'w' });
|
fs.writeFileSync(testUrl, json, { flag: 'w' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { RegistryEntry } from '@substrate/ss58-registry';
|
import type { RegistryEntry } from '@substrate/ss58-registry';
|
||||||
|
import type { HexString } from '@polkadot/util/types';
|
||||||
|
|
||||||
export type Icon = 'beachball' | 'empty' | 'jdenticon' | 'polkadot' | 'substrate';
|
export type Icon = 'beachball' | 'empty' | 'jdenticon' | 'polkadot' | 'substrate';
|
||||||
|
|
||||||
@@ -9,22 +10,29 @@ export type KnownIcon = Record<string, Icon>;
|
|||||||
|
|
||||||
export type KnownLedger = Record<string, number>;
|
export type KnownLedger = Record<string, number>;
|
||||||
|
|
||||||
export type KnownGenesis = Record<string, string[]>;
|
export type KnownGenesis = Record<string, HexString[]>;
|
||||||
|
|
||||||
export type KnownSubstrate = RegistryEntry;
|
export type KnownSubstrate = RegistryEntry;
|
||||||
|
|
||||||
export type KnownTestnet = Record<string, true>;
|
export type KnownTestnet = Record<string, true>;
|
||||||
|
|
||||||
export interface SubstrateNetwork extends KnownSubstrate {
|
export interface SubstrateNetwork extends KnownSubstrate {
|
||||||
genesisHash: string[];
|
/** The genesisHash for the chain */
|
||||||
|
genesisHash: HexString[];
|
||||||
|
/** Does the chain has support for Ledger devices */
|
||||||
hasLedgerSupport: boolean;
|
hasLedgerSupport: boolean;
|
||||||
|
/** The IdentityIcon to use for the chain */
|
||||||
icon: Icon;
|
icon: Icon;
|
||||||
|
/** Flag set when we don't include this chain */
|
||||||
isIgnored: boolean;
|
isIgnored: boolean;
|
||||||
|
/** Flag to indicate a testnet */
|
||||||
isTestnet: boolean;
|
isTestnet: boolean;
|
||||||
|
/** The Ledger-specific/required slip44 for the chain */
|
||||||
slip44?: number | null;
|
slip44?: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Network extends SubstrateNetwork {
|
export interface Network extends SubstrateNetwork {
|
||||||
|
/** The network assigned to this chain */
|
||||||
network: string;
|
network: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -222,15 +222,13 @@
|
|||||||
"network": "darwinia",
|
"network": "darwinia",
|
||||||
"displayName": "Darwinia Network",
|
"displayName": "Darwinia Network",
|
||||||
"symbols": [
|
"symbols": [
|
||||||
"RING",
|
"RING"
|
||||||
"KTON"
|
|
||||||
],
|
],
|
||||||
"decimals": [
|
"decimals": [
|
||||||
9,
|
18
|
||||||
9
|
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "secp256k1",
|
||||||
"website": "https://darwinia.network/"
|
"website": "https://darwinia.network"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 19,
|
"prefix": 19,
|
||||||
@@ -258,6 +256,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://stafi.io"
|
"website": "https://stafi.io"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 21,
|
||||||
|
"network": "karmachain",
|
||||||
|
"displayName": "Karmacoin",
|
||||||
|
"symbols": [
|
||||||
|
"KCOIN"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://karmaco.in"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 22,
|
"prefix": 22,
|
||||||
"network": "dock-pos-mainnet",
|
"network": "dock-pos-mainnet",
|
||||||
@@ -497,12 +508,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 41,
|
"prefix": 41,
|
||||||
"network": "poli",
|
"network": "polimec",
|
||||||
"displayName": "Polimec Chain",
|
"displayName": "Polimec Protocol",
|
||||||
"symbols": [],
|
"symbols": [
|
||||||
"decimals": [],
|
"PLMC"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
10
|
||||||
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://polimec.io/"
|
"website": "https://www.polimec.org/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 42,
|
"prefix": 42,
|
||||||
@@ -700,10 +715,23 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://pendulumchain.org/"
|
"website": "https://pendulumchain.org/"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 58,
|
||||||
|
"network": "eternal-civilization",
|
||||||
|
"displayName": "Eternal Civilization",
|
||||||
|
"symbols": [
|
||||||
|
"ECC"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "http://www.ysknfr.cn/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 63,
|
"prefix": 63,
|
||||||
"network": "hydradx",
|
"network": "hydradx",
|
||||||
"displayName": "HydraDX",
|
"displayName": "Hydration",
|
||||||
"symbols": [
|
"symbols": [
|
||||||
"HDX"
|
"HDX"
|
||||||
],
|
],
|
||||||
@@ -711,7 +739,7 @@
|
|||||||
12
|
12
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://hydradx.io"
|
"website": "https://hydration.net"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 65,
|
"prefix": 65,
|
||||||
@@ -1101,7 +1129,7 @@
|
|||||||
12
|
12
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://vara-network.io/"
|
"website": "https://vara.network/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 172,
|
"prefix": 172,
|
||||||
@@ -1168,6 +1196,45 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://sora.org"
|
"website": "https://sora.org"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 440,
|
||||||
|
"network": "allfeat_network",
|
||||||
|
"displayName": "Allfeat Network",
|
||||||
|
"symbols": [
|
||||||
|
"AFT"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://allfeat.network"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 666,
|
||||||
|
"network": "metaquity_network",
|
||||||
|
"displayName": "Metaquity Network",
|
||||||
|
"symbols": [
|
||||||
|
"MQTY"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://metaquity.xyz/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 777,
|
||||||
|
"network": "curio",
|
||||||
|
"displayName": "Curio",
|
||||||
|
"symbols": [
|
||||||
|
"CGT"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://parachain.capitaldex.exchange/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 789,
|
"prefix": 789,
|
||||||
"network": "geek",
|
"network": "geek",
|
||||||
@@ -1350,6 +1417,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://logion.network"
|
"website": "https://logion.network"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 2024,
|
||||||
|
"network": "vow-chain",
|
||||||
|
"displayName": "Enigmatic Smile",
|
||||||
|
"symbols": [
|
||||||
|
"VOW"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://www.vow.foundation/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 2032,
|
"prefix": 2032,
|
||||||
"network": "interlay",
|
"network": "interlay",
|
||||||
@@ -1402,6 +1482,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://chainflip.io/"
|
"website": "https://chainflip.io/"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 2199,
|
||||||
|
"network": "moonsama",
|
||||||
|
"displayName": "Moonsama",
|
||||||
|
"symbols": [
|
||||||
|
"SAMA"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "secp256k1",
|
||||||
|
"website": "https://moonsama.com"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 2206,
|
"prefix": 2206,
|
||||||
"network": "ICE",
|
"network": "ICE",
|
||||||
@@ -1442,17 +1535,17 @@
|
|||||||
"website": "https://subspace.network"
|
"website": "https://subspace.network"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 4006,
|
"prefix": 3333,
|
||||||
"network": "tangle",
|
"network": "peerplays",
|
||||||
"displayName": "Tangle Network",
|
"displayName": "Peerplays",
|
||||||
"symbols": [
|
"symbols": [
|
||||||
"TNT"
|
"PPY"
|
||||||
],
|
],
|
||||||
"decimals": [
|
"decimals": [
|
||||||
18
|
18
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "secp256k1",
|
||||||
"website": "https://www.webb.tools/"
|
"website": "https://www.peerplays.com/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 4450,
|
"prefix": 4450,
|
||||||
@@ -1481,17 +1574,30 @@
|
|||||||
"website": "https://humanode.io"
|
"website": "https://humanode.io"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 6094,
|
"prefix": 5845,
|
||||||
"network": "subspace",
|
"network": "tangle",
|
||||||
"displayName": "Subspace",
|
"displayName": "Tangle Network",
|
||||||
"symbols": [
|
"symbols": [
|
||||||
"SSC"
|
"TNT"
|
||||||
],
|
],
|
||||||
"decimals": [
|
"decimals": [
|
||||||
18
|
18
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://subspace.network"
|
"website": "https://www.tangle.tools/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 6094,
|
||||||
|
"network": "autonomys",
|
||||||
|
"displayName": "Autonomys",
|
||||||
|
"symbols": [
|
||||||
|
"AI3"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://autonomys.xyz"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"prefix": 7007,
|
"prefix": 7007,
|
||||||
@@ -1523,6 +1629,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://gmordie.com"
|
"website": "https://gmordie.com"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 7306,
|
||||||
|
"network": "krigan",
|
||||||
|
"displayName": "Krigan Network",
|
||||||
|
"symbols": [
|
||||||
|
"KRGN"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://krigan.network"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 7391,
|
"prefix": 7391,
|
||||||
"network": "unique_mainnet",
|
"network": "unique_mainnet",
|
||||||
@@ -1536,6 +1655,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://unique.network"
|
"website": "https://unique.network"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 8866,
|
||||||
|
"network": "golden_gate",
|
||||||
|
"displayName": "Golden Gate",
|
||||||
|
"symbols": [
|
||||||
|
"GGX"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://ggxchain.io/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 8883,
|
"prefix": 8883,
|
||||||
"network": "sapphire_mainnet",
|
"network": "sapphire_mainnet",
|
||||||
@@ -1549,6 +1681,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://unique.network"
|
"website": "https://unique.network"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 8886,
|
||||||
|
"network": "golden_gate_sydney",
|
||||||
|
"displayName": "Golden Gate Sydney",
|
||||||
|
"symbols": [
|
||||||
|
"GGXT"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://ggxchain.io/"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 9072,
|
"prefix": 9072,
|
||||||
"network": "hashed",
|
"network": "hashed",
|
||||||
@@ -1609,7 +1754,7 @@
|
|||||||
"TCESS"
|
"TCESS"
|
||||||
],
|
],
|
||||||
"decimals": [
|
"decimals": [
|
||||||
12
|
18
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://cess.cloud"
|
"website": "https://cess.cloud"
|
||||||
@@ -1622,7 +1767,7 @@
|
|||||||
"CESS"
|
"CESS"
|
||||||
],
|
],
|
||||||
"decimals": [
|
"decimals": [
|
||||||
12
|
18
|
||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://cess.cloud"
|
"website": "https://cess.cloud"
|
||||||
@@ -1679,6 +1824,19 @@
|
|||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://nftmart.io"
|
"website": "https://nftmart.io"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"prefix": 12850,
|
||||||
|
"network": "analog-timechain",
|
||||||
|
"displayName": "Analog Timechain",
|
||||||
|
"symbols": [
|
||||||
|
"ANLOG"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://analog.one"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"prefix": 13116,
|
"prefix": 13116,
|
||||||
"network": "bittensor",
|
"network": "bittensor",
|
||||||
@@ -1691,5 +1849,57 @@
|
|||||||
],
|
],
|
||||||
"standardAccount": "*25519",
|
"standardAccount": "*25519",
|
||||||
"website": "https://bittensor.com"
|
"website": "https://bittensor.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 14697,
|
||||||
|
"network": "goro",
|
||||||
|
"displayName": "GORO Network",
|
||||||
|
"symbols": [
|
||||||
|
"GORO"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://goro.network"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 14998,
|
||||||
|
"network": "mosaic-chain",
|
||||||
|
"displayName": "Mosaic Chain",
|
||||||
|
"symbols": [
|
||||||
|
"MOS"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://mosaicchain.io"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 29972,
|
||||||
|
"network": "mythos",
|
||||||
|
"displayName": "Mythos",
|
||||||
|
"symbols": [
|
||||||
|
"MYTH"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"standardAccount": "secp256k1",
|
||||||
|
"website": "https://mythos.foundation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prefix": 8888,
|
||||||
|
"network": "xcavate",
|
||||||
|
"displayName": "Xcavate Protocol",
|
||||||
|
"symbols": [
|
||||||
|
"XCAV"
|
||||||
|
],
|
||||||
|
"decimals": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"standardAccount": "*25519",
|
||||||
|
"website": "https://xcavate.io/"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||||
"description": "A collection of useful crypto utilities for @polkadot",
|
"description": "A collection of useful crypto utilities for @polkadot",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
|
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -16,29 +16,29 @@
|
|||||||
"sideEffects": [
|
"sideEffects": [
|
||||||
"./bundleInit.js",
|
"./bundleInit.js",
|
||||||
"./bundleInit.cjs",
|
"./bundleInit.cjs",
|
||||||
"./detectPackage.js",
|
"./packageDetect.js",
|
||||||
"./detectPackage.cjs"
|
"./packageDetect.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "12.2.2",
|
"version": "13.3.1",
|
||||||
"browser": {
|
"browser": {
|
||||||
"crypto": false,
|
"crypto": false,
|
||||||
"stream": false
|
"stream": false
|
||||||
},
|
},
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noble/curves": "1.1.0",
|
"@noble/curves": "^1.3.0",
|
||||||
"@noble/hashes": "1.3.1",
|
"@noble/hashes": "^1.3.3",
|
||||||
"@polkadot/networks": "12.2.2",
|
"@polkadot/networks": "13.3.1",
|
||||||
"@polkadot/util": "12.2.2",
|
"@polkadot/util": "13.3.1",
|
||||||
"@polkadot/wasm-crypto": "^7.2.1",
|
"@polkadot/wasm-crypto": "^7.4.1",
|
||||||
"@polkadot/wasm-util": "^7.2.1",
|
"@polkadot/wasm-util": "^7.4.1",
|
||||||
"@polkadot/x-bigint": "12.2.2",
|
"@polkadot/x-bigint": "13.3.1",
|
||||||
"@polkadot/x-randomvalues": "12.2.2",
|
"@polkadot/x-randomvalues": "13.3.1",
|
||||||
"@scure/base": "1.1.1",
|
"@scure/base": "^1.1.7",
|
||||||
"tslib": "^2.5.3"
|
"tslib": "^2.8.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@polkadot/util": "12.2.2"
|
"@polkadot/util": "13.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
|
|
||||||
import { decodeAddress } from './decode.js';
|
import { decodeAddress } from './decode.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name addressToEvm
|
* @name addressToEvm
|
||||||
* @summary Converts an SS58 address to its corresponding EVM address.
|
* @summary Converts an SS58 address to its corresponding EVM address.
|
||||||
*/
|
*/
|
||||||
export function addressToEvm (address: HexString | string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
|
export function addressToEvm (address: string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
|
||||||
return decodeAddress(address, ignoreChecksum).subarray(0, 20);
|
return decodeAddress(address, ignoreChecksum).subarray(0, 20);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { Prefix } from './types.js';
|
import type { Prefix } from './types.js';
|
||||||
|
|
||||||
import { base58Decode } from '../base58/index.js';
|
import { base58Decode } from '../base58/index.js';
|
||||||
@@ -14,7 +13,7 @@ import { defaults } from './defaults.js';
|
|||||||
* @description
|
* @description
|
||||||
* From the provided input, validate that the address is a valid input.
|
* From the provided input, validate that the address is a valid input.
|
||||||
*/
|
*/
|
||||||
export function checkAddress (address: HexString | string, prefix: Prefix): [boolean, string | null] {
|
export function checkAddress (address: string, prefix: Prefix): [boolean, string | null] {
|
||||||
let decoded;
|
let decoded;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { sshash } from './sshash.js';
|
import { sshash } from './sshash.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { Prefix } from './types.js';
|
import type { Prefix } from './types.js';
|
||||||
|
|
||||||
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L6
|
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L6
|
||||||
@@ -11,7 +10,7 @@ import { base58Decode } from '../base58/index.js';
|
|||||||
import { checkAddressChecksum } from './checksum.js';
|
import { checkAddressChecksum } from './checksum.js';
|
||||||
import { defaults } from './defaults.js';
|
import { defaults } from './defaults.js';
|
||||||
|
|
||||||
export function decodeAddress (encoded?: HexString | string | Uint8Array | null, ignoreChecksum?: boolean, ss58Format: Prefix = -1): Uint8Array {
|
export function decodeAddress (encoded?: string | Uint8Array | null, ignoreChecksum?: boolean, ss58Format: Prefix = -1): Uint8Array {
|
||||||
if (!encoded) {
|
if (!encoded) {
|
||||||
throw new Error('Invalid empty address passed');
|
throw new Error('Invalid empty address passed');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { availableNetworks } from '../networks.js';
|
import { availableNetworks } from '../networks.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { DeriveJunction } from '../key/DeriveJunction.js';
|
import type { DeriveJunction } from '../key/DeriveJunction.js';
|
||||||
import type { Prefix } from './types.js';
|
import type { Prefix } from './types.js';
|
||||||
|
|
||||||
@@ -20,7 +19,7 @@ function filterHard ({ isHard }: DeriveJunction): boolean {
|
|||||||
* @description
|
* @description
|
||||||
* Creates a sr25519 derived address based on the input address/publicKey and the uri supplied.
|
* Creates a sr25519 derived address based on the input address/publicKey and the uri supplied.
|
||||||
*/
|
*/
|
||||||
export function deriveAddress (who: HexString | Uint8Array | string, suri: string, ss58Format?: Prefix): string {
|
export function deriveAddress (who: string | Uint8Array, suri: string, ss58Format?: Prefix): string {
|
||||||
const { path } = keyExtractPath(suri);
|
const { path } = keyExtractPath(suri);
|
||||||
|
|
||||||
if (!path.length || path.every(filterHard)) {
|
if (!path.length || path.every(filterHard)) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import type { HexString } from '@polkadot/util/types';
|
|
||||||
import type { Prefix } from './types.js';
|
import type { Prefix } from './types.js';
|
||||||
|
|
||||||
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L34
|
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L34
|
||||||
@@ -12,7 +11,7 @@ import { decodeAddress } from './decode.js';
|
|||||||
import { defaults } from './defaults.js';
|
import { defaults } from './defaults.js';
|
||||||
import { sshash } from './sshash.js';
|
import { sshash } from './sshash.js';
|
||||||
|
|
||||||
export function encodeAddress (key: HexString | Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
|
export function encodeAddress (key: string | Uint8Array, ss58Format: Prefix = defaults.prefix): string {
|
||||||
// decode it, this means we can re-encode an address
|
// decode it, this means we can re-encode an address
|
||||||
const u8a = decodeAddress(key);
|
const u8a = decodeAddress(key);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
|
// Copyright 2017-2025 @polkadot/util-crypto authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user