Compare commits

...
200 Commits
Author SHA1 Message Date
github-actions[bot] 4da1e8ba62 [CI Skip] release/stable 12.6.2
skip-checks: true
2023-12-18 09:47:28 +00:00
Jaco d498ad4424 12.6.2 (#1902) 2023-12-18 11:42:21 +02:00
github-actions[bot] 9a9650261b [CI Skip] bump/beta 12.6.2-1-x
skip-checks: true
2023-12-18 08:35:49 +00:00
Jaco 6dfff0d40c Bump yarn berry, bump deps (#1901) 2023-12-18 10:30:39 +02:00
github-actions[bot] 0770bed5fd [CI Skip] bump/beta 12.6.2-0-x
skip-checks: true
2023-12-12 05:39:14 +00:00
Jaco 6fde7bc5a0 Bump dev deps (w/ TS 5.3.3.) (#1900)
* Bump dev deps (w/ TS 5.3.3.)

* Deno override to any

* Exdplicit around esm.sh work-around
2023-12-12 07:33:59 +02:00
github-actions[bot] f55e88c116 [CI Skip] release/stable 12.6.1
skip-checks: true
2023-11-18 05:02:49 +00:00
Jaco abd4cfdd1f 12.6.1 (#1897) 2023-11-18 06:57:34 +02:00
github-actions[bot] f261ea2924 [CI Skip] bump/beta 12.5.2-10-x
skip-checks: true
2023-11-17 19:50:01 +00:00
Jaco f14d2681b1 Fix build for esm/cjs warning additions (#1896) 2023-11-17 21:44:51 +02:00
github-actions[bot] b9be030f12 [CI Skip] bump/beta 12.5.2-9-x
skip-checks: true
2023-11-17 19:14:46 +00:00
Chris bc103d9479 Get rid of warnings for dual esm and cjs packages of the same version (#1890)
* Get rid of warnings for dual esm and cjs packages of the same version

* Add command line flag for suppressing ESM CJS warnings when all packages are of the same version
2023-11-17 21:09:29 +02:00
github-actions[bot] c76c754741 [CI Skip] bump/beta 12.5.2-8-x
skip-checks: true
2023-11-17 14:40:49 +00:00
Jaco bd21e730b3 Adjust isRiscV helper to check for PVM\0 bytes (#1895)
* Adjust `isRiscV` helper to check for `PVM\0` bytes

* Also check for ELF

* Adjust tests

* Update description
2023-11-17 16:35:32 +02:00
github-actions[bot] a2cfdb8ca7 [CI Skip] bump/beta 12.5.2-7-x
skip-checks: true
2023-11-17 10:16:21 +00:00
Jaco 4857de9f38 Bump wasm + slight adj. to logger process.env (#1894)
* Bump wasm + slight adj. to logger process.env

* Adjust for Deno

* Adjust globalThis definition

* Adjust
2023-11-17 12:10:53 +02:00
github-actions[bot] d525b8c92d [CI Skip] bump/beta 12.5.2-6-x
skip-checks: true
2023-11-17 08:40:25 +00:00
Jaco 2afbce2652 Bump dev deps, drop Node 16 (#1892)
* Bump dev deps, drop Node 16

* Rebuild networks
2023-11-17 10:35:10 +02:00
github-actions[bot] 3c7525649e [CI Skip] bump/beta 12.5.2-5-x
skip-checks: true
2023-10-23 08:36:24 +00:00
Jaco 6ebcc2dd6d Bump dev deps (#1888) 2023-10-23 11:30:02 +03:00
github-actions[bot] 120438d7e6 [CI Skip] bump/beta 12.5.2-4-x
skip-checks: true
2023-10-15 10:50:18 +00:00
Jaco f5f1bc6f4f Bump TS (#1887) 2023-10-15 13:43:48 +03:00
github-actions[bot] 28d5302fd6 [CI Skip] bump/beta 12.5.2-3-x
skip-checks: true
2023-10-11 08:58:45 +00:00
Jaco 773cc29b11 Bump deps (#1886) 2023-10-11 11:51:04 +03:00
github-actions[bot] a20c7eb2e5 [CI Skip] bump/beta 12.5.2-2-x
skip-checks: true
2023-10-03 06:07:45 +00:00
Jaco 487d0d9a57 Bump dev deps (#1884)
* Bump dev deps

* CHANGELOG
2023-10-03 09:01:15 +03:00
github-actions[bot] a910e9ce6f [CI Skip] bump/beta 12.5.2-1-x
skip-checks: true
2023-09-23 17:44:23 +00:00
Jaco 1062de7aa8 Bump deps (#1883) 2023-09-23 20:36:41 +03:00
github-actions[bot] 4cabc67b24 [CI Skip] bump/beta 12.5.2-0-x
skip-checks: true
2023-09-23 14:03:03 +00:00
Yaroslav Bolyukin 13bc84e30b Add quartz support for ledger, update unique slip-0044 identifier (#1882)
* build: bump ledger-substrate dependency

* fix: update slip-0044 id for unique

* feat(ledger): add quartz support

* build: update yarn.lock
2023-09-23 16:56:57 +03:00
github-actions[bot] 67fe7738d8 [CI Skip] release/stable 12.5.1
skip-checks: true
2023-09-15 05:53:02 +00:00
Jaco 13c6b4e553 12.5.1 (#1881) 2023-09-15 08:45:57 +03:00
github-actions[bot] 9306f9db92 [CI Skip] bump/beta 12.4.3-7-x
skip-checks: true
2023-09-14 18:24:39 +00:00
Leonardo Custodio 62a30f258e Ledger support (#1879) 2023-09-14 21:18:10 +03:00
github-actions[bot] 81609aba59 [CI Skip] bump/beta 12.4.3-6-x
skip-checks: true
2023-09-14 05:19:48 +00:00
Jaco 301d73d13f Bump deps (w/ ledger) (#1880) 2023-09-14 08:13:48 +03:00
github-actions[bot] 92abf4463d [CI Skip] bump/beta 12.4.3-5-x
skip-checks: true
2023-09-06 10:02:03 +00:00
peetzweg/ b018f78b77 adds isRiscV guard function similar to isWasm (#1878) 2023-09-06 12:55:36 +03:00
github-actions[bot] 608117f04a [CI Skip] bump/beta 12.4.3-4-x
skip-checks: true
2023-08-31 05:13:47 +00:00
Jaco 2ac00565b0 Bump deps (#1877) 2023-08-31 08:07:35 +03:00
github-actions[bot] 673a59af58 [CI Skip] bump/beta 12.4.3-3-x
skip-checks: true
2023-08-30 09:13:53 +00:00
Jaco aa394fe7cd Explicit note for test genesis (standalone or para) (#1876)
* Explicit note for test genesis (standalone or para)

* Add test for testnet exclusions

* Extract keys
2023-08-30 12:07:29 +03:00
github-actions[bot] ee7f2cc7f5 [CI Skip] bump/beta 12.4.3-2-x
skip-checks: true
2023-08-30 08:32:15 +00:00
Jaco da6efc821e Add additional comments on type interfaces (#1875) 2023-08-30 11:25:10 +03:00
github-actions[bot] a3b884d437 [CI Skip] bump/beta 12.4.3-1-x
skip-checks: true
2023-08-30 06:37:14 +00:00
Jaco 560c054750 Bump dev deps (#1874) 2023-08-30 09:31:15 +03:00
github-actions[bot] 09621d0010 [CI Skip] bump/beta 12.4.3-0-x
skip-checks: true
2023-08-24 05:17:05 +00:00
Jaco 37a81d9594 Bump deps (noble hashes/curves) (#1873)
* Bump deps (noble hashes/curves)

* Adjust dep range
2023-08-24 08:10:54 +03:00
github-actions[bot] 62182bae03 [CI Skip] release/stable 12.4.2
skip-checks: true
2023-08-23 09:55:33 +00:00
Jaco 2ee03a5f81 12.4.2 (#1872) 2023-08-23 12:48:09 +03:00
github-actions[bot] 7a5a88a135 [CI Skip] bump/beta 12.4.2-5-x
skip-checks: true
2023-08-23 09:09:55 +00:00
Jaco f4e0e2111f Extend u8aToBuffer check with hasBuffer (#1871)
* Extend u8aToBuffer check with hasBuffer

* CHANGELOG

* Always return Uint8Array

* New instance of fallback
2023-08-23 12:01:59 +03:00
github-actions[bot] aac902011e [CI Skip] bump/beta 12.4.2-4-x
skip-checks: true
2023-08-23 08:29:44 +00:00
Jaco a030330808 Additional test cleanups (#1870)
* Additional test cleanups

* More compact test loops

* Correct float expected values

* Adjust
2023-08-23 11:23:45 +03:00
github-actions[bot] d108beafd4 [CI Skip] bump/beta 12.4.2-3-x
skip-checks: true
2023-08-23 06:21:04 +00:00
Jaco 90e20ed4d2 Some small test loop cleanups (#1869) 2023-08-23 09:14:55 +03:00
github-actions[bot] 723ec10fa1 [CI Skip] bump/beta 12.4.2-2-x
skip-checks: true
2023-08-22 17:56:58 +00:00
Jaco cf9082e03a Adjust BE u8aTo{Bn, BigInt, Number} check (#1868)
* Adjust BE u8aTo{Bn, BigInt, Numer} check

* Adjust function names (liberal find-and-replace)
2023-08-22 20:50:50 +03:00
github-actions[bot] 3dce4fe04a [CI Skip] bump/beta 12.4.2-1-x
skip-checks: true
2023-08-22 17:16:39 +00:00
Jaco 55ebc4f0d9 Check sign flag for i{8, 16, 32, ...} conversions (#1867)
* Check sign flag for i{8, 16, 32, ...} conversions

* Ensure negative path is tested on i32 perf

* CHANGELOG

* Comment check on top-most signed bit

* toBn test array

* toNumber uses exposed toBn tests

* Re-use tests in toBn

* Re-use expectations inside bnToU8a

* Remove explicit BE (swap to non-optimal reverse)

* Adjust

* Remove defunct "only BE" comment

* typo

* Use bnToU8a tests in biToU8a

* Flatten tests

* Additional tests

* Additional tests
2023-08-22 20:08:30 +03:00
github-actions[bot] ce2122e9fa [CI Skip] bump/beta 12.4.2-0-x
skip-checks: true
2023-08-20 06:55:29 +00:00
Jaco 0fb55fe633 Bump deps (#1865) 2023-08-20 09:49:19 +03:00
github-actions[bot] adca13bc8c [CI Skip] release/stable 12.4.1
skip-checks: true
2023-08-17 12:30:06 +00:00
Jaco b939c3593c 12.4.1 (#1864) 2023-08-17 15:21:30 +03:00
github-actions[bot] aa70b81a89 [CI Skip] bump/beta 12.3.3-12-x
skip-checks: true
2023-08-17 09:04:14 +00:00
Jaco f3e1d6beda Bump deps (#1863)
* Bump deps

* Adjust Buffer* types
2023-08-17 11:56:46 +03:00
github-actions[bot] 754bc4dc21 [CI Skip] bump/beta 12.3.3-11-x
skip-checks: true
2023-08-16 09:28:29 +00:00
Jaco a8df82dfe0 Update internal buffer types (#1862)
* Update internal buffer types

* u8aToBuffer/isBuffer does not require Buffer type

* Re-add BufferObj equals
2023-08-16 12:22:18 +03:00
github-actions[bot] 4ff56f5cfe [CI Skip] bump/beta 12.3.3-10-x
skip-checks: true
2023-08-16 08:18:29 +00:00
Jaco 1fd9f04458 Bump dev (#1861)
* Bump dev

* Adjust linting
2023-08-16 11:12:06 +03:00
github-actions[bot] a28306f487 [CI Skip] bump/beta 12.3.3-9-x
skip-checks: true
2023-08-16 06:23:08 +00:00
Jaco 19941bcb61 Bump deps (#1860) 2023-08-16 09:16:49 +03:00
github-actions[bot] 2cb85866ab [CI Skip] bump/beta 12.3.3-8-x
skip-checks: true
2023-08-01 13:10:02 +00:00
Jaco 8556de1fa2 Bump dev deps (#1859) 2023-08-01 16:02:08 +03:00
github-actions[bot] 143d070d21 [CI Skip] bump/beta 12.3.3-7-x
skip-checks: true
2023-07-27 11:13:56 +00:00
Jaco 2a53b1121e Bump deps (#1857) 2023-07-27 14:06:32 +03:00
github-actions[bot] 0733137f79 [CI Skip] bump/beta 12.3.3-6-x
skip-checks: true
2023-07-21 06:45:20 +00:00
Jaco cc918660cb Bump deps (#1856) 2023-07-21 09:38:52 +03:00
github-actions[bot] 3527f8c7d9 [CI Skip] bump/beta 12.3.3-5-x
skip-checks: true
2023-07-15 07:04:24 +00:00
Jaco 41caf2fd6d Bump dev (w/ ts-eslint updates) (#1854)
* Bump dev (w/ ts-eslint updates)

* Adjust ipfs compat check
2023-07-15 09:57:35 +03:00
github-actions[bot] d407513dd1 [CI Skip] bump/beta 12.3.3-4-x
skip-checks: true
2023-07-06 07:35:28 +00:00
Jaco bd76349552 Bump deps (#1853)
* Bump deps

* Rebuild networks test
2023-07-06 10:29:31 +03:00
github-actions[bot] 0ec894b732 [CI Skip] bump/beta 12.3.3-3-x
skip-checks: true
2023-06-27 08:42:17 +00:00
Jaco be4cb52dd3 Bump deps (#1851)
* Bump deps

* Update
2023-06-27 11:36:14 +03:00
github-actions[bot] 456eaeeb94 [CI Skip] bump/beta 12.3.3-2-x
skip-checks: true
2023-06-21 06:22:14 +00:00
Jaco 0ec50b6159 Support for signRaw on Ledger SubstrateApp (#1849)
* Support for signRaw on Ledger SubstrateApp

* Adjust with callback return

* Ensure message is wrapped before signing
2023-06-21 09:15:10 +03:00
github-actions[bot] 98336fd2e5 [CI Skip] bump/beta 12.3.3-1-x
skip-checks: true
2023-06-21 05:30:22 +00:00
Jaco 7b3bbd3ef2 Bump deps (#1850) 2023-06-21 08:24:21 +03:00
github-actions[bot] 49afd1fe09 [CI Skip] bump/beta 12.3.3-0-x
skip-checks: true
2023-06-16 06:42:19 +00:00
Jaco 0df17104d5 Use import.meta.url instead of process.cwd() (#1847) 2023-06-16 09:35:40 +03:00
github-actions[bot] db8434559e [CI Skip] release/stable 12.3.2
skip-checks: true
2023-06-12 05:27:44 +00:00
Jaco eaf9d97ae3 12.3.2 (#1846) 2023-06-12 08:20:17 +03:00
github-actions[bot] 3e6d86b768 [CI Skip] release/stable 12.3.1
skip-checks: true
2023-06-11 06:26:55 +00:00
Jaco 8aab41648e 12.3.1 (#1845) 2023-06-11 09:20:32 +03:00
github-actions[bot] 4a535c08c7 [CI Skip] bump/beta 12.2.3-3-x
skip-checks: true
2023-06-10 08:09:54 +00:00
Jaco 715486d54e Additional adjustments to keyring types (#1844) 2023-06-10 11:01:23 +03:00
github-actions[bot] 1073dc14aa [CI Skip] bump/beta 12.2.3-2-x
skip-checks: true
2023-06-10 04:50:38 +00:00
Jaco 5cca95e855 Adjust object index typings (#1843)
* Adjust object index typings

* Update packages/util/src/is/childClass.ts

* Expand meta definition

* Extend meta with extension info

* Adjust

* CHANGELOG
2023-06-10 07:44:28 +03:00
github-actions[bot] 942b623273 [CI Skip] bump/beta 12.2.3-1-x
skip-checks: true
2023-06-06 05:37:49 +00:00
Jaco eea99656ad Only allow padding characters in base64 strings (#1842)
* Only allow padding characters in base64 strings

* Explicit padding sequence error
2023-06-06 08:31:44 +03:00
github-actions[bot] 04b6df9ac5 [CI Skip] bump/beta 12.2.3-0-x
skip-checks: true
2023-06-05 18:29:35 +00:00
Carlo Sala d5132b56de feat(networks): add zeitgeist Ledger support (#1840)
* feat(networks): add zeitgeist Ledger support

* fix(networks): update test
2023-06-05 21:23:31 +03:00
github-actions[bot] 1fdc2c8dae [CI Skip] release/stable 12.2.2
skip-checks: true
2023-06-04 09:06:26 +00:00
Jaco b6a2693e5f 12.2.2 (#1839) 2023-06-04 11:58:18 +03:00
github-actions[bot] 8b3687e062 [CI Skip] bump/beta 12.2.2-7-x
skip-checks: true
2023-06-04 08:30:55 +00:00
Jaco 3a8429b687 Bump noble/{curves, hashes} (#1838) 2023-06-04 11:24:40 +03:00
github-actions[bot] 26e9b01198 [CI Skip] bump/beta 12.2.2-6-x
skip-checks: true
2023-06-02 10:51:44 +00:00
Jaco 76d71d946d Bump deps (w/ TS 5.1) (#1837)
* Bump deps (w/ TS 5.1)

* Adjust fallback

* Revert promisify adjustments
2023-06-02 13:44:54 +03:00
github-actions[bot] 0ebc7bd374 [CI Skip] bump/beta 12.2.2-5-x
skip-checks: true
2023-05-30 08:57:58 +00:00
Jaco d94c126744 Apply missing count assignment in for loops (#1836) 2023-05-30 11:50:04 +03:00
github-actions[bot] 86597dcb17 [CI Skip] bump/beta 12.2.2-4-x
skip-checks: true
2023-05-28 07:53:44 +00:00
Jaco 1be682827b Bump deps (incl Ledger) (#1835) 2023-05-28 10:47:42 +03:00
github-actions[bot] 081b6b4f2b [CI Skip] bump/beta 12.2.2-3-x
skip-checks: true
2023-05-25 07:37:17 +00:00
Jaco 7dc38e78cf jg-bump-deps (#1834) 2023-05-25 10:29:17 +03:00
github-actions[bot] dcf214f250 [CI Skip] bump/beta 12.2.2-2-x
skip-checks: true
2023-05-21 09:48:48 +00:00
Jaco 2e82528e1b Bump dev (w/ eslint config adj) (#1832) 2023-05-21 12:42:39 +03:00
github-actions[bot] 090b91910f [CI Skip] bump/beta 12.2.2-1-x
skip-checks: true
2023-05-18 09:05:38 +00:00
Jaco 058d197646 Adjust tsconfig usage (w/ latest dev) (#1831) 2023-05-18 11:59:17 +03:00
github-actions[bot] 0fca8904e6 [CI Skip] bump/beta 12.2.2-0-x
skip-checks: true
2023-05-18 05:35:04 +00:00
Jaco 0bf7bc416a Bump dev deps (#1830) 2023-05-18 08:29:07 +03:00
github-actions[bot] ea08763307 [CI Skip] release/stable 12.2.1
skip-checks: true
2023-05-13 08:25:36 +00:00
Jaco 5272645abe 12.2.1 (#1829) 2023-05-13 11:17:53 +03:00
Jaco e5373c35c8 Unroll u8aToBigInt loops (#1821)
* Unroll u8aToBigInt loops

* Bump dev

* Rolling tests
2023-05-13 10:51:46 +03:00
github-actions[bot] b73b96e412 [CI Skip] bump/beta 12.1.3-2-x
skip-checks: true
2023-05-06 09:00:28 +00:00
Jaco 18d24bf509 Bump dev (#1827) 2023-05-06 11:52:33 +03:00
github-actions[bot] fe230f143f [CI Skip] bump/beta 12.1.3-1-x
skip-checks: true
2023-05-05 07:07:53 +00:00
Jaco 6357c1e040 Update Constructor interface params (#1823)
* Update Constructor interface params

* Adjust

* Adjust
2023-05-05 10:01:56 +03:00
github-actions[bot] 1876efe13e [CI Skip] bump/beta 12.1.3-0-x
skip-checks: true
2023-05-05 06:46:01 +00:00
Jaco 9de142b5f6 Bump deps (#1826) 2023-05-05 09:39:58 +03:00
github-actions[bot] e5cb0ba2b4 [CI Skip] release/stable 12.1.2
skip-checks: true
2023-05-01 16:14:41 +00:00
Jaco dba5d3e7b3 Fix typings for isChildClass (#1824)
* Fix typings for isChildClass

* Adjust
2023-05-01 19:08:41 +03:00
github-actions[bot] 8ccfecfff8 [CI Skip] bump/beta 12.1.2-0-x
skip-checks: true
2023-04-29 10:42:54 +00:00
Jaco f2e79ffe67 Align u8aToBigInt tests with u8aToBn (#1820)
* Align u8aToBigInt tests with u8aToBn

* Remove unused import
2023-04-29 13:33:53 +03:00
github-actions[bot] e7f595a11f [CI Skip] release/stable 12.1.1
skip-checks: true
2023-04-29 05:50:45 +00:00
Jaco 770471aef0 12.1.1 (#1819) 2023-04-29 08:44:25 +03:00
github-actions[bot] 6b1ff0036e [CI Skip] bump/beta 12.0.2-2-x
skip-checks: true
2023-04-28 06:13:30 +00:00
Jaco fee81b89ac Bump deps (#1818) 2023-04-28 09:07:41 +03:00
github-actions[bot] c4d5b8e1ae [CI Skip] bump/beta 12.0.2-1-x
skip-checks: true
2023-04-26 09:36:39 +00:00
Jaco 5674b1df67 Bump deps w/ export ordering (#1817) 2023-04-26 12:29:21 +03:00
github-actions[bot] 5ccb3e85f8 [CI Skip] bump/beta 12.0.2-0-x
skip-checks: true
2023-04-24 04:59:26 +00:00
Jaco 785a23433d Flatten Buffer | Uint8Array types (#1816)
* Flatten Buffer | Uint8Array types

* Remove dangling Buffer references

* CHANGELOG

* Adjust
2023-04-24 07:53:31 +03:00
github-actions[bot] bead42ca5f [CI Skip] release/stable 12.0.1
skip-checks: true
2023-04-22 07:44:07 +00:00
Jaco 2d2a1a5989 12.0.1 (#1815)
* 12.0.1

* Inline xxhash single-use

* Adjust comments
2023-04-22 10:37:53 +03:00
github-actions[bot] db4dde0a57 [CI Skip] bump/beta 11.1.4-19-x
skip-checks: true
2023-04-21 08:23:53 +00:00
Jaco b5d83f8836 Allow wordlist? param to mnemonic* functions (#1814) 2023-04-21 11:16:43 +03:00
github-actions[bot] cdf6cc6096 [CI Skip] bump/beta 11.1.4-18-x
skip-checks: true
2023-04-21 07:34:55 +00:00
Jaco dfd07e04d4 Align x-randomvalues with webCrypto (#1782)
* Align x-randomvalues with webCrypto

* Deno export from browser

* export * for x-ws

* export * from RN

* CHANGELOG
2023-04-21 10:27:30 +03:00
github-actions[bot] f5a3a6fd73 [CI Skip] bump/beta 11.1.4-17-x
skip-checks: true
2023-04-21 07:18:16 +00:00
Jaco 51a7263d38 Bump dev (w/ Node 16+ only) (#1813)
* Bump dev (w/ Node 16+ only)

* Lint

* Fix build
2023-04-21 10:10:27 +03:00
github-actions[bot] e3b11360ab [CI Skip] bump/beta 11.1.4-16-x
skip-checks: true
2023-04-20 06:58:05 +00:00
Jaco b4bed3d801 Bump deps (#1812) 2023-04-20 09:52:10 +03:00
github-actions[bot] 1f8b573d81 [CI Skip] bump/beta 11.1.4-15-x
skip-checks: true
2023-04-15 11:37:12 +00:00
Jaco a0e5d48208 CHANGELOG (#1811) 2023-04-15 14:30:49 +03:00
github-actions[bot] 6ce32b8039 [CI Skip] bump/beta 11.1.4-14-x
skip-checks: true
2023-04-15 11:15:05 +00:00
Jaco 3ee810904e Adjust isCodec with better API alignment (#1810)
* Adjust isCodec with better API alignment

* Adjust tests

* Remove test dupes
2023-04-15 14:07:44 +03:00
github-actions[bot] ed73a7912b [CI Skip] bump/beta 11.1.4-13-x
skip-checks: true
2023-04-14 07:28:50 +00:00
Jaco 4ec2cf9e43 Small adjustment to x-* exports (#1809) 2023-04-14 10:22:53 +03:00
github-actions[bot] 38ac05203e [CI Skip] release/beta 11.1.4-12
skip-checks: true
2023-04-13 13:13:49 +00:00
Jaco bb6a2b4468 Add missing peerDependencies for x-randomvalues (#1808)
* Add missing peerDependencies for x-randomvalues

* publish
2023-04-13 16:07:34 +03:00
github-actions[bot] 3c9b20e902 [CI Skip] release/beta 11.1.4-11
skip-checks: true
2023-04-13 11:39:47 +00:00
Jaco e1a2ea49cb x-randomvalues w/ shared base64 decoding (#1807)
* x-randomvalues w/ shared base64 decoding

* Adjust

* npm publish
2023-04-13 14:33:45 +03:00
github-actions[bot] 892004563f [CI Skip] bump/beta 11.1.4-10-x
skip-checks: true
2023-04-13 06:20:56 +00:00
Jaco efe4ce8d9d Allow for wordlists in JS bip39 functions (#1805) 2023-04-13 09:14:45 +03:00
github-actions[bot] f0f561e243 [CI Skip] bump/beta 11.1.4-9-x
skip-checks: true
2023-04-12 19:52:44 +00:00
Shamilkhan 56e34586b3 Add genesis hash for Cere Network (#1806)
* Add genesis hash for Cere Network

* Put Cere Network in correct alphabet order

* Rename CereNetwork to Cere
2023-04-12 22:46:39 +03:00
github-actions[bot] 667fe8fb17 [CI Skip] bump/beta 11.1.4-8-x
skip-checks: true
2023-04-12 11:09:35 +00:00
Jaco 3fd8074877 Add missing bip39 wordlists (only en is used) (#1803) 2023-04-12 14:01:27 +03:00
github-actions[bot] 91a2eac220 [CI Skip] release/beta 11.1.4-7
skip-checks: true
2023-04-12 10:04:21 +00:00
Jaco 455ae2ccde Use @noble/curves (secp256k1 + ed25519) (#1776)
* Use @noble/curves (secp256k1 only for now)

* Re-add canonical signatures (now lowS)

* Swap tweetnacl usage for ed25519

* Adjust previously failing tests

* Adjust test for ethereum encoding

* hasBigInt for ed25519 operations

* CHANGELOG

* Publich beta to npm for size check
2023-04-12 12:58:17 +03:00
github-actions[bot] 9d43b787fd [CI Skip] bump/beta 11.1.4-6-x
skip-checks: true
2023-04-12 09:45:36 +00:00
Jaco 29551e46b0 Import box functionality from tweetnacl (#1785)
* Import box functionality from tweetnacl

* Remove box/boxOpen functionality

* Additional comment

* Import secretbox test vectors

* Allow empty base64 input

* Combine non-xor crypto_stream usage with xor

* Adjust

* inline let

* Rename tests, extract test vectors

* Adjust chnages comments

* Remove box keypair

* Remove rng set operation

* Inline adjust

* Verify adjustment
2023-04-12 12:39:31 +03:00
Jaco 103745f845 Trace tweetnacl usage (Step 5: secretbox & .open available) (#1802) 2023-04-12 12:25:41 +03:00
Jaco cd7a32cf1f Trace tweetnacl usage (step 4: apply TS types) (#1801) 2023-04-12 12:11:40 +03:00
Jaco 5004d1d79f Trace tweetnacl usage (step 3: comment all code) (#1800) 2023-04-12 11:42:15 +03:00
Jaco 2607203925 Trace tweetnacl usage (step 2: move to TS) (#1799) 2023-04-12 11:39:17 +03:00
Jaco 5abab5bf13 Trace tweetnacl usage (step 1: raw initial import) (#1798) 2023-04-12 11:35:50 +03:00
github-actions[bot] a990b4e40f [CI Skip] bump/beta 11.1.4-5-x
skip-checks: true
2023-04-12 08:14:47 +00:00
Jaco 997f8f6a51 Align x-bigint extraction with other x-* (#1797) 2023-04-12 11:08:48 +03:00
github-actions[bot] 23e055869c [CI Skip] bump/beta 11.1.4-4-x
skip-checks: true
2023-04-11 12:00:36 +00:00
Jaco de85d063a4 Bump dev (w/ lint updates) (#1795)
* Bump dev (w/ lint updates)

* Bump dev

* Adjust behavior for global setting

* Adjust versionDetect expectations
2023-04-11 14:52:49 +03:00
github-actions[bot] 5964f790b5 [CI Skip] bump/beta 11.1.4-3-x
skip-checks: true
2023-04-10 07:27:42 +00:00
Jaco a767ef68ca Bump dev (w/ eslint adjustments) (#1794) 2023-04-10 10:21:33 +03:00
github-actions[bot] c096a4981d [CI Skip] bump/beta 11.1.4-2-x
skip-checks: true
2023-04-08 08:09:52 +00:00
Jaco 7dcdef17c3 Bump TypeScript (#1793)
* Bump TypeScript

* Bump dev

* Bump dev, no npm:
2023-04-08 11:02:20 +03:00
github-actions[bot] ef839a7a42 [CI Skip] bump/beta 11.1.4-1-x
skip-checks: true
2023-04-04 05:40:36 +00:00
Jaco 7bf1706994 Update lock wf (#1791) 2023-04-04 08:31:58 +03:00
github-actions[bot] 2999987fb0 [CI Skip] bump/beta 11.1.4-0-x
skip-checks: true
2023-04-02 07:01:09 +00:00
Jaco 6ba45086b5 Move type-only imports (w/ verbatimModuleSyntax) (#1790) 2023-04-02 09:53:43 +03:00
github-actions[bot] e3c51d4b6b [CI Skip] release/stable 11.1.3
skip-checks: true
2023-04-01 07:04:11 +00:00
Jaco 1295c85df3 11.1.3 (#1789) 2023-04-01 09:58:20 +03:00
github-actions[bot] 14d66c32de [CI Skip] bump/beta 11.1.3-4-x
skip-checks: true
2023-03-31 06:24:39 +00:00
Jaco b794d22ac4 Allow empty string as valid base32/base58/base64 decoder input (#1788)
* Allow empty string as valid base32/base58/base64 decoder input

* Remove empty failure

* Validation with optional validation flag

* Empty validation
2023-03-31 09:18:38 +03:00
github-actions[bot] edb62407e2 [CI Skip] bump/beta 11.1.3-3-x
skip-checks: true
2023-03-31 05:14:41 +00:00
Jaco 45b040fbf8 Additional __PURE__ annotations (#1787)
* Additional __PURE__ annotations

* Revert as const (This _could_ yield breaking external changes)
2023-03-31 08:08:01 +03:00
github-actions[bot] 777b823317 [CI Skip] bump/beta 11.1.3-2-x
skip-checks: true
2023-03-29 04:28:57 +00:00
Cameron Fairchild c5ef717398 Add bittensor details (#1783)
* add with todo

* update genesis hash

* remove from ledger

* remove from ledger
2023-03-29 07:21:56 +03:00
github-actions[bot] 98f0933da5 [CI Skip] bump/beta 11.1.3-1-x
skip-checks: true
2023-03-25 15:52:28 +00:00
Jaco 493d0df0c1 Add repo dev req. for Node.js (#1779) 2023-03-25 17:46:33 +02:00
github-actions[bot] 5d8e92f17c [CI Skip] bump/beta 11.1.3-0-x
skip-checks: true
2023-03-25 10:57:53 +00:00
Jaco 2ce178cad2 Bump dev (w/ some node:test adjustments) (#1778) 2023-03-25 12:51:53 +02:00
327 changed files with 12848 additions and 6899 deletions
-2
View File
@@ -1,2 +0,0 @@
packages/x-noble-hashes/**/*.ts
packages/x-noble-secp256k1/**/*.ts
-22
View File
@@ -1,22 +0,0 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
...base.ignorePatterns
],
parserOptions: {
...base.parserOptions,
project: [
'./tsconfig.eslint.json'
]
},
rules: {
...base.rules,
// this seems very broken atm, false positives
'@typescript-eslint/unbound-method': 'off'
}
};
+4 -4
View File
@@ -13,13 +13,13 @@ jobs:
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836 - uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
with: with:
github-token: ${{ secrets.GH_PAT_BOT }} github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7' issue-inactive-days: '7'
issue-lock-comment: > issue-comment: >
This thread has been automatically locked since there has not been This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query. if you think you have a related problem or query.
pr-lock-inactive-days: '2' pr-inactive-days: '2'
pr-lock-comment: > pr-comment: >
This pull request has been automatically locked since there This pull request has been automatically locked since there
has not been any recent activity after it was closed. has not been any recent activity after it was closed.
Please open a new issue for related bugs. Please open a new issue for related bugs.
+1 -1
View File
@@ -22,5 +22,5 @@ jobs:
- name: ${{ matrix.step }} - name: ${{ matrix.step }}
if: always() if: always()
run: | run: |
yarn install --immutable | grep -v 'YN0013' yarn install --immutable
yarn ${{ matrix.step }} yarn ${{ matrix.step }}
+1 -1
View File
@@ -27,5 +27,5 @@ jobs:
node-version: 'lts/*' node-version: 'lts/*'
- name: ${{ matrix.step }} - name: ${{ matrix.step }}
run: | run: |
yarn install --immutable | grep -v 'YN0013' yarn install --immutable
yarn ${{ matrix.step }} yarn ${{ matrix.step }}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/dev authors & contributors // Copyright 2017-2023 @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');
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-785
View File
File diff suppressed because one or more lines are too long
+893
View File
File diff suppressed because one or more lines are too long
+9 -7
View File
@@ -1,13 +1,15 @@
compressionLevel: mixed
enableGlobalCache: false
enableImmutableInstalls: false enableImmutableInstalls: false
enableProgressBars: false enableProgressBars: false
logFilters:
- code: YN0013
level: discard
nodeLinker: node-modules nodeLinker: node-modules
plugins: yarnPath: .yarn/releases/yarn-4.0.2.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
+142
View File
@@ -1,5 +1,147 @@
# CHANGELOG # CHANGELOG
## 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
Changes:
- Apply missing count assignment for `for (...)` loops
- Remove unused `@types/*` dev dependencies
- Upgrade dependencies to latest stable versions
## 12.2.1 May 13, 2023
Changes:
- Align `u8aToBigInt` tests with `u8aToBn`
- Unroll loops on most-frequently used paths for `u8aToBigInt`
- Add `module` to `package.json` export map (ESM-only)
- Upgrade dependencies to latest stable versions
## 12.1.2 May 1, 2023
Changes:
- Adjust typing for `isChildClass` & `Constructor` usage
## 12.1.1 Apr 29, 2023
Changes:
- Add shareable `identity` & `noop` functions
- Flatten `Buffer | Uint8Array` types (as used) to base-only `Uint8Array`
- Apply `readonly` specifiers to private class fields where applicable
- Adjust compilation output for `__internal__` class fields
- Remove unused types from `util`
- Upgrade dependencies to latest stable versions
## 12.0.1 Apr 22, 2023
Contributed:
- Add Cere genesisHash (Thanks to https://github.com/shamilkhan)
Changes:
- Swap secp256k1 functionality to `@noble/curves`
- Swap ed25519 functionality to `@noble/curves`
- Replace `tweetnacl` secretbox usage with slimmer local version
- Adjust `isCodec` helper with closer API alignment
- Initial steps to multi-language bip39 support
- Use Node webcrypto for Node `getRandomValues` support
- Upgrade dependencies to latest stable versions
- Drop support for Node 14 (EOL 30 Apr 2023)
## 11.1.3 Apr 1, 2023
Contributed:
- Add Bittensor genesisHash (Thanks to https://github.com/camfairchild)
Changes:
- Allow empty string as valid base32/base58/base64 decoder input
- Add additional/missing `/*#__PURE__*/` annotations
- Upgrade dependencies to latest stable versions
## 11.1.2 Mar 25, 2023 ## 11.1.2 Mar 25, 2023
Changes: Changes:
+8 -2
View File
@@ -1,5 +1,5 @@
1572 Jaco 11.1.2 (#1777) 1668 Jaco 12.6.2 (#1902)
12 Carlo Sala feat(networks): support ledger for pendulum (#1739) 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) 5 Jakub Pánik Add HydraDX parachain to genesis (#1583)
@@ -23,7 +23,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 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)
@@ -35,6 +37,7 @@
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 Lezek123 logger - wildcard include/exclude with DEBUG env (#932) 1 Lezek123 logger - wildcard include/exclude with DEBUG env (#932)
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)
@@ -42,11 +45,13 @@
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)
1 Reto Trinkler Adding 4 as address type of ss58 for Katal Chain (#639) 1 Reto Trinkler Adding 4 as address type of ss58 for Katal Chain (#639)
1 Rocco Musolino remove doc broken link (#697) 1 Rocco Musolino remove doc broken link (#697)
1 Shamilkhan Add genesis hash for Cere Network (#1806)
1 Song Zhou Add in ability to encrypt/decrypt msg with keyring (#1070) 1 Song Zhou Add in ability to encrypt/decrypt msg with keyring (#1070)
1 Thibaut Sardan add hasLedgerSupport prop to networks (#835) 1 Thibaut Sardan add hasLedgerSupport prop to networks (#835)
1 Tomokazu Kozuma fix comment (#1119) 1 Tomokazu Kozuma fix comment (#1119)
@@ -54,4 +59,5 @@
1 Wei Tang ss58: add Kulupu prefix to the list (#595) 1 Wei Tang ss58: add Kulupu prefix to the list (#595)
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)
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import baseConfig from '@polkadot/dev/config/eslint';
export default [
...baseConfig
];
+7 -7
View File
@@ -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": ">=14" "node": ">=18.14"
}, },
"homepage": "https://github.com/polkadot-js/common#readme", "homepage": "https://github.com/polkadot-js/common#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -14,10 +14,10 @@
}, },
"sideEffects": false, "sideEffects": false,
"type": "module", "type": "module",
"version": "11.1.2", "version": "12.6.2",
"versions": { "versions": {
"git": "11.1.2", "git": "12.6.2",
"npm": "11.1.2" "npm": "12.6.2"
}, },
"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.72.22", "@polkadot/dev": "^0.78.1",
"@types/node": "^18.15.9" "@types/node": "^20.10.5"
}, },
"resolutions": { "resolutions": {
"typescript": "^5.0.2" "typescript": "^5.3.3"
} }
} }
+8 -8
View File
@@ -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": ">=14" "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": "11.1.2", "version": "12.6.2",
"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.1", "@ledgerhq/hw-transport": "^6.30.1",
"@ledgerhq/hw-transport-webhid": "^6.27.12", "@ledgerhq/hw-transport-webhid": "^6.28.1",
"@ledgerhq/hw-transport-webusb": "^6.27.12", "@ledgerhq/hw-transport-webusb": "^6.28.1",
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"optionalDependencies": { "optionalDependencies": {
"@ledgerhq/hw-transport-node-hid-singleton": "^6.28.9" "@ledgerhq/hw-transport-node-hid-singleton": "^6.30.1"
} }
} }
@@ -3,4 +3,4 @@
// 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: '11.1.2' }; export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '12.6.2' };
+4 -11
View File
@@ -1,20 +1,13 @@
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors // Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// CJS, so we use import * syntax
import type * as HwTransport from '@ledgerhq/hw-transport';
// u2f is deprecated an therefore not added // u2f is deprecated an therefore not added
export type TransportType = 'hid' | 'webusb'; export type TransportType = 'hid' | 'webusb';
// The actual namespaced Transport interface, imported via export type Transport = HwTransport.default;
//
// import type Transport from '@ledgerhq/hw-transport';
//
// does not work on moduleResolution: nodenext, so we just go with a
// very light interface for Transport (and then TransportStatic).
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface Transport {
// empty on purpose, just a stub
}
export interface TransportDef { export interface TransportDef {
/** Create a transport to be used in Ledger operations */ /** Create a transport to be used in Ledger operations */
@@ -5,6 +5,9 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/mod.ts"
],
"references": [ "references": [
{ "path": "../util/tsconfig.build.json" } { "path": "../util/tsconfig.build.json" }
] ]
+6 -6
View File
@@ -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": ">=14" "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",
@@ -17,12 +17,12 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "11.1.2", "version": "12.6.2",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/hw-ledger-transports": "11.1.2", "@polkadot/hw-ledger-transports": "12.6.2",
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"@zondax/ledger-substrate": "^0.40.6", "@zondax/ledger-substrate": "^0.41.3",
"tslib": "^2.5.0" "tslib": "^2.6.2"
} }
} }
+39 -18
View File
@@ -8,7 +8,7 @@ import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerVersion } fr
import { newSubstrateApp } from '@zondax/ledger-substrate'; import { newSubstrateApp } from '@zondax/ledger-substrate';
import { transports } from '@polkadot/hw-ledger-transports'; import { transports } from '@polkadot/hw-ledger-transports';
import { hexAddPrefix, u8aToBuffer } from '@polkadot/util'; import { hexAddPrefix, u8aToBuffer, u8aWrapBytes } from '@polkadot/util';
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants.js'; import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants.js';
import { ledgerApps } from './defaults.js'; import { ledgerApps } from './defaults.js';
@@ -30,16 +30,31 @@ async function wrapError <T extends WrappedResult> (promise: Promise<T>): Promis
return result; return result;
} }
// A very basic wrapper for a ledger app - /** @internal Wraps a sign/signRaw call and returns the associated signature */
// - it connects automatically, creating an app as required 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> {
// - Promises return errors (instead of wrapper errors) 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
* 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 { export class Ledger {
readonly #ledgerName: string;
readonly #transportDef: TransportDef;
#app: SubstrateApp | null = null; #app: SubstrateApp | null = null;
#ledgerName: string;
#transportDef: TransportDef;
constructor (transport: TransportType, chain: Chain) { constructor (transport: TransportType, chain: Chain) {
const ledgerName = ledgerApps[chain]; const ledgerName = ledgerApps[chain];
const transportDef = transports.find(({ type }) => type === transport); const transportDef = transports.find(({ type }) => type === transport);
@@ -85,17 +100,17 @@ export class Ledger {
} }
/** /**
* Signs a transcation on the Ledger device * 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> { public async sign (message: Uint8Array, accountOffset?: number, addressOffset?: number, options?: Partial<AccountOptions>): Promise<LedgerSignature> {
return this.withApp(async (app: SubstrateApp): Promise<LedgerSignature> => { return this.withApp(sign('sign', message, accountOffset, addressOffset, options));
const buffer = u8aToBuffer(message); }
const { signature } = await wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
return { /**
signature: hexAddPrefix(signature.toString('hex')) * 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));
} }
/** /**
@@ -109,7 +124,13 @@ export class Ledger {
if (!this.#app) { if (!this.#app) {
const transport = await this.#transportDef.create(); const transport = await this.#transportDef.create();
this.#app = newSubstrateApp(transport, this.#ledgerName); // 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); return await fn(this.#app);
+5 -1
View File
@@ -15,6 +15,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,6 +23,7 @@ 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',
@@ -31,6 +33,7 @@ export const ledgerApps: Record<string, string> = {
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 +41,6 @@ export const ledgerApps: Record<string, string> = {
ternoa: 'Ternoa', ternoa: 'Ternoa',
unique: 'Unique', unique: 'Unique',
vtb: 'VTB', vtb: 'VTB',
xxnetwork: 'XXNetwork' xxnetwork: 'XXNetwork',
zeitgeist: 'Zeitgeist'
}; };
+1 -1
View File
@@ -3,4 +3,4 @@
// 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: '11.1.2' }; export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '12.6.2' };
+4
View File
@@ -5,6 +5,10 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/*.spec.ts",
"**/mod.ts"
],
"references": [ "references": [
{ "path": "../hw-ledger-transports/tsconfig.build.json" }, { "path": "../hw-ledger-transports/tsconfig.build.json" },
{ "path": "../util/tsconfig.build.json" } { "path": "../util/tsconfig.build.json" }
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../hw-ledger/tsconfig.build.json" }
]
}
+7 -7
View File
@@ -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": ">=14" "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",
@@ -18,15 +18,15 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "11.1.2", "version": "12.6.2",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"@polkadot/util-crypto": "11.1.2", "@polkadot/util-crypto": "12.6.2",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"@polkadot/util-crypto": "11.1.2" "@polkadot/util-crypto": "12.6.2"
} }
} }
+6 -6
View File
@@ -1,16 +1,16 @@
// Copyright 2017-2023 @polkadot/keyring authors & contributors // Copyright 2017-2023 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import { Keyring } from './keyring.js'; // all external
// eslint-disable-next-line deprecation/deprecation // eslint-disable-next-line deprecation/deprecation
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto'; export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
export * from './defaults.js'; // all named
export { Keyring } from './keyring.js';
export { createPair } from './pair/index.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
export { createPair } from './pair/index.js';
export { createTestKeyring } from './testing.js'; export { createTestKeyring } from './testing.js';
export { createTestPairs } from './testingPairs.js'; export { createTestPairs } from './testingPairs.js';
export { Keyring }; // all starred
export * from './defaults.js';
+2 -2
View File
@@ -43,7 +43,7 @@ export class Keyring implements KeyringInstance {
readonly #type: KeypairType; readonly #type: KeypairType;
#ss58?: number; #ss58?: number | undefined;
public decodeAddress = decodeAddress; public decodeAddress = decodeAddress;
@@ -246,7 +246,7 @@ export class Keyring implements KeyringInstance {
public encodeAddress = (address: Uint8Array | string, ss58Format?: number): string => { public encodeAddress = (address: Uint8Array | string, ss58Format?: number): string => {
return this.type === 'ethereum' return this.type === 'ethereum'
? ethereumEncode(address) ? ethereumEncode(address)
: encodeAddress(address, ss58Format === undefined ? this.#ss58 : ss58Format); : encodeAddress(address, ss58Format ?? this.#ss58);
}; };
/** /**
+1 -1
View File
@@ -3,4 +3,4 @@
// 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: '11.1.2' }; export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '12.6.2' };
+4 -5
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/keyring authors & contributors // Copyright 2017-2023 @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 -1
View File
@@ -3,6 +3,6 @@
export interface PairInfo { export interface PairInfo {
publicKey: Uint8Array; publicKey: Uint8Array;
secretKey?: Uint8Array; secretKey?: Uint8Array | undefined;
seed?: Uint8Array | null; seed?: Uint8Array | null;
} }
+2 -3
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/keyring authors & contributors // Copyright 2017-2023 @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 -1
View File
@@ -95,7 +95,7 @@ describe('keyring.addFromUri', (): void => {
for (const [type, tests] of Object.entries(TESTS)) { for (const [type, tests] of Object.entries(TESTS)) {
const keyring = new Keyring({ type: type as KeypairType }); const keyring = new Keyring({ type: type as KeypairType });
describe(type, (): void => { describe(`${type}`, (): void => {
tests.forEach(({ pk, ss, uri }): void => { tests.forEach(({ pk, ss, uri }): void => {
it(`creates ${uri}`, (): void => { it(`creates ${uri}`, (): void => {
const pair = keyring.addFromUri(uri, {}, type as KeypairType); const pair = keyring.addFromUri(uri, {}, type as KeypairType);
+1 -1
View File
@@ -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()
}; };
} }
+15 -9
View File
@@ -42,12 +42,10 @@ 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);
}); });
it('checks eth test addresses', (): void => { describe('checks eth test addresses', (): void => {
const ring = createTestPairs({ type: 'ethereum' }); const ring = createTestPairs({ type: 'ethereum' });
const keyring = new Keyring({ type: 'ethereum' }); const keyring = new Keyring({ type: 'ethereum' });
// priv keys generated by ganache-cli --mnemonic "bottom drive obey lake curtain smoke basket hold race lonely fit walk" // priv keys generated by ganache-cli --mnemonic "bottom drive obey lake curtain smoke basket hold race lonely fit walk"
@@ -62,12 +60,20 @@ 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.keys(ring).forEach((testKeyring, i) => { Object
if (i < 6) { .keys(ring)
expect(u8aToHex(ring[testKeyring].publicKey)).toEqual(u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)); .filter((_, i) => i < 6)
} .forEach((testKeyring, i) => {
}); it(`checks #${i}`, (): void => {
expect(
u8aToHex(ring[testKeyring].publicKey)
).toEqual(
u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)
);
});
});
}); });
}); });
+36 -3
View File
@@ -1,23 +1,56 @@
// Copyright 2017-2023 @polkadot/keyring authors & contributors // Copyright 2017-2023 @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;
} }
+60 -15
View File
@@ -5,29 +5,74 @@ 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 {
+4
View File
@@ -5,6 +5,10 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/*.spec.ts",
"**/mod.ts"
],
"references": [ "references": [
{ "path": "../util/tsconfig.build.json" }, { "path": "../util/tsconfig.build.json" },
{ "path": "../util-crypto/tsconfig.build.json" } { "path": "../util-crypto/tsconfig.build.json" }
+18
View File
@@ -0,0 +1,18 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../keyring/tsconfig.build.json" },
{ "path": "../util/tsconfig.build.json" },
{ "path": "../util-crypto/tsconfig.build.json" }
]
}
+6 -6
View File
@@ -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": ">=14" "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": "11.1.2", "version": "12.6.2",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"@substrate/ss58-registry": "^1.39.0", "@substrate/ss58-registry": "^1.44.0",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/hw-ledger": "11.1.2" "@polkadot/hw-ledger": "12.6.2"
} }
} }
+15 -4
View File
@@ -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([]);
+26 -4
View File
@@ -3,10 +3,14 @@
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'
@@ -29,10 +33,16 @@ export const knownGenesis: KnownGenesis = {
'bifrost-kusama': [ 'bifrost-kusama': [
'0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed' '0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed'
], ],
bittensor: [
'0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03'
],
centrifuge: [ centrifuge: [
'0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82', '0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82',
'0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5' '0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5'
], ],
cere: [
'0x81443836a9a24caaa23f1241897d1235717535711d1d3fe24eae4fdc942c092c'
],
composable: [ composable: [
'0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d' '0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d'
], ],
@@ -46,6 +56,9 @@ export const knownGenesis: KnownGenesis = {
edgeware: [ edgeware: [
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b' '0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
], ],
enjin: [
'0xd8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9'
],
equilibrium: [ equilibrium: [
'0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925' '0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
], ],
@@ -76,6 +89,9 @@ export const knownGenesis: KnownGenesis = {
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2 '0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1 '0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
], ],
matrixchain: [
'0x3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615'
],
nodle: [ nodle: [
'0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21' '0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
], ],
@@ -107,6 +123,9 @@ export const knownGenesis: KnownGenesis = {
polymesh: [ polymesh: [
'0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063' '0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
], ],
quartz: [
'0xcd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554'
],
rococo: [ rococo: [
'0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e', '0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
'0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897', '0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
@@ -151,5 +170,8 @@ export const knownGenesis: KnownGenesis = {
], ],
xxnetwork: [ xxnetwork: [
'0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa' '0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
],
zeitgeist: [
'0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
] ]
}; };
+6 -2
View File
@@ -19,6 +19,7 @@ export const knownLedger: KnownLedger = {
darwinia: 0x00000162, darwinia: 0x00000162,
'dock-mainnet': 0x00000252, 'dock-mainnet': 0x00000252,
edgeware: 0x0000020b, edgeware: 0x0000020b,
enjin: 0x00000483,
equilibrium: 0x05f5e0fd, equilibrium: 0x05f5e0fd,
genshiro: 0x05f5e0fc, genshiro: 0x05f5e0fc,
hydradx: 0x00000162, hydradx: 0x00000162,
@@ -26,6 +27,7 @@ export const knownLedger: KnownLedger = {
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,
@@ -35,12 +37,14 @@ export const knownLedger: KnownLedger = {
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,
vtb: 0x000002b6, vtb: 0x000002b6,
xxnetwork: 0x000007a3 xxnetwork: 0x000007a3,
zeitgeist: 0x00000162
}; };
+1 -1
View File
@@ -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');
}); });
}); });
+2 -2
View File
@@ -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 -1
View File
@@ -3,4 +3,4 @@
// 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: '11.1.2' }; export const packageInfo = { name: '@polkadot/networks', path: 'auto', type: 'auto', version: '12.6.2' };
+12 -6
View File
@@ -5,24 +5,30 @@
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/src/test/ss58registry.test.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/src/test/ss58registry.test.json'), json, { flag: 'w' }); fs.writeFileSync(testUrl, json, { flag: 'w' });
} }
}); });
}); });
+10 -2
View File
@@ -2,6 +2,7 @@
// 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,
@@ -597,7 +612,7 @@
{ {
"prefix": 50, "prefix": 50,
"network": "composable", "network": "composable",
"displayName": "Composable", "displayName": "Composable Finance",
"symbols": [ "symbols": [
"LAYR" "LAYR"
], ],
@@ -713,10 +728,23 @@
"standardAccount": "*25519", "standardAccount": "*25519",
"website": "https://hydradx.io" "website": "https://hydradx.io"
}, },
{
"prefix": 64,
"network": "ewx",
"displayName": "Energy Web X",
"symbols": [
"EWT"
],
"decimals": [
18
],
"standardAccount": "*25519",
"website": "https://www.energyweb.org"
},
{ {
"prefix": 65, "prefix": 65,
"network": "aventus", "network": "aventus",
"displayName": "AvN Mainnet", "displayName": "Aventus Mainnet",
"symbols": [ "symbols": [
"AVT" "AVT"
], ],
@@ -1168,6 +1196,32 @@
"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": 789, "prefix": 789,
"network": "geek", "network": "geek",
@@ -1337,6 +1391,19 @@
"standardAccount": "*25519", "standardAccount": "*25519",
"website": "https://explorer.mainnet.cloudwalk.io" "website": "https://explorer.mainnet.cloudwalk.io"
}, },
{
"prefix": 2021,
"network": "logion",
"displayName": "logion network",
"symbols": [
"LGNT"
],
"decimals": [
18
],
"standardAccount": "*25519",
"website": "https://logion.network"
},
{ {
"prefix": 2032, "prefix": 2032,
"network": "interlay", "network": "interlay",
@@ -1389,6 +1456,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",
@@ -1428,6 +1508,19 @@
"standardAccount": "*25519", "standardAccount": "*25519",
"website": "https://subspace.network" "website": "https://subspace.network"
}, },
{
"prefix": 3333,
"network": "peerplays",
"displayName": "Peerplays",
"symbols": [
"PPY"
],
"decimals": [
18
],
"standardAccount": "secp256k1",
"website": "https://www.peerplays.com/"
},
{ {
"prefix": 4006, "prefix": 4006,
"network": "tangle", "network": "tangle",
@@ -1510,6 +1603,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",
@@ -1523,6 +1629,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",
@@ -1536,6 +1655,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",
@@ -1640,6 +1772,19 @@
"standardAccount": "*25519", "standardAccount": "*25519",
"website": "https://ata.network" "website": "https://ata.network"
}, },
{
"prefix": 12155,
"network": "impact",
"displayName": "Impact Protocol Network",
"symbols": [
"BSTY"
],
"decimals": [
18
],
"standardAccount": "*25519",
"website": "https://impactprotocol.network/"
},
{ {
"prefix": 12191, "prefix": 12191,
"network": "nftmart", "network": "nftmart",
@@ -1665,5 +1810,18 @@
], ],
"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"
} }
] ]
+4 -3
View File
@@ -5,9 +5,10 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"include": [ "exclude": [
"**/src/**/*.ts", "**/*.spec.ts",
"**/test/*.json" "**/test/*",
"**/mod.ts"
], ],
"references": [ "references": [
{ "path": "../hw-ledger/tsconfig.build.json" }, { "path": "../hw-ledger/tsconfig.build.json" },
+18
View File
@@ -0,0 +1,18 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../hw-ledger/tsconfig.build.json" },
{ "path": "../networks/tsconfig.build.json" },
{ "path": "../util/tsconfig.build.json" }
]
}
+13 -13
View File
@@ -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": ">=14" "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",
@@ -20,25 +20,25 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "11.1.2", "version": "12.6.2",
"browser": { "browser": {
"crypto": false, "crypto": false,
"stream": false "stream": false
}, },
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@noble/hashes": "1.3.0", "@noble/curves": "^1.3.0",
"@noble/secp256k1": "1.7.1", "@noble/hashes": "^1.3.3",
"@polkadot/networks": "11.1.2", "@polkadot/networks": "12.6.2",
"@polkadot/util": "11.1.2", "@polkadot/util": "12.6.2",
"@polkadot/wasm-crypto": "^7.0.3", "@polkadot/wasm-crypto": "^7.3.2",
"@polkadot/x-bigint": "11.1.2", "@polkadot/wasm-util": "^7.3.2",
"@polkadot/x-randomvalues": "11.1.2", "@polkadot/x-bigint": "12.6.2",
"@scure/base": "1.1.1", "@polkadot/x-randomvalues": "12.6.2",
"tslib": "^2.5.0", "@scure/base": "^1.1.5",
"tweetnacl": "^1.0.3" "tslib": "^2.6.2"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/util": "11.1.2" "@polkadot/util": "12.6.2"
} }
} }
@@ -1,14 +1,12 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 -2
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 -2
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 -2
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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)) {
@@ -5,8 +5,10 @@
import { encodeAddress } from './index.js'; import { encodeAddress } from './index.js';
// eslint-disable-next-line jest/no-export
export const ALICE_PUBLIC_SR = new Uint8Array([212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]); export const ALICE_PUBLIC_SR = new Uint8Array([212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]);
// eslint-disable-next-line jest/no-export
export const ALICE_PUBLIC_ED = new Uint8Array([209, 114, 167, 76, 218, 76, 134, 89, 18, 195, 43, 160, 168, 10, 87, 174, 105, 171, 174, 65, 14, 92, 203, 89, 222, 232, 78, 47, 68, 50, 219, 79]); export const ALICE_PUBLIC_ED = new Uint8Array([209, 114, 167, 76, 218, 76, 134, 89, 18, 195, 43, 160, 168, 10, 87, 174, 105, 171, 174, 65, 14, 92, 203, 89, 222, 232, 78, 47, 68, 50, 219, 79]);
const SUBKEY = [ const SUBKEY = [
+1 -2
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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);
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { BN } from '@polkadot/util'; import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types.js'; import type { Prefix } from './types.js';
import { decodeAddress } from './decode.js'; import { decodeAddress } from './decode.js';
@@ -15,6 +14,6 @@ import { createKeyDerived } from './keyDerived.js';
* @description * @description
* Creates a Substrate derived address based on the input address/publicKey and the index supplied. * Creates a Substrate derived address based on the input address/publicKey and the index supplied.
*/ */
export function encodeDerivedAddress (who: HexString | Uint8Array | string, index: bigint | BN | number, ss58Format?: Prefix): string { export function encodeDerivedAddress (who: string | Uint8Array, index: bigint | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format); return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format);
} }
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { BN } from '@polkadot/util'; import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types.js'; import type { Prefix } from './types.js';
import { encodeAddress } from './encode.js'; import { encodeAddress } from './encode.js';
@@ -14,6 +13,6 @@ import { createKeyMulti } from './keyMulti.js';
* @description * @description
* Creates a Substrate multisig address based on the input address and the required threshold. * Creates a Substrate multisig address based on the input address and the required threshold.
*/ */
export function encodeMultiAddress (who: (HexString | Uint8Array | string)[], threshold: bigint | BN | number, ss58Format?: Prefix): string { export function encodeMultiAddress (who: (string | Uint8Array)[], threshold: bigint | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyMulti(who, threshold), ss58Format); return encodeAddress(createKeyMulti(who, threshold), ss58Format);
} }
+1 -3
View File
@@ -1,8 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { u8aEq } from '@polkadot/util'; import { u8aEq } from '@polkadot/util';
import { decodeAddress } from './decode.js'; import { decodeAddress } from './decode.js';
@@ -21,6 +19,6 @@ import { decodeAddress } from './decode.js';
* u8aEq(new Uint8Array([0x68, 0x65]), new Uint8Array([0x68, 0x65])); // true * u8aEq(new Uint8Array([0x68, 0x65]), new Uint8Array([0x68, 0x65])); // true
* ``` * ```
*/ */
export function addressEq (a: HexString | string | Uint8Array, b: HexString | string | Uint8Array): boolean { export function addressEq (a: string | Uint8Array, b: string | Uint8Array): boolean {
return u8aEq(decodeAddress(a), decodeAddress(b)); return u8aEq(decodeAddress(a), decodeAddress(b));
} }
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { HashType } from '../secp256k1/types.js'; import type { HashType } from '../secp256k1/types.js';
import type { Prefix } from './types.js'; import type { Prefix } from './types.js';
@@ -14,7 +13,7 @@ import { encodeAddress } from './encode.js';
* @name evmToAddress * @name evmToAddress
* @summary Converts an EVM address to its corresponding SS58 address. * @summary Converts an EVM address to its corresponding SS58 address.
*/ */
export function evmToAddress (evmAddress: HexString | string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string { export function evmToAddress (evmAddress: string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string {
const message = u8aConcat('evm:', evmAddress); const message = u8aConcat('evm:', evmAddress);
if (message.length !== 24) { if (message.length !== 24) {
+3 -3
View File
@@ -4,16 +4,16 @@
export { addressToEvm } from './addressToEvm.js'; export { addressToEvm } from './addressToEvm.js';
export { checkAddress } from './check.js'; export { checkAddress } from './check.js';
export { checkAddressChecksum } from './checksum.js'; export { checkAddressChecksum } from './checksum.js';
export { createKeyMulti } from './keyMulti.js';
export { createKeyDerived } from './keyDerived.js';
export { decodeAddress } from './decode.js'; export { decodeAddress } from './decode.js';
export { deriveAddress } from './derive.js'; export { deriveAddress } from './derive.js';
export { encodeAddress } from './encode.js'; export { encodeAddress } from './encode.js';
export { encodeDerivedAddress } from './encodeDerived.js'; export { encodeDerivedAddress } from './encodeDerived.js';
export { encodeMultiAddress } from './encodeMulti.js'; export { encodeMultiAddress } from './encodeMulti.js';
export { evmToAddress } from './evmToAddress.js';
export { addressEq } from './eq.js'; export { addressEq } from './eq.js';
export { evmToAddress } from './evmToAddress.js';
export { isAddress } from './is.js'; export { isAddress } from './is.js';
export { createKeyDerived } from './keyDerived.js';
export { createKeyMulti } from './keyMulti.js';
export { sortAddresses } from './sort.js'; export { sortAddresses } from './sort.js';
export { validateAddress } from './validate.js'; export { validateAddress } from './validate.js';
+1 -2
View File
@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { validateAddress } from './validate.js'; import { validateAddress } from './validate.js';
export function isAddress (address?: HexString | string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): address is string { export function isAddress (address?: string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): address is string {
try { try {
return validateAddress(address, ignoreChecksum, ss58Format); return validateAddress(address, ignoreChecksum, ss58Format);
} catch { } catch {
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { BN } from '@polkadot/util'; import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import { bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util'; import { bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util';
@@ -12,7 +11,7 @@ import { decodeAddress } from './decode.js';
const PREFIX = stringToU8a('modlpy/utilisuba'); const PREFIX = stringToU8a('modlpy/utilisuba');
export function createKeyDerived (who: HexString | Uint8Array | string, index: bigint | BN | number): Uint8Array { export function createKeyDerived (who: string | Uint8Array, index: bigint | BN | number): Uint8Array {
return blake2AsU8a( return blake2AsU8a(
u8aConcat( u8aConcat(
PREFIX, PREFIX,
+1 -2
View File
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { BN } from '@polkadot/util'; import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import { bnToU8a, compactToU8a, stringToU8a, u8aConcat, u8aSorted } from '@polkadot/util'; import { bnToU8a, compactToU8a, stringToU8a, u8aConcat, u8aSorted } from '@polkadot/util';
@@ -12,7 +11,7 @@ import { addressToU8a } from './util.js';
const PREFIX = stringToU8a('modlpy/utilisuba'); const PREFIX = stringToU8a('modlpy/utilisuba');
export function createKeyMulti (who: (HexString | Uint8Array | string)[], threshold: bigint | BN | number): Uint8Array { export function createKeyMulti (who: (string | Uint8Array)[], threshold: bigint | BN | number): Uint8Array {
return blake2AsU8a( return blake2AsU8a(
u8aConcat( u8aConcat(
PREFIX, PREFIX,
+1 -2
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/util authors & contributors // Copyright 2017-2023 @polkadot/util 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 { u8aSorted } from '@polkadot/util'; import { u8aSorted } from '@polkadot/util';
@@ -9,7 +8,7 @@ import { u8aSorted } from '@polkadot/util';
import { encodeAddress } from './encode.js'; import { encodeAddress } from './encode.js';
import { addressToU8a } from './util.js'; import { addressToU8a } from './util.js';
export function sortAddresses (addresses: (HexString | Uint8Array | string)[], ss58Format?: Prefix): string[] { export function sortAddresses (addresses: (string | Uint8Array)[], ss58Format?: Prefix): string[] {
const u8aToAddress = (u8a: Uint8Array) => encodeAddress(u8a, ss58Format); const u8aToAddress = (u8a: Uint8Array) => encodeAddress(u8a, ss58Format);
return u8aSorted( return u8aSorted(
+1 -2
View File
@@ -1,11 +1,10 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { decodeAddress } from './decode.js'; import { decodeAddress } from './decode.js';
export function validateAddress (encoded?: HexString | string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): encoded is string { export function validateAddress (encoded?: string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): encoded is string {
return !!decodeAddress(encoded, ignoreChecksum, ss58Format); return !!decodeAddress(encoded, ignoreChecksum, ss58Format);
} }
@@ -8,6 +8,14 @@ import { u8aToString } from '@polkadot/util';
import { base32Decode } from './index.js'; import { base32Decode } from './index.js';
describe('base32Decode', (): void => { describe('base32Decode', (): void => {
it('decodes an empty string)', (): void => {
expect(
u8aToString(
base32Decode('')
)
).toEqual('');
});
it('decodes a base32', (): void => { it('decodes a base32', (): void => {
expect( expect(
u8aToString( u8aToString(
+17 -13
View File
@@ -19,6 +19,7 @@ interface Config {
ipfs?: string; ipfs?: string;
regex?: RegExp; regex?: RegExp;
type: string; type: string;
withPadding?: boolean;
} }
type DecodeFn = (value: string, ipfsCompat?: boolean) => Uint8Array; type DecodeFn = (value: string, ipfsCompat?: boolean) => Uint8Array;
@@ -63,23 +64,26 @@ export function createIs (validate: ValidateFn): ValidateFn {
} }
/** @internal */ /** @internal */
export function createValidate ({ chars, ipfs, type }: Config): ValidateFn { export function createValidate ({ chars, ipfs, type, withPadding }: Config): ValidateFn {
return (value?: unknown, ipfsCompat?: boolean): value is string => { return (value?: unknown, ipfsCompat?: boolean): value is string => {
if (!value || typeof value !== 'string') { if (typeof value !== 'string') {
throw new Error(`Expected non-null, non-empty ${type} string input`); throw new Error(`Expected ${type} string input`);
} } else if (ipfs && ipfsCompat && !value.startsWith(ipfs)) {
if (ipfs && ipfsCompat && value[0] !== ipfs) {
throw new Error(`Expected ipfs-compatible ${type} to start with '${ipfs}'`); throw new Error(`Expected ipfs-compatible ${type} to start with '${ipfs}'`);
} }
for (let i = (ipfsCompat ? 1 : 0); i < value.length; i++) { for (let i = (ipfsCompat ? 1 : 0), count = value.length; i < count; i++) {
if (!(chars.includes(value[i]) || ( if (chars.includes(value[i])) {
value[i] === '=' && ( // all ok, character found
(i === value.length - 1) || } else if (withPadding && value[i] === '=') {
!chars.includes(value[i + 1]) if (i === count - 1) {
) // last character, everything ok
))) { } else if (value[i + 1] === '=') {
// next one is also padding, sequence ok
} else {
throw new Error(`Invalid ${type} padding sequence "${value[i]}${value[i + 1]}" at index ${i}`);
}
} else {
throw new Error(`Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`); throw new Error(`Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`);
} }
} }
@@ -18,10 +18,10 @@ describe('base32Validate', (): void => {
).toEqual(true); ).toEqual(true);
}); });
it('fails on empty', (): void => { it('does not fail on empty', (): void => {
expect( expect(
() => base32Validate('') base32Validate('')
).toThrow(/Expected/); ).toEqual(true);
}); });
it('fails on non-string', (): void => { it('fails on non-string', (): void => {
@@ -7,6 +7,12 @@ import { base32Decode } from '../base32/index.js';
import { base58Decode } from './index.js'; import { base58Decode } from './index.js';
describe('base58Encode', (): void => { describe('base58Encode', (): void => {
it('decodes an empty string)', (): void => {
expect(
base58Decode('')
).toEqual(new Uint8Array());
});
it('encodes a base58 to a base32', (): void => { it('encodes a base58 to a base32', (): void => {
expect( expect(
base58Decode('b2rhk6GMPQF3hfzwXTaNYFLKomMeC6UXdUt6jZKPpeVirLtV') base58Decode('b2rhk6GMPQF3hfzwXTaNYFLKomMeC6UXdUt6jZKPpeVirLtV')
@@ -0,0 +1,20 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { base58Validate } from './index.js';
describe('base58Validate', (): void => {
it('validates encoded', (): void => {
expect(
base58Validate('a1UbyspTdnyZXLUQaQbciCxrCWWxz24kgSwGXSQnkbs', false)
).toEqual(true);
});
it('fails on string with extra padding', (): void => {
expect(
() => base58Validate('a1UbyspTdnyZXLUQaQbciCxrCWWxz24kgSwGXSQnkbs=', false)
).toThrow(/Invalid base58 character "="/);
});
});
+2 -1
View File
@@ -8,7 +8,8 @@ import { createDecode, createEncode, createIs, createValidate } from '../base32/
const config = { const config = {
chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
coder: base64, coder: base64,
type: 'base64' type: 'base64',
withPadding: true
}; };
/** /**
@@ -8,6 +8,14 @@ import { stringToU8a } from '@polkadot/util';
import { base64Decode } from './index.js'; import { base64Decode } from './index.js';
describe('base64Decode', (): void => { describe('base64Decode', (): void => {
it('decodes an empty string)', (): void => {
expect(
base64Decode('')
).toEqual(
stringToU8a('')
);
});
it('decodes a mixed base64 utf8 string (1)', (): void => { it('decodes a mixed base64 utf8 string (1)', (): void => {
expect( expect(
base64Decode('aGVsbG8gd29ybGQg0J/RgNC40LLQtdGC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==') base64Decode('aGVsbG8gd29ybGQg0J/RgNC40LLQtdGC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==')
+1 -1
View File
@@ -6,7 +6,7 @@
* @description Trims padding characters * @description Trims padding characters
*/ */
export function base64Trim (value: string): string { export function base64Trim (value: string): string {
while (value.length && value[value.length - 1] === '=') { while (value.length && value.endsWith('=')) {
value = value.slice(0, -1); value = value.slice(0, -1);
} }
@@ -11,4 +11,22 @@ describe('base64Validate', (): void => {
() => base64Validate('aGVsbG8gd29ybGQg0J/RgNC40LLQtd^GC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==') () => base64Validate('aGVsbG8gd29ybGQg0J/RgNC40LLQtd^GC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==')
).toThrow(/Invalid base64 character "\^" \(0x5e\) at index 30/); ).toThrow(/Invalid base64 character "\^" \(0x5e\) at index 30/);
}); });
it('validates with one extra padding character', (): void => {
expect(
base64Validate('bGlnaHQgd28=')
).toEqual(true);
});
it('validates with two extra padding characters', (): void => {
expect(
base64Validate('bGlnaHQgdw==')
).toEqual(true);
});
it('validates misplaced padding characters', (): void => {
expect(
() => base64Validate('bGlnaHQgdw=g=')
).toThrow(/Invalid base64 padding sequence "=g"/);
});
}); });
+5 -5
View File
@@ -1,8 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { blake2b as blake2bJs } from '@noble/hashes/blake2b'; import { blake2b as blake2bJs } from '@noble/hashes/blake2b';
import { hasBigInt, u8aToU8a } from '@polkadot/util'; import { hasBigInt, u8aToU8a } from '@polkadot/util';
@@ -24,17 +22,19 @@ import { createAsHex } from '../helpers.js';
* blake2AsU8a('abc'); // => [0xba, 0x80, 0xa5, 0x3f, 0x98, 0x1c, 0x4d, 0x0d] * blake2AsU8a('abc'); // => [0xba, 0x80, 0xa5, 0x3f, 0x98, 0x1c, 0x4d, 0x0d]
* ``` * ```
*/ */
export function blake2AsU8a (data: HexString | Uint8Array | string, bitLength: 64 | 128 | 256 | 384 | 512 = 256, key?: Uint8Array | null, onlyJs?: boolean): Uint8Array { export function blake2AsU8a (data: string | Uint8Array, bitLength: 64 | 128 | 256 | 384 | 512 = 256, key?: Uint8Array | null, onlyJs?: boolean): Uint8Array {
const byteLength = Math.ceil(bitLength / 8); const byteLength = Math.ceil(bitLength / 8);
const u8a = u8aToU8a(data); const u8a = u8aToU8a(data);
return !hasBigInt || (!onlyJs && isReady()) return !hasBigInt || (!onlyJs && isReady())
? blake2b(u8a, u8aToU8a(key), byteLength) ? blake2b(u8a, u8aToU8a(key), byteLength)
: blake2bJs(u8a, { dkLen: byteLength, key: key || undefined }); : key
? blake2bJs(u8a, { dkLen: byteLength, key })
: blake2bJs(u8a, { dkLen: byteLength });
} }
/** /**
* @name blake2AsHex * @name blake2AsHex
* @description Creates a blake2b hex from the input. * @description Creates a blake2b hex from the input.
*/ */
export const blake2AsHex = createAsHex(blake2AsU8a); export const blake2AsHex = /*#__PURE__*/ createAsHex(blake2AsU8a);
+3 -2
View File
@@ -3,9 +3,10 @@
import './bundleInit.js'; import './bundleInit.js';
// all named
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
// all internal exports // all starred
export * from './address/index.js'; export * from './address/index.js';
export * from './base32/index.js'; export * from './base32/index.js';
export * from './base58/index.js'; export * from './base58/index.js';
@@ -20,8 +21,8 @@ export * from './json/index.js';
export * from './keccak/index.js'; export * from './keccak/index.js';
export * from './key/index.js'; export * from './key/index.js';
export * from './mnemonic/index.js'; export * from './mnemonic/index.js';
export * from './networks.js';
export * from './nacl/index.js'; export * from './nacl/index.js';
export * from './networks.js';
export * from './pbkdf2/index.js'; export * from './pbkdf2/index.js';
export * from './random/index.js'; export * from './random/index.js';
export * from './scrypt/index.js'; export * from './scrypt/index.js';
-10
View File
@@ -3,18 +3,8 @@
import '@polkadot/x-bigint/shim'; import '@polkadot/x-bigint/shim';
import { utils as utilsNobleSecp256k1 } from '@noble/secp256k1';
import { u8aConcat } from '@polkadot/util';
import { hmacSha256AsU8a } from './hmac/index.js';
import { cryptoWaitReady } from './crypto.js'; import { cryptoWaitReady } from './crypto.js';
// Set overrides on the secp256k1 utils
// - hmacShaSync - This needs to be set, unset by default
utilsNobleSecp256k1.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) =>
hmacSha256AsU8a(key, u8aConcat(...messages));
// start init process immediately // start init process immediately
cryptoWaitReady().catch((): void => { cryptoWaitReady().catch((): void => {
// shouldn't happen, logged and caught inside cryptoWaitReady // shouldn't happen, logged and caught inside cryptoWaitReady
-3
View File
@@ -3,9 +3,6 @@
/// <reference types="@polkadot/dev-test/globals.d.ts" /> /// <reference types="@polkadot/dev-test/globals.d.ts" />
// no TS, this is not meant to be a global...
export {};
describe('cryptoWaitReady', (): void => { describe('cryptoWaitReady', (): void => {
it('should return false when it cannot initialize', async (): Promise<void> => { it('should return false when it cannot initialize', async (): Promise<void> => {
const old = global.WebAssembly; const old = global.WebAssembly;
@@ -3,8 +3,6 @@
import type { Keypair } from '../../types.js'; import type { Keypair } from '../../types.js';
import nacl from 'tweetnacl';
/** /**
* @name ed25519PairFromSecret * @name ed25519PairFromSecret
* @summary Creates a new public/secret keypair from a secret. * @summary Creates a new public/secret keypair from a secret.
@@ -19,6 +17,13 @@ import nacl from 'tweetnacl';
* ed25519PairFromSecret(...); // => { secretKey: [...], publicKey: [...] } * ed25519PairFromSecret(...); // => { secretKey: [...], publicKey: [...] }
* ``` * ```
*/ */
export function ed25519PairFromSecret (secret: Uint8Array): Keypair { export function ed25519PairFromSecret (secretKey: Uint8Array): Keypair {
return nacl.sign.keyPair.fromSecretKey(secret); if (secretKey.length !== 64) {
throw new Error('Invalid secretKey provided');
}
return {
publicKey: secretKey.slice(32),
secretKey
};
} }
@@ -3,8 +3,9 @@
import type { Keypair } from '../../types.js'; import type { Keypair } from '../../types.js';
import nacl from 'tweetnacl'; import { ed25519 } from '@noble/curves/ed25519';
import { hasBigInt, u8aConcatStrict } from '@polkadot/util';
import { ed25519KeypairFromSeed, isReady } from '@polkadot/wasm-crypto'; import { ed25519KeypairFromSeed, isReady } from '@polkadot/wasm-crypto';
/** /**
@@ -22,7 +23,7 @@ import { ed25519KeypairFromSeed, isReady } from '@polkadot/wasm-crypto';
* ``` * ```
*/ */
export function ed25519PairFromSeed (seed: Uint8Array, onlyJs?: boolean): Keypair { export function ed25519PairFromSeed (seed: Uint8Array, onlyJs?: boolean): Keypair {
if (!onlyJs && isReady()) { if (!hasBigInt || (!onlyJs && isReady())) {
const full = ed25519KeypairFromSeed(seed); const full = ed25519KeypairFromSeed(seed);
return { return {
@@ -31,5 +32,10 @@ export function ed25519PairFromSeed (seed: Uint8Array, onlyJs?: boolean): Keypai
}; };
} }
return nacl.sign.keyPair.fromSeed(seed); const publicKey = ed25519.getPublicKey(seed);
return {
publicKey,
secretKey: u8aConcatStrict([seed, publicKey])
};
} }
+9 -7
View File
@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { Keypair } from '../types.js'; import type { Keypair } from '../types.js';
import nacl from 'tweetnacl'; import { ed25519 } from '@noble/curves/ed25519';
import { u8aToU8a } from '@polkadot/util'; import { hasBigInt, u8aToU8a } from '@polkadot/util';
import { ed25519Sign as wasmSign, isReady } from '@polkadot/wasm-crypto'; import { ed25519Sign as wasmSign, isReady } from '@polkadot/wasm-crypto';
/** /**
@@ -23,14 +22,17 @@ import { ed25519Sign as wasmSign, isReady } from '@polkadot/wasm-crypto';
* ed25519Sign([...], [...]); // => [...] * ed25519Sign([...], [...]); // => [...]
* ``` * ```
*/ */
export function ed25519Sign (message: HexString | Uint8Array | string, { publicKey, secretKey }: Partial<Keypair>, onlyJs?: boolean): Uint8Array { export function ed25519Sign (message: string | Uint8Array, { publicKey, secretKey }: Partial<Keypair>, onlyJs?: boolean): Uint8Array {
if (!secretKey) { if (!secretKey) {
throw new Error('Expected a valid secretKey'); throw new Error('Expected a valid secretKey');
} else if (!publicKey) {
throw new Error('Expected a valid publicKey');
} }
const messageU8a = u8aToU8a(message); const messageU8a = u8aToU8a(message);
const privateU8a = secretKey.subarray(0, 32);
return !onlyJs && isReady() return !hasBigInt || (!onlyJs && isReady())
? wasmSign(publicKey as Uint8Array, secretKey.subarray(0, 32), messageU8a) ? wasmSign(publicKey, privateU8a, messageU8a)
: nacl.sign.detached(messageU8a, secretKey); : ed25519.sign(messageU8a, privateU8a);
} }
+10 -8
View File
@@ -1,11 +1,9 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { ed25519 } from '@noble/curves/ed25519';
import nacl from 'tweetnacl'; import { hasBigInt, u8aToU8a } from '@polkadot/util';
import { u8aToU8a } from '@polkadot/util';
import { ed25519Verify as wasmVerify, isReady } from '@polkadot/wasm-crypto'; import { ed25519Verify as wasmVerify, isReady } from '@polkadot/wasm-crypto';
/** /**
@@ -22,7 +20,7 @@ import { ed25519Verify as wasmVerify, isReady } from '@polkadot/wasm-crypto';
* ed25519Verify([...], [...], [...]); // => true/false * ed25519Verify([...], [...], [...]); // => true/false
* ``` * ```
*/ */
export function ed25519Verify (message: HexString | Uint8Array | string, signature: HexString | Uint8Array | string, publicKey: HexString | Uint8Array | string, onlyJs?: boolean): boolean { export function ed25519Verify (message: string | Uint8Array, signature: string | Uint8Array, publicKey: string | Uint8Array, onlyJs?: boolean): boolean {
const messageU8a = u8aToU8a(message); const messageU8a = u8aToU8a(message);
const publicKeyU8a = u8aToU8a(publicKey); const publicKeyU8a = u8aToU8a(publicKey);
const signatureU8a = u8aToU8a(signature); const signatureU8a = u8aToU8a(signature);
@@ -33,7 +31,11 @@ export function ed25519Verify (message: HexString | Uint8Array | string, signatu
throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`); throw new Error(`Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
} }
return !onlyJs && isReady() try {
? wasmVerify(signatureU8a, messageU8a, publicKeyU8a) return !hasBigInt || (!onlyJs && isReady())
: nacl.sign.detached.verify(messageU8a, signatureU8a, publicKeyU8a); ? wasmVerify(signatureU8a, messageU8a, publicKeyU8a)
: ed25519.verify(signatureU8a, messageU8a, publicKeyU8a);
} catch {
return false;
}
} }
+1 -1
View File
@@ -16,7 +16,7 @@ function getH160 (u8a: Uint8Array): Uint8Array {
return u8a.slice(-20); return u8a.slice(-20);
} }
export function ethereumEncode (addressOrPublic?: HexString | string | Uint8Array): HexString { export function ethereumEncode (addressOrPublic?: string | Uint8Array): HexString {
if (!addressOrPublic) { if (!addressOrPublic) {
return '0x'; return '0x';
} }
@@ -1,13 +1,11 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { isHex } from '@polkadot/util'; import { isHex } from '@polkadot/util';
import { isEthereumChecksum } from './isChecksum.js'; import { isEthereumChecksum } from './isChecksum.js';
export function isEthereumAddress (address?: HexString | string): boolean { export function isEthereumAddress (address?: string): boolean {
if (!address || address.length !== 42 || !isHex(address)) { if (!address || address.length !== 42 || !isHex(address)) {
return false; return false;
} else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
+4 -4
View File
@@ -21,14 +21,14 @@ export function createAsHex <T extends (...args: never[]) => Uint8Array> (fn: T)
} }
/** @internal */ /** @internal */
export function createBitHasher (bitLength: 256 | 512, fn: (data: HexString | Buffer | Uint8Array | string, bitLength: 256 | 512, onlyJs?: boolean) => Uint8Array): (data: HexString | Buffer | Uint8Array | string, onlyJs?: boolean) => Uint8Array { export function createBitHasher (bitLength: 256 | 512, fn: (data: string | Uint8Array, bitLength: 256 | 512, onlyJs?: boolean) => Uint8Array): (data: string | Uint8Array, onlyJs?: boolean) => Uint8Array {
return (data: HexString | Buffer | Uint8Array | string, onlyJs?: boolean): Uint8Array => return (data: string | Uint8Array, onlyJs?: boolean): Uint8Array =>
fn(data, bitLength, onlyJs); fn(data, bitLength, onlyJs);
} }
/** @internal */ /** @internal */
export function createDualHasher (wa: DualHash, js: DualHash): (value: HexString | Buffer | Uint8Array | string, bitLength?: 256 | 512, onlyJs?: boolean) => Uint8Array { export function createDualHasher (wa: DualHash, js: DualHash): (value: string | Uint8Array, bitLength?: 256 | 512, onlyJs?: boolean) => Uint8Array {
return (value: HexString | Buffer | Uint8Array | string, bitLength: 256 | 512 = 256, onlyJs?: boolean): Uint8Array => { return (value: string | Uint8Array, bitLength: 256 | 512 = 256, onlyJs?: boolean): Uint8Array => {
const u8a = u8aToU8a(value); const u8a = u8aToU8a(value);
return !hasBigInt || (!onlyJs && isReady()) return !hasBigInt || (!onlyJs && isReady())
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
export { hmacShaAsU8a, hmacSha256AsU8a, hmacSha512AsU8a } from './shaAsU8a.js'; export { hmacSha256AsU8a, hmacSha512AsU8a, hmacShaAsU8a } from './shaAsU8a.js';
+2 -2
View File
@@ -39,10 +39,10 @@ export function hmacShaAsU8a (key: Uint8Array | string, data: Uint8Array, bitLen
* @name hmacSha256AsU8a * @name hmacSha256AsU8a
* @description creates a Hmac Sha256 Uint8Array from the key & data * @description creates a Hmac Sha256 Uint8Array from the key & data
*/ */
export const hmacSha256AsU8a = createSha(256); export const hmacSha256AsU8a = /*#__PURE__*/ createSha(256);
/** /**
* @name hmacSha512AsU8a * @name hmacSha512AsU8a
* @description creates a Hmac Sha512 Uint8Array from the key & data * @description creates a Hmac Sha512 Uint8Array from the key & data
*/ */
export const hmacSha512AsU8a = createSha(512); export const hmacSha512AsU8a = /*#__PURE__*/ createSha(512);
+6 -3
View File
@@ -1,19 +1,22 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
export type EncryptedJsonVersion = '0' | '1' | '2' | '3'; export type EncryptedJsonVersion = '0' | '1' | '2' | '3';
export type EncryptedJsonEncoding = 'none' | 'scrypt' | 'xsalsa20-poly1305'; export type EncryptedJsonEncoding = 'none' | 'scrypt' | 'xsalsa20-poly1305';
export interface EncryptedJsonDescriptor { export interface EncryptedJsonDescriptor {
/** Descriptor for the content */
content: string[]; content: string[];
/** The encoding (in current/latest versions this is always an array) */
type: EncryptedJsonEncoding | EncryptedJsonEncoding[]; type: EncryptedJsonEncoding | EncryptedJsonEncoding[];
/** The version of encoding applied */
version: EncryptedJsonVersion; version: EncryptedJsonVersion;
} }
export interface EncryptedJson { export interface EncryptedJson {
encoded: HexString | string; /** The encoded string */
encoded: string;
/** The encoding used */
encoding: EncryptedJsonDescriptor; encoding: EncryptedJsonDescriptor;
} }
+1 -1
View File
@@ -42,4 +42,4 @@ export const keccak512AsU8a = /*#__PURE__*/ createBitHasher(512, keccakAsU8a);
* @name keccakAsHex * @name keccakAsHex
* @description Creates a keccak hex string from the input. * @description Creates a keccak hex string from the input.
*/ */
export const keccakAsHex = createAsHex(keccakAsU8a); export const keccakAsHex = /*#__PURE__*/ createAsHex(keccakAsU8a);
+1 -1
View File
@@ -5,4 +5,4 @@
* @summary Create Keccak256/512 values as hex & Uint8Array output * @summary Create Keccak256/512 values as hex & Uint8Array output
*/ */
export { keccakAsHex, keccakAsU8a, keccak256AsU8a, keccak512AsU8a } from './asU8a.js'; export { keccak256AsU8a, keccak512AsU8a, keccakAsHex, keccakAsU8a } from './asU8a.js';
@@ -1,8 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @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 { BN, bnToU8a, compactAddLength, hexToU8a, isBigInt, isBn, isHex, isNumber, isString, stringToU8a } from '@polkadot/util'; import { BN, bnToU8a, compactAddLength, hexToU8a, isBigInt, isBn, isHex, isNumber, isString, stringToU8a } from '@polkadot/util';
import { blake2AsU8a } from '../blake2/asU8a.js'; import { blake2AsU8a } from '../blake2/asU8a.js';
@@ -46,7 +44,7 @@ export class DeriveJunction {
return !this.#isHard; return !this.#isHard;
} }
public hard (value: HexString | number | string | bigint | BN | Uint8Array): DeriveJunction { public hard (value: number | string | bigint | BN | Uint8Array): DeriveJunction {
return this.soft(value).harden(); return this.soft(value).harden();
} }
@@ -56,7 +54,7 @@ export class DeriveJunction {
return this; return this;
} }
public soft (value: HexString | number | string | bigint | BN | Uint8Array): DeriveJunction { public soft (value: number | string | bigint | BN | Uint8Array): DeriveJunction {
if (isNumber(value) || isBn(value) || isBigInt(value)) { if (isNumber(value) || isBn(value) || isBigInt(value)) {
return this.soft(bnToU8a(value, BN_LE_256_OPTS)); return this.soft(bnToU8a(value, BN_LE_256_OPTS));
} else if (isHex(value)) { } else if (isHex(value)) {
@@ -3,7 +3,9 @@
/// <reference types="@polkadot/dev-test/globals.d.ts" /> /// <reference types="@polkadot/dev-test/globals.d.ts" />
import { ExtractResult, keyExtractPath } from './extractPath.js'; import type { ExtractResult } from './extractPath.js';
import { keyExtractPath } from './extractPath.js';
describe('keyExtractPath', (): void => { describe('keyExtractPath', (): void => {
it('extracts properly from soft', (): void => { it('extracts properly from soft', (): void => {
@@ -35,13 +37,13 @@ describe('keyExtractPath', (): void => {
expect(test.path[1].chainCode).toEqual(Uint8Array.from([2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])); expect(test.path[1].chainCode).toEqual(Uint8Array.from([2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]));
}); });
it('does not extract from invalid paths', (): void => { it('does not extract from invalid paths (1)', (): void => {
expect( expect(
(): ExtractResult => keyExtractPath('1/2') (): ExtractResult => keyExtractPath('1/2')
).toThrow(/does not match input/); ).toThrow(/does not match input/);
}); });
it('does not extract from invalid paths', (): void => { it('does not extract from invalid paths (2)', (): void => {
expect( expect(
(): ExtractResult => keyExtractPath('hello') (): ExtractResult => keyExtractPath('hello')
).toThrow(/does not match input/); ).toThrow(/does not match input/);
+1 -1
View File
@@ -6,7 +6,7 @@ import { DeriveJunction } from './DeriveJunction.js';
const RE_JUNCTION = /\/(\/?)([^/]+)/g; const RE_JUNCTION = /\/(\/?)([^/]+)/g;
export interface ExtractResult { export interface ExtractResult {
parts: null | string[]; parts: string[] | null;
path: DeriveJunction[]; path: DeriveJunction[];
} }
@@ -3,7 +3,9 @@
/// <reference types="@polkadot/dev-test/globals.d.ts" /> /// <reference types="@polkadot/dev-test/globals.d.ts" />
import { ExtractResult, keyExtractSuri } from './extractSuri.js'; import type { ExtractResult } from './extractSuri.js';
import { keyExtractSuri } from './extractSuri.js';
describe('keyExtractSuri', (): void => { describe('keyExtractSuri', (): void => {
it('does not extract from invalid suri', (): void => { it('does not extract from invalid suri', (): void => {
+3 -2
View File
@@ -1,7 +1,8 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors // Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import { DeriveJunction } from './DeriveJunction.js'; import type { DeriveJunction } from './DeriveJunction.js';
import { keyExtractPath } from './extractPath.js'; import { keyExtractPath } from './extractPath.js';
export interface ExtractResult { export interface ExtractResult {
@@ -24,7 +25,7 @@ export function keyExtractSuri (suri: string): ExtractResult {
throw new Error('Unable to match provided value to a secret URI'); throw new Error('Unable to match provided value to a secret URI');
} }
const [, phrase, , derivePath, , , password] = matches as string[]; const [, phrase, , derivePath, , , password] = matches;
const { path } = keyExtractPath(derivePath); const { path } = keyExtractPath(derivePath);
return { return {
+1 -1
View File
@@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { Keypair, KeypairType } from '../types.js'; import type { Keypair, KeypairType } from '../types.js';
import type { DeriveJunction } from './DeriveJunction.js';
import { DeriveJunction } from './DeriveJunction.js';
import { keyHdkdEcdsa } from './hdkdEcdsa.js'; import { keyHdkdEcdsa } from './hdkdEcdsa.js';
import { keyHdkdEd25519 } from './hdkdEd25519.js'; import { keyHdkdEd25519 } from './hdkdEd25519.js';
import { keyHdkdSr25519 } from './hdkdSr25519.js'; import { keyHdkdSr25519 } from './hdkdSr25519.js';

Some files were not shown because too many files have changed in this diff Show More