Compare commits

...
689 Commits
Author SHA1 Message Date
github-actions[bot] bff05aad32 [CI Skip] release/stable 8.2.2
skip-checks: true
2021-12-19 07:02:52 +00:00
Jaco 0f98c1ac22 8.2.2 2021-12-19 08:58:36 +02:00
github-actions[bot] f72d9a2a26 [CI Skip] release/beta 8.2.2-0
skip-checks: true
2021-12-19 06:54:36 +00:00
Jaco 1d0558a537 8.2.2 (#1328) 2021-12-19 08:50:43 +02:00
Jaco 94e7c05573 8.2.1 (#1327) 2021-12-19 08:17:43 +02:00
github-actions[bot] 12601805b1 [CI Skip] release/beta 8.1.3-30
skip-checks: true
2021-12-19 06:02:04 +00:00
Jaco 9194f417fe ss58 sync (w/ bumps) (#1326) 2021-12-19 07:58:12 +02:00
github-actions[bot] 6a3118e66c [CI Skip] release/beta 8.1.3-29
skip-checks: true
2021-12-15 14:16:06 +00:00
Jaco 4ccad202c5 Remove x-noble-* packages (all upstream) (#1323) 2021-12-15 16:12:06 +02:00
github-actions[bot] 96a019f6eb [CI Skip] release/beta 8.1.3-28
skip-checks: true
2021-12-15 13:56:40 +00:00
Jaco bad6a1b991 Bump dependencies (#1322) 2021-12-15 15:52:47 +02:00
github-actions[bot] d83e50ee19 [CI Skip] release/beta 8.1.3-27
skip-checks: true
2021-12-14 06:27:14 +00:00
Jaco feae08fc0f Adjust with tsconfig references (#1317)
* Adjust with tsconfig references

* tabs -> spaces

* Adjust

* Cleanup spacing

* Adjust

* eslint-specific config

* Bump deps

* Bumps

* Adjust

* Update tests
2021-12-14 08:23:16 +02:00
github-actions[bot] fdd32df12f [CI Skip] release/beta 8.1.3-26
skip-checks: true
2021-12-13 16:12:33 +00:00
Jaco 17a9b653ac Upstream @noble packages (#1319) 2021-12-13 18:07:48 +02:00
github-actions[bot] 6154454c38 [CI Skip] release/beta 8.1.3-25
skip-checks: true
2021-12-13 16:04:15 +00:00
Jaco ac0ec5be55 Bump noble (#1318) 2021-12-13 17:58:48 +02:00
github-actions[bot] 3802426046 [CI Skip] release/beta 8.1.3-24
skip-checks: true
2021-12-13 08:15:54 +00:00
Jaco d91b27b180 CHANGELOG (#1316) 2021-12-13 10:10:59 +02:00
github-actions[bot] 1f9a1a5f8a [CI Skip] release/beta 8.1.3-23
skip-checks: true
2021-12-13 06:18:04 +00:00
Jaco 6b3edffe55 Add tsconfig.base (#1315) 2021-12-13 08:13:26 +02:00
github-actions[bot] 7d46eb8423 [CI Skip] release/beta 8.1.3-22
skip-checks: true
2021-12-12 09:31:45 +00:00
Jaco a7eb0ed319 Bump tsc (#1313) 2021-12-12 11:26:25 +02:00
github-actions[bot] 227a34d55d [CI Skip] release/beta 8.1.3-21
skip-checks: true
2021-12-12 06:48:22 +00:00
Jaco 8a29dc2b57 Bump dependencies (#1312) 2021-12-12 08:43:47 +02:00
github-actions[bot] 88d1a71df8 [CI Skip] release/beta 8.1.3-20
skip-checks: true
2021-12-11 07:50:27 +00:00
Jaco 6f53068297 Type re-exports (#1310) 2021-12-11 09:45:49 +02:00
github-actions[bot] 5bf71dab41 [CI Skip] release/beta 8.1.3-19
skip-checks: true
2021-12-10 09:34:04 +00:00
Jared Norris b6f3dfb2ca Add Sora network (#1306)
* Add Sora network

* Fixed sort order

* Add Sora network
2021-12-10 11:29:30 +02:00
github-actions[bot] 4d3a2d9610 [CI Skip] release/beta 8.1.3-18
skip-checks: true
2021-12-10 09:18:41 +00:00
Jaco 7eaf013572 isPromise utility (#1308)
* isPromise utility

* Adjust

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

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

* Adjust
2021-12-10 11:13:00 +02:00
github-actions[bot] c673b96963 [CI Skip] release/beta 8.1.3-17
skip-checks: true
2021-12-10 06:48:03 +00:00
Jaco c57eee5027 Remove deprecated substr from formatBalance (#1307)
* Remove deprecated substr from formatBalance

* Cleanups

* Adjust
2021-12-10 08:43:28 +02:00
github-actions[bot] 9efd2db377 [CI Skip] release/beta 8.1.3-16
skip-checks: true
2021-12-09 18:43:56 +00:00
Jared Norris c90246ec0b Add Sora network (#1305)
* Add Sora network

* Add Sora network

removed trailing slash ( lint complaint )

* Remove Sora from knownLedger

Dependency has not been updated yet
2021-12-09 20:39:21 +02:00
github-actions[bot] fbe1532f62 [CI Skip] release/beta 8.1.3-15
skip-checks: true
2021-12-09 08:49:33 +00:00
Jaco f514402b15 Small maintainability cleanups (#1304) 2021-12-09 10:44:56 +02:00
github-actions[bot] 5ea6992704 [CI Skip] release/beta 8.1.3-14
skip-checks: true
2021-12-09 08:15:32 +00:00
Jaco 7955022ce5 Helpers for 256/512 hashing (#1303)
* Helpers for 256/512 hashing

* Adjust u8aToU8a (u8a-only check earlier)

* Fix export

* Simplify

* revert
2021-12-09 10:10:51 +02:00
github-actions[bot] 000d097de2 [CI Skip] release/beta 8.1.3-13
skip-checks: true
2021-12-08 18:28:50 +00:00
Jaco 8a6c8b64df Adjust & dedupe global extraction tests (#1301) 2021-12-08 20:23:46 +02:00
github-actions[bot] 306e503d23 [CI Skip] release/beta 8.1.3-12
skip-checks: true
2021-12-08 11:20:18 +00:00
Jaco 648019f9d4 CC check adjustments (#1300) 2021-12-08 13:14:51 +02:00
github-actions[bot] 5e48cfbbaa [CI Skip] release/beta 8.1.3-11
skip-checks: true
2021-12-08 11:13:34 +00:00
Jaco 57825fc73b Sync ss58 registry (#1299) 2021-12-08 13:07:34 +02:00
github-actions[bot] 19ae016723 [CI Skip] release/beta 8.1.3-10
skip-checks: true
2021-12-08 10:51:49 +00:00
pan 8d7bed5865 add bifrost (#1296)
* add bifrost.finance

* update code style

* update code style
2021-12-08 12:47:05 +02:00
github-actions[bot] e019a3043a [CI Skip] release/beta 8.1.3-9
skip-checks: true
2021-12-08 09:38:50 +00:00
Jaco 9dfd013755 Dedupes for min/max (#1297) 2021-12-08 11:33:29 +02:00
github-actions[bot] a5df4ed764 [CI Skip] release/beta 8.1.3-8
skip-checks: true
2021-12-08 08:49:18 +00:00
Jaco a938a9f998 Some bip39-en cleanups (& tests) (#1295) 2021-12-08 10:43:43 +02:00
github-actions[bot] 1a6f81e2a7 [CI Skip] release/beta 8.1.3-7
skip-checks: true
2021-12-08 08:32:18 +00:00
Jaco 6ab85a42bb assertUnreachable (#1294) 2021-12-08 10:26:45 +02:00
github-actions[bot] 21c9e1aefd [CI Skip] release/beta 8.1.3-6
skip-checks: true
2021-12-07 17:50:02 +00:00
Jaco 58f740f3de Bump deps (#1293) 2021-12-07 19:44:48 +02:00
github-actions[bot] ddc6b83e96 [CI Skip] release/beta 8.1.3-5
skip-checks: true
2021-12-07 16:15:16 +00:00
Antoine Estienne 285e595930 Add eth uri keyring test (#1291)
* added gerald test address

* add test for addUri for eth

* lint
2021-12-07 18:10:44 +02:00
github-actions[bot] dce16d59e6 [CI Skip] release/beta 8.1.3-4
skip-checks: true
2021-12-07 15:42:22 +00:00
Jaco b8edcb0e65 Revert package inclusion (re-add x-*) (#1292) 2021-12-07 17:37:06 +02:00
github-actions[bot] b63607c4a0 [CI Skip] release/beta 8.1.3-3
skip-checks: true
2021-12-06 12:45:44 +00:00
Jaco c56c86432a Sync ss58 (#1290) 2021-12-06 14:41:06 +02:00
github-actions[bot] e52fe9a838 [CI Skip] release/beta 8.1.3-2
skip-checks: true
2021-12-06 08:28:17 +00:00
Jaco 06dca3d955 Bump dev (#1288) 2021-12-06 10:22:55 +02:00
github-actions[bot] 0908dbb861 [CI Skip] release/beta 8.1.3-1
skip-checks: true
2021-12-06 07:06:02 +00:00
Jaco e97410df52 Preserve all-caps word splits in stringCamelCase (#1287)
* Preserve all-caps word splits in `stringCamelCase`

* Additional tests

* Additional test

* Additional
2021-12-06 09:02:03 +02:00
github-actions[bot] faa6734329 [CI Skip] release/beta 8.1.3-0
skip-checks: true
2021-12-06 05:09:14 +00:00
Jaco f2f25815c1 Swap to upstream @noble/hashes (#1285)
* Swap to upstream `@noble/hashes`

* Lintin (import order)
2021-12-06 07:05:08 +02:00
github-actions[bot] 80785babb4 [CI Skip] release/stable 8.1.2
skip-checks: true
2021-12-05 11:20:24 +00:00
Jaco 59761086d0 8.1.2 (#1284)
* 8.1.2

* Adjust

* Adjust
2021-12-05 13:14:40 +02:00
github-actions[bot] 05c82721e8 [CI Skip] release/stable 8.1.1
skip-checks: true
2021-12-05 08:58:29 +00:00
Jaco 1b13cf0eea 8.1.1 (#1283) 2021-12-05 10:54:07 +02:00
github-actions[bot] e6777ece62 [CI Skip] release/beta 8.0.6-18
skip-checks: true
2021-12-05 08:15:04 +00:00
Jaco 7436976598 Add shims for x-* (not used, convenience) (#1282)
* Add shims for x-* (not used, convenience)

* Update packages/x-ws/src/shim.ts

* Remove (now) unused dependencies
2021-12-05 10:09:47 +02:00
github-actions[bot] 699ef952c3 [CI Skip] release/beta 8.0.6-17
skip-checks: true
2021-12-04 11:02:06 +00:00
Jaco cd9dc35475 Align x-noble with upstream (#1281)
* Align x-noble with upstream

* Remove own version of hashes

* @noble/hashes from master
2021-12-04 12:57:36 +02:00
github-actions[bot] ee7923c457 [CI Skip] release/beta 8.0.6-16
skip-checks: true
2021-12-04 07:16:16 +00:00
Jaco bd3f51844c Add BigInt shim (#1280) 2021-12-04 09:11:16 +02:00
github-actions[bot] 986dfe5006 [CI Skip] release/beta 8.0.6-15
skip-checks: true
2021-12-03 15:29:06 +00:00
Jaco 1eba41b2e6 Use @noble/secp256k1 (#1189)
* Use @noble/secp256k1

* Remove elliptic

* Remove @types

* -19

* verify uses recover internally

* fromSeed

* Init Noble utils inside cryptoInit

* remove bn.js dep (used from @polkadot/util)

* With x-noble-secp256k1

* Adjust

* Remove unused functions

* CHANGELOG

* Fix useless assignment

* Cleanup cryptoInit

* adjust hasher

* bn.js only via util

* align versions

* Remove x-secp256k1 (to be pulled in from master merge)

* Remove (now) invalid test

* Remove assertBigInt

* hasBigInt

* cleanups

* Apply suggestions from code review

* evmAddress fixes

* Extra comment
2021-12-03 17:23:46 +02:00
github-actions[bot] 88c2d16951 [CI Skip] release/beta 8.0.6-14
skip-checks: true
2021-12-03 14:28:20 +00:00
Jaco 303a57c4b5 Use secp256k1 from wasm (#1276)
* Use secp256k1 from wasm

* Expand & recover

* sign (tests failing)

* Pass onlyJs flags everywhere

* Adjust, all ready to actually pass... they don't

* naming

* Fix verify tests

* Adjust verify with non-hashing

* bump wasm

* Allow verify against address or publicKey

* Passing tests

* comment for wasm

* bi/bn versions for tweakadd

* Bumps

* Adjust
2021-12-03 16:23:41 +02:00
github-actions[bot] 7bfca0d40f [CI Skip] release/beta 8.0.6-13
skip-checks: true
2021-12-03 13:47:26 +00:00
Jaco 916187dbf2 Add x-noble-secp256k1 (#1279)
* Add x-noble-secp256k1

* Ignores

* Remove unused functions

* Fix jest
2021-12-03 15:42:57 +02:00
github-actions[bot] cfc598b30f [CI Skip] release/beta 8.0.6-12
skip-checks: true
2021-12-03 12:06:48 +00:00
Jaco 67bfe3a52e Bump deps (#1278) 2021-12-03 14:01:30 +02:00
github-actions[bot] 0299cba18e [CI Skip] release/beta 8.0.6-11
skip-checks: true
2021-12-02 13:51:53 +00:00
Jaco 182c6770d1 Bump dev (#1277) 2021-12-02 15:46:22 +02:00
github-actions[bot] c89ec8a964 [CI Skip] release/beta 8.0.6-10
skip-checks: true
2021-12-02 06:53:44 +00:00
Jaco dc63304735 Remove unused x-noble-hashes functions (#1275) 2021-12-02 08:48:44 +02:00
github-actions[bot] 9ce825de94 [CI Skip] release/beta 8.0.6-9
skip-checks: true
2021-12-02 05:37:08 +00:00
Jaco 3cb41c3b03 CHANGELOG 2021-12-02 07:32:47 +02:00
Jaco b1f9c37f6a x-bigint package (#1274)
* x-bigint package

* x-bigint in has*

* 8.0.6-8

* Adjust

* Adjust

* jest config

* Adjust

* Remove commented code

* Update README

* CHANGELOG
2021-12-02 07:29:44 +02:00
github-actions[bot] 4a69486993 [CI Skip] release/beta 8.0.6-8
skip-checks: true
2021-12-01 19:41:34 +00:00
Jaco 3a7ab0454f instanceof BigInt (#1273) 2021-12-01 21:37:21 +02:00
github-actions[bot] ecfc262bcd [CI Skip] release/beta 8.0.6-7
skip-checks: true
2021-12-01 18:41:25 +00:00
Jaco 776a653f42 Use BigInt only via xglobal (#1272)
* Use BigInt only via xglobal

* Adjust

* yarn
2021-12-01 20:37:11 +02:00
github-actions[bot] ee99ffdbb4 [CI Skip] release/beta 8.0.6-6
skip-checks: true
2021-12-01 16:15:34 +00:00
Jaco bda848f484 Expand has checks (#1271) 2021-12-01 18:11:03 +02:00
github-actions[bot] 82a63887a6 [CI Skip] release/beta 8.0.6-5
skip-checks: true
2021-12-01 14:25:07 +00:00
Jaco 50317d7dc3 Adjust for anon (#1269) 2021-12-01 16:19:50 +02:00
github-actions[bot] 39e6a3c048 [CI Skip] release/beta 8.0.6-4
skip-checks: true
2021-12-01 13:33:02 +00:00
Jaco db93c3076b Revert "Remove ed2curve dependency (#1265)" (#1267)
* Revert "Remove ed2curve dependency (#1265)"

This reverts commit 7e9b2770b6.

* Adjust
2021-12-01 15:28:42 +02:00
Jaco c8f0ad55c4 Split into @polkadot/x-noble-hashes (indicating diff from upstream) (#1268)
* Aplit @noble/hashes fork

* Re-add original (non-eslint)

* Original package imports in README

* package.json

* Update packages/x-noble-hashes/package.json

* CC ignore

* jest
2021-12-01 15:27:29 +02:00
github-actions[bot] 2104c50bd0 [CI Skip] release/beta 8.0.6-3
skip-checks: true
2021-12-01 09:56:10 +00:00
Jaco 7e9b2770b6 Remove ed2curve dependency (#1265)
* Remove edcurve dependency

* browser overrides

* Remove bundledDependencies
2021-12-01 11:51:55 +02:00
github-actions[bot] 8bf24c2f85 [CI Skip] release/beta 8.0.6-2
skip-checks: true
2021-12-01 08:04:23 +00:00
Jaco 60337a3b55 Adjust stale cron (#1264) 2021-12-01 09:59:19 +02:00
github-actions[bot] f527c80b5c [CI Skip] release/beta 8.0.6-1
skip-checks: true
2021-12-01 07:26:29 +00:00
Jaco bdd2bcf236 camelCase with mixed uppercase/numbers (#1260)
* camelCase with mixed uppercase/numbers

* consequtive capitals

* CHANGELOG

* CHANGELOG
2021-12-01 09:21:31 +02:00
github-actions[bot] cf370febf0 [CI Skip] release/beta 8.0.6-0
skip-checks: true
2021-12-01 07:19:00 +00:00
Hussein Ait-Lahcen 715ef6e7db Add Picasso Genesis Hash (#1261) 2021-12-01 09:14:36 +02:00
github-actions[bot] cc644e85bf [CI Skip] release/stable 8.0.5
skip-checks: true
2021-12-01 06:00:21 +00:00
Jaco c7b8d95097 Adjust sha3 expectation of BigInt availability (#1263) 2021-12-01 07:54:50 +02:00
github-actions[bot] 42de7cebe1 [CI Skip] release/stable 8.0.4
skip-checks: true
2021-11-30 05:16:59 +00:00
Jaco 2e520c933a 8.0.4 (#1259) 2021-11-30 07:12:55 +02:00
github-actions[bot] 5d1dd0dd27 [CI Skip] release/stable 8.0.3
skip-checks: true
2021-11-30 04:37:24 +00:00
Jaco 154f9f22f1 8.0.3 (#1258) 2021-11-30 06:33:07 +02:00
github-actions[bot] 98e398954e [CI Skip] release/beta 8.0.3-3
skip-checks: true
2021-11-29 16:38:10 +00:00
Jaco 3643c2e306 Adjust string{Camel, Pascal}Case (#1256) 2021-11-29 18:34:04 +02:00
github-actions[bot] 80195f6d11 [CI Skip] release/beta 8.0.3-2
skip-checks: true
2021-11-27 10:55:11 +00:00
Jaco 6bc648bfe0 Some tweaks on base{32, 58, 64} (#1254)
* Some tweaks on base{32, 58, 64}

* align

* rationale
2021-11-27 12:50:40 +02:00
github-actions[bot] c29b12d3b5 [CI Skip] release/beta 8.0.3-1
skip-checks: true
2021-11-27 07:28:39 +00:00
Jaco 8a5b514944 Additional tiny base64 decoder tests (#1252)
* Additional tiny base64 decoder tests

* Update packages/util-crypto/src/base64/encode.spec.ts

* Update packages/x-randomvalues/src/base64.spec.ts
2021-11-27 09:23:18 +02:00
github-actions[bot] 64fd66bd2a [CI Skip] release/beta 8.0.3-0
skip-checks: true
2021-11-27 06:09:53 +00:00
Jaco 75aa7ba2c7 Tiny base64 decoder (no Buffer dep) (#1251)
* Tiny base64 decoder (no Buffer dep)

* CHANGELOG
2021-11-27 08:05:34 +02:00
github-actions[bot] 25196c3367 [CI Skip] release/stable 8.0.2
skip-checks: true
2021-11-26 09:58:36 +00:00
Jaco eeb68c7e0f Explicit inclusion (patch-package + bundled is problematic) (#1250)
* Explicit inclusion (patch-package + bundled is problematic)

* 8.0.2
2021-11-26 11:53:45 +02:00
github-actions[bot] 1604b92771 [CI Skip] release/stable 8.0.1
skip-checks: true
2021-11-26 09:32:49 +00:00
Jaco 1881b564c5 8.0.1 (#1249)
* 8.0.1

* correct version

* Remove unused dep
2021-11-26 11:29:09 +02:00
github-actions[bot] 3bd4b56eb0 [CI Skip] release/stable 8.0.0
skip-checks: true
2021-11-26 08:51:49 +00:00
Jaco ce46e6da0c 8.0.0-0 (indicating bump) (#1248)
* 8.0.0-0 (indicating bump)

* root
2021-11-26 10:47:29 +02:00
github-actions[bot] bd1efcbba0 [CI Skip] release/beta 7.9.3-19
skip-checks: true
2021-11-26 08:26:57 +00:00
Jaco f2e4fa0d34 Hash bigint syntax (tmp incl. w/ _n adjustment) (#1246)
* Hash bigint syntax (tmp incl. w/ _n adjustment)

* headers with licence & PR link

* Re-adjust package.json

* Use patch-package

* test for patch application

* Upgrade dev

* Remove eslintignore
2021-11-26 10:22:17 +02:00
Github Actions adbf452c8d [CI Skip] release/beta 7.9.3-18
skip-checks: true
2021-11-26 07:07:40 +00:00
Jaco 56a5a079dd Rename bi constants (consistency) (#1247)
* Rename bi constants (consistency)

* sqrt constant

* Rename bi* functions

* secp256k1 also part of renames
2021-11-26 09:03:14 +02:00
Github Actions 0791b2dc9e [CI Skip] release/beta 7.9.3-17
skip-checks: true
2021-11-25 15:19:42 +00:00
Jaco 9821eba11f Rename internal BigInt helper (#1244)
* Rename internal BigInt helper

* Consistency
2021-11-25 17:16:09 +02:00
Github Actions b0b0151071 [CI Skip] release/beta 7.9.3-16
skip-checks: true
2021-11-25 14:08:16 +00:00
Jaco 8422e0da66 CHANGELOG (#1243) 2021-11-25 16:03:24 +02:00
Github Actions 5faa0fd544 [CI Skip] release/beta 7.9.3-15
skip-checks: true
2021-11-25 10:21:50 +00:00
Jaco b16396b9b3 Rename internal keypair locations (#1242)
* Rename internal keypair locations

* save all :)

* Incdicate testing

* add dummy test
2021-11-25 12:17:23 +02:00
Github Actions f342348ad2 [CI Skip] release/beta 7.9.3-14
skip-checks: true
2021-11-25 09:38:14 +00:00
Jaco a8f13bd387 Additional adjustments on newBigInt (#1241)
* Additional adjustments on newBigInt

* typing
2021-11-25 11:34:34 +02:00
Github Actions dbb77f35b6 [CI Skip] release/beta 7.9.3-13
skip-checks: true
2021-11-25 09:03:15 +00:00
Jaco c60e35ee9e Ensure BigInt(...) is called conditionally (#1240)
* Ensure BigInt(...) is called consitionally

* adjust

* comments

* adjust
2021-11-25 10:59:26 +02:00
Github Actions b102d9c2b3 [CI Skip] release/beta 7.9.3-12
skip-checks: true
2021-11-25 07:19:56 +00:00
Jaco 0ee4bc81f5 Performance test adjustments (#1239)
* Performance test adjustments

* testing

* adjust

* alphabet

* Adjust
2021-11-25 09:16:01 +02:00
Github Actions b05abf869a [CI Skip] release/beta 7.9.3-11
skip-checks: true
2021-11-24 14:59:34 +00:00
Jaco bc014f11dd Stale schedule (#1238) 2021-11-24 16:55:43 +02:00
Github Actions f1429f10af [CI Skip] release/beta 7.9.3-10
skip-checks: true
2021-11-24 13:25:40 +00:00
Jaco be8cabbd1e Rename {ed, sr}25519 functions (#1237)
* Rename {ed, sr}25519 functions

* Finalize renames

* Fix wasm imports

* CHANGELOG
2021-11-24 15:21:28 +02:00
Github Actions 8d0a0ed2b7 [CI Skip] release/beta 7.9.3-9
skip-checks: true
2021-11-24 12:04:11 +00:00
Jaco 39baaa2b6d CHANGELOG (#1236) 2021-11-24 14:00:23 +02:00
Github Actions 821980f64e [CI Skip] release/beta 7.9.3-8
skip-checks: true
2021-11-24 11:46:56 +00:00
Jaco 6688ff0a43 Use @noble/hashes (#1188)
* Use hashing functions from @noble/hashes

* Remove built-in pbkdf2

* Remove @types

* -19

* Remove @types

* Update packages/util-crypto/src/mnemonic/bip39.ts

* Align

* BigInt alignment

* hmac BigInt assert

* Legacy hmacSha

* Legacy fallbacks

* Align has

* Re-add micro-base

* remove old random inputs

* re-add @types/ed2curve

* Adjust pbkdf2

* Remove legacy (we have wasm)

* Update packages/util-crypto/src/detectPackage.ts

* Update packages/util-crypto/src/detectPackage.ts

* Ordering

* Comments

* Adjust

* Fix build

* cleanup legacySeed
2021-11-24 13:42:49 +02:00
Github Actions ee18b661ad [CI Skip] release/beta 7.9.3-7
skip-checks: true
2021-11-24 07:06:06 +00:00
Jaco 9a5998b921 bigint consts without BigInt(*) wrapper (#1235) 2021-11-24 09:02:17 +02:00
Github Actions f27f705f0c [CI Skip] release/beta 7.9.3-6
skip-checks: true
2021-11-23 16:00:47 +00:00
Jaco 5e16b1e84c Remove concatBuffer viariant (#1234) 2021-11-23 17:56:33 +02:00
Github Actions 25a53e43fd [CI Skip] release/beta 7.9.3-5
skip-checks: true
2021-11-23 14:58:30 +00:00
Jaco 75b60b9999 Adjust and enable old perfromance tests (#1233) 2021-11-23 16:54:39 +02:00
Github Actions e8813aa110 [CI Skip] release/beta 7.9.3-4
skip-checks: true
2021-11-23 08:55:23 +00:00
Jaco b55cdb25f6 xxhash64 replacement (#1220)
* xxhash64 replacement

* yarn.lock

* hasBigInt check

* extract common

* lint fixes

* Dedupe

* flatten

* Update changes

* Update packages/util-crypto/src/xxhash/asU8a.spec.ts

* Remove useless assignment

* flatten

* combine intermediate vars

* Align var naming

* lint

* Remove unneeded inner conversions

* Update packages/util-crypto/src/xxhash/xxhash64.ts

* Adjust

* bitLength type

* BitLength type

* additional BitLength

* Small cleanups

* Adjust

* Adjust

* blak2 bitLength adjust

* with 384

* renames

* Adjust

* Adjust

* localize

* Comments

* format performance outputs

* format performance outputs

* isWasmOnly revert
2021-11-23 10:51:08 +02:00
Github Actions 05e852337a [CI Skip] release/beta 7.9.3-3
skip-checks: true
2021-11-22 14:45:37 +00:00
Jaco cdd2d9ace5 Allow for . & , in camelCase (#1231) 2021-11-22 16:41:50 +02:00
Github Actions a2d9538b31 [CI Skip] release/beta 7.9.3-2
skip-checks: true
2021-11-22 14:17:13 +00:00
Jaco 391ab49b8f Adjust camelCase with simplified version (#1230)
* Adjust camelCase with simplified version

* Adjust count

* Adjust

* readability

* Ascii-only

* single-line callbacks

* CHANGELOG

* Dedupe string{Lower, Upper}First

* replacer -> fn
2021-11-22 16:12:29 +02:00
Github Actions b390714285 [CI Skip] release/beta 7.9.3-1
skip-checks: true
2021-11-22 06:54:50 +00:00
Jaco 277c80eb96 Revery isWasmOnly helper (#1229)
* Revery isWasmOnly helper

* Adjust
2021-11-22 08:51:03 +02:00
Github Actions 28f0040080 [CI Skip] release/beta 7.9.3-0
skip-checks: true
2021-11-22 06:26:28 +00:00
Jaco 5f280aabb8 Bump dev (w/ /src/ check) (#1228) 2021-11-22 08:22:37 +02:00
Github Actions 39937bed29 [CI Skip] release/stable 7.9.2
skip-checks: true
2021-11-22 05:16:31 +00:00
Jaco 3519d21d8e 7.9.2 (#1227) 2021-11-22 07:12:03 +02:00
Github Actions 8b4dc01ae4 [CI Skip] release/beta 7.9.2-2
skip-checks: true
2021-11-22 04:56:09 +00:00
Jaco bb73f7ae41 Fix TS import generation (#1226)
* Fix TS import generation

* Flatten
2021-11-22 06:51:49 +02:00
Github Actions e6a0f1e2fd [CI Skip] release/beta 7.9.2-1
skip-checks: true
2021-11-21 18:25:15 +00:00
Jaco e8af9b5a1e Add a helper for de-dupe of *AsHex (#1224)
* Add a helper for de-dupe of *AsHex

* Update packages/util-crypto/src/random/asU8a.ts

* lint

* isWasmOnly helper

* bit hasher
2021-11-21 20:21:20 +02:00
Github Actions 1606dfd9ca [CI Skip] release/beta 7.9.2-0
skip-checks: true
2021-11-21 06:58:47 +00:00
Jaco 2fcf59eeb0 Provide JS/Wasm interfaces for hmacShaAsU8a (#1223)
* Provide JS/Wasm interfaces for hmacShaAsU8a

* Adjust

* Re-add helpers

* Alignments
2021-11-21 08:54:54 +02:00
Github Actions a7606b6514 [CI Skip] release/stable 7.9.1
skip-checks: true
2021-11-21 05:26:30 +00:00
Jaco 871b20c90a 7.9.1 (#1222) 2021-11-21 07:22:56 +02:00
Github Actions 5d93642093 [CI Skip] release/beta 7.8.3-41
skip-checks: true
2021-11-20 16:30:44 +00:00
Jaco 2b2fefb2bb Basic rountrip tests for mmacSha (#1221) 2021-11-20 18:27:06 +02:00
Github Actions 1ede65db38 [CI Skip] release/beta 7.8.3-40
skip-checks: true
2021-11-20 07:33:41 +00:00
Jaco 7090c3daec Re-use cleanups (#1219)
* Re-use cleanups

* linting

* Adjust

* Adjust

* ipfsCompat into if

* Adjust
2021-11-20 09:29:13 +02:00
Github Actions c03f53e097 [CI Skip] release/beta 7.8.3-39
skip-checks: true
2021-11-19 15:50:17 +00:00
Jaco 2ec02e2580 Combine sha256/512 into single top-level folder (#1218)
* Combine sha256/512 into single top-level folder

* linting

* imports
2021-11-19 17:46:49 +02:00
Github Actions 6b4f9b3d2f [CI Skip] release/beta 7.8.3-38
skip-checks: true
2021-11-19 14:21:02 +00:00
Jaco d20c37ddd0 Extract performance test loop (& bump wasm) (#1217)
* Extract performance test loop (& bump wasm)

* bitLength for blake preformance

* sha512 naming

* ops/s display
2021-11-19 16:16:39 +02:00
Github Actions 23d46b063c [CI Skip] release/beta 7.8.3-37
skip-checks: true
2021-11-19 13:03:22 +00:00
Jaco 085862ce79 Wasm-compat for keccak512 & sha256 (#1216)
* Wasm-compa for keccak512 & sha256

* wasm/non-wasm tests

* linting

* Bump wasm

* formatting
2021-11-19 14:59:59 +02:00
Github Actions 88580b98a6 [CI Skip] release/beta 7.8.3-36
skip-checks: true
2021-11-19 12:05:22 +00:00
Jaco fb8b80afd7 Add/use sha256 export (#1215) 2021-11-19 14:01:19 +02:00
Github Actions d3b5b4ad38 [CI Skip] release/beta 7.8.3-35
skip-checks: true
2021-11-19 11:41:37 +00:00
Jaco 049e8dfde8 Curve conversion tests (#1214) 2021-11-19 13:37:43 +02:00
Github Actions 8230e3ceac [CI Skip] release/beta 7.8.3-34
skip-checks: true
2021-11-19 11:27:04 +00:00
Jaco 37358d4d05 Correct location for @types/ed2curve (#1213) 2021-11-19 13:22:59 +02:00
Github Actions 2cf6ffa3b1 [CI Skip] release/beta 7.8.3-33
skip-checks: true
2021-11-19 10:59:25 +00:00
Jaco d7f2a70071 networks:sync (#1212) 2021-11-19 12:54:59 +02:00
Github Actions eb96e2a7aa [CI Skip] release/beta 7.8.3-32
skip-checks: true
2021-11-19 09:38:49 +00:00
Jaco 6965709351 Drop unused BigInt class extension (#1210) 2021-11-19 11:35:05 +02:00
Github Actions 1677d3eace [CI Skip] release/beta 7.8.3-31
skip-checks: true
2021-11-19 09:31:53 +00:00
Jaco 4d77bf3c5b Use micro-base for base{32, 58, 64} (#1209) 2021-11-19 11:27:47 +02:00
Github Actions 222bb74a81 [CI Skip] release/beta 7.8.3-30
skip-checks: true
2021-11-19 07:59:15 +00:00
Jaco 90b4b61852 Add has* env detection (#1207) 2021-11-19 09:55:17 +02:00
Github Actions b1e209dfeb [CI Skip] release/beta 7.8.3-29
skip-checks: true
2021-11-19 04:27:06 +00:00
Jaco 88beb4d81c Adjust isHex length check (#1205) 2021-11-19 06:23:01 +02:00
Github Actions 3b2ecb87e9 [CI Skip] release/beta 7.8.3-28
skip-checks: true
2021-11-18 16:18:37 +00:00
Adam Dossa 79a2cd0e8f Update Polymesh Genesis Hash (#1193) 2021-11-18 18:14:35 +02:00
Github Actions 0c2d105f9d [CI Skip] release/beta 7.8.3-27
skip-checks: true
2021-11-18 08:26:04 +00:00
Jaco 944d77c5f2 Bump deps (#1202) 2021-11-18 10:21:54 +02:00
Github Actions 0fdf83effe [CI Skip] release/beta 7.8.3-26
skip-checks: true
2021-11-18 08:01:33 +00:00
Jaco 66866e1a8e isCodec (#1201) 2021-11-18 09:57:26 +02:00
Github Actions 9abcc72143 [CI Skip] release/beta 7.8.3-25
skip-checks: true
2021-11-18 06:52:13 +00:00
Jaco 6f0aa35098 Flatten calls (#1200) 2021-11-18 08:48:15 +02:00
Github Actions 93fb633ea6 [CI Skip] release/beta 7.8.3-24
skip-checks: true
2021-11-17 12:11:04 +00:00
Jaco 5524e50baf stripPrefix adjustment 2021-11-17 14:07:43 +02:00
Jaco e1354746b1 Fix hexStripPrefix 2021-11-17 14:01:04 +02:00
Github Actions 309722f285 [CI Skip] release/beta 7.8.3-23
skip-checks: true
2021-11-17 11:52:13 +00:00
Jaco 4efd88869d Re-add ignoreLength (#1199)
* Re-add ignoreLength

* Actual ignore
2021-11-17 13:48:07 +02:00
Github Actions ee0436a612 [CI Skip] release/beta 7.8.3-22
skip-checks: true
2021-11-17 08:37:01 +00:00
Jaco b4ca8219d9 Sync ss58 registry (#1198) 2021-11-17 10:33:28 +02:00
Github Actions d30a3ddedb [CI Skip] release/beta 7.8.3-21
skip-checks: true
2021-11-16 18:31:05 +00:00
Jaco fa5b5bca7e Additional bigint utilities (#1194)
* Additional bigint utilities

* Adjust tests

* biTo{Hex, U8a}

* Adjust

* Ordering

* biSqrt

* Fix toU8a

* Extensible BigInt

* Class TS issues....

* Move type def to types

* Update packages/util/src/bi/sqrt.spec.ts

* max/min

* min/max tests
2021-11-16 20:27:19 +02:00
Github Actions 87afdb1d86 [CI Skip] release/beta 7.8.3-20
skip-checks: true
2021-11-16 04:38:40 +00:00
Jaco 23f68c63f4 Constant for secp256k1 curve.n (#1192)
* Constant for secp256k1 curve.n

* Link to constant definition

* global space replace
2021-11-16 06:35:25 +02:00
Github Actions 184dbccf39 [CI Skip] release/beta 7.8.3-19
skip-checks: true
2021-11-15 18:50:53 +00:00
Jaco 06c06a8b73 toBigInt utilities (#1191)
* toBigInt utilities

* Handle negatives?

* two's complement adjustments

* Adjust

* Compliment util extract

* dedupe

* Ensure > u32 tests
2021-11-15 20:46:48 +02:00
Github Actions 82f5fec822 [CI Skip] release/beta 7.8.3-18
skip-checks: true
2021-11-15 14:36:07 +00:00
Jaco a953b3a78a Optimize bip39 list for size (#1190) 2021-11-15 16:32:48 +02:00
Github Actions 19283b3c28 [CI Skip] release/beta 7.8.3-17
skip-checks: true
2021-11-15 12:34:06 +00:00
Jaco ac06f38118 Bump deps (#1187) 2021-11-15 14:30:31 +02:00
Github Actions f9e5c033ab [CI Skip] release/beta 7.8.3-16
skip-checks: true
2021-11-15 11:05:50 +00:00
Jaco de7817e6b5 Use DataView as applicable (#1186)
* Use DataView as applicable

* .skip

* Fix hexToU8a length calc

* hello world
2021-11-15 13:01:47 +02:00
Github Actions 5972551313 [CI Skip] release/beta 7.8.3-15
skip-checks: true
2021-11-15 05:19:33 +00:00
Jaco cf0aab479a Small utility adjustments (#1185) 2021-11-15 07:16:21 +02:00
Github Actions 5ab0b173b6 [CI Skip] release/beta 7.8.3-14
skip-checks: true
2021-11-14 19:07:34 +00:00
Jaco cf990dd4ec Aligh u8aToHex optimization (#1184)
* Aligh u8aToHex optimization

* Adjust

* Fix failing tests, empty value

* Adjust

* numberToHex fix

* Fix hexFixLength tests
2021-11-14 21:03:41 +02:00
Github Actions 8a6fd0812a [CI Skip] release/beta 7.8.3-13
skip-checks: true
2021-11-14 17:26:15 +00:00
Jaco e93f8d7418 for look index namings (consistency) (#1183) 2021-11-14 19:22:06 +02:00
Github Actions 36f6407796 [CI Skip] release/beta 7.8.3-12
skip-checks: true
2021-11-14 15:39:05 +00:00
Jaco 8ede488aec u8aEq w/ U32 and lower only (#1182)
* u8aEq w/ U32 and lower only

* Adjust mod

* Adjust signatures
2021-11-14 17:35:56 +02:00
Github Actions eb9d5b9585 [CI Skip] release/beta 7.8.3-11
skip-checks: true
2021-11-14 15:25:32 +00:00
Jaco 20821aad40 Performance optimizations (#1181)
* Performance optimizations

* Use slice internally to u8aEq

* Adjust

* formatting

* subarray

* Fixes

* Use DataView

* With alignment

* Use Float64Array when available

* Skip performance

* Renames

* Alignment comment

* Constants

* Use BYTES_PER_ELEMENT

* Adjust
2021-11-14 17:21:07 +02:00
Github Actions 23fa2b90a8 [CI Skip] release/beta 7.8.3-10
skip-checks: true
2021-11-13 17:37:15 +00:00
Jaco f94a1ea730 ss58 sync (#1180) 2021-11-13 19:34:08 +02:00
Github Actions fc98cd9b45 [CI Skip] release/beta 7.8.3-9
skip-checks: true
2021-11-13 15:43:42 +00:00
Jaco 5fdd967666 Small consistency cleanups (#1178)
* Small consistency cleanups

* Adjust

* Adjust
2021-11-13 17:39:52 +02:00
Github Actions 9043f335d4 [CI Skip] release/beta 7.8.3-8
skip-checks: true
2021-11-13 09:42:20 +00:00
Jaco d9231d26aa Additional Node-specific u8a utils (#1177)
* Additional Node-specific u8a utils

* toHexBuffer
2021-11-13 11:38:07 +02:00
Github Actions 445e0f7ea6 [CI Skip] release/beta 7.8.3-7
skip-checks: true
2021-11-12 07:23:46 +00:00
Jaco ba0a183bd9 Re-use pre-define BN_{BE, LE}_* constants (#1175)
* Re-use pre-define BN_{BE, LE}_* constants

* ordering update

* bnMax/bnMin opt

* u8aToHex flatten
2021-11-12 09:19:49 +02:00
Github Actions 46beaa1151 [CI Skip] release/beta 7.8.3-6
skip-checks: true
2021-11-12 06:47:36 +00:00
Jaco 31d55b218a Additional tests (w/ lazy) (#1174) 2021-11-12 08:44:00 +02:00
Github Actions 9b30b4b09e [CI Skip] release/beta 7.8.3-5
skip-checks: true
2021-11-11 13:45:03 +00:00
Jaco cc0dd2a2b5 Address validation tests (#1173) 2021-11-11 15:41:54 +02:00
Github Actions 31a0a9b9d1 [CI Skip] release/beta 7.8.3-4
skip-checks: true
2021-11-11 13:23:30 +00:00
Jaco 9e1e49a1b8 Additional tests (need to expand more...) (#1172)
* Additional utility tests

* Args on constructor
2021-11-11 15:20:01 +02:00
Github Actions 313b44388a [CI Skip] release/beta 7.8.3-3
skip-checks: true
2021-11-11 12:42:42 +00:00
Jaco 30dd8169bc Add tests missing for object* methods (#1171)
* Add tests missing for object* methods

* Extend objectProperty comments

* Additional test

* objectProperties this test

* Adjust
2021-11-11 14:38:58 +02:00
Github Actions 67450bc225 [CI Skip] release/beta 7.8.3-2
skip-checks: true
2021-11-11 12:06:01 +00:00
Jaco e9285e9ccd Bump deps (#1170) 2021-11-11 14:02:11 +02:00
Github Actions 2a45652ce0 [CI Skip] release/beta 7.8.3-1
skip-checks: true
2021-11-08 08:16:48 +00:00
Jaco 6d923da266 object{Entries, Keys, Values} (#1169)
* object{Entries, Keys, Values}

* Use objectKeys as applicable

* tighten schema defs

* Linting issue snuck in
2021-11-08 10:09:26 +02:00
Github Actions d55b48566b [CI Skip] release/beta 7.8.3-0
skip-checks: true
2021-11-08 06:11:13 +00:00
Jaco 3ac567e1c4 stringPascalCase (#1168) 2021-11-08 08:03:04 +02:00
Jaco d19713f548 hexToU8aBuffer 2021-11-08 08:02:36 +02:00
Github Actions 53249f51b8 [CI Skip] release/stable 7.8.2
skip-checks: true
2021-11-07 07:33:32 +00:00
Jaco 4883106c3d 7.8.2 (#1167) 2021-11-07 09:25:15 +02:00
Github Actions b3f60da550 [CI Skip] release/beta 7.8.2-0
skip-checks: true
2021-11-06 14:03:57 +00:00
Jaco 644f32dfaa Additional isArray (w/ is* opts) (#1166) 2021-11-06 15:56:51 +02:00
Github Actions bf4c6b497f [CI Skip] release/stable 7.8.1
skip-checks: true
2021-11-06 11:26:10 +00:00
Jaco a74ac0a0f9 7.8.1 (#1165) 2021-11-06 13:19:01 +02:00
Github Actions 6701f7420f [CI Skip] release/beta 7.7.2-8
skip-checks: true
2021-11-06 10:56:11 +00:00
Jaco 8e43a2d105 Sync ss58registry (#1164) 2021-11-06 12:48:48 +02:00
Github Actions 9560301883 [CI Skip] release/beta 7.7.2-7
skip-checks: true
2021-11-05 14:36:05 +00:00
qwer951123 889bd36432 Add acala genesis (#1161) 2021-11-05 16:27:33 +02:00
Github Actions e310a63059 [CI Skip] release/beta 7.7.2-6
skip-checks: true
2021-11-04 15:11:31 +00:00
Jaco 98082774f7 Add objectCopy (#1160) 2021-11-04 17:02:45 +02:00
Github Actions 4d680f4b0c [CI Skip] release/beta 7.7.2-5
skip-checks: true
2021-11-04 12:24:30 +00:00
Jaco ff7c086b5b Import lazy* from api repo (#1159) 2021-11-04 14:16:58 +02:00
Github Actions 63b38c56ff [CI Skip] release/beta 7.7.2-4
skip-checks: true
2021-11-04 08:10:38 +00:00
Jaco 8be38e40a1 Bump dev deps (#1158) 2021-11-04 10:01:35 +02:00
Github Actions 9eb2f14dee [CI Skip] release/beta 7.7.2-3
skip-checks: true
2021-11-04 06:24:05 +00:00
Jaco 733d7c1948 Add objectClear & objectSpread (#1157)
* Add objectClear & objectSpread

* Allow null/undefined as a source
2021-11-04 08:16:55 +02:00
Github Actions 08ac55d7cd [CI Skip] release/beta 7.7.2-2
skip-checks: true
2021-11-03 16:21:23 +00:00
Jaco e2f5a85d14 Correct types for Ledger signature (#1156) 2021-11-03 18:13:00 +02:00
Github Actions 77289d0ec0 [CI Skip] release/beta 7.7.2-1
skip-checks: true
2021-11-03 12:49:11 +00:00
Jaco 29406a0010 Bump dev (#1155) 2021-11-03 14:46:44 +02:00
Github Actions 006d55f5c1 [CI Skip] release/beta 7.7.2-0
skip-checks: true
2021-11-03 06:55:22 +00:00
Jaco 650a3ca4a8 Sync ss58 (#1154) 2021-11-03 08:46:52 +02:00
Github Actions d3c8112f66 [CI Skip] release/stable 7.7.1
skip-checks: true
2021-10-31 14:51:24 +00:00
Jaco 8880e8fa8c 7.7.1 (#1152)
* 7.7.1

* Extract stringify replacer

* formatting

* linting

* isUnSorted{A, B}

* Adjust

* Complexity?

* Cleanups

* Update packages/util-crypto/src/address/derive.ts

* formatBalance

* Revert formatBalance
2021-10-31 16:44:17 +02:00
Github Actions 481f7f6ee0 [CI Skip] release/beta 7.6.2-8
skip-checks: true
2021-10-31 06:34:35 +00:00
Jaco a4cefa4bfc Adjust base library usage of for vs reduce/map (#1151)
* Adjust base library usage of `for` vs `reduce/map`

* Additional

* Adjust
2021-10-31 08:27:14 +02:00
Github Actions 7ef169585f [CI Skip] release/beta 7.6.2-7
skip-checks: true
2021-10-30 15:52:24 +00:00
Jaco 134b8c3b9f arrayZip (#1150)
* arrayZip

* Update packages/util/src/array/zip.spec.ts

* Update packages/util/src/array/zip.ts
2021-10-30 18:45:20 +03:00
Github Actions 1158551b9e [CI Skip] release/beta 7.6.2-6
skip-checks: true
2021-10-29 07:41:53 +00:00
Jaco 4c2521bc21 Bump deps, update CHANGELOG (#1149) 2021-10-29 10:33:07 +03:00
Github Actions 993e45d148 [CI Skip] release/beta 7.6.2-5
skip-checks: true
2021-10-27 13:46:16 +00:00
Igor 14a0c3f18b Support genshiro network (#1148)
* support genshiro network

* remove registry
2021-10-27 16:39:08 +03:00
Github Actions 9fa71647c1 [CI Skip] release/beta 7.6.2-4
skip-checks: true
2021-10-26 07:17:00 +00:00
Jaco cac98aac03 Adjust testnet detection in @polkadot/networks (#1147) 2021-10-26 10:08:52 +03:00
Github Actions 48158927e1 [CI Skip] release/beta 7.6.2-3
skip-checks: true
2021-10-25 13:33:33 +00:00
Jaco 51082373e6 Bump dev deps (#1145) 2021-10-25 16:26:18 +03:00
Github Actions bf80f76173 [CI Skip] release/beta 7.6.2-2
skip-checks: true
2021-10-25 11:41:59 +00:00
Jaco 474e98b6d1 Bump dev (#1144) 2021-10-25 14:34:55 +03:00
Github Actions 07317b8840 [CI Skip] release/beta 7.6.2-1
skip-checks: true
2021-10-25 09:23:22 +00:00
Jaco 2e46b688cf Update repository location (#1143)
* Update repository location

* Adjust
2021-10-25 12:15:22 +03:00
Github Actions c87cf8c655 [CI Skip] release/beta 7.6.2-0
skip-checks: true
2021-10-25 05:13:27 +00:00
Jaco 9eabf95fc0 Assert chainCode inputs to derive* (#1142)
* Assert chainCode inputs to derive*

* Adjust
2021-10-25 08:04:37 +03:00
Github Actions 11ab3a4f6b [CI Skip] release/stable 7.6.1
skip-checks: true
2021-10-23 10:54:38 +00:00
Jaco 0ba57b26d1 7.6.1 (#1140)
* 7.6.1

* Adjust GlobalThis

* Adjust
2021-10-23 13:47:23 +03:00
Github Actions 36c2389985 [CI Skip] release/beta 7.5.2-4
skip-checks: true
2021-10-23 10:20:12 +00:00
Jaco 93d5041e8f Adjust base* validation function (#1139)
* Adjust base* validation function

* Adjust sr25519 derive functions

* More dedupe

* Rename

* Adjust
2021-10-23 13:11:58 +03:00
Github Actions f4d933936e [CI Skip] release/beta 7.5.2-3
skip-checks: true
2021-10-23 09:42:50 +00:00
Jaco 2cdaf71c4b Sync with paritytech/ss58-registry (#1138)
* Sync with paritytech/ss58-registry

* Since registry location

* Adjust defaults with json location

* Adjust

* Adjust comments

* prefix 42
2021-10-23 12:34:53 +03:00
Github Actions 6982380aff [CI Skip] release/beta 7.5.2-2
skip-checks: true
2021-10-23 09:00:25 +00:00
Jaco 2cc2c4d415 isAscii adjustments (#1137)
* isAscii adjustments

* Adjust negation
2021-10-23 11:52:41 +03:00
Github Actions da38e0f890 [CI Skip] release/beta 7.5.2-1
skip-checks: true
2021-10-23 08:39:18 +00:00
Jaco c7c1723914 User ArrayBuffer internally to xxhash (#1133) 2021-10-23 11:30:23 +03:00
Github Actions 15e85bf4b9 [CI Skip] release/beta 7.5.2-0
skip-checks: true
2021-10-17 09:39:09 +00:00
Jaco e7771b02a4 Bump dev (#1132)
* Bump dev

* eslint 8 fixes

* Bump
2021-10-17 12:32:45 +03:00
Github Actions 9a5d2e00be [CI Skip] release/stable 7.5.1
skip-checks: true
2021-10-16 06:32:07 +00:00
Jaco 5f36b23dfc 7.5.1 (#1131)
* 7.5.1

* CHANGELOG
2021-10-16 09:24:45 +03:00
Github Actions 921659981d [CI Skip] release/beta 7.4.2-8
skip-checks: true
2021-10-14 06:43:02 +00:00
Jaco 1bcafead57 Parse derivation paths via BN (#1130)
* Parse derivation paths via BN

* Direct to u8a for numbers

* CHANGELOG
2021-10-14 09:34:13 +03:00
Github Actions 9b29d33d87 [CI Skip] release/beta 7.4.2-7
skip-checks: true
2021-10-14 05:59:53 +00:00
Jaco ecce4a22f7 networks:sync (#1129) 2021-10-14 08:51:13 +03:00
Github Actions 22d471d5fc [CI Skip] release/beta 7.4.2-6
skip-checks: true
2021-10-08 06:04:20 +00:00
Jaco 4df1a67be4 Bump deps (#1126) 2021-10-08 08:55:29 +03:00
Github Actions 497b97ad4e [CI Skip] release/beta 7.4.2-5
skip-checks: true
2021-10-02 05:58:25 +00:00
Jaco 9177b24d5b Sync ss58 (#1122) 2021-10-02 08:49:40 +03:00
Github Actions 88556d6a75 [CI Skip] release/beta 7.4.2-4
skip-checks: true
2021-09-29 12:59:41 +00:00
Jaco c8dfeaad5b Update ss58 JSON format handling (#1120)
* Update JSON handling

* Fix output
2021-09-29 14:51:19 +02:00
Github Actions 69190b0395 [CI Skip] release/beta 7.4.2-3
skip-checks: true
2021-09-29 08:29:52 +00:00
Tomokazu Kozumaandadmin e61cd53e08 fix comment (#1119)
Co-authored-by: admin <admin@adminnoMacBook-Air.local>
2021-09-29 10:20:59 +02:00
Github Actions 26b0630cd3 [CI Skip] release/beta 7.4.2-2
skip-checks: true
2021-09-28 12:08:54 +00:00
Jaco e09c604c26 ss58 sync (#1117) 2021-09-28 14:00:12 +02:00
Github Actions 7983a12121 [CI Skip] release/beta 7.4.2-1
skip-checks: true
2021-09-27 05:46:53 +00:00
Jaco 0e070c6142 Bump deps (#1115) 2021-09-27 07:39:56 +02:00
Github Actions e30a10a4b5 [CI Skip] release/beta 7.4.2-0
skip-checks: true
2021-09-24 17:46:51 +00:00
Antoine EstienneandJaco c3a073a952 Improve ethereum tests (#1114)
* added gerald test address

* improve ethereum tests

* lint

* Update packages/keyring/src/suri.spec.ts

Co-authored-by: Jaco <jacogr@gmail.com>

* remove seed for ethereum testing pairs

* lint

Co-authored-by: Jaco <jacogr@gmail.com>
2021-09-24 20:40:31 +03:00
Github Actions 203891d184 [CI Skip] release/stable 7.4.1
skip-checks: true
2021-09-17 14:12:48 +00:00
Jaco 4ea8ccf844 7.4.1 (#1112)
* 7.4.1

* CHANGELOG
2021-09-17 16:04:41 +02:00
Github Actions d7b856f8f0 [CI Skip] release/beta 7.3.2-7
skip-checks: true
2021-09-17 13:40:09 +00:00
Jaco b37d55e0ed Some attempted CC fixes (#1111)
* Some attempted CC fixes

* hmac

* adjust derive
2021-09-17 15:32:52 +02:00
Github Actions f1740dfdd7 [CI Skip] release/beta 7.3.2-6
skip-checks: true
2021-09-17 12:57:44 +00:00
Jaco 7047bf5aa5 Detect and verify wrapped messages (#1110)
* Detect and verify wrapped messages

* Expose isWrapped detection

* Complexity cleanups

* Update wrap.spec.ts

* Update wrap.ts

* Extract fn getter

* Test for wrapping to detect path
2021-09-17 14:48:33 +02:00
Github Actions 5dcf99eaa7 [CI Skip] release/beta 7.3.2-5
skip-checks: true
2021-09-14 18:18:25 +00:00
Jaco efc6b315e5 Networks:sync (#1109) 2021-09-14 20:09:47 +02:00
Github Actions 2ce554587f [CI Skip] release/beta 7.3.2-4
skip-checks: true
2021-09-14 11:32:59 +00:00
Jaco f1e45ee2c3 Bump deps (#1107) 2021-09-14 13:24:13 +02:00
Github Actions e5e46cedaf [CI Skip] release/beta 7.3.2-3
skip-checks: true
2021-09-13 11:20:26 +00:00
Jaco 2b7e21355d Sync ss58 registry (#1106) 2021-09-13 13:12:46 +02:00
Github Actions 2565712a79 [CI Skip] release/beta 7.3.2-2
skip-checks: true
2021-09-08 12:46:23 +00:00
Jaco 9fc57a23e8 Adjust isHex with template return (#1103)
* Adjust isHex with template return

* Unneeded assignment

* CHANGELOG

* typo

* Additional HexString types

* Additional HexString inputs

* Use U8aLike as applicable

* typo

* Unneeded type

* HexString outputs

* Export types
2021-09-08 14:38:53 +02:00
Github Actions 6b9b7fa7f5 [CI Skip] release/beta 7.3.2-1
skip-checks: true
2021-09-05 09:03:17 +00:00
Jaco c9f127ec72 Bump deps (#1101)
* Bump deps

* linting
2021-09-05 10:55:11 +02:00
Github Actions 89699f3f4e [CI Skip] release/beta 7.3.2-0
skip-checks: true
2021-09-01 16:47:31 +00:00
Jaco 7d167bcd4c Jest config cleanup (#1100) 2021-09-01 18:39:13 +02:00
Github Actions f0b984f141 [CI Skip] release/stable 7.3.1
skip-checks: true
2021-08-28 06:17:10 +00:00
Jaco 56e518fc92 7.3.1 (#1098) 2021-08-28 08:08:14 +02:00
Tore19 87a1ca96e3 Add stafi genesis hash (#1096) 2021-08-28 07:55:10 +02:00
Github Actions 8ef9e206d6 [CI Skip] release/beta 7.2.2-8
skip-checks: true
2021-08-26 09:30:40 +00:00
Jaco 1cdda7ca06 Bump deps (#1097) 2021-08-26 11:22:25 +02:00
Github Actions fa930e9f09 [CI Skip] release/beta 7.2.2-7
skip-checks: true
2021-08-26 06:54:37 +00:00
Jaco f6cc776e87 schnorrkelAgreement (#1095)
* schnorrkelAgreement

* Hex on sr25519 functions

* cleanups
2021-08-26 08:47:25 +02:00
Github Actions 3c4bfeb3e8 [CI Skip] release/beta 7.2.2-6
skip-checks: true
2021-08-26 06:03:11 +00:00
Jaco 6e49aaf1db Bump wasm (w/ sr agreement) (#1094) 2021-08-26 07:54:29 +02:00
Github Actions 852c4c0398 [CI Skip] release/beta 7.2.2-5
skip-checks: true
2021-08-25 08:03:48 +00:00
Jaco 9b03461c7e Align prefixes with upstream (#1093) 2021-08-25 09:55:16 +02:00
Github Actions 4d11a90188 [CI Skip] release/beta 7.2.2-4
skip-checks: true
2021-08-24 07:19:28 +00:00
Jaco b7666e9de9 Bump deps (#1091) 2021-08-24 09:11:33 +02:00
Github Actions 0129752206 [CI Skip] release/beta 7.2.2-3
skip-checks: true
2021-08-24 06:37:29 +00:00
pan 11fa66441d add bifrost genesis hash (#1090) 2021-08-24 08:28:40 +02:00
Eliott Teissonniere 9ed08def61 add nodle ledger specs (#1089) 2021-08-24 08:28:01 +02:00
Github Actions f1ccfad087 [CI Skip] release/beta 7.2.2-2
skip-checks: true
2021-08-21 08:33:43 +00:00
Jaco 4f9198f1f3 Bumps (#1088)
* Bumps

* Upgrade @polkadot/ts
2021-08-21 10:25:08 +02:00
Github Actions 6bd6c8340f [CI Skip] release/beta 7.2.2-1
skip-checks: true
2021-08-17 07:44:23 +00:00
Jaco 4355df9e9b Bump deps (#1087) 2021-08-17 09:35:40 +02:00
Github Actions 272fe62031 [CI Skip] release/beta 7.2.2-0
skip-checks: true
2021-08-16 06:07:50 +00:00
Jaco 5ab88bcd35 Bump deps (#1086) 2021-08-16 07:58:42 +02:00
Github Actions 4a5659a579 [CI Skip] release/stable 7.2.1
skip-checks: true
2021-08-15 08:46:10 +00:00
Jaco c4a8aa2dd7 7.2.1 (#1085)
* 7.2.1

* Update CHANGELOG.md

* u8aEmpty
2021-08-15 10:38:48 +02:00
Github Actions 2ad042e44d [CI Skip] release/beta 7.1.3-4
skip-checks: true
2021-08-13 11:56:50 +00:00
Jaco Greeff 4615fcfbde bump berry 2021-08-13 14:48:47 +03:00
Github Actions f90d84500d [CI Skip] release/beta 7.1.3-3
skip-checks: true
2021-08-13 11:02:19 +00:00
Jaco e919446341 Bump dev (#1084)
* Bump dev

* Cleanup circular dep

* CHANGELOG

* typo
2021-08-13 12:54:03 +02:00
Github Actions 8f942dcabe [CI Skip] release/beta 7.1.3-2
skip-checks: true
2021-08-12 08:09:40 +00:00
Nantian 2e4de2093c fix bigint type (#1079) 2021-08-12 10:00:58 +02:00
Github Actions 0202a1f1d4 [CI Skip] release/beta 7.1.3-1
skip-checks: true
2021-08-12 05:24:15 +00:00
Jaco Greeff 1e256fedaa pre 2021-08-12 08:16:52 +03:00
Github Actions 56a3d19083 [CI Skip] release/stable 7.1.2
skip-checks: true
2021-08-11 15:21:50 +00:00
Jaco caf76a7511 Ensure packageInfo from networks doesn't clobber crypto (#1076)
* Ensure packageInfo from networks doesn't clobber crypto

* 7.1.2

* Update CHANGELOG.md

* Extract network sorting

* ... revert, CC still not happy, maybe another day...
2021-08-11 17:14:28 +02:00
Github Actions 834a1e6a52 [CI Skip] release/beta 7.1.2-0
skip-checks: true
2021-08-10 09:23:32 +00:00
Jaco 7a5b1207b0 Minor x-bundle style cleanups (#1074) 2021-08-10 11:15:10 +02:00
Github Actions 8221576d25 [CI Skip] release/stable 7.1.1
skip-checks: true
2021-08-02 08:41:20 +00:00
Jaco 1f9d36d4db 7.1.1 (#1073) 2021-08-02 10:32:37 +02:00
Github Actions b292f2ae1d [CI Skip] release/beta 7.0.4-0
skip-checks: true
2021-08-02 04:26:52 +00:00
Song ZhouandJaco 7eddfc25c9 Add in ability to encrypt/decrypt msg with keyring (#1070)
* feat: able to encrypt & decrypt message in keyring - ed25519 & sr25519 types

* chore: make eslint happy

* test: add in one more test on cross-usage of ed25519 & sr25519

* make lint happy without eslint-disable

* assert away secp256k1 for encrypt/decrypt

* Update packages/keyring/src/pair/index.ts

* Update packages/keyring/src/pair/index.ts

Co-authored-by: Jaco <jacogr@gmail.com>
2021-08-02 06:18:58 +02:00
Github Actions c6ff77b56f [CI Skip] release/stable 7.0.3
skip-checks: true
2021-07-26 05:42:45 +00:00
Jaco 4a1f5bfbf4 7.0.3 (#1069) 2021-07-26 07:34:06 +02:00
Github Actions e8f0072e44 [CI Skip] release/beta 7.0.3-0
skip-checks: true
2021-07-23 05:26:30 +00:00
Jaco 4620a6a649 ss58 sync (#1066) 2021-07-23 07:19:24 +02:00
Github Actions a5fd5e2c85 [CI Skip] release/stable 7.0.2
skip-checks: true
2021-07-19 12:35:04 +00:00
Jaco b58c77d774 7.0.2 (#1063) 2021-07-19 14:28:14 +02:00
Github Actions 5e8ec185cb [CI Skip] release/beta 7.0.2-0
skip-checks: true
2021-07-17 06:57:49 +00:00
Jaco bbdf5659df Add isCompact (#1061) 2021-07-17 08:49:30 +02:00
Github Actions f8cc8d07e1 [CI Skip] release/stable 7.0.1
skip-checks: true
2021-07-11 10:12:38 +00:00
Jaco e3eb76762c 7.0.1 (#1058) 2021-07-11 12:05:13 +02:00
Github Actions 114e75a4b4 [CI Skip] release/beta 6.11.2-17
skip-checks: true
2021-07-11 05:05:49 +00:00
Miguel Hervas 5ca641c758 Add CFG Ledger Support (#1057) 2021-07-11 06:58:39 +02:00
Github Actions ded2528836 [CI Skip] release/beta 6.11.2-16
skip-checks: true
2021-07-09 16:03:27 +00:00
Jaco Greeff 70fa61916d Bump dev 2021-07-09 18:55:37 +03:00
Github Actions c9a2d3b6d7 [CI Skip] release/beta 6.11.2-15
skip-checks: true
2021-07-09 15:04:13 +00:00
Jaco Greeff 4927120403 Additional keyring exports 2021-07-09 17:04:11 +03:00
Github Actions 36f53f6b82 [CI Skip] release/beta 6.11.2-14
skip-checks: true
2021-07-09 12:11:29 +00:00
Jaco 24548e84e1 Networks bundling adjustments (#1056)
* Add networks to util bundle

* Bundling for @polkadot/networks

* Move to util-crypto

* Comment

* Update lock

* Re-adjust detectPackage

* Only exports

* Adjust

* Adjust tests

* crosscheck adjust
2021-07-09 14:03:21 +02:00
Github Actions 337deab526 [CI Skip] release/beta 6.11.2-13
skip-checks: true
2021-07-09 08:06:52 +00:00
Jaco 4a9f0326e7 Adjust bundle builds (crypto now working) (#1055) 2021-07-09 09:59:16 +02:00
Github Actions 81811510f4 [CI Skip] release/beta 6.11.2-12
skip-checks: true
2021-07-09 05:47:41 +00:00
Jaco f09867d90f Sync ss58 (#1054) 2021-07-09 07:39:15 +02:00
Github Actions 709e1ab3c1 [CI Skip] release/beta 6.11.2-11
skip-checks: true
2021-07-08 11:40:02 +00:00
Jaco ae2d7518b2 Bump deps (#1053) 2021-07-08 13:32:49 +02:00
Github Actions 5337f1dca9 [CI Skip] release/beta 6.11.2-10
skip-checks: true
2021-07-07 16:39:22 +00:00
Jaco cc9b8630ff Single module bundle via rollup (#1041)
* Single module bundle via rollup

* Additional

* Dedupe

* rollup default to browser

* Fix hw-ledger output naming

* Adjust with dev

* Update rollup.config.mjs

* Fix Ledger bundling

* Update rollup.config.mjs

* Apply suggestions from code review

* Use createBundle

* override all

* Update rollup.config.mjs

* Update rollup.config.mjs

* Remove browser index

* Add bundle entrypoint

* Attempt blackholing

* empty blake2

* Bump dev (w/ rollup plugins)

* Bump dev

* x-* as internal

* Updates

* Bump wasm

* Bump wasm
2021-07-07 19:32:17 +03:00
Github Actions e6e266a4c0 [CI Skip] release/beta 6.11.2-9
skip-checks: true
2021-07-07 11:44:51 +00:00
Jaco Greeff 3b96d87f7f Remove x-rxjs from tsconfig 2021-07-07 14:36:51 +03:00
Github Actions c1949a21be [CI Skip] release/beta 6.11.2-8
skip-checks: true
2021-07-07 10:38:27 +00:00
Jaco 7f0a6b0ce9 Split index into bundle & detect (#1051) 2021-07-07 12:30:55 +02:00
Github Actions 6b644025b0 [CI Skip] release/beta 6.11.2-7
skip-checks: true
2021-07-07 07:33:00 +00:00
Jaco 6ea1ee555b Remove the x-rxjs compatibility layer (#1050)
* Remove the x-rxjs compatibility layer

* Update CHANGELOG.md
2021-07-07 09:25:08 +02:00
Github Actions d582b2e180 [CI Skip] release/beta 6.11.2-6
skip-checks: true
2021-07-07 07:01:56 +00:00
Jaco c2d04155f9 Re-add rxjs/operators (#1049) 2021-07-07 08:53:16 +02:00
Github Actions 5a4dc97498 [CI Skip] release/beta 6.11.2-5
skip-checks: true
2021-07-07 06:45:57 +00:00
Jaco f1aeda10ee Adjust rxjs exports (#1048) 2021-07-07 08:37:51 +02:00
Github Actions 70a3aebce3 [CI Skip] release/beta 6.11.2-4
skip-checks: true
2021-07-06 13:09:56 +00:00
Jaco 31dd2ced0e RxJs 7 (#965)
* RxJs 7

* Bump deps

* rxjs 7.0.1

* Bump rxjs

* Bump to rxjs 7.2

* CHANGELOG
2021-07-06 15:01:39 +02:00
Github Actions 98ad1199f3 [CI Skip] release/beta 6.11.2-3
skip-checks: true
2021-07-06 11:19:06 +00:00
Jaco Greeff 30225ceb40 Bump dev 2021-07-06 14:11:08 +03:00
Github Actions 194b8ced5b [CI Skip] release/beta 6.11.2-2
skip-checks: true
2021-07-06 07:16:40 +00:00
Jaco Greeff 81ed8cfc6c Bump deps 2021-07-06 10:08:10 +03:00
Jaco Greeff 51598b00c0 Bump dev 2021-07-06 09:56:14 +03:00
Github Actions 1684bd3161 [CI Skip] release/beta 6.11.2-1
skip-checks: true
2021-07-06 05:55:04 +00:00
Jaco Greeff a53e1b8aa4 Bump dev 2021-07-06 08:46:36 +03:00
Github Actions 89f2925d89 [CI Skip] release/beta 6.11.2-0
skip-checks: true
2021-07-05 15:04:14 +00:00
Jaco c29a226279 Bump dev (#1045) 2021-07-05 16:55:51 +02:00
Github Actions b8d1ab95c6 [CI Skip] release/stable 6.11.1
skip-checks: true
2021-07-05 06:42:16 +00:00
Jaco bcddcab03e 6.11 (#1044) 2021-07-05 08:32:33 +02:00
Github Actions bfe2c5bd38 [CI Skip] release/beta 6.10.2-3
skip-checks: true
2021-07-02 14:00:42 +00:00
Jaco c243c4c59a Bump ZondaX deps (w/ Statemine fix) (#1043)
* Bump ZondaX deps (w/ Statemine fix)

* Statemine app naming
2021-07-02 15:53:42 +02:00
Github Actions c8db1347d0 [CI Skip] release/beta 6.10.2-2
skip-checks: true
2021-07-02 13:04:49 +00:00
Jaco 9952f90261 Remove unneeded x-global deps (#1042) 2021-07-02 14:56:21 +02:00
Github Actions 48fcd8b4ff [CI Skip] release/beta 6.10.2-1
skip-checks: true
2021-07-02 07:17:33 +00:00
Jaco 10a09253f8 Bump TS (#1040) 2021-07-02 09:08:27 +02:00
Github Actions 7b435f7a89 [CI Skip] release/beta 6.10.2-0
skip-checks: true
2021-06-30 11:21:10 +00:00
Jaco 392150e412 Update ss58 registry (#1038) 2021-06-30 13:13:13 +02:00
Github Actions 4ac2366a97 [CI Skip] release/stable 6.10.1
skip-checks: true
2021-06-26 07:51:26 +00:00
Jaco 017fb5e738 6.10 (#1036) 2021-06-26 09:43:02 +02:00
Github Actions 81a5ccc0ca [CI Skip] release/beta 6.9.2-12
skip-checks: true
2021-06-25 12:48:25 +00:00
Jaco fbe688ff4e Ledger info for Statemine (#1026) 2021-06-25 14:40:06 +02:00
Github Actions 9a58dc61eb [CI Skip] release/beta 6.9.2-11
skip-checks: true
2021-06-25 07:26:11 +00:00
Jaco d7bd59a699 ss58 update (#1035)
* ss58 update

* Update standardAccount type
2021-06-25 09:17:21 +02:00
Github Actions 41ef37e92e [CI Skip] release/beta 6.9.2-10
skip-checks: true
2021-06-24 11:22:25 +00:00
Antoine EstienneandJaco 8031a4472e Fix tojson pair for 20 address (#1032)
* added gerald test address

* exception for 20 address

* lint

* remove comment

* Update packages/keyring/src/pair/index.ts

Co-authored-by: Jaco <jacogr@gmail.com>

Co-authored-by: Jaco <jacogr@gmail.com>
2021-06-24 13:13:11 +02:00
Github Actions 31be56226d [CI Skip] release/beta 6.9.2-9
skip-checks: true
2021-06-23 13:55:31 +00:00
Jaco 902ff47337 isHex(value): value is string (#1031)
* isHex stringisHex(value): value is string

* lint
2021-06-23 15:47:42 +02:00
Github Actions dc06b87cdd [CI Skip] release/beta 6.9.2-8
skip-checks: true
2021-06-23 11:18:56 +00:00
Jaco 1e25accdad Sync ss58 with upstream (#1030)
* Sync ss58 with upstream

* CHANGELOG
2021-06-23 13:11:24 +02:00
Github Actions 67dbc4d7f7 [CI Skip] release/beta 6.9.2-7
skip-checks: true
2021-06-23 11:03:42 +00:00
Jaco ab3268407c Use describe.each for onlyJs flag (#1029)
* Use describe.each for onlyJs flag

* base validate checks
2021-06-23 12:55:29 +02:00
Github Actions 470b43578e [CI Skip] release/beta 6.9.2-6
skip-checks: true
2021-06-23 10:23:29 +00:00
Jaco 038b50455e Update deps (blake2js w/ types, @ledger/hw-transport) (#1027)
* Update deps (blake2js w/ types, @ledger/hw-transport)

* Lint fix

* Exapnd blake2 tests
2021-06-23 12:15:21 +02:00
Github Actions 5c3fa682a9 [CI Skip] release/beta 6.9.2-5
skip-checks: true
2021-06-23 06:02:29 +00:00
Jaco e677acd1ed Update toLegacySeed.ts (#1024) 2021-06-23 07:55:24 +02:00
Github Actions 68cd6e2dfb [CI Skip] release/beta 6.9.2-4
skip-checks: true
2021-06-23 05:11:08 +00:00
Nantian 7130ff6f71 add karura genesis hash (#1022) 2021-06-23 07:02:51 +02:00
Github Actions a6d5d0dcdc [CI Skip] release/beta 6.9.2-3
skip-checks: true
2021-06-22 16:00:23 +00:00
Jaco a3b738f91d @zondax/ledger-polkadot -> @zondax/ledger-substrate/ (#1021)
* @zondax/ledger-polkadot -> @zondax/ledger-substrate/

* Update imports
2021-06-22 17:51:52 +02:00
Github Actions b66d2e39f4 [CI Skip] release/beta 6.9.2-2
skip-checks: true
2021-06-22 14:11:43 +00:00
Jaco 0ef761e899 User template string type for isHex (#1020)
* User template string type for isHex

* isHex/isString combo checks
2021-06-22 16:05:14 +02:00
Github Actions 7d09f0892a [CI Skip] release/beta 6.9.2-1
skip-checks: true
2021-06-22 13:52:46 +00:00
Jaco 972f15c774 Bump deps (#1019) 2021-06-22 15:45:39 +02:00
Github Actions fa11195d4a [CI Skip] release/beta 6.9.2-0
skip-checks: true
2021-06-22 13:02:56 +00:00
Jaco f437d3aae1 arrayShuffle (#1018)
* arrayShuffle

* Update packages/util/src/array/shuffle.spec.ts

* Update packages/util/src/array/shuffle.spec.ts

* Update packages/util/src/array/shuffle.ts

* Early return for length 1
2021-06-22 14:54:40 +02:00
Github Actions 04a28967c7 [CI Skip] release/stable 6.9.1
skip-checks: true
2021-06-19 04:27:32 +00:00
Jaco 47c831d672 6.9 (#1017) 2021-06-19 06:18:48 +02:00
Github Actions 3c4c2cf540 [CI Skip] release/beta 6.8.2-1
skip-checks: true
2021-06-18 14:30:59 +00:00
Jaco f383487764 Mnemonic compare test (w/ arrayRange) (#1016)
* Mnemonic compare test (w/ arrayRange)

* Update packages/util-crypto/src/mnemonic/toMiniSecretCmp.spec.ts

* Update packages/util-crypto/src/mnemonic/toMiniSecretCmp.spec.ts

* --testPathIgnorePattern toMiniSecretCmp

* patterns

* Prettify tests with .each

* with and without password
2021-06-18 16:23:50 +02:00
Github Actions d900dec667 [CI Skip] release/beta 6.8.2-0
skip-checks: true
2021-06-17 09:12:38 +00:00
Jaco 49d200fb85 Add u8aCmp (sorting determination) (#1015)
* Add u8aCmp (sorting determination)

* Update packages/util/src/u8a/cmp.ts

* Update packages/util/src/u8a/cmp.ts

* Update packages/util/src/u8a/cmp.ts

* Use u8aCmp in u8aEq
2021-06-17 11:03:02 +02:00
Github Actions 2f9d117cc6 [CI Skip] release/stable 6.8.1
skip-checks: true
2021-06-14 05:18:19 +00:00
Jaco ef44de3ebe 6.8 (#1014) 2021-06-14 07:09:38 +02:00
Github Actions 76d03bb504 [CI Skip] release/beta 6.7.2-8
skip-checks: true
2021-06-13 07:56:44 +00:00
Jaco b58543237f Sync ss58 (#1013) 2021-06-13 09:48:35 +02:00
Github Actions 4859157264 [CI Skip] release/beta 6.7.2-7
skip-checks: true
2021-06-11 10:10:49 +00:00
Jaco a5f3ce20ae Fix internal bn/* imports (#1010) 2021-06-11 12:02:24 +02:00
Github Actions 14fe54d2af [CI Skip] release/beta 6.7.2-6
skip-checks: true
2021-06-11 09:50:49 +00:00
Jaco f2d611e26d BN util export (& imports adjust) (#1009)
* BN util export (& imports adjust)

* Fix hexToBn

* Adjusts test

* Move bn export
2021-06-11 11:42:29 +02:00
Github Actions 700774b207 [CI Skip] release/beta 6.7.2-5
skip-checks: true
2021-06-08 15:12:16 +00:00
Jaco 770446c052 Prettier ignore all (#1007) 2021-06-08 17:04:13 +02:00
Github Actions f576b99c5c [CI Skip] release/beta 6.7.2-4
skip-checks: true
2021-06-08 09:26:36 +00:00
Raymond Zhong 678e888a4a Add Edgeware ledger app (#1006)
* Add Edgeware ledger app

* Add edgeware slip44
2021-06-08 11:17:39 +02:00
Github Actions 3335215866 [CI Skip] release/beta 6.7.2-3
skip-checks: true
2021-06-07 14:08:51 +00:00
Jaco Greeff d4a64e7a5a Adjust cron locks 2021-06-07 17:00:17 +03:00
Github Actions d778157d5a [CI Skip] release/beta 6.7.2-2
skip-checks: true
2021-06-07 13:56:48 +00:00
Jaco Greeff 3d0f6dafa5 lock cron 2021-06-07 16:48:16 +03:00
Github Actions 374a6ba5d6 [CI Skip] release/beta 6.7.2-1
skip-checks: true
2021-06-06 19:33:34 +00:00
Jaco Greeff eee6160060 Adjust semgrep check 2021-06-06 22:25:12 +03:00
Github Actions 5202b3febb [CI Skip] release/beta 6.7.2-0
skip-checks: true
2021-06-06 19:06:59 +00:00
Agustinus TheodorusandAgustinus Theodorus a0d48fdb48 docs: fix typo in naclSeal docs. (#1005)
Co-authored-by: Agustinus Theodorus <agustinus.theodorus@binus.edu>
2021-06-06 20:58:43 +02:00
Github Actions 831fddafd7 [CI Skip] release/stable 6.7.1
skip-checks: true
2021-06-06 16:36:58 +00:00
Jaco 278a30cd7d 6.7 (#1004) 2021-06-06 18:29:53 +02:00
Github Actions 55b65b202e [CI Skip] release/beta 6.6.2-18
skip-checks: true
2021-06-05 11:16:55 +00:00
Jaco Greeff e1b6456a14 No semgrep.yml on forks 2021-06-05 14:07:36 +03:00
Github Actions 4f285c989d [CI Skip] release/beta 6.6.2-17
skip-checks: true
2021-06-05 07:31:52 +00:00
Jaco Greeff 7cc946e19f Don't include ci in stale 2021-06-05 10:23:21 +03:00
Github Actions bc783be346 [CI Skip] release/beta 6.6.2-16
skip-checks: true
2021-06-05 06:46:34 +00:00
Jaco Greeff a156a2da82 push-master.yml adjust skip 2021-06-05 09:38:08 +03:00
Github Actions 0131915253 [CI Skip] release/beta 6.6.2-15
skip-checks: true
2021-06-05 06:28:11 +00:00
Jaco Greeff 97cb8a76f1 semgrep.yml on PR 2021-06-05 09:19:57 +03:00
Github Actions 80129ae1b7 [CI Skip] release/beta 6.6.2-14
skip-checks: true
2021-06-04 15:06:57 +00:00
Jaco Greeff 3f4ac9e8aa semgrep.yml update 2021-06-04 17:58:12 +03:00
Github Actions 8707810690 [CI Skip] release/beta 6.6.2-13
skip-checks: true
2021-06-04 10:14:02 +00:00
Jaco 88edb9103f Bump deps (#1002) 2021-06-04 12:06:53 +02:00
Github Actions 849546e97c [CI Skip] release/beta 6.6.2-12
skip-checks: true
2021-06-04 08:46:31 +00:00
Jaco Greeff d6959738db semgrep on master only 2021-06-04 11:38:37 +03:00
Github Actions f70a125b18 [CI Skip] release/beta 6.6.2-11
skip-checks: true
2021-06-04 05:44:30 +00:00
Jaco Greeff fe7f6baee4 semgrep only for non-forked 2021-06-04 08:35:59 +03:00
Github Actions 2d264b5fba [CI Skip] release/beta 6.6.2-10
skip-checks: true
2021-06-03 16:08:03 +00:00
Jaco 74bbbe02d9 Bump Ledger WebUsb (#1001) 2021-06-03 18:01:01 +02:00
Github Actions a6cd04a441 [CI Skip] release/beta 6.6.2-9
skip-checks: true
2021-06-03 15:23:37 +00:00
Jaco Greeff f7884093ca lock.yml cron 2021-06-03 18:14:49 +03:00
Github Actions e327fd3e51 [CI Skip] release/beta 6.6.2-8
skip-checks: true
2021-06-02 16:14:29 +00:00
Jaco Greeff ade6cf7ac0 fix stale.yml 2021-06-02 19:06:29 +03:00
Jaco 3404015fc3 Add WebHID transport for Ledger (#1000)
* Add WebHID transport for Ledger

* Update packages/hw-ledger-transports/package.json

* Bump yarn

* yarn.lock interval

* types for transport
2021-06-02 18:00:53 +02:00
Github Actions f91911e9f7 [CI Skip] release/beta 6.6.2-7
skip-checks: true
2021-06-02 07:13:38 +00:00
Jaco Greeff a3631278df cron workflows 2021-06-02 10:05:54 +03:00
Github Actions a0eab88134 [CI Skip] release/beta 6.6.2-6
skip-checks: true
2021-06-01 11:00:02 +00:00
Jaco 45795a5d11 Testing keyring adjustments (#997)
* Testing keyring adjustments

* Revert, add  // nosemgrep

* explicit rule ignore

* revert

* Remove Gerald test
2021-06-01 12:51:51 +02:00
Github Actions 4bb3efa25c [CI Skip] release/beta 6.6.2-5
skip-checks: true
2021-06-01 10:06:03 +00:00
Jaco Greeff 783a76932c semgrep.yml 2021-06-01 12:58:30 +03:00
Github Actions 006eb3c76e [CI Skip] release/beta 6.6.2-4
skip-checks: true
2021-06-01 06:11:05 +00:00
Jaco Greeff 2326d26de9 cron daily only 2021-06-01 09:03:55 +03:00
Github Actions 7c9f69ea20 [CI Skip] release/beta 6.6.2-3
skip-checks: true
2021-05-31 20:22:12 +00:00
Jaco Greeff 0107f7af42 cron locks 2021-05-31 23:15:43 +03:00
Github Actions 4e2e133790 [CI Skip] release/beta 6.6.2-2
skip-checks: true
2021-05-31 07:58:51 +00:00
Jaco 0d42250171 Update .123trigger 2021-05-31 09:50:41 +02:00
Github Actions 599c81cf94 [CI Skip] release/beta 6.6.2-1
skip-checks: true
2021-05-31 07:49:56 +00:00
Jaco Greeff d11e393007 Bump dev 2021-05-31 10:42:42 +03:00
Jaco c6879f779b Bump dev (#996) 2021-05-31 09:17:11 +02:00
Jaco Greeff d17b8f0bd6 lock.yml 2021-05-30 22:22:58 +03:00
Github Actions 238ba6a462 [CI Skip] release/beta 6.6.2-1
skip-checks: true
2021-05-30 09:41:12 +00:00
Jaco 566b6730bc Bump berry (#995)
* Bump berry

* Update tests
2021-05-30 11:33:46 +02:00
Github Actions 09aa042606 [CI Skip] release/beta 6.6.2-0
skip-checks: true
2021-05-29 08:27:17 +00:00
Jaco Greeff acd09c3024 Update stale.yml 2021-05-29 11:18:47 +03:00
Github Actions 0cbb06a6da [CI Skip] release/stable 6.6.1
skip-checks: true
2021-05-29 07:25:59 +00:00
Jaco Greeff 9992feaa7b Actual 6.6 bump 2021-05-29 10:18:50 +03:00
Github Actions bb968d51b0 [CI Skip] release/beta 6.5.2-6
skip-checks: true
2021-05-29 07:17:23 +00:00
Jaco b6001796d7 6.6 (#994) 2021-05-29 09:10:19 +02:00
Github Actions 8ab9387076 [CI Skip] release/beta 6.5.2-5
skip-checks: true
2021-05-28 08:48:07 +00:00
Jaco Greeff f9fd0eeda3 Update stale.yml 2021-05-28 11:39:39 +03:00
Github Actions f2cee9c33d [CI Skip] release/beta 6.5.2-4
skip-checks: true
2021-05-28 08:24:13 +00:00
Jaco a860b09638 Add stale.yml (#993) 2021-05-28 10:16:03 +02:00
Github Actions be3e83f4e3 [CI Skip] release/beta 6.5.2-3
skip-checks: true
2021-05-28 07:52:13 +00:00
Jaco 5788df3f57 Adjust HD path validation & replacement (#992) 2021-05-28 09:43:28 +02:00
Github Actions ec286a57d1 [CI Skip] release/beta 6.5.2-2
skip-checks: true
2021-05-27 05:26:39 +00:00
Jaco 655eb9f128 Align ss58 with upstream (+3 entries) (#990) 2021-05-27 07:18:23 +02:00
Github Actions 37d95fe314 [CI Skip] release/beta 6.5.2-1
skip-checks: true
2021-05-26 08:42:07 +00:00
Jaco 830a2c69d8 Bump dev (#988) 2021-05-26 10:33:36 +02:00
Github Actions ead94a4493 [CI Skip] release/beta 6.5.2-0
skip-checks: true
2021-05-25 11:33:16 +00:00
alexdniepandAlex D cff15f9027 added equilibrium slip44; added equilibrium genesis hash (#984)
* added equilibrium slip44; added equilibrium genesis hash

* added equilibrium app in ledger-polkadot package

Co-authored-by: Alex D <pr0fedt@gmail.com>
2021-05-25 13:27:02 +02:00
Github Actions 13d7dcfef5 [CI Skip] release/stable 6.5.1
skip-checks: true
2021-05-22 17:57:26 +00:00
Jaco 259bb1a0ca 6.5 (#987) 2021-05-22 19:50:55 +02:00
Github Actions d0fb629217 [CI Skip] release/beta 6.4.2-1
skip-checks: true
2021-05-22 15:30:50 +00:00
Jaco ab55c37a33 Allow hdLedger derivation with optional 25th word password (#986) 2021-05-22 17:24:37 +02:00
Github Actions 93a0a194bc [CI Skip] release/beta 6.4.2-0
skip-checks: true
2021-05-20 13:13:50 +00:00
Jaco 3df71c9943 Sync with Substrate ss58 registry (#983)
* Sync with Substrate ss58 registry

* Bump deps
2021-05-20 15:07:29 +02:00
Github Actions 4d4e3988ab [CI Skip] release/stable 6.4.1
skip-checks: true
2021-05-15 08:25:20 +00:00
Jaco 1bfabae65b 6.4 (#981) 2021-05-15 10:18:17 +02:00
Github Actions eb08291de2 [CI Skip] release/beta 6.3.2-13
skip-checks: true
2021-05-12 12:31:23 +00:00
Jaco d63d92e488 Explicit deprecation logging (#979)
* Explicit deprecation logging

* Update CHANGELOG.md
2021-05-12 14:25:01 +02:00
Github Actions bd047063ef [CI Skip] release/beta 6.3.2-12
skip-checks: true
2021-05-11 14:39:44 +00:00
Jaco d725bf21ae Bump deps (#978) 2021-05-11 16:33:13 +02:00
Github Actions f7699edaaf [CI Skip] release/beta 6.3.2-11
skip-checks: true
2021-05-11 14:08:41 +00:00
Jakub Pánik 47501aee7a HydraDX Snakenet Gen3-1 (#977) 2021-05-11 16:02:36 +02:00
Github Actions e4f526bdda [CI Skip] release/beta 6.3.2-10
skip-checks: true
2021-05-11 07:08:11 +00:00
Jaco Greeff 29bf23cd18 Bump CHANGELOG 2021-05-11 10:02:23 +03:00
Github Actions 39d6da414d [CI Skip] release/beta 6.3.2-9
skip-checks: true
2021-05-09 10:55:56 +00:00
Jaco e7233de48f Bump deps (#976) 2021-05-09 12:50:29 +02:00
Github Actions 255d6ef66c [CI Skip] release/beta 6.3.2-8
skip-checks: true
2021-05-09 09:47:32 +00:00
Jaco b41e27d7c3 Bump deps (#975) 2021-05-09 11:41:14 +02:00
Github Actions e3c858ac01 [CI Skip] release/beta 6.3.2-7
skip-checks: true
2021-05-09 09:38:48 +00:00
Jakub Pánik 014075c313 Add HydraDX Snakenet Gen3 (#974) 2021-05-09 11:32:32 +02:00
Github Actions eb3e77c572 [CI Skip] release/beta 6.3.2-6
skip-checks: true
2021-05-07 12:07:26 +00:00
Antoine EstienneandJaco 512ae89fea Jlm update for ethereum pair addition (#969)
* added gerald test address

* allow adding 20 address in createPair

* lint

* move logic to eth specific function

* fix typo

* Update packages/keyring/src/pair/index.ts

Co-authored-by: Jaco <jacogr@gmail.com>

* re establish right encoding

* Update packages/keyring/src/pair/index.ts

Co-authored-by: Jaco <jacogr@gmail.com>

* Update packages/keyring/src/pair/index.ts

Co-authored-by: Jaco <jacogr@gmail.com>

Co-authored-by: Jaco <jacogr@gmail.com>
2021-05-07 14:01:39 +02:00
Github Actions 7f57d05281 [CI Skip] release/beta 6.3.2-5
skip-checks: true
2021-05-07 05:34:33 +00:00
Jaco 5892f70c83 Align ss58 (#972) 2021-05-07 07:28:36 +02:00
Github Actions 699f775141 [CI Skip] release/beta 6.3.2-4
skip-checks: true
2021-05-07 05:05:11 +00:00
Jaco a09e06898f Bump deps (#971)
* Bump deps

* Latest dev
2021-05-07 06:58:48 +02:00
Github Actions 565314ff5f [CI Skip] release/beta 6.3.2-3
skip-checks: true
2021-05-06 06:13:15 +00:00
Jaco bd669f333f Remove ss58 27 prefix (#968) 2021-05-06 08:05:52 +02:00
Github Actions 829d8bc985 [CI Skip] release/beta 6.3.2-2
skip-checks: true
2021-04-30 07:02:29 +00:00
Jaco 218dba5623 Verification test for keyring 2-byte ss58 (#966) 2021-04-30 08:56:39 +02:00
Github Actions b8bf2fed0d [CI Skip] release/beta 6.3.2-1
skip-checks: true
2021-04-30 05:59:33 +00:00
Jaco d505dc1072 Bump deps (#964) 2021-04-30 07:53:27 +02:00
Github Actions 20148b05c4 [CI Skip] release/beta 6.3.2-0
skip-checks: true
2021-04-30 05:32:34 +00:00
Jaco 2516309b93 Add additional 2-byte ss58 tests (verification) (#963) 2021-04-30 07:26:58 +02:00
Github Actions 92d3a2e208 [CI Skip] release/stable 6.3.1
skip-checks: true
2021-04-25 04:09:00 +00:00
Jaco 286d7a036e 6.3 (#961) 2021-04-25 06:02:58 +02:00
Github Actions 4556822a8a [CI Skip] release/beta 6.2.2-8
skip-checks: true
2021-04-24 07:39:45 +00:00
Jaco be227926c8 Add explict engines field (#960) 2021-04-24 09:33:15 +02:00
Github Actions 42626a780c [CI Skip] release/beta 6.2.2-7
skip-checks: true
2021-04-22 12:45:01 +00:00
Jaco afd8a9610f Don't modiy original value on encoding (#958) 2021-04-22 14:39:39 +02:00
Github Actions 393334409f [CI Skip] release/beta 6.2.2-6
skip-checks: true
2021-04-22 11:47:35 +00:00
Jaco 0fb52a929d BN manipulation via in-place shifts (as applicable) (#955)
* BN manipulation via in-place shifts (as applicable)

* Adjust tests
2021-04-22 13:42:20 +02:00
Github Actions 50b10e214c [CI Skip] release/beta 6.2.2-5
skip-checks: true
2021-04-22 11:18:57 +00:00
Jaco bbadfbebfa assert cleanups (#957) 2021-04-22 13:13:41 +02:00
Github Actions a52a6253b5 [CI Skip] release/beta 6.2.2-4
skip-checks: true
2021-04-22 10:20:54 +00:00
Jaco 4ca010cc99 Add stringify util (#956)
* Add stringify util

* stringify space param

* Update packages/util/src/stringify.ts
2021-04-22 12:14:31 +02:00
Github Actions a136d938df [CI Skip] release/beta 6.2.2-3
skip-checks: true
2021-04-22 08:30:15 +00:00
Jaco 132ba0128d Type checking on u8aToU8a before invalid return (#954)
* Type checking on u8aToU8a before invalid return

* Remove extra assignment

* CHANGELOG

* Correct expectation
2021-04-22 10:25:22 +02:00
Github Actions 6b705a9838 [CI Skip] release/beta 6.2.2-2
skip-checks: true
2021-04-21 10:57:23 +00:00
Jaco f3381b0aae Use globalThis as available (#953) 2021-04-21 12:52:10 +02:00
Github Actions ba086159ad [CI Skip] release/beta 6.2.2-1
skip-checks: true
2021-04-21 08:36:18 +00:00
Jaco 3a98323e8b Minor readability improvements (#952)
* Minor readability improvements

* trigger

* Additional

* Additional
2021-04-21 10:31:28 +02:00
Github Actions 1de30914c2 [CI Skip] release/beta 6.2.2-0
skip-checks: true
2021-04-21 07:19:42 +00:00
Jaco 984bb7c04f Bump deps (#951) 2021-04-21 09:13:31 +02:00
Github Actions 6140b7f799 [CI Skip] release/stable 6.2.1
skip-checks: true
2021-04-18 05:24:59 +00:00
Jaco 3dc98a3790 6.2.1 (#948) 2021-04-18 07:19:31 +02:00
Github Actions ab7345f017 [CI Skip] release/beta 6.1.2-3
skip-checks: true
2021-04-15 09:33:57 +00:00
Jakub PánikandJaco ef57c7fea4 Update defaults.ts with HydraDX re-genesis hash (#947)
* Update defaults.ts

Re-genesis hash of HydraDX

* Update packages/networks/src/defaults.ts

Co-authored-by: Jaco <jacogr@gmail.com>

Co-authored-by: Jaco <jacogr@gmail.com>
2021-04-15 12:28:40 +03:00
Github Actions efb013db4a [CI Skip] release/beta 6.1.2-2
skip-checks: true
2021-04-14 19:32:03 +00:00
Jaco cd1c0df3cd isAddress/validateAddress functions (#946) 2021-04-14 21:25:58 +02:00
Github Actions 9d08827ccf [CI Skip] release/beta 6.1.2-1
skip-checks: true
2021-04-14 12:02:56 +00:00
Jaco 5083de2941 Sync ss58 with Substrate registry (#945)
* Sync ss58 with Substrate registry

* Update template
2021-04-14 13:56:43 +02:00
Github Actions b266d9f742 [CI Skip] release/beta 6.1.2-0
skip-checks: true
2021-04-13 11:29:44 +00:00
Jaco ea187707c8 Check for networks vs hw-ledger discrepancies (#943)
* Check for networks vs hw-ledger discrepancies

* Rename ledgerApps

* Bump dev

* type imports
2021-04-13 13:23:53 +02:00
Github Actions 1b334d570e [CI Skip] release/stable 6.1.1
skip-checks: true
2021-04-11 12:48:13 +00:00
Jaco Greeff eb0537471e 6.1.1 (#942) 2021-04-11 14:43:33 +02:00
Github Actions fa2c949eda [CI Skip] release/beta 6.0.6-8
skip-checks: true
2021-04-11 12:03:00 +00:00
Lezek123 f5fd07d6e7 logger - wildcard include/exclude with DEBUG env (#932) 2021-04-11 13:57:13 +02:00
Github Actions be1a2ebf8c [CI Skip] release/beta 6.0.6-7
skip-checks: true
2021-04-11 08:54:16 +00:00
Jaco Greeff 31cd173b0d Auto-create network list based on Substrate registry (#939)
* Auto-create network list based on Substrate registry

* Extract all extensions

* build networks from upstream registry

* Build list

* Cleanups

* Extra tests against overrides

* Simplify all expansion

* Cleanups

* Updates

* CC overrides
2021-04-11 10:48:27 +02:00
Github Actions 5408064ff5 [CI Skip] release/beta 6.0.6-6
skip-checks: true
2021-04-11 08:28:44 +00:00
amphineko 482aee3a1a chore: fix typo in versionDetect messages (#941) 2021-04-11 10:22:51 +02:00
Github Actions 95f3ac667c [CI Skip] release/beta 6.0.6-5
skip-checks: true
2021-04-09 04:54:05 +00:00
Adam Dossa 1e0a7ba0d6 Update genesis hash for Polymesh network (#937) 2021-04-09 06:48:12 +02:00
Github Actions 57865e53dd [CI Skip] release/beta 6.0.6-4
skip-checks: true
2021-04-08 08:22:41 +00:00
Jaco Greeff d6617f33dd Check for prefix dupes (#936)
* Check for prefix dupes

* Bump deps
2021-04-08 10:11:18 +02:00
Github Actions 1e778b0cc4 [CI Skip] release/beta 6.0.6-3
skip-checks: true
2021-04-01 07:28:18 +00:00
Jaco Greeff 6ceb58e5d3 Add ss58 252 (#934)
* Add ss58 252

* Bump deps
2021-04-01 09:23:02 +02:00
Github Actions e7e8244323 [CI Skip] release/beta 6.0.6-2
skip-checks: true
2021-03-22 21:11:13 +00:00
Jaco Greeff 03a3cabe41 Bump deps (#930) 2021-03-22 22:05:16 +01:00
Github Actions 480002c5f1 [CI Skip] release/beta 6.0.6-1
skip-checks: true
2021-03-17 08:03:29 +00:00
Jaco Greeff 0126584a7d Update .123trigger 2021-03-17 08:57:05 +01:00
Github Actions 3f76e4a0dd [CI Skip] release/beta 6.0.6-0
skip-checks: true
2021-03-17 07:16:49 +00:00
Jaco Greeff 890cf5cbfd Update ss58 (#928)
Closes https://github.com/polkadot-js/common/issues/927
2021-03-17 08:10:49 +01:00
Github Actions a951e844bf [CI Skip] release/stable 6.0.5
skip-checks: true
2021-03-08 14:03:07 +00:00
Jaco Greeff 568815bf4a 6.0.5 (#926) 2021-03-08 14:57:53 +01:00
Github Actions f18293ffe9 [CI Skip] release/stable 6.0.4
skip-checks: true
2021-03-07 15:08:24 +00:00
Jaco Greeff 003dc8d247 6.0.4 (#924) 2021-03-07 16:02:32 +01:00
Github Actions f259de2679 [CI Skip] release/beta 6.0.4-0
skip-checks: true
2021-03-07 11:12:14 +00:00
Yuri b0f783f54b Extra check for process for browser bundles (#923) 2021-03-07 12:05:54 +01:00
Github Actions 4fbdbcf8c5 [CI Skip] release/stable 6.0.3
skip-checks: true
2021-03-05 22:18:23 +00:00
Jaco Greeff ac5c993b27 6.0.3 (cjs import indirection) (#922)
* 6.0.3 (cjs import indirection)

* Bump deps

* Apply suggestions from code review
2021-03-05 23:11:54 +01:00
Github Actions e05dcf7383 [CI Skip] release/stable 6.0.2
skip-checks: true
2021-03-05 15:55:45 +00:00
Jaco Greeff c9ea3ab1ae 6.0.2 (Only use rxjs cjs exports) (#920)
* 6.0.2 (Only use rxjs cjs exports)

* Update CHANGELOG.md

* packageInfo
2021-03-05 16:49:45 +01:00
Github Actions 4b097dcaef [CI Skip] release/stable 6.0.1
skip-checks: true
2021-03-05 15:07:06 +00:00
Jaco Greeff 2a9cca5f1b 6.0 (#919) 2021-03-05 16:00:54 +01:00
Github Actions 8ce3a40c66 [CI Skip] release/beta 6.0.1-9
skip-checks: true
2021-03-05 08:40:25 +00:00
Jaco Greeff 958a13384d Allow for addition of raw pairs to the keyring (#918) 2021-03-05 09:35:12 +01:00
Github Actions e25545c39f [CI Skip] release/beta 6.0.1-8
skip-checks: true
2021-03-04 21:06:19 +00:00
Jaco Greeff bca1e0c5c4 Extract json encryption functions (#917)
* Extract json encryption functions

* Opt

* adjust

* Adjust

* Adjust imports

* callback error
2021-03-04 22:01:20 +01:00
Github Actions bf36024568 [CI Skip] release/beta 6.0.1-7
skip-checks: true
2021-03-04 19:01:05 +00:00
Jaco Greeff 1292a270e0 Bump wasm (#916) 2021-03-04 19:56:00 +01:00
Github Actions 68fe800f63 [CI Skip] release/beta 6.0.1-6
skip-checks: true
2021-03-03 15:47:58 +00:00
Jaco Greeff ceb1575e1a Build cleanups (#914) 2021-03-03 16:32:34 +01:00
Github Actions 4916d63832 [CI Skip] release/beta 6.0.1-5
skip-checks: true
2021-03-03 08:29:40 +00:00
Jaco Greeff d2176485b9 Bump (& berry) (#913) 2021-03-03 09:24:31 +01:00
Github Actions e9dd421b62 [CI Skip] release/beta 6.0.1-4
skip-checks: true
2021-03-02 19:51:57 +00:00
Antoine Estienne 802c241820 Add eth dev addresses (#912)
* added gerald test address

* added 5 dev addresses for eth

* added one pair

* updated seed
2021-03-02 20:45:36 +01:00
Github Actions a3b5ced423 [CI Skip] release/beta 6.0.1-3
skip-checks: true
2021-03-02 19:38:01 +00:00
Jaco Greeff b975766d35 Default output as ESM modules (#911)
* Default output as ESM modules

* 6.0

* packageInfo

* Bump dev & wasm

* empty ignore patterns

* Don't exclude @polkadot

* Bump dev
2021-03-02 20:31:48 +01:00
Github Actions eb460570ac [CI Skip] release/beta 5.9.3-1
skip-checks: true
2021-03-01 20:33:06 +00:00
Jaco Greeff a8658d5b60 Bump deps (#910) 2021-03-01 21:26:38 +01:00
Github Actions fbe462e2e3 [CI Skip] release/beta 5.9.3-0
skip-checks: true
2021-03-01 16:12:37 +00:00
Antoine EstienneandJaco Greeff 04bbf28a57 Jlm test from seed (#909)
* added gerald test address

* add test for fromSeed

* Update packages/util-crypto/src/secp256k1/keypair/fromSeed.spec.ts

Co-authored-by: Jaco Greeff <jacogr@gmail.com>

* coorected createfromuri to accept eth priv key

* Update packages/keyring/src/keyring.ts

Co-authored-by: Jaco Greeff <jacogr@gmail.com>

* add isPhraeHex

Co-authored-by: Jaco Greeff <jacogr@gmail.com>
2021-03-01 17:06:12 +01:00
536 changed files with 14353 additions and 8572 deletions
+18 -3
View File
@@ -1,13 +1,28 @@
6
8
2.6.2
2.12.2
5.2.2
5.2.3
5.4.2
5.4.3
5.4.4
5.5.2
5.6.2
5.6.3
5.9.2
5.9.2
6.0.2
6.0.3
6.0.4
6.0.5
7.0.2
7.0.3
7.1.2
7.8.2
7.9.2
8.0.2
8.0.3
8.0.4
8.0.5
8.1.2
8.2.2
+17 -1
View File
@@ -1,5 +1,21 @@
checks:
argument-count:
config:
threshold: 5
method-complexity:
config:
threshold: 7
method-count:
config:
threshold: 25
method-lines:
config:
threshold: 30
exclude_patterns:
- "**/*.spec.js"
- "**/*.spec.ts"
- "packages/networks/src/index.ts"
- "packages/networks/src/substrate.ts"
- "packages/util/src/is/utf8.ts"
- "packages/x-noble-hashes/src/**.ts"
- "packages/x-noble-secp256k1/src/**.ts"
+2
View File
@@ -0,0 +1,2 @@
packages/x-noble-hashes/**/*.ts
packages/x-noble-secp256k1/**/*.ts
+2 -8
View File
@@ -6,18 +6,12 @@ const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
'.eslintrc.js',
'.github/**',
'.vscode/**',
'.yarn/**',
'**/build/*',
'**/coverage/*',
'**/node_modules/*'
...base.ignorePatterns
],
parserOptions: {
...base.parserOptions,
project: [
'./tsconfig.json'
'./tsconfig.eslint.json'
]
},
rules: {
+2 -2
View File
@@ -5,6 +5,6 @@ labels: ['ci', '@networks']
cc @polkadot-js/notifications
Discrepancies detected between https://github.com/paritytech/substrate/blob/master/ss58-registry.json and https://github.com/polkadot-js/common/blob/master/packages/networks/src/index.ts
Discrepancies detected between https://github.com/paritytech/substrate/blob/master/ss58-registry.json and https://github.com/polkadot-js/common/blob/master/packages/networks/src/substrate.ts
Check the nightly cron output or run `yarn networks:crosscheck` locally. The output as found from the test includes:
Check the nightly cron output (or via `yarn networks:crosscheck` locally) and run `yarn networks:sync` to update. The output as found from the test includes:
+23
View File
@@ -0,0 +1,23 @@
name: 'Lock Threads'
on:
schedule:
- cron: '15 1/3 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
with:
github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7'
issue-lock-comment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query.
pr-lock-inactive-days: '2'
pr-lock-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
+1 -1
View File
@@ -5,7 +5,7 @@ jobs:
pr:
strategy:
matrix:
step: ['lint', 'test', 'build', 'networks:crosscheck']
step: ['lint', 'test', 'build']
name: ${{ matrix.step }}
runs-on: ubuntu-latest
steps:
+1 -8
View File
@@ -6,11 +6,11 @@ on:
jobs:
master:
if: "! startsWith(github.event.head_commit.message, '[CI Skip]')"
strategy:
matrix:
step: ['build:release']
name: ${{ matrix.step }}
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && github.repository == 'polkadot-js/common'"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@@ -25,10 +25,3 @@ jobs:
run: |
yarn install --immutable | grep -v 'YN0013'
yarn ${{ matrix.step }}
dummy:
runs-on: ubuntu-latest
steps:
- name: dummy
run: |
echo "Dummy skip step"
+18
View File
@@ -0,0 +1,18 @@
name: Semgrep
on:
pull_request: {}
push:
branches:
- master
jobs:
check:
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && (!github.event.pull_request || github.event.pull_request.head.repo.full_name == github.repository)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: returntocorp/semgrep-action@v1
with:
auditOn: push
publishToken: ${{ secrets.SEMGREP_APP_TOKEN }}
publishDeployment: 1395
+1
View File
@@ -13,6 +13,7 @@ jobs:
CI_LOG: 123
run: |
yarn install --immutable | grep -v 'YN0013'
yarn build
yarn networks:crosscheck
- name: issue
+17
View File
@@ -0,0 +1,17 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '50 1/3 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GH_PAT_BOT }}
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
stale-issue-label: 'stale'
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug],ci'
days-before-stale: 21
days-before-close: 7
+3 -2
View File
@@ -11,7 +11,9 @@ tmp/
.env.development.local
.env.test.local
.env.production.local
.idea
.npmrc
.vscode
.yarn/*
!.yarn/releases
!.yarn/plugins
@@ -24,5 +26,4 @@ yarn-debug.log*
yarn-error.log*
store.db
store.db.compacted
.idea
.vscode
tsconfig.*buildinfo
-1
View File
@@ -1 +0,0 @@
12
+3
View File
@@ -0,0 +1,3 @@
build
coverage
packages
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2021 @polkadot/dev authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/prettier.cjs');
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-55
View File
File diff suppressed because one or more lines are too long
+631
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -10,4 +10,4 @@ plugins:
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
yarnPath: .yarn/releases/yarn-2.4.0.cjs
yarnPath: .yarn/releases/yarn-3.0.1.cjs
+448
View File
@@ -1,5 +1,453 @@
# CHANGELOG
## 8.2.2 Dec 19, 2021
Contributed:
- Add Bifrost Ledger capabilities (Thanks to https://github.com/awesomepan)
- Add Sora genesisHash & Ledger capabilities (Thanks to https://github.com/NoodleSploder)
Changes:
- Add `isPromise` check utility function
- Add `assertUnreachable` for codepaths that should not be followed
- Preserve all-caps word splits in `stringCamelCase`
- Adjust `x-*` fallbacks via `x-global/extractGlobal`
- Sync with upstream Substrate ss58 registry
- Additional tests for `bip39` wordlists
- Maintainability cleanups
- Update to latest Ledger dependencies
- Swap to upstream `@noble` packages
- Adjust tsconfig with references
- 8.2.2 (8.2.1 failed CI due to incorrect CHANGELOG)
## 8.1.2 Dec 5, 2021
Changes:
- Adjustment to non-full-word consecutive uppercase via `string{Camel, Pascal}Case`
## 8.1.1 Dec 5, 2021
Contributed:
- Add Picasso genesisHash (Thanks to https://github.com/hussein-aitlahcen)
Changes:
- Allow for use of `secp256k1` from `@polkadot/wasm-crypto`
- Adjust `isBigInt` to not do `instanceof` check
- Ensure consequtive capitals in `stringCamelCase` are lowercased
- Use `@polkadot/x-bigint` for `BigInt` constructor
- Split `@noble/hashes` fork into `x-noble-hashes`
- Add `@noble/secp256k1` fork into `x-noble-secp256k1`, replaces `elliptic`
## 8.0.5 Dec 1, 2021
Changes:
- Adjust sha3 expectation of `BigInt` availability
## 8.0.4 Nov 30, 2021
Changes:
- Adjust `stringCamelCase` with leading `_`
## 8.0.3 Nov 30, 2021
Changes:
- Remove `Buffer` usage in `x-randomvalues`
- Adjust `stringCamelCase` for all-caps parts
## 8.0.2 Nov 26, 2021
Changes:
- Explicitly include BigInt patched versions
## 8.0.1 Nov 26, 2021
**Important** In the 8.0 version the hashing utilities have been consolidated around an optimized and audited version from `@noble/hashes`. As in the past the WASM hashing will be used by default if the environment is initialized.
**Breaking change** The `schnorrkel*` functions have been renamed to `sr25519*`. Likewise the `ed25519` operations have been renamed from `nacl*` to `ed25519*`. Additionally the `{ed, sr, secp256k1}25519KeyPairFrom*` functions have been renamed to `{ed, sr, secp256k1}25519PairFrom*`.
Changes:
- Introduce `ed25519*` & `sr25519*` functions
- Replace camelcase dep with simplified/optimized version
- Replace (most) hashing operations with `@noble/hashes`
- Replace JS fallback for `xxhash`
- Adjust `BigInt` utility exports (with capability detection)
- Previously added `bi*` functions renamed to `n*`
- Extend performance tests with implementation compares
- Remove non-significant Node Buffer concat fill
## 7.9.2 Nov 22, 2021
Changes:
- Fix TS compiled definitions for `base*` types
- Provide JS/Wasm interfaces for `hmacShaAsU8a`
## 7.9.1 Nov 21, 2021
Contributed:
- Updated Polymesh genesisHash (Thanks to https://github.com/adamdossa)
Changes:
- Add strongly typed `object{Entries, Keys, Values}` utilities
- Add `{hex, u8a}ToBigInt` utilities
- Add `bi*` utilities for `bigint` operations (mirror of `bn*`)
- Add `stringPascalCase` utility
- Add `isCodec` to check for Codec-like structures
- Add `has*` detection shortcuts (e.g. `hasWasm` or `hasBuffer`)
- Add `sha256AsU8a` util (& replace use internally)
- Optimize for `hexToU8a` and `u8aToHex` functions
- Optimize `u8aEq` to use `DataView` for compares
- Align `base{32, 58, 64}*` around (audited) `micro-base`
- Space optimization for bip39 wordlists
- Sync with upstream Substrate ss58 registry
- Expand tests for uncovered functions
## 7.8.2 Nov 7, 2021
Changes:
- Expose internal `isArray` check
- Move `object{Property, Properties}` from api repo
## 7.8.1 Nov 6, 2021
Contributed:
- Added Acala genesisHash (Thanks to https://github.com/qwer951123)
Changes:
- Add `objectClear` and `objectSpread` utility functions
- Add `lazyMethod` & `lazyMethods` utility functions
- Sync with upstream Substrate ss58 registry
## 7.7.1 Oct 31, 2021
Contributed:
- Add Genshiro support (Thanks to https://github.com/Overseven)
Changes:
- Add `arrayZip` to combine a key + value array into entries-like
- Assert `chainCode` inputs to `derive*`, protecting against misuse
- Adjust testnet detection in `@polkadot/networks`
- Adjust base library usage of `for` vs `reduce/map`
- Bump Ledger libraries to latest versions
## 7.6.1 Oct 23, 2021
Changes:
- Update `xxhash*` to only use `Uint8Array` internally, no `Buffer`
- Adjust `isAscii` to check against original string codepoints (when provided)
- Adjust networks to sync with `paritytech/ss58-registry`
- Dedupe internal sr25519/ed25519 derivation functions
- Bump Ledger libraries to latest versions
## 7.5.1 Oct 16, 2021
Contributed:
- Fix comment on `blake2AsU8a` (Thanks to https://github.com/tomokazukozuma)
- Update Ethereum derivation process (Thanks to https://github.com/joelamouche)
Changes:
- Derivation paths now caters for > `MAX_SAFE_INTEGER` unsigned values
- Sync with upstream Substrate ss58 registry
- Update ss58 registry handling (both previous and current versions)
## 7.4.1 Sep 17, 2021
Changes:
- Add `u8aWrapBytes` & `u8aUnwrapBytes` (originally from `@polkadot/extension-dapp`)
- Verify both wrapped and unwrapped signatures transparently
- Adjust `isHex` return to `0x${string}` under TypeScript
- Adjust shared repo Jest config
- Sync with upstream Substrate ss58 registry
- Cleanup rollup build where `x-global` yields undefined
## 7.3.1 Aug 28, 2021
Contributed:
- Added Bifrost genesisHash (Thanks to https://github.com/awesomepan)
- Added Stafi genesisHash (Thanks to https://github.com/Tore19)
- Add Ledger support for Nodle (Thanks to https://github.com/ETeissonniere)
Changes:
- Add support for `schnorrkelAgreement` (as exposed by new `wasm-crypto`)
- Ensure `schnorrkel*` functions allows hex inputs
- `@polkadot/wasm-crypto` 4.2.1
- Sync with upstream Substrate ss58 registry
## 7.2.1 Aug 15, 2021
Contributed:
- Always use `bigint` type to indicate instance (Thanks to https://github.com/ntduan)
Changes:
- Added `u8aEmpty` helper check, all 0 or no length
- Cleanup additional circular dependencies detected by rollup
## 7.1.2 Aug 11, 2021
Changes:
- Ensure `@polkadot/util-crypto` doesn't re-export `packageInfo` from `@polkadot/networks`
- Minor TS style cleanups in `@polkadot/x-bundle`
## 7.1.1 Aug 2, 2021
Contributed:
- Add keyring encrypt/decrypt functionality (Thanks to https://github.com/RoyTimes)
Changes:
- Bump Ledger libraries to latest versions
## 7.0.3 Jul 26, 2021
Changes:
- Sync with upstream Substrate ss58 registry
- Bump Ledger libraries to latest versions
## 7.0.2 Jul 19, 2021
Changes:
- Added `isCompact` utility for check on compact-like types
- Sync with upstream Substrate ss58 registry
## 7.0.1 Jul 11, 2021
- **Breaking change** The `@polkadot/x-rxjs` package has been removed. In `rxjs` 7.2.0 the compatibility issues at the base layer has been solved.
- **Breaking change** The named exports in `@polkadot/networks` has been changed
Contributed:
- Add Ledger config for Centrifuge (Thanks to https://github.com/mikiquantum)
Changes:
- Adjust `@polkadot/networks` to fully-descriptive exports
- Remove `@polkadot/x-rxjs`, direct import from `rxjs >= 7.2.0` required
- Allow building as a completely stand-alone browser bundle (experimental)
- Sync with upstream Substrate ss58 registry
## 6.11.1 Jul 5, 2021
Changes:
- Cleanup unneeded dependencies for `@polkadot/x-global`
- Sync with upstream Substrate ss58 registry
- Bump Zondax dependencies (Statemine slip44 fix)
## 6.10.1 Jun 26, 2021
Contributed:
- Add Karura genesisHash (Thanks to https://github.com/ntduan)
Changes:
- `isHex(value)` will now check for only `string` types (No `String` classes)
- Added `arrayShuffle(array)` to shuffle an array into a new output
- Added Statemine Ledger app information
- Simplify tests to use `{describe|it}.each` where applicable
- Sync with upstream Substrate ss58 registry
## 6.9.1 Jun 19, 2021
Changes:
- Added `u8aCmp(a, b)` to do sorting compares
- Added `arrayRange(size, startAt = 0)` to create a range of numbers
- Added extensive mnemonic compare test (optional, skipped)
## 6.8.1 Jun 14, 2021
Contributed:
- Add Ledger support for Edgeware (Thanks to https://github.com/raykyri)
- Fix `naclSeal` doc types (Thanks to https://github.com/agustinustheo)
Changes:
- Export `BN` in `@polkadot/util`
- Sync with upstream Substrate ss58 registry
## 6.7.1 Jun 6, 2021
Changes:
- Add WebHID transport for Ledger
- Update to latest Ledger transport packages
- Remove old `Gerald` key for Moonbeam
- Cleanup testing keyring semgrep recommendations
## 6.6.1 May 29, 2021
Changes:
- Adjust HD path validation & replacement
- Sync with Substrate ss58 registry
## 6.5.1 May 22, 2021
Changes:
- Allow hdLedger derivation with optional 25th word password
- Sync with Substrate ss58 registry
## 6.4.1 May 15, 2021
Contributed:
- Update genesis for HydraDx gen-3 (Thanks to https://github.com/jak-pan)
- Allow Ethereum pair in keyring addAddress (Thanks to https://github.com/joelamouche)
Changes:
- Added additional double-byte ss58 tests
- Aligned ss58 registry with Substrate
- Add explicit log for deprecation of `setSS58Format`
## 6.3.1 Apr 25, 2021
Changes:
- Added `stringify` util to correctly handle `JSON.stringify` with `BigInt` values
- Additional input asserts for non-convertible values in `u8aToU8a`
- Adapt `@polkadot/x-global` to return `globalThis` as available
- Minor readability cleanups
- BN manipulation via in-place shifts (as applicable)
- Add explicit `engines` config to `package.json`
## 6.2.1 Apr 18, 2021
Contributed:
- Added HydraDx genesis (Thanks to https://github.com/jak-pan)
Changes:
- Add `isAddress` and `validateAddress` functions (the latter will throw if invalid)
- Check `@polkadot/hw-ledger` against `@polkadot/networks` for discrepancies (test-only)
- Align ss58 registry with upstream Substrate
## 6.1.1 Apr 11, 2021
Contributed:
- Adjust Polymath genesis in `@polkadot/networks` (Thanks to https://github.com/adamdossa)
- Adjust `@polkadot/util` logger for +/-/* compat (Thanks to https://github.com/Lezek123)
- Fix typo in `@polkadot/util` detect messaging (Thanks to https://github.com/amphineko)
Changes:
- Remove `@polkadot/networks` code duplication, manages data via script from upstream
- Align ss58 registry with upstream Substrate
## 6.0.5 Mar 8, 2021
Changes:
- Fix for `@polkadot/x-rxjs` in Node CJS environments (no Node-specific import)
## 6.0.4 Mar 7, 2021
Contributed:
- Enhance check for global process existence (Thanks to https://github.com/Yuripetusko)
Changes:
- Dedupe & optimize logger process.env checks
## 6.0.3 Mar 5, 2021
Changes:
- Add import indirection for both CJS & ESM (where generated source file is commonjs)
## 6.0.2 Mar 5, 2021
Changes:
- Fix `@polkadot/x-rxjs` ESM exports for Node environments (now different due to the ESM conversion)
## 6.0.1 Mar 5, 2021
**Important** In the 6.0 version the default package type has been changed to ESM modules by default. This should not affect usage, however since the output formats changed, a new major version is required.
Contributed:
- Add dev addresses for Frontier-based chains (Thanks to https://github.com/joelamouche)
Changes:
- Build to ESM by default (with cjs versions via export map)
- Allow addition or raw pairs on the keyring via `{add, create}FromPair`
- Extract re-usable json encryption/decryption functions
## 5.9.2 Feb 28, 2021
Changes:
+19
View File
@@ -0,0 +1,19 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest.cjs');
module.exports = Object.assign({}, config, {
moduleNameMapper: {
'@polkadot/hw-ledger-transports(.*)$': '<rootDir>/packages/hw-ledger-transports/src/node',
// eslint-disable-next-line sort-keys
'@polkadot/hw-ledger(.*)$': '<rootDir>/packages/hw-ledger/src/$1',
'@polkadot/keyring(.*)$': '<rootDir>/packages/keyring/src/$1',
'@polkadot/networks(.*)$': '<rootDir>/packages/networks/src/$1',
'@polkadot/util-(crypto)(.*)$': '<rootDir>/packages/util-$1/src/$2',
// eslint-disable-next-line sort-keys
'@polkadot/util(.*)$': '<rootDir>/packages/util/src/$1',
'@polkadot/x-(bigint|global)(.*)$': '<rootDir>/packages/x-$1/src/$2',
'@polkadot/x-(fetch|randomvalues|textdecoder|textencoder|ws)(.*)$': '<rootDir>/packages/x-$1/src/node'
}
});
-36
View File
@@ -1,36 +0,0 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest.cjs');
module.exports = Object.assign({}, config, {
moduleNameMapper: {
'@polkadot/hw-ledger-transports(.*)$': '<rootDir>/packages/hw-ledger-transports/src/node',
// eslint-disable-next-line sort-keys
'@polkadot/hw-ledger(.*)$': '<rootDir>/packages/hw-ledger/src/$1',
'@polkadot/keyring(.*)$': '<rootDir>/packages/keyring/src/$1',
'@polkadot/networks(.*)$': '<rootDir>/packages/networks/src/$1',
'@polkadot/util-(crypto)(.*)$': '<rootDir>/packages/util-$1/src/$2',
// eslint-disable-next-line sort-keys
'@polkadot/util(.*)$': '<rootDir>/packages/util/src/$1',
'@polkadot/x-(fetch|randomvalues|textdecoder|textencoder|ws)(.*)$': '<rootDir>/packages/x-$1/src/node',
'@polkadot/x-global(.*)$': '<rootDir>/packages/x-global/src/$1',
'@polkadot/x-rxjs(.*)$': '<rootDir>/packages/x-rxjs/src/$1'
},
modulePathIgnorePatterns: [
'<rootDir>/packages/hw-ledger/build',
'<rootDir>/packages/hw-ledger-transports/build',
'<rootDir>/packages/keyring/build',
'<rootDir>/packages/networks/build',
'<rootDir>/packages/util/build',
'<rootDir>/packages/util-crypto/build',
'<rootDir>/packages/x-fetch/build',
'<rootDir>/packages/x-global/build',
'<rootDir>/packages/x-randomvalues/build',
'<rootDir>/packages/x-rxjs/build',
'<rootDir>/packages/x-textdecoder/build',
'<rootDir>/packages/x-textencoder/build',
'<rootDir>/packages/x-ws/build'
],
resolver: '@polkadot/dev/config/jest-resolver.cjs'
});
+22 -12
View File
@@ -1,29 +1,39 @@
{
"repository": "https://github.com/polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common#readme",
"license": "Apache-2",
"packageManager": "yarn@3.0.1",
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": false,
"version": "8.2.2",
"workspaces": [
"packages/*"
],
"resolutions": {
"typescript": "^4.1.5"
},
"scripts": {
"build": "polkadot-dev-build-ts",
"build:release": "polkadot-ci-ghact-build",
"lint": "polkadot-dev-run-lint",
"build:rollup": "polkadot-exec-rollup --config",
"clean": "polkadot-dev-clean-build",
"lint": "polkadot-dev-run-lint",
"networks:crosscheck": "polkadot-dev-run-test packages/networks/src/crosscheck",
"networks:sync": "yarn build && node packages/networks/scripts/fromSubstrate.mjs",
"postinstall": "polkadot-dev-yarn-only",
"test": "polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck",
"test:one": "polkadot-dev-run-test"
"test": "polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck --testPathIgnorePatterns toMiniSecretCmp",
"test:mnemonicCmp": "polkadot-dev-run-test packages/util-crypto/src/mnemonic/toMiniSecretCmp.spec.ts",
"test:one": "polkadot-dev-run-test --runInBand"
},
"devDependencies": {
"@babel/core": "^7.13.8",
"@polkadot/dev": "^0.61.30",
"@polkadot/ts": "^0.3.59",
"@types/jest": "^26.0.20"
"@babel/core": "^7.16.5",
"@polkadot/dev": "^0.64.5",
"@polkadot/ts": "^0.4.20",
"@types/jest": "^27.0.3"
},
"version": "5.9.2"
"resolutions": {
"typescript": "^4.5.3"
}
}
+24 -16
View File
@@ -1,24 +1,32 @@
{
"name": "@polkadot/hw-ledger-transports",
"version": "5.9.2",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"bugs": "https://github.com/polkadot-js/common/issues",
"contributors": [],
"license": "Apache-2.0",
"main": "node.js",
"browser": "browser.js",
"react-native": "react-native.js",
"sideEffects": false,
"dependencies": {
"@babel/runtime": "^7.13.8",
"@ledgerhq/hw-transport-webusb": "^5.43.0"
"engines": {
"node": ">=14.0.0"
},
"devDependencies": {
"@types/ledgerhq__hw-transport-node-hid": "^4.22.2",
"@types/ledgerhq__hw-transport-webusb": "^4.70.1"
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger-transports#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/hw-ledger-transports",
"repository": {
"directory": "packages/hw-ledger-transports",
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": false,
"type": "module",
"version": "8.2.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.16.5",
"@ledgerhq/hw-transport": "^6.20.0",
"@ledgerhq/hw-transport-webhid": "^6.20.0",
"@ledgerhq/hw-transport-webusb": "^6.20.0"
},
"optionalDependencies": {
"@ledgerhq/hw-transport-node-hid-singleton": "^5.43.0"
"@ledgerhq/hw-transport-node-hid-singleton": "^6.20.0"
}
}
+8 -9
View File
@@ -4,21 +4,20 @@
import type Transport from '@ledgerhq/hw-transport';
import type { TransportDef } from './types';
import LedgerWebUSB from '@ledgerhq/hw-transport-webusb';
import LedgerWebHid from '@ledgerhq/hw-transport-webhid';
import LedgerWebUsb from '@ledgerhq/hw-transport-webusb';
export { packageInfo } from './packageInfo';
export const transports: TransportDef[] = [
// deprecated
// import LedgerU2F from '@ledgerhq/hw-transport-u2f';
// {
// create: (): Promise<Transport> =>
// LedgerU2F.create(),
// type: 'u2f'
// },
{
create: (): Promise<Transport> =>
LedgerWebUSB.create(),
LedgerWebUsb.create(),
type: 'webusb'
},
{
create: (): Promise<Transport> =>
LedgerWebHid.create(),
type: 'hid'
}
];
-15
View File
@@ -1,15 +0,0 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
declare module '@ledgerhq/hw-transport-node-hid-noevents' {
import Transport from '@ledgerhq/hw-transport';
export default class TransportNodeHidNoEvents extends Transport<string> {}
export function getDevices(): Array<unknown>
}
declare module '@ledgerhq/hw-transport-node-hid-singleton' {
import TransportNodeHidNoEvents from '@ledgerhq/hw-transport-node-hid-noevents';
export default class TransportNodeHid extends TransportNodeHidNoEvents { }
}
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/dev authors & contributors
// Copyright 2017-2021 @polkadot/hw-ledger-transports authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '5.9.2' };
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '8.2.2' };
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": []
}
+20 -10
View File
@@ -1,20 +1,30 @@
{
"name": "@polkadot/hw-ledger",
"version": "5.9.2",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"bugs": "https://github.com/polkadot-js/common/issues",
"contributors": [],
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger#readme",
"license": "Apache-2.0",
"main": "index.js",
"maintainers": [],
"name": "@polkadot/hw-ledger",
"repository": {
"directory": "packages/hw-ledger",
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
"./detectPackage.cjs"
],
"type": "module",
"version": "8.2.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.8",
"@polkadot/hw-ledger-transports": "5.9.2",
"@polkadot/util": "^5.9.2",
"@zondax/ledger-polkadot": "^0.13.1"
"@babel/runtime": "^7.16.5",
"@polkadot/hw-ledger-transports": "8.2.2",
"@polkadot/util": "8.2.2",
"@zondax/ledger-substrate": "^0.23.0"
}
}
+103
View File
@@ -0,0 +1,103 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ResponseBase, SubstrateApp } from '@zondax/ledger-substrate';
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerTypes, LedgerVersion } from './types';
import { transports } from '@polkadot/hw-ledger-transports';
import { assert, u8aToBuffer } from '@polkadot/util';
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants';
import { ledgerApps } from './defaults';
export { packageInfo } from './packageInfo';
type Chain = keyof typeof ledgerApps;
// A very basic wrapper for a ledger app -
// - it connects automatically, creating an app as required
// - Promises return errors (instead of wrapper errors)
export class Ledger {
#app: SubstrateApp | null = null;
#chain: Chain;
#transport: LedgerTypes;
constructor (transport: LedgerTypes, chain: Chain) {
// u2f is deprecated
assert(['hid', 'webusb'].includes(transport), () => `Unsupported transport ${transport}`);
assert(Object.keys(ledgerApps).includes(chain), () => `Unsupported chain ${chain}`);
this.#chain = chain;
this.#transport = transport;
}
public async getAddress (confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerAddress> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
const { address, pubKey } = await this.#wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
return {
address,
publicKey: `0x${pubKey}`
};
});
}
public async getVersion (): Promise<LedgerVersion> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await this.#wrapError(app.getVersion());
return {
isLocked,
isTestMode,
version: [major, minor, patch]
};
});
}
public async sign (message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerSignature> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerSignature> => {
const buffer = u8aToBuffer(message);
const { signature } = await this.#wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
return {
signature: `0x${signature.toString('hex')}`
};
});
}
#getApp = async (): Promise<SubstrateApp> => {
if (!this.#app) {
const def = transports.find(({ type }) => type === this.#transport);
assert(def, () => `Unable to find a transport for ${this.#transport}`);
const transport = await def.create();
this.#app = ledgerApps[this.#chain](transport);
}
return this.#app;
};
#withApp = async <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> => {
try {
const app = await this.#getApp();
return await fn(app);
} catch (error) {
this.#app = null;
throw error;
}
};
#wrapError = async <T extends ResponseBase> (promise: Promise<T>): Promise<T> => {
const result = await promise;
assert(result.return_code === LEDGER_SUCCESS_CODE, () => result.error_message);
return result;
};
}
+10
View File
@@ -0,0 +1,10 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
export const LEDGER_DEFAULT_CHANGE = 0x80000000;
export const LEDGER_DEFAULT_INDEX = 0x80000000;
export const LEDGER_SUCCESS_CODE = 0x9000;
+23
View File
@@ -0,0 +1,23 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type Transport from '@ledgerhq/hw-transport';
import type { SubstrateApp } from '@zondax/ledger-substrate';
import { newBifrostApp, newCentrifugeApp, newDockApp, newEdgewareApp, newEquilibriumApp, newGenshiroApp, newKusamaApp, newNodleApp, newPolkadotApp, newPolymeshApp, newSoraApp, newStatemineApp } from '@zondax/ledger-substrate';
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults.ts
export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp> = {
bifrost: newBifrostApp,
centrifuge: newCentrifugeApp,
'dock-mainnet': newDockApp,
edgeware: newEdgewareApp,
equilibrium: newEquilibriumApp,
genshiro: newGenshiroApp,
kusama: newKusamaApp,
'nodle-chain': newNodleApp,
polkadot: newPolkadotApp,
polymesh: newPolymeshApp,
sora: newSoraApp,
statemine: newStatemineApp
};
+1 -117
View File
@@ -3,120 +3,4 @@
import './detectPackage';
import type Transport from '@ledgerhq/hw-transport';
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerTypes, LedgerVersion } from './types';
import { newDockApp, newKusamaApp, newPolkadotApp, newPolymeshApp, ResponseBase, SubstrateApp } from '@zondax/ledger-polkadot';
import { transports } from '@polkadot/hw-ledger-transports';
import { assert, u8aToBuffer } from '@polkadot/util';
export { packageInfo } from './packageInfo';
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
export const LEDGER_DEFAULT_CHANGE = 0x80000000;
export const LEDGER_DEFAULT_INDEX = 0x80000000;
const SUCCESS_CODE = 0x9000;
// These match up with the network keys in the @polkadot/networks package
// (which is turn aligns with the substrate/ss58-registry.json as the single
// source of truth)
const APPS: Record<string, (transport: Transport) => SubstrateApp> = {
dock: newDockApp,
kusama: newKusamaApp,
polkadot: newPolkadotApp,
polymesh: newPolymeshApp
};
type Chain = keyof typeof APPS;
// A very basic wrapper for a ledger app -
// - it connects automatically, creating an app as required
// - Promises return errors (instead of wrapper errors)
export class Ledger {
#app: SubstrateApp | null = null;
#chain: Chain;
#transport: LedgerTypes;
constructor (transport: LedgerTypes, chain: Chain) {
// u2f is deprecated
assert(['hid', 'webusb'].includes(transport), `Unsupported transport ${transport}`);
assert(Object.keys(APPS).includes(chain), `Unsupported chain ${chain}`);
this.#chain = chain;
this.#transport = transport;
}
public async getAddress (confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerAddress> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
const { address, pubKey } = await this.#wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
return {
address,
publicKey: `0x${pubKey}`
};
});
}
public async getVersion (): Promise<LedgerVersion> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await this.#wrapError(app.getVersion());
return {
isLocked,
isTestMode,
version: [major, minor, patch]
};
});
}
public async sign (message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerSignature> {
return this.#withApp(async (app: SubstrateApp): Promise<LedgerSignature> => {
const buffer = u8aToBuffer(message);
const { signature } = await this.#wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
return {
signature: `0x${signature.toString('hex')}`
};
});
}
#getApp = async (): Promise<SubstrateApp> => {
if (!this.#app) {
const def = transports.find(({ type }) => type === this.#transport);
assert(def, `Unable to find a transport for ${this.#transport}`);
const transport = await def.create();
this.#app = APPS[this.#chain](transport);
}
return this.#app;
};
#withApp = async <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> => {
try {
const app = await this.#getApp();
return await fn(app);
} catch (error) {
this.#app = null;
throw error;
}
};
#wrapError = async <T extends ResponseBase> (promise: Promise<T>): Promise<T> => {
const result = await promise;
assert(result.return_code === SUCCESS_CODE, result.error_message);
return result;
};
}
export * from './bundle';
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/dev authors & contributors
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/hw-ledger', version: '5.9.2' };
export const packageInfo = { name: '@polkadot/hw-ledger', version: '8.2.2' };
+3 -1
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
export type LedgerTypes = 'hid' | 'u2f' | 'webusb';
export interface AccountOptions {
@@ -15,7 +17,7 @@ export interface LedgerAddress {
}
export interface LedgerSignature {
signature: string;
signature: HexString;
}
export interface LedgerVersion {
+12
View File
@@ -0,0 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": [
{ "path": "../hw-ledger-transports" },
{ "path": "../util" }
]
}
+22 -14
View File
@@ -1,26 +1,34 @@
{
"name": "@polkadot/keyring",
"version": "5.9.2",
"description": "Keyring management",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"bugs": "https://github.com/polkadot-js/common/issues",
"contributors": [],
"description": "Keyring management",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
"license": "Apache-2.0",
"main": "index.js",
"maintainers": [],
"name": "@polkadot/keyring",
"repository": {
"directory": "packages/keyring",
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
"./detectPackage.cjs"
],
"repository": "github:polkadot-js/common",
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
"type": "module",
"version": "8.2.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.8",
"@polkadot/util": "5.9.2",
"@polkadot/util-crypto": "5.9.2"
"@babel/runtime": "^7.16.5",
"@polkadot/util": "8.2.2",
"@polkadot/util-crypto": "8.2.2"
},
"peerDependencies": {
"@polkadot/util": "5.9.2",
"@polkadot/util-crypto": "5.9.2"
"@polkadot/util": "8.2.2",
"@polkadot/util-crypto": "8.2.2"
}
}
+14
View File
@@ -0,0 +1,14 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keyring } from './keyring';
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
export * from './defaults';
export { createPair } from './pair';
export { packageInfo } from './packageInfo';
export { createTestKeyring } from './testing';
export { createTestPairs } from './testingPairs';
export { Keyring };
+89 -16
View File
@@ -1,9 +1,12 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { cryptoWaitReady, encodeAddress, randomAsU8a, setSS58Format } from '@polkadot/util-crypto';
import type { KeyringPair$Json } from './types';
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { base64Decode, cryptoWaitReady, encodeAddress, randomAsU8a, setSS58Format } from '@polkadot/util-crypto';
import { decodePair } from './pair/decode';
import Keyring from '.';
describe('keypair', (): void => {
@@ -71,7 +74,7 @@ describe('keypair', (): void => {
it('allows adding from JSON', (): void => {
expect(
keyring.addFromJson(
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}')
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}') as KeyringPair$Json
).publicKey
).toEqual(
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])
@@ -118,6 +121,26 @@ describe('keypair', (): void => {
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
});
it('creates with integer derivations', (): void => {
// MAX_SAFE_INTEGER
expect(
keyring.createFromUri('//9007199254740991').address
).toEqual('5CDsyNZyqxLpHnTvknr68anUcYoBFjZbFKiEJJf4prB75Uog');
// MAX_SAFE_INTEGER + extra digits
expect(
keyring.createFromUri('//900719925474099999').address
).toEqual('5GHj2D7RG2m2DXYwGSDpXwuuxn53G987i7p2EQVDqP4NYu4q');
});
it('creates via dev seed (2-byte encoding)', (): void => {
keyring.setSS58Format(252);
expect(
keyring.addFromUri('//Alice').address
).toEqual('xw8P6urbSAronL3zZFB7dg8p7LLSgKCUFDUgjohnf1iP434ic');
});
it('adds the pair', (): void => {
expect(
keyring.addFromSeed(seedTwo, {}).publicKey
@@ -149,7 +172,7 @@ describe('keypair', (): void => {
it('allows adding from JSON', (): void => {
expect(
keyring.addFromJson(
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}')
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}') as KeyringPair$Json
).publicKey
).toEqual(
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])
@@ -228,7 +251,7 @@ describe('keypair', (): void => {
it('allows adding from JSON', (): void => {
expect(
keyring.addFromJson(
JSON.parse('{"address":"5DzMsaYFhmpRdErWrP6K6PD7UXzYoeETToSBUrZSvxasqWRz","encoded":"0xa192d39b42bc1601bf61df31039a554228593fadf870bc837b658a5114627aca199fff596260c95fe8994c66a47636cf0270aa08f402ba5541038753960d00e6c3af5e239ec58fb1eef3db7d6bc266f4853bdfe4ed17122d9092d879014d53980d2ee57f6f55a88c38836447d8645008e8815379626addc8f81f80cd49a2","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"2"},"meta":{}}')
JSON.parse('{"address":"5DzMsaYFhmpRdErWrP6K6PD7UXzYoeETToSBUrZSvxasqWRz","encoded":"0xa192d39b42bc1601bf61df31039a554228593fadf870bc837b658a5114627aca199fff596260c95fe8994c66a47636cf0270aa08f402ba5541038753960d00e6c3af5e239ec58fb1eef3db7d6bc266f4853bdfe4ed17122d9092d879014d53980d2ee57f6f55a88c38836447d8645008e8815379626addc8f81f80cd49a2","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"2"},"meta":{}}') as KeyringPair$Json
).address
).toEqual('5DzMsaYFhmpRdErWrP6K6PD7UXzYoeETToSBUrZSvxasqWRz');
});
@@ -236,7 +259,7 @@ describe('keypair', (): void => {
it('allows creation from JSON', (): void => {
keyring.setSS58Format(2);
const pair = keyring.createFromJson(
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}')
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
);
expect(pair.address).toEqual('DHL8HKFuTTR55JzzLmkJRCAfPBbuevKaT9cXikxbEV97Ko8');
@@ -245,7 +268,7 @@ describe('keypair', (): void => {
it('fails toJson() when password is incorrect', (): void => {
const pair = keyring.createFromJson(
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}')
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
);
expect(
@@ -255,7 +278,7 @@ describe('keypair', (): void => {
it('pass toJson() when password is correct', (): void => {
const pair = keyring.createFromJson(
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}')
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
);
expect(
@@ -306,7 +329,9 @@ describe('keypair', (): void => {
describe('ethereum', (): void => {
// combine mnemonic with derivation path
const PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy' + '/m/44\'/60\'/0\'/0/0';
const PRIV_KEY_ONE = '0x070dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46';
const ETH_ADDRESS_ONE = '0x31ea8795EE32D782C8ff41a5C68Dcbf0F5B27f6d';
const ETH_ADDRESS_TWO = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
let keyring: Keyring;
@@ -314,6 +339,22 @@ describe('keypair', (): void => {
keyring = new Keyring({ type: 'ethereum' });
});
it('creates with dev phrase from the private key', (): void => {
const pair = keyring.addFromSeed(hexToU8a(PRIV_KEY_ONE));
expect(
pair.address
).toEqual(ETH_ADDRESS_ONE);
});
it('creates with dev phrase from the private key in createFromUri', (): void => {
const pair = keyring.createFromUri(PRIV_KEY_ONE);
expect(
pair.address
).toEqual(ETH_ADDRESS_ONE);
});
it('creates with dev phrase with derivation path specified', (): void => {
const pair = keyring.createFromUri(PHRASE);
@@ -328,6 +369,14 @@ describe('keypair', (): void => {
).toEqual(ETH_ADDRESS_ONE);
});
it('creates with dev phrase with derivation path specified - addFromUri with type', (): void => {
const keyringUntyped = new Keyring();
expect(
keyringUntyped.addFromUri(PHRASE, {}, 'ethereum').address
).toEqual(ETH_ADDRESS_ONE);
});
it('encodes a pair toJSON (and decodes)', (): void => {
const pair = keyring.createFromUri(PHRASE);
const json = pair.toJson('password');
@@ -364,24 +413,24 @@ describe('keypair', (): void => {
it('allows adding from JSON', (): void => {
const pair = keyring.addFromJson(
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}')
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
);
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
expect(pair.address).toEqual('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.address).toEqual(ETH_ADDRESS_TWO);
pair.decodePkcs8('password');
expect(pair.isLocked).toBe(false);
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
expect(pair.address).toBe('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.address).toBe(ETH_ADDRESS_TWO);
});
it('allows for signing/verification', (): void => {
const MESSAGE = stringToU8a('just some test message');
const signer = keyring.createFromUri(PHRASE);
const verifier = keyring.addFromJson(
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}')
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
);
const signature = signer.sign(MESSAGE);
@@ -398,7 +447,7 @@ describe('keypair', (): void => {
const MESSAGE = stringToU8a('just some test message');
const signer = keyring.createFromUri(PHRASE);
const verifier = keyring.addFromJson(
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}')
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
);
const signature = signer.sign(MESSAGE, { withType: true });
@@ -412,6 +461,30 @@ describe('keypair', (): void => {
});
});
describe('raw pair add/create', (): void => {
const json = JSON.parse('{"address":"5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H","encoded":"JQUl8ZpoXv2OMkL9TPylLmcIye2cYhaS9INICbFgZTsAgAAAAQAAAAgAAAAr/0hJOOzokIdBG71TstigLABX9D5xGD7L37ySxtjDrVRg26LL90jLQ47quT9o3bq6ppXMVL6USk7Q4p3WU66bojTFuCDyhpYRhNbUqU6s0rD3S4bhv9lG+pG9vQ4eD5PVQUvxdANmJpYuDg45nrTmsMC5AHGdFGkHW/LHnkmbFid1cvPYkdiBoef5CIEdoly512pxMupVxnJWF1NT","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"name":"hello"}}') as KeyringPair$Json;
const decoded = decodePair('1', base64Decode(json.encoded), json.encoding.type);
const keyring = new Keyring({ ss58Format: 44 });
it('creates a pair from a private/public combo', (): void => {
const pair = keyring.createFromPair(decoded, json.meta, 'sr25519');
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
expect(pair.isLocked).toEqual(false);
expect(pair.meta.name).toEqual('hello');
});
it('adds a pair from a private/public combo', (): void => {
keyring.addFromPair(decoded, json.meta, 'sr25519');
const pair = keyring.getPairs()[0];
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
expect(pair.isLocked).toEqual(false);
expect(pair.meta.name).toEqual('hello');
});
});
describe('util', (): void => {
let keyring: Keyring;
@@ -443,7 +516,7 @@ describe('keypair', (): void => {
});
it('can decode from a version 2 JSON file', (): void => {
const pair = keyring.addFromJson(JSON.parse(PAIR));
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
pair.decodePkcs8(PASS2);
@@ -473,7 +546,7 @@ describe('keypair', (): void => {
});
it('can decode from a version 3 JSON file', (): void => {
const pair = keyring.addFromJson(JSON.parse(PAIR));
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
pair.decodePkcs8(PASS3);
@@ -492,7 +565,7 @@ describe('keypair', (): void => {
});
it('can decode from a version 3 JSON file', (): void => {
const pair = keyring.addFromJson(JSON.parse(PAIR));
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
pair.decodePkcs8(PASS3);
+2 -6
View File
@@ -3,12 +3,8 @@
import './detectPackage';
import { Keyring } from './keyring';
import { Keyring } from './bundle';
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
export { packageInfo } from './packageInfo';
export * from './bundle';
export default Keyring;
export { Keyring };
+52 -25
View File
@@ -1,23 +1,27 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from './types';
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from './types';
import { assert, hexToU8a, isHex, isUndefined, stringToU8a } from '@polkadot/util';
import { base64Decode, decodeAddress, encodeAddress, ethereumEncode, hdEthereum, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed } from '@polkadot/util-crypto';
import { base64Decode, decodeAddress, ed25519PairFromSeed as ed25519FromSeed, encodeAddress, ethereumEncode, hdEthereum, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, secp256k1PairFromSeed as secp256k1FromSeed, sr25519PairFromSeed as sr25519FromSeed } from '@polkadot/util-crypto';
import { DEV_PHRASE } from './defaults';
import { createPair } from './pair';
import { Pairs } from './pairs';
const keypairFromSeed = {
const PairFromSeed = {
ecdsa: (seed: Uint8Array): Keypair => secp256k1FromSeed(seed),
ed25519: (seed: Uint8Array): Keypair => naclFromSeed(seed),
ed25519: (seed: Uint8Array): Keypair => ed25519FromSeed(seed),
ethereum: (seed: Uint8Array): Keypair => secp256k1FromSeed(seed),
sr25519: (seed: Uint8Array): Keypair => schnorrkelFromSeed(seed)
sr25519: (seed: Uint8Array): Keypair => sr25519FromSeed(seed)
};
function pairToPublic ({ publicKey }: KeyringPair): Uint8Array {
return publicKey;
}
/**
* # @polkadot/keyring
*
@@ -46,7 +50,7 @@ export class Keyring implements KeyringInstance {
constructor (options: KeyringOptions = {}) {
options.type = options.type || 'ed25519';
assert(options && ['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined'), `Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type}`);
assert(['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined'), () => `Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type || 'unknown'}`);
this.#pairs = new Pairs();
this.#ss58 = options.ss58Format;
@@ -85,12 +89,12 @@ export class Keyring implements KeyringInstance {
/**
* @name addFromAddress
* @summary Stores an account, given an account address, as a Key/Value (public key, pair) in Keyring Pair Dictionary
* @description Allows user to explicitely provide separate inputs including account address or public key, and optionally
* @description Allows user to explicitly provide separate inputs including account address or public key, and optionally
* the associated account metadata, and the default encoded value as arguments (that may be obtained from the json file
* of an account backup), and then generates a keyring pair from them that it passes to
* `addPair` to stores in a keyring pair dictionary the public key of the generated pair as a key and the pair as the associated value.
*/
public addFromAddress (address: string | Uint8Array, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, type: KeypairType = this.type, ignoreChecksum?: boolean, encType?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
public addFromAddress (address: string | Uint8Array, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, type: KeypairType = this.type, ignoreChecksum?: boolean, encType?: EncryptedJsonEncoding[]): KeyringPair {
const publicKey = this.decodeAddress(address, ignoreChecksum);
return this.addPair(createPair({ toSS58: this.encodeAddress, type }, { publicKey, secretKey: new Uint8Array() }, meta, encoded, encType));
@@ -119,6 +123,16 @@ export class Keyring implements KeyringInstance {
return this.addFromUri(mnemonic, meta, type);
}
/**
* @name addFromPair
* @summary Stores an account created from an explicit publicKey/secreteKey combination
*/
public addFromPair (pair: Keypair, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
return this.addPair(
this.createFromPair(pair, meta, type)
);
}
/**
* @name addFromSeed
* @summary Stores an account, given seed data, as a Key/Value (public key, pair) in Keyring Pair Dictionary
@@ -127,7 +141,9 @@ export class Keyring implements KeyringInstance {
* `addPair` to store in a keyring pair dictionary the public key of the generated pair as a key and the pair as the associated value.
*/
public addFromSeed (seed: Uint8Array, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
return this.addPair(createPair({ toSS58: this.encodeAddress, type }, keypairFromSeed[type](seed), meta, null));
return this.addPair(
createPair({ toSS58: this.encodeAddress, type }, PairFromSeed[type](seed), meta, null)
);
}
/**
@@ -146,13 +162,18 @@ export class Keyring implements KeyringInstance {
* @description Creates a pair from a JSON keyfile
*/
public createFromJson ({ address, encoded, encoding: { content, type, version }, meta }: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair {
assert(version !== '3' || content[0] === 'pkcs8', () => `Unable to decode non-pkcs8 type, [${content.join(',')}] found}`);
const cryptoType = version === '0' || !Array.isArray(content)
? this.type
: content[1];
const encType = !Array.isArray(type)
? [type]
: type;
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
assert(['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType), () => `Unknown crypto type ${cryptoType}`);
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
const publicKey = isHex(address)
? hexToU8a(address)
: this.decodeAddress(address, ignoreChecksum);
@@ -160,7 +181,15 @@ export class Keyring implements KeyringInstance {
? hexToU8a(encoded)
: base64Decode(encoded);
return createPair({ toSS58: this.encodeAddress, type: cryptoType }, { publicKey, secretKey: new Uint8Array() }, meta, decoded, encType);
return createPair({ toSS58: this.encodeAddress, type: cryptoType as KeypairType }, { publicKey, secretKey: new Uint8Array() }, meta, decoded, encType);
}
/**
* @name createFromPair
* @summary Creates a pair from an explicit publicKey/secreteKey combination
*/
public createFromPair (pair: Keypair, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
return createPair({ toSS58: this.encodeAddress, type }, pair, meta, null);
}
/**
@@ -175,27 +204,29 @@ export class Keyring implements KeyringInstance {
: _suri;
const { derivePath, password, path, phrase } = keyExtractSuri(suri);
let seed: Uint8Array;
const isPhraseHex = isHex(phrase, 256);
if (isHex(phrase, 256)) {
if (isPhraseHex) {
seed = hexToU8a(phrase);
} else {
const str = phrase as string;
const parts = str.split(' ');
const parts = phrase.split(' ');
if ([12, 15, 18, 21, 24].includes(parts.length)) {
seed = type === 'ethereum'
? mnemonicToLegacySeed(phrase, '', false, 64)
: mnemonicToMiniSecret(phrase, password);
} else {
assert(str.length <= 32, 'specified phrase is not a valid mnemonic and is invalid as a raw seed at > 32 bytes');
assert(phrase.length <= 32, 'specified phrase is not a valid mnemonic and is invalid as a raw seed at > 32 bytes');
seed = stringToU8a(str.padEnd(32));
seed = stringToU8a(phrase.padEnd(32));
}
}
const derived = type === 'ethereum'
? hdEthereum(seed, derivePath.substring(1))
: keyFromPath(keypairFromSeed[type](seed), path, type);
? isPhraseHex
? PairFromSeed[type](seed) // for eth, if the private key is provided as suri, it must be derived only once
: hdEthereum(seed, derivePath.substring(1))
: keyFromPath(PairFromSeed[type](seed), path, type);
return createPair({ toSS58: this.encodeAddress, type }, derived, meta, null);
}
@@ -208,7 +239,7 @@ export class Keyring implements KeyringInstance {
return this.type === 'ethereum'
? ethereumEncode(address)
: encodeAddress(address, isUndefined(ss58Format) ? this.#ss58 : ss58Format);
}
};
/**
* @name getPair
@@ -235,11 +266,7 @@ export class Keyring implements KeyringInstance {
* @description Returns an array list of all the public keys associated with each of the keyring pair values that are stored in the keyring pair dictionary.
*/
public getPublicKeys (): Uint8Array[] {
return this.#pairs
.all()
.map(({ publicKey }): Uint8Array =>
publicKey
);
return this.#pairs.all().map(pairToPublic);
}
/**
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/dev authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/keyring', version: '5.9.2' };
export const packageInfo = { name: '@polkadot/keyring', version: '8.2.2' };
+19 -45
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringPair$JsonEncodingTypes } from '../types';
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/types';
import type { PairInfo } from './types';
import { assert, stringToU8a, u8aFixLength } from '@polkadot/util';
import { naclDecrypt, scryptEncode, scryptFromU8a } from '@polkadot/util-crypto';
import { assert, isUndefined, u8aEq } from '@polkadot/util';
import { jsonDecryptData } from '@polkadot/util-crypto';
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
const SEED_OFFSET = PKCS8_HEADER.length;
@@ -15,59 +15,33 @@ type DecodeResult = PairInfo & {
secretKey: Uint8Array;
};
function decodePkcs8 (encoded: Uint8Array): DecodeResult {
const header = encoded.subarray(0, PKCS8_HEADER.length);
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, _encType?: EncryptedJsonEncoding | EncryptedJsonEncoding[]): DecodeResult {
const encType = Array.isArray(_encType) || isUndefined(_encType)
? _encType
: [_encType];
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
const header = decrypted.subarray(0, PKCS8_HEADER.length);
assert(header.toString() === PKCS8_HEADER.toString(), 'Invalid Pkcs8 header found in body');
assert(u8aEq(header, PKCS8_HEADER), 'Invalid Pkcs8 header found in body');
let secretKey = encoded.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
let divOffset = SEED_OFFSET + SEC_LENGTH;
let divider = encoded.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
let divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
// old-style, we have the seed here
if (divider.toString() !== PKCS8_DIVIDER.toString()) {
if (!u8aEq(divider, PKCS8_DIVIDER)) {
divOffset = SEED_OFFSET + SEED_LENGTH;
secretKey = encoded.subarray(SEED_OFFSET, divOffset);
divider = encoded.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
assert(u8aEq(divider, PKCS8_DIVIDER), 'Invalid Pkcs8 divider found in body');
}
assert(divider.toString() === PKCS8_DIVIDER.toString(), 'Invalid Pkcs8 divider found in body');
const pubOffset = divOffset + PKCS8_DIVIDER.length;
const publicKey = encoded.subarray(pubOffset, pubOffset + PUB_LENGTH);
const publicKey = decrypted.subarray(pubOffset, pubOffset + PUB_LENGTH);
return {
publicKey,
secretKey
};
}
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, encType: KeyringPair$JsonEncodingTypes[] = ENCODING): DecodeResult {
assert(encrypted, 'No encrypted data available to decode');
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encypted data');
let encoded: Uint8Array | null = encrypted;
if (passphrase) {
let password: Uint8Array;
if (encType.includes('scrypt')) {
const { params, salt } = scryptFromU8a(encrypted);
password = scryptEncode(passphrase, salt, params).password;
encrypted = encrypted.subarray(SCRYPT_LENGTH);
} else {
password = stringToU8a(passphrase);
}
encoded = naclDecrypt(
encrypted.subarray(NONCE_LENGTH),
encrypted.subarray(0, NONCE_LENGTH),
u8aFixLength(password, 256, true)
);
}
assert(encoded, 'Unable to decode using the supplied passphrase');
return decodePkcs8(encoded);
}
-5
View File
@@ -1,14 +1,9 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringPair$JsonEncodingTypes } from '../types';
export const ENCODING: KeyringPair$JsonEncodingTypes[] = ['scrypt', 'xsalsa20-poly1305'];
export const NONCE_LENGTH = 24;
export const PKCS8_DIVIDER = new Uint8Array([161, 35, 3, 33, 0]);
export const PKCS8_HEADER = new Uint8Array([48, 83, 2, 1, 1, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32]);
export const PUB_LENGTH = 32;
export const SALT_LENGTH = 32;
export const SEC_LENGTH = 64;
export const SEED_LENGTH = 32;
export const SCRYPT_LENGTH = SALT_LENGTH + (3 * 4);
+3 -1
View File
@@ -1,8 +1,10 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { NONCE_LENGTH, SCRYPT_LENGTH } from '@polkadot/util-crypto/json/constants';
import { createTestPairs } from '../testingPairs';
import { NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH } from './defaults';
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH } from './defaults';
const PKCS8_LENGTH = PKCS8_DIVIDER.length + PKCS8_HEADER.length + PUB_LENGTH + SEC_LENGTH;
const ENCODED_LENGTH = 16 + PKCS8_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
+117 -6
View File
@@ -10,12 +10,18 @@ import { createPair } from '.';
const keyring = createTestPairs({ type: 'ed25519' }, false);
const TEST_ADDRESS = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
describe('pair', (): void => {
beforeEach(async (): Promise<void> => {
await cryptoWaitReady();
});
const SIGNATURE = new Uint8Array([80, 191, 198, 147, 225, 207, 75, 88, 126, 39, 129, 109, 191, 38, 72, 181, 75, 254, 81, 143, 244, 79, 237, 38, 236, 141, 28, 252, 134, 26, 169, 234, 79, 33, 153, 158, 151, 34, 175, 188, 235, 20, 35, 135, 83, 120, 139, 211, 233, 130, 1, 208, 201, 215, 73, 80, 56, 98, 185, 196, 11, 8, 193, 14]);
const ENCRYPTED = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 59, 53, 85, 227, 40, 107, 48, 234, 198, 238, 157, 238, 224, 235, 179, 75, 153, 241, 142, 254]);
// the last byte is changed from 254 -> 253
const ENCRYPTED_CHANGED = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 59, 53, 85, 227, 40, 107, 48, 234, 198, 238, 157, 238, 224, 235, 179, 75, 153, 241, 142, 253]);
it('has a publicKey', (): void => {
expect(
@@ -51,7 +57,7 @@ describe('pair', (): void => {
it('fails a correctly signed message (signer changed)', (): void => {
expect(
keyring.alice.verify(
new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]),
new Uint8Array([0x61, 0x62, 0x63, 0x64]),
SIGNATURE,
keyring.bob.publicKey
)
@@ -92,6 +98,93 @@ describe('pair', (): void => {
).toBe(false);
});
it('allows encrypting', (): void => {
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
expect(
keyring.alice.encryptMessage(
message,
keyring.bob.publicKey,
new Uint8Array(24)
)
).toEqual(ENCRYPTED);
});
it('validates a correctly encrypted message', (): void => {
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
expect(
keyring.bob.decryptMessage(
ENCRYPTED,
keyring.alice.publicKey
)
).toEqual(message);
});
it('fails a correctly encrypted message (message changed)', (): void => {
expect(
keyring.bob.decryptMessage(
ENCRYPTED_CHANGED,
keyring.alice.publicKey
)
).toEqual(null);
});
it('fails a correctly encrypted message (sender changed)', (): void => {
expect(
keyring.bob.decryptMessage(
ENCRYPTED,
keyring.charlie.publicKey
)
).toEqual(null);
});
it('fails a correctly encrypted message (receiver changed)', (): void => {
expect(
keyring.charlie.decryptMessage(
ENCRYPTED,
keyring.alice.publicKey
)
).toEqual(null);
});
it('validates encryption between ed25519 & sr25519 key pairs', (): void => {
const PASS = 'testing';
const encodedA = keyring.alice.encodePkcs8(PASS);
const encodedB = keyring.bob.encodePkcs8(PASS);
const pairA = createPair({ toSS58, type: 'sr25519' }, { publicKey: keyring.alice.publicKey });
const pairB = createPair({ toSS58, type: 'sr25519' }, { publicKey: keyring.bob.publicKey });
pairA.decodePkcs8(PASS, encodedA);
pairB.decodePkcs8(PASS, encodedB);
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
// alice-sr25519 -> bob-ed25519
const encrypted1 = pairA.encryptMessage(message, keyring.bob.publicKey);
// alice-sr25519 -> bob-sr25519
const encrypted2 = pairA.encryptMessage(message, pairB.publicKey);
// alice-ed25519 -> bob-sr25519
const encrypted3 = keyring.alice.encryptMessage(message, pairB.publicKey);
// decrypt: Bob-ed25519 - use alice-ed25519 pubkey
expect(
keyring.bob.decryptMessage(encrypted3, keyring.alice.publicKey)
).toEqual(message);
// decrypt: Bob-ed25519 - use alice-sr25519 pubkey
expect(
keyring.bob.decryptMessage(encrypted1, pairA.publicKey)
).toEqual(message);
// decrypt: Bob-sr25519 - use alice-sr25519 pubkey
expect(
pairB.decryptMessage(encrypted2, pairA.publicKey)
).toEqual(message);
});
it('allows setting/getting of meta', (): void => {
keyring.bob.setMeta({ foo: 'bar', something: 'else' });
@@ -159,8 +252,15 @@ describe('pair', (): void => {
it('has a valid address from a known public', (): void => {
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077') });
expect(pair.address).toEqual('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.addressRaw).toEqual(hexToU8a('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887'));
expect(pair.address).toEqual(TEST_ADDRESS);
expect(pair.addressRaw).toEqual(hexToU8a(TEST_ADDRESS));
});
it('has a valid address from a known ethereum address (20 length)', (): void => {
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: new Uint8Array([75, 32, 205, 127, 248, 119, 52, 31, 46, 171, 170, 23, 158, 23, 46, 108, 95, 180, 186, 168]), secretKey: new Uint8Array([]) });
expect(pair.address.toLowerCase()).toEqual('0x4b20cd7ff877341f2eabaa179e172e6c5fb4baa8');
expect(pair.addressRaw).toEqual(hexToU8a('0x4b20cd7ff877341f2eabaa179e172e6c5fb4baa8'));
});
it('converts to json', (): void => {
@@ -175,10 +275,21 @@ describe('pair', (): void => {
expect(json.address).toEqual(u8aToHex(PUBLICDERIVED));
});
it('has Gerald as test address for Ethereum type parachains', (): void => {
const keyringEthereum = createTestPairs({ type: 'ethereum' }, false);
it('denies access to encryptMessage/decryptMessage API', (): void => {
const PASS = 'testing';
const encoded = keyring.alice.encodePkcs8(PASS);
expect(keyringEthereum.Gerald.address).toEqual('0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b');
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: keyring.alice.publicKey });
pair.decodePkcs8(PASS, encoded);
expect(
() => pair.encryptMessage(
new Uint8Array(4), // null message
keyring.bob.publicKey,
new Uint8Array(24)
)
).toThrow('Secp256k1 not supported yet');
});
});
});
+46 -24
View File
@@ -1,12 +1,13 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
import type { HexString } from '@polkadot/util/types';
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types';
import type { PairInfo } from './types';
import { assert, u8aConcat, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclKeypairFromSeed as naclFromSeed, naclSign, schnorrkelKeypairFromSeed as schnorrkelFromSeed, schnorrkelSign, schnorrkelVrfSign, schnorrkelVrfVerify, secp256k1Compress, secp256k1Expand, secp256k1KeypairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify } from '@polkadot/util-crypto';
import { assert, objectSpread, u8aConcat, u8aEmpty, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a, convertPublicKeyToCurve25519, convertSecretKeyToCurve25519, ed25519PairFromSeed as ed25519FromSeed, ed25519Sign, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclOpen, naclSeal, secp256k1Compress, secp256k1Expand, secp256k1PairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify, sr25519PairFromSeed as sr25519FromSeed, sr25519Sign, sr25519VrfSign, sr25519VrfVerify } from '@polkadot/util-crypto';
import { decodePair } from './decode';
import { encodePair } from './encode';
@@ -21,9 +22,9 @@ const SIG_TYPE_NONE = new Uint8Array();
const TYPE_FROM_SEED = {
ecdsa: secp256k1FromSeed,
ed25519: naclFromSeed,
ed25519: ed25519FromSeed,
ethereum: secp256k1FromSeed,
sr25519: schnorrkelFromSeed
sr25519: sr25519FromSeed
};
const TYPE_PREFIX = {
@@ -35,21 +36,20 @@ const TYPE_PREFIX = {
const TYPE_SIGNATURE = {
ecdsa: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, 'blake2'),
ed25519: naclSign,
ed25519: ed25519Sign,
ethereum: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, 'keccak'),
sr25519: schnorrkelSign
sr25519: sr25519Sign
};
const TYPE_ADDRESS = {
ecdsa: (p: Uint8Array) => p.length > 32 ? blake2AsU8a(p) : p,
ed25519: (p: Uint8Array) => p,
ethereum: (p: Uint8Array) => keccakAsU8a(secp256k1Expand(p)),
ethereum: (p: Uint8Array) => p.length === 20 ? p : keccakAsU8a(secp256k1Expand(p)),
sr25519: (p: Uint8Array) => p
};
// Not 100% correct, since it can be a Uint8Array, but an invalid one - just say "undefined" is anything non-valid
function isLocked (secretKey?: Uint8Array): secretKey is undefined {
return !secretKey || secretKey.length === 0 || secretKey.every((b) => b === 0);
return !secretKey || u8aEmpty(secretKey);
}
function vrfHash (proof: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array {
@@ -87,7 +87,7 @@ function vrfHash (proof: Uint8Array, context?: string | Uint8Array, extra?: stri
* an `encoded` property that is assigned with the encoded public key in hex format, and an `encoding`
* property that indicates whether the public key value of the `encoded` property is encoded or not.
*/
export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: EncryptedJsonEncoding[]): KeyringPair {
const decodePkcs8 = (passphrase?: string, userEncoded?: Uint8Array | null): void => {
const decoded = decodePair(passphrase, userEncoded || encoded, encTypes);
@@ -144,6 +144,19 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
},
// eslint-disable-next-line sort-keys
decodePkcs8,
decryptMessage: (encryptedMessageWithNonce: HexString | string | Uint8Array, senderPublicKey: HexString | string | Uint8Array): Uint8Array | null => {
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
const messageU8a = u8aToU8a(encryptedMessageWithNonce);
return naclOpen(
messageU8a.slice(24, messageU8a.length),
messageU8a.slice(0, 24),
convertPublicKeyToCurve25519(u8aToU8a(senderPublicKey)),
convertSecretKeyToCurve25519(secretKey)
);
},
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair => {
assert(type !== 'ethereum', 'Unable to derive on this keypair');
assert(!isLocked(secretKey), 'Cannot derive on a locked keypair');
@@ -156,13 +169,21 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
encodePkcs8: (passphrase?: string): Uint8Array => {
return recode(passphrase);
},
encryptMessage: (message: HexString | string | Uint8Array, recipientPublicKey: HexString | string | Uint8Array, nonceIn?: Uint8Array): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
const { nonce, sealed } = naclSeal(u8aToU8a(message), convertSecretKeyToCurve25519(secretKey), convertPublicKeyToCurve25519(u8aToU8a(recipientPublicKey)), nonceIn);
return u8aConcat(nonce, sealed);
},
lock: (): void => {
secretKey = new Uint8Array();
},
setMeta: (additional: KeyringPair$Meta): void => {
meta = { ...meta, ...additional };
meta = objectSpread({}, meta, additional);
},
sign: (message: string | Uint8Array, options: SignOptions = {}): Uint8Array => {
sign: (message: HexString | string | Uint8Array, options: SignOptions = {}): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
return u8aConcat(
@@ -175,8 +196,11 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
toJson: (passphrase?: string): KeyringPair$Json => {
// NOTE: For ecdsa and ethereum, the publicKey cannot be extracted from the address. For these
// pass the hex-encoded publicKey through to the address portion of the JSON (before decoding)
// unless the publicKey is already an address
const address = ['ecdsa', 'ethereum'].includes(type)
? u8aToHex(secp256k1Compress(publicKey))
? publicKey.length === 20
? u8aToHex(publicKey)
: u8aToHex(secp256k1Compress(publicKey))
: encodeAddress();
return pairToJson(type, { address, meta }, recode(passphrase), !!passphrase);
@@ -184,28 +208,26 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
unlock: (passphrase?: string): void => {
return decodePkcs8(passphrase);
},
verify: (message: string | Uint8Array, signature: Uint8Array, _signerPublic: string | Uint8Array): boolean => {
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(_signerPublic))).isValid;
verify: (message: HexString | string | Uint8Array, signature: HexString | string | Uint8Array, signerPublic: HexString | string | Uint8Array): boolean => {
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(signerPublic))).isValid;
},
vrfSign: (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
vrfSign: (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
if (type === 'sr25519') {
return schnorrkelVrfSign(message, { secretKey }, context, extra);
return sr25519VrfSign(message, { secretKey }, context, extra);
}
const proof = TYPE_SIGNATURE[type](u8aToU8a(message), { publicKey, secretKey });
return u8aConcat(vrfHash(proof, context, extra), proof);
},
vrfVerify: (message: string | Uint8Array, vrfResult: Uint8Array, _signerPublic: Uint8Array | string, context?: string | Uint8Array, extra?: string | Uint8Array): boolean => {
const signerPublic = TYPE_ADDRESS[type](u8aToU8a(_signerPublic));
vrfVerify: (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean => {
if (type === 'sr25519') {
return schnorrkelVrfVerify(message, vrfResult, publicKey, context, extra);
return sr25519VrfVerify(message, vrfResult, publicKey, context, extra);
}
const result = signatureVerify(message, u8aConcat(TYPE_PREFIX[type], vrfResult.subarray(32)), signerPublic);
const result = signatureVerify(message, u8aConcat(TYPE_PREFIX[type], vrfResult.subarray(32)), TYPE_ADDRESS[type](u8aToU8a(signerPublic)));
return result.isValid && u8aEq(vrfResult.subarray(0, 32), vrfHash(vrfResult.subarray(32), context, extra));
}
+50 -42
View File
@@ -7,10 +7,12 @@ import { encodeAddress } from '@polkadot/util-crypto';
const publicKey = new Uint8Array(32);
const address = encodeAddress(publicKey);
const meta = {
isTesting: true,
name: 'nobody'
};
const json: KeyringPair$Json = {
address,
encoded: '',
@@ -22,48 +24,54 @@ const json: KeyringPair$Json = {
meta
};
export function nobody (): KeyringPair {
const pair: KeyringPair = {
address,
addressRaw: publicKey,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
decodePkcs8: (passphrase?: string, encoded?: Uint8Array): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair =>
pair,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
encodePkcs8: (passphrase?: string): Uint8Array =>
new Uint8Array(0),
isLocked: true,
lock: (): void => {
// no locking, it is always locked
},
meta,
publicKey,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
setMeta: (meta: KeyringPair$Meta): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
sign: (message: Uint8Array): Uint8Array =>
new Uint8Array(64),
// eslint-disable-next-line @typescript-eslint/no-unused-vars
toJson: (passphrase?: string): KeyringPair$Json =>
json,
type: 'ed25519',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
unlock: (passphrase?: string): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
verify: (message: Uint8Array, signature: Uint8Array): boolean =>
false,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
vrfSign: (message: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array =>
new Uint8Array(96),
// eslint-disable-next-line @typescript-eslint/no-unused-vars
vrfVerify: (message: Uint8Array, vrfResult: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean =>
false
};
const pair: KeyringPair = {
address,
addressRaw: publicKey,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
decodePkcs8: (passphrase?: string, encoded?: Uint8Array): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
decryptMessage: (encryptedMessageWithNonce: string | Uint8Array, senderPublicKey: string | Uint8Array): Uint8Array | null =>
null,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair =>
pair,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
encodePkcs8: (passphrase?: string): Uint8Array =>
new Uint8Array(0),
// eslint-disable-next-line @typescript-eslint/no-unused-vars
encryptMessage: (message: string | Uint8Array, recipientPublicKey: string | Uint8Array, _nonce?: Uint8Array): Uint8Array =>
new Uint8Array(),
isLocked: true,
lock: (): void => {
// no locking, it is always locked
},
meta,
publicKey,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
setMeta: (meta: KeyringPair$Meta): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
sign: (message: Uint8Array): Uint8Array =>
new Uint8Array(64),
// eslint-disable-next-line @typescript-eslint/no-unused-vars
toJson: (passphrase?: string): KeyringPair$Json =>
json,
type: 'ed25519',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
unlock: (passphrase?: string): void =>
undefined,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
verify: (message: Uint8Array, signature: Uint8Array): boolean =>
false,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
vrfSign: (message: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array =>
new Uint8Array(96),
// eslint-disable-next-line @typescript-eslint/no-unused-vars
vrfVerify: (message: Uint8Array, vrfResult: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean =>
false
};
export function nobody (): KeyringPair {
return pair;
}
+5 -20
View File
@@ -2,34 +2,19 @@
// SPDX-License-Identifier: Apache-2.0
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
import type { KeyringPair$Json, KeyringPair$Meta } from '../types';
import { base64Encode } from '@polkadot/util-crypto';
import { ENCODING } from './defaults';
import { objectSpread } from '@polkadot/util';
import { jsonEncryptFormat } from '@polkadot/util-crypto';
interface PairStateJson {
address: string;
meta: KeyringPair$Meta;
}
// version 2 - nonce, encoded (previous)
// version 3 - salt, nonce, encoded
const VERSION = '3';
const ENC_NONE: KeyringPair$JsonEncodingTypes[] = ['none'];
export function pairToJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
return {
return objectSpread(jsonEncryptFormat(encoded, ['pkcs8', type], isEncrypted), {
address,
encoded: base64Encode(encoded),
encoding: {
content: ['pkcs8', type],
type: isEncrypted
? ENCODING
: ENC_NONE,
version: VERSION
},
meta
};
});
}
+4 -4
View File
@@ -4,7 +4,7 @@
import type { KeyringPair } from '../types';
import { u8aToHex } from '@polkadot/util';
import { cryptoWaitReady, encodeAddress as toSS58, naclKeypairFromSeed, randomAsU8a, schnorrkelKeypairFromSeed, secp256k1KeypairFromSeed } from '@polkadot/util-crypto';
import { cryptoWaitReady, ed25519PairFromSeed, encodeAddress as toSS58, randomAsU8a, secp256k1PairFromSeed, sr25519PairFromSeed } from '@polkadot/util-crypto';
import { createPair } from '.';
@@ -19,9 +19,9 @@ describe('vrf', (): void => {
beforeAll(async (): Promise<void> => {
await cryptoWaitReady();
ecdsa = createPair({ toSS58, type: 'ecdsa' }, secp256k1KeypairFromSeed(randomAsU8a()));
ed25519 = createPair({ toSS58, type: 'ed25519' }, naclKeypairFromSeed(randomAsU8a()));
sr25519 = createPair({ toSS58, type: 'sr25519' }, schnorrkelKeypairFromSeed(randomAsU8a()));
ecdsa = createPair({ toSS58, type: 'ecdsa' }, secp256k1PairFromSeed(randomAsU8a()));
ed25519 = createPair({ toSS58, type: 'ed25519' }, ed25519PairFromSeed(randomAsU8a()));
sr25519 = createPair({ toSS58, type: 'sr25519' }, sr25519PairFromSeed(randomAsU8a()));
});
it('has deterministic signature values for ecdsa', (): void => {
+7 -8
View File
@@ -1,6 +1,7 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { KeyringPair, KeyringPairs } from './types';
import { assert, isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
@@ -21,21 +22,19 @@ export class Pairs implements KeyringPairs {
return Object.values(this.#map);
}
public get (address: string | Uint8Array): KeyringPair {
public get (address: HexString | string | Uint8Array): KeyringPair {
const pair = this.#map[decodeAddress(address).toString()];
assert(pair, (): string => {
const formatted: string = isU8a(address) || isHex(address)
assert(pair, () => `Unable to retrieve keypair '${
isU8a(address) || isHex(address)
? u8aToHex(u8aToU8a(address))
: address;
return `Unable to retrieve keypair '${formatted}'`;
});
: address
}'`);
return pair;
}
public remove (address: string | Uint8Array): void {
public remove (address: HexString | string | Uint8Array): void {
delete this.#map[decodeAddress(address).toString()];
}
}
+21 -8
View File
@@ -3,12 +3,15 @@
// From https://github.com/paritytech/substrate/wiki/Secret-URI-Test-Vectors
import type { KeypairType } from '@polkadot/util-crypto/types';
import { u8aToHex } from '@polkadot/util';
import { cryptoWaitReady } from '@polkadot/util-crypto';
import Keyring from '.';
const PHRASE = 'bottom drive obey lake curtain smoke basket hold race lonely fit walk';
const ETHEREUM_PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy';
const TESTS = {
ecdsa: [
@@ -22,7 +25,17 @@ const TESTS = {
{
pk: '0x0381351b1b46d2602b0992bb5d5531f9c1696b0812feb2534b6884adc47e2e1d8b',
ss: '0x31ea8795EE32D782C8ff41a5C68Dcbf0F5B27f6d',
uri: "seed sock milk update focus rotate barely fade car face mechanic mercy/m/44'/60'/0'/0/0"
uri: `${ETHEREUM_PHRASE}/m/44'/60'/0'/0/0`
},
{
pk: '0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f',
ss: '0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac',
uri: `${PHRASE}/m/44'/60'/0'/0/0`
},
{
pk: '0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518',
ss: '0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0',
uri: `${PHRASE}/m/44'/60'/0'/0/1`
}
],
sr25519: [
@@ -75,17 +88,17 @@ const TESTS = {
};
describe('keyring.addFromUri', (): void => {
const keyring = new Keyring({ type: 'sr25519' });
beforeEach(async (): Promise<void> => {
await cryptoWaitReady();
});
Object.entries(TESTS).forEach(([type, tests]): void => {
const keyring = new Keyring({ type: type as KeypairType });
beforeEach(async (): Promise<void> => {
await cryptoWaitReady();
});
describe(type, (): void => {
tests.forEach(({ pk, ss, uri }): void => {
it(`creates ${uri}`, (): void => {
const pair = keyring.addFromUri(uri, {}, type as 'sr25519');
const pair = keyring.addFromUri(uri, {}, type as KeypairType);
expect(u8aToHex(pair.publicKey)).toEqual(pk);
expect(pair.address).toEqual(ss);
+60 -28
View File
@@ -3,16 +3,16 @@
import type { KeyringInstance, KeyringOptions } from './types';
import { hexToU8a } from '@polkadot/util';
import { assert, hexToU8a } from '@polkadot/util';
import { KeypairType } from '@polkadot/util-crypto/types';
import { Keyring } from './keyring';
import { createPair } from './pair';
import Keyring from '.';
interface PairDef {
name?: string;
publicKey: Uint8Array;
seed: string;
seed?: string;
secretKey?: Uint8Array;
type: KeypairType
}
@@ -24,49 +24,49 @@ interface PairDef {
export const PAIRSSR25519: PairDef[] = [
{
publicKey: hexToU8a('0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'),
secretKey: hexToU8a('0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011'),
secretKey: hexToU8a('0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011'), // nosemgrep
seed: 'Alice',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f'),
secretKey: hexToU8a('0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd'),
secretKey: hexToU8a('0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd'), // nosemgrep
seed: 'Alice//stash',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48'),
secretKey: hexToU8a('0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325'),
secretKey: hexToU8a('0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325'), // nosemgrep
seed: 'Bob',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e'),
secretKey: hexToU8a('0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde'),
secretKey: hexToU8a('0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde'), // nosemgrep
seed: 'Bob//stash',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22'),
secretKey: hexToU8a('0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c'),
secretKey: hexToU8a('0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c'), // nosemgrep
seed: 'Charlie',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20'),
secretKey: hexToU8a('0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568'),
secretKey: hexToU8a('0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568'), // nosemgrep
seed: 'Dave',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e'),
secretKey: hexToU8a('0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587'),
secretKey: hexToU8a('0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587'), // nosemgrep
seed: 'Eve',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c'),
secretKey: hexToU8a('0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426'),
secretKey: hexToU8a('0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426'), // nosemgrep
seed: 'Ferdie',
type: 'sr25519'
}
@@ -74,18 +74,52 @@ export const PAIRSSR25519: PairDef[] = [
export const PAIRSETHEREUM: PairDef[] = [
{
name: 'Gerald',
publicKey: new Uint8Array([3, 98, 79, 114, 14, 174, 103, 106,
4, 17, 22, 49, 201, 202, 51, 140,
17, 208, 245, 168, 14, 228, 34, 16,
198, 190, 114, 152, 60, 235, 98, 15,
191]),
secretKey: hexToU8a('0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342'),
seed: 'Gerald',
name: 'Alith',
publicKey: hexToU8a('0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'),
secretKey: hexToU8a('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133'), // nosemgrep
type: 'ethereum'
},
{
name: 'Baltathar',
publicKey: hexToU8a('0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518'),
secretKey: hexToU8a('0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b'), // nosemgrep
type: 'ethereum'
},
{
name: 'Charleth',
publicKey: hexToU8a('0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e'),
secretKey: hexToU8a('0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b'), // nosemgrep
type: 'ethereum'
},
{
name: 'Dorothy',
publicKey: hexToU8a('0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c'),
secretKey: hexToU8a('0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68'), // nosemgrep
type: 'ethereum'
},
{
name: 'Ethan',
publicKey: hexToU8a('0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa'),
secretKey: hexToU8a('0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4'), // nosemgrep
type: 'ethereum'
},
{
name: 'Faith',
publicKey: hexToU8a('0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74'),
secretKey: hexToU8a('0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df'), // nosemgrep
type: 'ethereum'
}
];
function createMeta (name?: string, seed?: string) {
assert(name || seed, 'Testing pair should have either a name or a seed');
return {
isTesting: true,
name: name || (seed && seed.replace('//', '_').toLowerCase())
};
}
/**
* @name testKeyring
* @summary Create an instance of Keyring pre-populated with locked test accounts
@@ -94,15 +128,13 @@ export const PAIRSETHEREUM: PairDef[] = [
*/
export function createTestKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
const keyring = new Keyring(options);
const pairs: PairDef[] = (options.type && options.type === 'ethereum') ? PAIRSETHEREUM : PAIRSSR25519;
const pairs = (options.type && options.type === 'ethereum')
? PAIRSETHEREUM
: PAIRSSR25519;
pairs.forEach(({ name, publicKey, secretKey, seed, type }): void => {
const meta = {
isTesting: true,
name: name || seed.replace('//', '_').toLowerCase()
};
const pair = !isDerived && !name
for (const { name, publicKey, secretKey, seed, type } of pairs) {
const meta = createMeta(name, seed);
const pair = !isDerived && !name && seed
? keyring.addFromUri(seed, meta, options.type)
: keyring.addPair(
createPair({ toSS58: keyring.encodeAddress, type }, { publicKey, secretKey }, meta)
@@ -111,7 +143,7 @@ export function createTestKeyring (options: KeyringOptions = {}, isDerived = tru
pair.lock = (): void => {
// we don't have lock/unlock functionality here
};
});
}
return keyring;
}
+41
View File
@@ -1,9 +1,13 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { u8aToHex } from '@polkadot/util';
import { cryptoWaitReady } from '@polkadot/util-crypto';
import { createTestPairs } from './testingPairs';
import Keyring from '.';
const TEST_ADD = '0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac';
describe('testingPairs', (): void => {
beforeEach(async (): Promise<void> => {
@@ -27,4 +31,41 @@ describe('testingPairs', (): void => {
createTestPairs({ type: 'ed25519' }).alice.address
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
});
it('has the correct address for Alith (Eth)', (): void => {
expect(
createTestPairs({ type: 'ethereum' }).Alith.address
).toEqual(TEST_ADD);
});
it('has the correct address for Alith (Eth), same as obtained by createFromUri', (): void => {
const keyring = new Keyring({ type: 'ethereum' });
const pair = keyring.createFromUri('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133');
expect(
pair && pair.address
).toEqual(TEST_ADD);
});
it('checks eth test addresses', (): void => {
const ring = createTestPairs({ 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"
const privKeys: string[] = ['0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133',
'0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b',
'0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b',
'0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68',
'0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4',
'0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df',
'0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18',
'0x0d6dcaaef49272a5411896be8ad16c01c35d6f8c18873387b71fbc734759b0ab',
'0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8',
'0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b'];
delete ring.nobody;
Object.keys(ring).forEach((testKeyring, i) => {
if (i < 6) { expect(u8aToHex(ring[testKeyring].publicKey)).toEqual(u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)); }
});
});
});
+4 -6
View File
@@ -15,11 +15,9 @@ export function createTestPairs (options?: KeyringOptions, isDerived = true): Te
const pairs = keyring.getPairs();
const map: TestKeyringMap = { nobody: nobody() };
return pairs.reduce((result, pair): TestKeyringMap => {
const { name } = pair.meta;
for (const p of pairs) {
map[p.meta.name as string] = p;
}
result[name as string] = pair;
return result;
}, map);
return map;
}
+12 -20
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { HexString } from '@polkadot/util/types';
import type { EncryptedJson, Keypair, KeypairType, Prefix } from '@polkadot/util-crypto/types';
export interface KeyringOptions {
ss58Format?: Prefix;
@@ -11,20 +11,8 @@ export interface KeyringOptions {
export type KeyringPair$Meta = Record<string, unknown>;
export type KeyringPair$JsonVersion = '0' | '1' | '2' | '3';
export type KeyringPair$JsonEncodingTypes = 'none' | 'scrypt' | 'xsalsa20-poly1305';
export interface KeyringPair$JsonEncoding {
content: ['pkcs8', KeypairType];
type: KeyringPair$JsonEncodingTypes | KeyringPair$JsonEncodingTypes[];
version: KeyringPair$JsonVersion;
}
export interface KeyringPair$Json {
address: string;
encoded: string;
encoding: KeyringPair$JsonEncoding;
export interface KeyringPair$Json extends EncryptedJson {
address: string | HexString;
meta: KeyringPair$Meta;
}
@@ -45,12 +33,14 @@ export interface KeyringPair {
encodePkcs8 (passphrase?: string): Uint8Array;
lock (): void;
setMeta (meta: KeyringPair$Meta): void;
sign (message: string | Uint8Array, options?: SignOptions): Uint8Array;
sign (message: HexString | string | Uint8Array, options?: SignOptions): Uint8Array;
toJson (passphrase?: string): KeyringPair$Json;
unlock (passphrase?: string): void;
verify (message: string | Uint8Array, signature: Uint8Array, signerPublic: string | Uint8Array): boolean;
vrfSign (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array;
vrfVerify (message: string | Uint8Array, vrfResult: Uint8Array, signerPublic: Uint8Array | string, context?: string | Uint8Array, extra?: string | Uint8Array): boolean;
encryptMessage (message: HexString | string | Uint8Array, recipientPublicKey: HexString | string | Uint8Array, nonce?: Uint8Array): Uint8Array;
decryptMessage (encryptedMessageWithNonce: HexString | string | Uint8Array, senderPublicKey: HexString | string | Uint8Array): Uint8Array | null;
verify (message: HexString | string | Uint8Array, signature: Uint8Array, signerPublic: HexString | string | Uint8Array): boolean;
vrfSign (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): Uint8Array;
vrfVerify (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean;
}
export interface KeyringPairs {
@@ -73,9 +63,11 @@ export interface KeyringInstance {
addFromAddress (address: string | Uint8Array, meta?: KeyringPair$Meta, encoded?: Uint8Array | null, type?: KeypairType, ignoreChecksum?: boolean): KeyringPair;
addFromJson (pair: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair;
addFromMnemonic (mnemonic: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
addFromPair (pair: Keypair, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair
addFromSeed (seed: Uint8Array, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
addFromUri (suri: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
createFromJson (json: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair;
createFromPair (pair: Keypair, meta: KeyringPair$Meta, type: KeypairType): KeyringPair
createFromUri (suri: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
getPair (address: string | Uint8Array): KeyringPair;
getPairs (): KeyringPair[];
+12
View File
@@ -0,0 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": [
{ "path": "../util" },
{ "path": "../util-crypto" }
]
}
+21 -12
View File
@@ -1,21 +1,30 @@
{
"name": "@polkadot/networks",
"version": "5.9.2",
"description": "A list of all available Substrate networks and their applicable prefixes",
"main": "index.js",
"sideEffects": false,
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": "https://github.com/polkadot-js/common/issues",
"contributors": [],
"description": "A list of all available Substrate networks and their applicable prefixes",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/networks",
"repository": {
"directory": "packages/networks",
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": false,
"type": "module",
"version": "8.2.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.8"
"@babel/runtime": "^7.16.5"
},
"devDependencies": {
"@polkadot/util": "5.9.2",
"@polkadot/x-fetch": "5.9.2"
"@polkadot/hw-ledger": "8.2.2",
"@polkadot/util": "8.2.2",
"@polkadot/x-fetch": "8.2.2"
}
}
@@ -0,0 +1,72 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import fs from 'fs';
import fetch from 'node-fetch';
import { substrateRegistry } from '../build/defaults.js';
const substrateRegistryRepo = substrateRegistry
.replace('raw.githubusercontent.com', 'github.com')
.split('main')[0];
function outputField (k, v) {
if (typeof v === 'string') {
return `'${v}'`;
} else if (Array.isArray(v)) {
// new format is [] to indicate optionality
return (['decimals', 'symbols'].includes(k) && !v.length)
? null
: `[${v.map((v) => outputField(k, v)).join(', ')}]`;
}
return v;
}
async function getSubstrateRegistry () {
const original = await fetch(substrateRegistry);
const json = await original.json();
return json.registry
.map((e) =>
` {\n${Object
.entries(e)
.sort(([a], [b]) => a.localeCompare(b))
.map(([k, v]) => ` ${k}: ${outputField(k, v)}`)
.join(',\n')}\n }`
)
.join(',\n');
}
getSubstrateRegistry()
.then((entries) => {
fs.writeFileSync('packages/networks/src/substrate.ts', `// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
//
// Auto-generated by yarn networks:sync (via scripts/fromSubstrate.mjs)
//
// This file should never be edited manually. Rather the process is as follow -
//
// - make a PR to the upstream registry found at ${substrateRegistryRepo}
// - ensure the PR gets merged
// - yarn networks:sync in this repo to sync
//
// Any manual changes to this file will make CI cron checks fail and will be
// lost when the registry is updated alongside the above sync.
//
import type { KnownSubstrate } from './types';
export const knownSubstrate: KnownSubstrate[] = [\n${entries}\n];
`);
console.log('Completed.');
process.exit(0);
})
.catch((error) => {
console.error('Error:', error.message);
process.exit(-1);
});
+17 -14
View File
@@ -5,11 +5,12 @@ import type { Ss58Registry } from './types';
import fs from 'fs';
import { objectKeys, stringify } from '@polkadot/util';
import { fetch } from '@polkadot/x-fetch';
import { all } from './';
import { substrateRegistry } from './defaults';
import { allNetworks } from './';
const ORIGINAL = 'https://raw.githubusercontent.com/paritytech/substrate/master/ss58-registry.json';
const OUTPUT = './.github/ss58-check.md';
function assertAndLog (check: boolean, error: string): void {
@@ -27,46 +28,48 @@ describe('check latest Substrate ss58 registry', (): void => {
let original: Ss58Registry;
beforeAll(async (): Promise<void> => {
original = (await (await fetch(ORIGINAL)).json()) as Ss58Registry;
original = (await (await fetch(substrateRegistry)).json()) as Ss58Registry;
});
it('has the same number as the original', (): void => {
assertAndLog(all.length === original.registry.length, `Number of entries mismatched:: Expected ${original.registry.length} found ${all.length}`);
assertAndLog(allNetworks.length === original.registry.length, `Number of entries mismatched:: Expected ${original.registry.length} found ${allNetworks.length}`);
});
it('has no missing any entries', (): void => {
const missing = original.registry
.filter(({ prefix }) => !all.some((n) => n.prefix === prefix))
.filter(({ prefix }) => !allNetworks.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Missing entries found: ${JSON.stringify(missing, null, 2)}`);
assertAndLog(!missing.length, `Missing entries found: ${stringify(missing, 2)}`);
});
it('has no extra entries', (): void => {
const missing = all
const missing = allNetworks
.filter(({ prefix }) => !original.registry.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Extra entries found: ${JSON.stringify(missing, null, 2)}`);
assertAndLog(!missing.length, `Extra entries found: ${stringify(missing, 2)}`);
});
it('has the same values as the original', (): void => {
const fields = Object.keys(original.schema);
const fields = objectKeys(original.schema);
const errors = original.registry
.map((n): [string, string[]] => {
const other = all.find(({ prefix }) => prefix === n.prefix);
const other = allNetworks.find(({ prefix }) => prefix === n.prefix);
return [
`${n.displayName} (${n.prefix})`,
other
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
? fields.filter((f) => JSON.stringify(n[f]) !== JSON.stringify(other[f]))
? fields.filter((f) =>
['decimals', 'symbols'].includes(f)
? stringify(n[f] || []) !== stringify(other[f] || [])
: stringify(n[f]) !== stringify(other[f])
)
: []
];
})
.filter(([, fields]) => fields.length);
assertAndLog(!errors.length, `Mismatches found: ${JSON.stringify(errors.map(([name, m]) => `${name}:: ${m.join(', ')}`), null, 2)}`);
assertAndLog(!errors.length, `Mismatches found: ${stringify(errors.map(([n, m]) => `${n}:: ${m.join(', ')}`), 2)}`);
});
});
+46
View File
@@ -0,0 +1,46 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { ledgerApps } from '@polkadot/hw-ledger/defaults';
import { isHex } from '@polkadot/util';
import { knownGenesis, knownLedger } from './defaults';
describe('defaults', (): void => {
describe('genesis', (): void => {
it('has hex values for all genesis chains', (): void => {
expect(
Object.keys(knownGenesis).filter((network) =>
!knownGenesis[network].length ||
knownGenesis[network].some((g) => !isHex(g, 256))
)
).toEqual([]);
});
it('has genesis for all Ledger chains', (): void => {
expect(
Object.keys(knownLedger).filter((network) =>
!knownGenesis[network]
)
).toEqual([]);
});
});
describe('Ledger', (): void => {
it('has entries for each of the apps (hwledger -> networks)', (): void => {
expect(
Object.keys(knownLedger).filter((network) =>
!ledgerApps[network]
)
).toEqual([]);
});
it('has entries for each of the apps (networks -> hwledger)', (): void => {
expect(
Object.keys(ledgerApps).filter((network) =>
!knownLedger[network]
)
).toEqual([]);
});
});
});
+118
View File
@@ -0,0 +1,118 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KnownGenesis, KnownIcon, KnownLedger, KnownTestnet } from './types';
export const substrateRegistry = 'https://raw.githubusercontent.com/paritytech/ss58-registry/main/ss58-registry.json';
// NOTE: 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
// last. This make lookups for the current a simple genesisHash[0]
// (See Kusama as an example)
export const knownGenesis: KnownGenesis = {
acala: [
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
],
bifrost: [
'0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed'
],
centrifuge: [
'0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5'
],
'dock-mainnet': [
'0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'
],
edgeware: [
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
],
equilibrium: [
'0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
],
genshiro: [
'0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
],
hydradx: [
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
],
karura: [
'0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b'
],
kulupu: [
'0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'
],
kusama: [
'0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe', // Kusama CC3,
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
],
'nodle-chain': [
'0xa3d114c2b8d0627c1aa9b134eafcf7d05ca561fdc19fb388bb9457f81809fb23'
],
picasso: [
'0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
],
plasm: [
'0x3e86364d4b4894021cb2a0390bcf2feb5517d5292f2de2bb9404227e908b0b8b'
],
polkadot: [
'0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
],
polymesh: [
'0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
],
sora: [
'0x7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5'
],
stafi: [
'0x290a4149f09ea0e402c74c1c7e96ae4239588577fe78932f94f5404c68243d80'
],
statemine: [
'0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a'
],
subsocial: [
'0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'
]
};
// these are icon overrides
export const knownIcon: KnownIcon = {
centrifuge: 'polkadot',
kusama: 'polkadot',
polkadot: 'polkadot',
sora: 'polkadot',
statemine: 'polkadot',
statemint: 'polkadot',
westmint: 'polkadot'
};
// These match up with the keys of the ledgerApps object in the @polkadot/hw-ledger/defaults.ts
// and maps to the known slip44 (minus the `0x8` hard derivation flag)
// NOTE: Any network here needs to have a genesisHash attached in the config above
export const knownLedger: KnownLedger = {
bifrost: 0x00000314,
centrifuge: 0x000002eb,
'dock-mainnet': 0x00000252,
edgeware: 0x0000020b,
equilibrium: 0x05f5e0fd,
genshiro: 0x05f5e0fc,
kusama: 0x000001b2,
'nodle-chain': 0x000003eb,
polkadot: 0x00000162,
polymesh: 0x00000253,
sora: 0x00000269,
statemine: 0x000001b2 // common-good on Kusama, shares derivation
};
// testnets should not allow selection
export const knownTestnet: KnownTestnet = {
'': true, // this is the default non-network entry
'cess-testnet': true,
'dock-testnet': true,
jupiter: true,
'mathchain-testnet': true,
subspace_testnet: true,
'zero-alphaville': true
};
+70 -4
View File
@@ -1,14 +1,80 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import filtered, { available } from '.';
import type { SubstrateNetwork } from './types';
describe('filtered', (): void => {
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults';
import { allNetworks, availableNetworks, selectableNetworks } from '.';
describe('selectableNetworks', (): void => {
it('has the correct starting order', (): void => {
expect(filtered.slice(0, 3).map(({ prefix }) => prefix)).toEqual([0, 2, 42]);
expect(selectableNetworks.slice(0, 3).map(({ prefix }) => prefix)).toEqual([0, 2, 42]);
});
it('has no ignored networks', (): void => {
expect(available.some(({ isIgnored }) => isIgnored)).toEqual(false);
expect(availableNetworks.some(({ isIgnored }) => isIgnored)).toEqual(false);
});
it('has no reserved networks', (): void => {
expect(availableNetworks.some(({ prefix }) => prefix === 47)).toEqual(false);
});
it('has allNetworks genesis information', (): void => {
expect(
Object.entries(knownGenesis).filter(([network, genesisHash]) =>
availableNetworks.some((a) =>
a.network === network &&
genesisHash.some((g, index) => a.genesisHash[index] !== g)
)
)
).toEqual([]);
});
it('has allNetworks ledger details', (): void => {
expect(
Object.entries(knownLedger).filter(([network, slip44]) =>
availableNetworks.some((a) =>
a.network === network && (
a.slip44 !== slip44 ||
!a.hasLedgerSupport ||
!a.genesisHash.length
)
)
)
).toEqual([]);
});
it('has no testnets exposed', (): void => {
expect(
Object.keys(knownTestnet).filter((network) =>
availableNetworks.some((a) =>
a.network === network
)
)
).toEqual([]);
});
it('has allNetworks icons, except for overrides', (): void => {
expect(
availableNetworks.filter(({ icon, network }) =>
icon !== 'substrate' &&
knownIcon[network] !== icon
)
).toEqual([]);
});
it('has no ss58 duplicates', (): void => {
const dupes: SubstrateNetwork[] = [];
const uniques: SubstrateNetwork[] = [];
allNetworks.forEach((a): void => {
if (uniques.some((u) => u.prefix === a.prefix)) {
dupes.push(a);
} else {
uniques.push(a);
}
});
expect(dupes).toEqual([]);
});
});
+1 -505
View File
@@ -1,509 +1,5 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
// This contains exactly the same information as available in (with some extensions)
// https://raw.githubusercontent.com/paritytech/substrate/master/ss58-registry.json
//
// Once the above is published as a package, the duplication here can be removed
import type { Network, NetworkFromSubstrate, NetworkFromSubstrateNamed } from './types';
export * from './interfaces';
export { packageInfo } from './packageInfo';
// These are known prefixes that are not sorted
const UNSORTED = [0, 2, 42];
// NOTE: 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
// last. This make lookups for the current a simple genesisHash[0]
// (See Kusama as an example)
const createReserved = (prefix: number, displayName: string, network: string | null = null): NetworkFromSubstrate => ({
decimals: null,
displayName,
isIgnored: true,
network,
prefix,
standardAccount: null,
symbols: null,
website: null
});
export const all: NetworkFromSubstrate[] = [
{
decimals: [10],
displayName: 'Polkadot Relay Chain',
genesisHash: ['0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'],
hasLedgerSupport: true,
icon: 'polkadot',
network: 'polkadot',
prefix: 0,
slip44: 0x00000162,
standardAccount: '*25519',
symbols: ['DOT'],
website: 'https://polkadot.network'
},
createReserved(1, 'Bare 32-bit Schnorr/Ristretto (S/R 25519) public key.'),
{
decimals: [12],
displayName: 'Kusama Relay Chain',
genesisHash: [
'0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe', // Kusama CC3,
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
],
hasLedgerSupport: true,
icon: 'polkadot',
network: 'kusama',
prefix: 2,
slip44: 0x000001b2,
standardAccount: '*25519',
symbols: ['KSM'],
website: 'https://kusama.network'
},
createReserved(3, 'Bare 32-bit Ed25519 public key.'),
{
decimals: null,
displayName: 'Katal Chain',
network: 'katalchain',
prefix: 4,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: null,
displayName: 'Plasm Network',
genesisHash: ['0x3e86364d4b4894021cb2a0390bcf2feb5517d5292f2de2bb9404227e908b0b8b'],
network: 'plasm',
prefix: 5,
standardAccount: '*25519',
symbols: ['PLM'],
website: null
},
{
decimals: [12],
displayName: 'Bifrost',
network: 'bifrost',
prefix: 6,
standardAccount: '*25519',
symbols: ['BNC'],
website: 'https://bifrost.finance/'
},
{
decimals: [18],
displayName: 'Edgeware',
genesisHash: ['0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'],
network: 'edgeware',
prefix: 7,
standardAccount: '*25519',
symbols: ['EDG'],
website: 'https://edgewa.re'
},
{
decimals: [18],
displayName: 'Acala Karura Canary',
network: 'karura',
prefix: 8,
standardAccount: '*25519',
symbols: ['KAR'],
website: 'https://acala.network/'
},
{
decimals: [18],
displayName: 'Laminar Reynolds Canary',
network: 'reynolds',
prefix: 9,
standardAccount: '*25519',
symbols: ['REY'],
website: 'http://laminar.network/'
},
{
decimals: [18],
displayName: 'Acala',
network: 'acala',
prefix: 10,
standardAccount: '*25519',
symbols: ['ACA'],
website: 'https://acala.network/'
},
{
decimals: [18],
displayName: 'Laminar',
network: 'laminar',
prefix: 11,
standardAccount: '*25519',
symbols: ['LAMI'],
website: 'http://laminar.network/'
},
{
decimals: [6],
displayName: 'Polymesh',
genesisHash: ['0x12fddc9e2128b3fe571e4e5427addcb87fcaf08493867a68dd6ae44b406b39c7'],
hasLedgerSupport: true,
network: 'polymesh',
prefix: 12,
slip44: 0x00000253,
standardAccount: '*25519',
symbols: ['POLYX'],
website: 'https://polymath.network/'
},
{
decimals: null,
displayName: 'SubstraTEE',
network: 'substratee',
prefix: 13,
standardAccount: '*25519',
symbols: null,
website: 'https://www.substratee.com'
},
{
decimals: [0],
displayName: 'Totem',
network: 'totem',
prefix: 14,
standardAccount: '*25519',
symbols: ['XTX'],
website: 'https://totemaccounting.com'
},
{
decimals: [12],
displayName: 'Synesthesia',
network: 'synesthesia',
prefix: 15,
standardAccount: '*25519',
symbols: ['SYN'],
website: 'https://synesthesia.network/'
},
{
decimals: [12],
displayName: 'Kulupu',
genesisHash: ['0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'],
network: 'kulupu',
prefix: 16,
standardAccount: '*25519',
symbols: ['KLP'],
website: 'https://kulupu.network/'
},
{
decimals: null,
displayName: 'Dark Mainnet',
network: 'dark',
prefix: 17,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [9, 9],
displayName: 'Darwinia Network',
network: 'darwinia',
prefix: 18,
standardAccount: '*25519',
symbols: ['RING', 'KTON'],
website: 'https://darwinia.network/'
},
{
decimals: [12],
displayName: 'GeekCash',
network: 'geek',
prefix: 19,
standardAccount: '*25519',
symbols: ['GEEK'],
website: 'https://geekcash.org'
},
{
decimals: [12],
displayName: 'Stafi',
genesisHash: ['0x290a4149f09ea0e402c74c1c7e96ae4239588577fe78932f94f5404c68243d80'],
network: 'stafi',
prefix: 20,
standardAccount: '*25519',
symbols: ['FIS'],
website: 'https://stafi.io'
},
{
decimals: [6],
displayName: 'Dock Testnet',
isIgnored: true, // testnet
network: 'dock-testnet',
prefix: 21,
standardAccount: '*25519',
symbols: ['DCK'],
website: 'https://dock.io'
},
{
decimals: [6],
displayName: 'Dock Mainnet',
genesisHash: ['0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'],
hasLedgerSupport: true,
network: 'dock-mainnet',
prefix: 22,
slip44: 0x00000252,
standardAccount: '*25519',
symbols: ['DCK'],
website: 'https://dock.io'
},
{
decimals: null,
displayName: 'ShiftNrg',
network: 'shift',
prefix: 23,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [18],
displayName: 'ZERO',
network: 'zero',
prefix: 24,
standardAccount: '*25519',
symbols: ['PLAY'],
website: 'https://zero.io'
},
{
decimals: [18],
displayName: 'ZERO Alphaville',
isIgnored: true, // testnet
network: 'zero-alphaville',
prefix: 25,
standardAccount: '*25519',
symbols: ['PLAY'],
website: 'https://zero.io'
},
{
decimals: [10],
displayName: 'Jupiter',
isIgnored: true, // testnet
network: 'jupiter',
prefix: 26,
standardAccount: '*25519',
symbols: ['jDOT'],
website: 'https://jupiter.patract.io'
},
{
decimals: [10, 12],
displayName: 'Patract',
network: 'patract',
prefix: 27,
standardAccount: '*25519',
symbols: ['pDOT', 'pKSM'],
website: 'https://patract.network'
},
{
decimals: null,
displayName: 'Subsocial',
genesisHash: ['0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'],
network: 'subsocial',
prefix: 28,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [18],
displayName: 'Dhiway CORD Network',
network: 'cord',
prefix: 29,
standardAccount: '*25519',
symbols: ['DCU'],
website: 'https://dhiway.com/'
},
{
decimals: [12],
displayName: 'Phala Network',
network: 'phala',
prefix: 30,
standardAccount: '*25519',
symbols: ['PHA'],
website: 'https://phala.network'
},
{
decimals: [12],
displayName: 'Litentry Network',
network: 'litentry',
prefix: 31,
standardAccount: '*25519',
symbols: ['LIT'],
website: 'https://litentry.com/'
},
{
decimals: [9],
displayName: 'Robonomics',
network: 'robonomics',
prefix: 32,
standardAccount: '*25519',
symbols: ['XRT'],
website: 'https://robonomics.network'
},
{
decimals: null,
displayName: 'DataHighway',
network: 'datahighway',
prefix: 33,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [12],
displayName: 'Ares Protocol',
network: 'ares',
prefix: 34,
standardAccount: '*25519',
symbols: ['ARES'],
website: 'https://www.aresprotocol.com/'
},
{
decimals: [15],
displayName: 'Valiu Liquidity Network',
network: 'vln',
prefix: 35,
standardAccount: '*25519',
symbols: ['USDv'],
website: 'https://valiu.com/'
},
{
decimals: [18],
displayName: 'Centrifuge Chain',
network: 'centrifuge',
prefix: 36,
standardAccount: '*25519',
symbols: ['RAD'],
website: 'https://centrifuge.io/'
},
{
decimals: [18],
displayName: 'Nodle Chain',
network: 'nodle',
prefix: 37,
standardAccount: '*25519',
symbols: ['NODL'],
website: 'https://nodle.io/'
},
{
decimals: [18],
displayName: 'KILT Chain',
network: 'kilt',
prefix: 38,
standardAccount: '*25519',
symbols: ['KILT'],
website: 'https://kilt.io/'
},
{
decimals: [18],
displayName: 'MathChain mainnet',
network: 'mathchain',
prefix: 39,
standardAccount: '*25519',
symbols: ['MATH'],
website: 'https://mathwallet.org'
},
{
decimals: [18],
displayName: 'MathChain testnet',
isIgnored: true, // testnet
network: 'mathchain-testnet',
prefix: 40,
standardAccount: '*25519',
symbols: ['MATH'],
website: 'https://mathwallet.org'
},
{
decimals: null,
displayName: 'Polimec Chain',
network: 'poli',
prefix: 41,
standardAccount: '*25519',
symbols: null,
website: 'https://polimec.io/'
},
{
decimals: null,
displayName: 'Substrate',
network: 'substrate',
prefix: 42,
standardAccount: '*25519',
symbols: null,
website: 'https://substrate.dev/'
},
createReserved(43, 'Bare 32-bit ECDSA SECP-256k1 public key.'),
{
decimals: [8],
displayName: 'ChainX',
network: 'chainx',
prefix: 44,
standardAccount: '*25519',
symbols: ['PCX'],
website: 'https://chainx.org/'
},
{
decimals: [12, 12],
displayName: 'UniArts Network',
network: 'uniarts',
prefix: 45,
standardAccount: '*25519',
symbols: ['UART', 'UINK'],
website: 'https://uniarts.me'
},
createReserved(46, 'This prefix is reserved.', 'reserved46'),
createReserved(47, 'This prefix is reserved.', 'reserved47'),
{
decimals: [12],
displayName: 'Neatcoin Mainnet',
network: 'neatcoin',
prefix: 48,
standardAccount: '*25519',
symbols: ['NEAT'],
website: 'https://neatcoin.org'
},
{
decimals: [12],
displayName: 'HydraDX',
network: 'hydradx',
prefix: 63,
standardAccount: '*25519',
symbols: ['HDX'],
website: 'https://hydradx.io'
},
{
decimals: [18],
displayName: 'AvN Mainnet',
network: 'aventus',
prefix: 65,
standardAccount: '*25519',
symbols: ['AVT'],
website: 'https://aventus.io'
},
{
decimals: [12],
displayName: 'Crust Network',
network: 'crust',
prefix: 66,
standardAccount: '*25519',
symbols: ['CRU'],
website: 'https://crust.network'
}
];
// The list of available/claimed prefixes
// - no testnets
// - we only include those where we have a standardAccount
// - when no icon has been specified, default to substrate
// - sort by name, however we keep 0, 2, 42 first in the list
export const available: Network[] = all
.filter((n): n is NetworkFromSubstrateNamed => !n.isIgnored && !!n.network)
.map((n) => ({ ...n, genesisHash: n.genesisHash || [], icon: n.icon || 'substrate' }))
.sort((a, b) =>
UNSORTED.includes(a.prefix) && UNSORTED.includes(b.prefix)
? 0
: UNSORTED.includes(a.prefix)
? -1
: UNSORTED.includes(b.prefix)
? 1
: a.displayName.localeCompare(b.displayName)
);
// A filtered list of those chains we have details about (genesisHashes)
export default available.filter((n) => n.genesisHash.length || n.prefix === 42);
+64
View File
@@ -0,0 +1,64 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KnownSubstrate, Network, SubstrateNetwork } from './types';
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults';
import { knownSubstrate } from './substrate';
// These are known prefixes that are not sorted
const UNSORTED = [0, 2, 42];
const TESTNETS = ['testnet'];
function toExpanded (o: KnownSubstrate): SubstrateNetwork {
const network = o.network || '';
const nameParts = network.replace(/_/g, '-').split('-');
const n = o as SubstrateNetwork;
// ledger additions
n.slip44 = knownLedger[network];
n.hasLedgerSupport = !!n.slip44;
// general items
n.genesisHash = knownGenesis[network] || [];
n.icon = knownIcon[network] || 'substrate';
// filtering
n.isTestnet = !!knownTestnet[network] || TESTNETS.includes(nameParts[nameParts.length - 1]);
n.isIgnored = n.isTestnet || (!(o.standardAccount && o.decimals && o.symbols) && o.prefix !== 42);
return n;
}
function filterSelectable ({ genesisHash, prefix }: Network): boolean {
return !!genesisHash.length || prefix === 42;
}
function filterAvailable (n: SubstrateNetwork): n is Network {
return !n.isIgnored && !!n.network;
}
function sortNetworks (a: Network, b: Network): number {
const isUnSortedA = UNSORTED.includes(a.prefix);
const isUnSortedB = UNSORTED.includes(b.prefix);
return isUnSortedA === isUnSortedB
? 0
: isUnSortedA
? -1
: isUnSortedB
? 1
: a.displayName.localeCompare(b.displayName);
}
// This is all the Substrate networks with our additional information
export const allNetworks = knownSubstrate.map(toExpanded);
// The list of available/claimed prefixes
// - no testnets
// - we only include those where we have a standardAccount
// - sort by name, however we keep 0, 2, 42 first in the list
export const availableNetworks = allNetworks.filter(filterAvailable).sort(sortNetworks);
// A filtered list of those chains we have details about (genesisHashes)
export const selectableNetworks = availableNetworks.filter(filterSelectable);
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/dev authors & contributors
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/networks', version: '5.9.2' };
export const packageInfo = { name: '@polkadot/networks', version: '8.2.2' };
+785
View File
@@ -0,0 +1,785 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
//
// Auto-generated by yarn networks:sync (via scripts/fromSubstrate.mjs)
//
// This file should never be edited manually. Rather the process is as follow -
//
// - make a PR to the upstream registry found at https://github.com/paritytech/ss58-registry/
// - ensure the PR gets merged
// - yarn networks:sync in this repo to sync
//
// Any manual changes to this file will make CI cron checks fail and will be
// lost when the registry is updated alongside the above sync.
//
import type { KnownSubstrate } from './types';
export const knownSubstrate: KnownSubstrate[] = [
{
decimals: [10],
displayName: 'Polkadot Relay Chain',
network: 'polkadot',
prefix: 0,
standardAccount: '*25519',
symbols: ['DOT'],
website: 'https://polkadot.network'
},
{
decimals: null,
displayName: 'Bare 32-bit Schnorr/Ristretto (S/R 25519) public key.',
network: 'BareSr25519',
prefix: 1,
standardAccount: 'Sr25519',
symbols: null,
website: null
},
{
decimals: [12],
displayName: 'Kusama Relay Chain',
network: 'kusama',
prefix: 2,
standardAccount: '*25519',
symbols: ['KSM'],
website: 'https://kusama.network'
},
{
decimals: null,
displayName: 'Bare 32-bit Ed25519 public key.',
network: 'BareEd25519',
prefix: 3,
standardAccount: 'Ed25519',
symbols: null,
website: null
},
{
decimals: null,
displayName: 'Katal Chain',
network: 'katalchain',
prefix: 4,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [15],
displayName: 'Plasm Network',
network: 'plasm',
prefix: 5,
standardAccount: '*25519',
symbols: ['PLM'],
website: 'https://plasmnet.io'
},
{
decimals: [12],
displayName: 'Bifrost',
network: 'bifrost',
prefix: 6,
standardAccount: '*25519',
symbols: ['BNC'],
website: 'https://bifrost.finance/'
},
{
decimals: [18],
displayName: 'Edgeware',
network: 'edgeware',
prefix: 7,
standardAccount: '*25519',
symbols: ['EDG'],
website: 'https://edgewa.re'
},
{
decimals: [12],
displayName: 'Karura',
network: 'karura',
prefix: 8,
standardAccount: '*25519',
symbols: ['KAR'],
website: 'https://karura.network/'
},
{
decimals: [18],
displayName: 'Laminar Reynolds Canary',
network: 'reynolds',
prefix: 9,
standardAccount: '*25519',
symbols: ['REY'],
website: 'http://laminar.network/'
},
{
decimals: [12],
displayName: 'Acala',
network: 'acala',
prefix: 10,
standardAccount: '*25519',
symbols: ['ACA'],
website: 'https://acala.network/'
},
{
decimals: [18],
displayName: 'Laminar',
network: 'laminar',
prefix: 11,
standardAccount: '*25519',
symbols: ['LAMI'],
website: 'http://laminar.network/'
},
{
decimals: [6],
displayName: 'Polymesh',
network: 'polymesh',
prefix: 12,
standardAccount: '*25519',
symbols: ['POLYX'],
website: 'https://polymath.network/'
},
{
decimals: [12],
displayName: 'Integritee',
network: 'integritee',
prefix: 13,
standardAccount: '*25519',
symbols: ['TEER'],
website: 'https://integritee.network'
},
{
decimals: [0],
displayName: 'Totem',
network: 'totem',
prefix: 14,
standardAccount: '*25519',
symbols: ['TOTEM'],
website: 'https://totemaccounting.com'
},
{
decimals: [12],
displayName: 'Synesthesia',
network: 'synesthesia',
prefix: 15,
standardAccount: '*25519',
symbols: ['SYN'],
website: 'https://synesthesia.network/'
},
{
decimals: [12],
displayName: 'Kulupu',
network: 'kulupu',
prefix: 16,
standardAccount: '*25519',
symbols: ['KLP'],
website: 'https://kulupu.network/'
},
{
decimals: null,
displayName: 'Dark Mainnet',
network: 'dark',
prefix: 17,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [9, 9],
displayName: 'Darwinia Network',
network: 'darwinia',
prefix: 18,
standardAccount: '*25519',
symbols: ['RING', 'KTON'],
website: 'https://darwinia.network/'
},
{
decimals: [12],
displayName: 'GeekCash',
network: 'geek',
prefix: 19,
standardAccount: '*25519',
symbols: ['GEEK'],
website: 'https://geekcash.org'
},
{
decimals: [12],
displayName: 'Stafi',
network: 'stafi',
prefix: 20,
standardAccount: '*25519',
symbols: ['FIS'],
website: 'https://stafi.io'
},
{
decimals: [6],
displayName: 'Dock Testnet',
network: 'dock-testnet',
prefix: 21,
standardAccount: '*25519',
symbols: ['DCK'],
website: 'https://dock.io'
},
{
decimals: [6],
displayName: 'Dock Mainnet',
network: 'dock-mainnet',
prefix: 22,
standardAccount: '*25519',
symbols: ['DCK'],
website: 'https://dock.io'
},
{
decimals: null,
displayName: 'ShiftNrg',
network: 'shift',
prefix: 23,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [18],
displayName: 'ZERO',
network: 'zero',
prefix: 24,
standardAccount: '*25519',
symbols: ['PLAY'],
website: 'https://zero.io'
},
{
decimals: [18],
displayName: 'ZERO Alphaville',
network: 'zero-alphaville',
prefix: 25,
standardAccount: '*25519',
symbols: ['PLAY'],
website: 'https://zero.io'
},
{
decimals: [10],
displayName: 'Jupiter',
network: 'jupiter',
prefix: 26,
standardAccount: '*25519',
symbols: ['jDOT'],
website: 'https://jupiter.patract.io'
},
{
decimals: null,
displayName: 'Subsocial',
network: 'subsocial',
prefix: 28,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [12, 12],
displayName: 'CORD Network',
network: 'cord',
prefix: 29,
standardAccount: '*25519',
symbols: ['DHI', 'WAY'],
website: 'https://cord.network/'
},
{
decimals: [12],
displayName: 'Phala Network',
network: 'phala',
prefix: 30,
standardAccount: '*25519',
symbols: ['PHA'],
website: 'https://phala.network'
},
{
decimals: [12],
displayName: 'Litentry Network',
network: 'litentry',
prefix: 31,
standardAccount: '*25519',
symbols: ['LIT'],
website: 'https://litentry.com/'
},
{
decimals: [9],
displayName: 'Robonomics',
network: 'robonomics',
prefix: 32,
standardAccount: '*25519',
symbols: ['XRT'],
website: 'https://robonomics.network'
},
{
decimals: null,
displayName: 'DataHighway',
network: 'datahighway',
prefix: 33,
standardAccount: '*25519',
symbols: null,
website: null
},
{
decimals: [12],
displayName: 'Ares Protocol',
network: 'ares',
prefix: 34,
standardAccount: '*25519',
symbols: ['ARES'],
website: 'https://www.aresprotocol.com/'
},
{
decimals: [15],
displayName: 'Valiu Liquidity Network',
network: 'vln',
prefix: 35,
standardAccount: '*25519',
symbols: ['USDv'],
website: 'https://valiu.com/'
},
{
decimals: [18],
displayName: 'Centrifuge Chain',
network: 'centrifuge',
prefix: 36,
standardAccount: '*25519',
symbols: ['CFG'],
website: 'https://centrifuge.io/'
},
{
decimals: [18],
displayName: 'Nodle Chain',
network: 'nodle',
prefix: 37,
standardAccount: '*25519',
symbols: ['NODL'],
website: 'https://nodle.io/'
},
{
decimals: [18],
displayName: 'KILT Chain',
network: 'kilt',
prefix: 38,
standardAccount: '*25519',
symbols: ['KILT'],
website: 'https://kilt.io/'
},
{
decimals: [18],
displayName: 'MathChain mainnet',
network: 'mathchain',
prefix: 39,
standardAccount: '*25519',
symbols: ['MATH'],
website: 'https://mathwallet.org'
},
{
decimals: [18],
displayName: 'MathChain testnet',
network: 'mathchain-testnet',
prefix: 40,
standardAccount: '*25519',
symbols: ['MATH'],
website: 'https://mathwallet.org'
},
{
decimals: null,
displayName: 'Polimec Chain',
network: 'poli',
prefix: 41,
standardAccount: '*25519',
symbols: null,
website: 'https://polimec.io/'
},
{
decimals: null,
displayName: 'Substrate',
network: 'substrate',
prefix: 42,
standardAccount: '*25519',
symbols: null,
website: 'https://substrate.io/'
},
{
decimals: null,
displayName: 'Bare 32-bit ECDSA SECP-256k1 public key.',
network: 'BareSecp256k1',
prefix: 43,
standardAccount: 'secp256k1',
symbols: null,
website: null
},
{
decimals: [8],
displayName: 'ChainX',
network: 'chainx',
prefix: 44,
standardAccount: '*25519',
symbols: ['PCX'],
website: 'https://chainx.org/'
},
{
decimals: [12, 12],
displayName: 'UniArts Network',
network: 'uniarts',
prefix: 45,
standardAccount: '*25519',
symbols: ['UART', 'UINK'],
website: 'https://uniarts.me'
},
{
decimals: null,
displayName: 'This prefix is reserved.',
network: 'reserved46',
prefix: 46,
standardAccount: null,
symbols: null,
website: null
},
{
decimals: null,
displayName: 'This prefix is reserved.',
network: 'reserved47',
prefix: 47,
standardAccount: null,
symbols: null,
website: null
},
{
decimals: [12],
displayName: 'Neatcoin Mainnet',
network: 'neatcoin',
prefix: 48,
standardAccount: '*25519',
symbols: ['NEAT'],
website: 'https://neatcoin.org'
},
{
decimals: [12],
displayName: 'Picasso',
network: 'picasso',
prefix: 49,
standardAccount: '*25519',
symbols: ['PICA'],
website: 'https://picasso.composable.finance'
},
{
decimals: [12],
displayName: 'Composable',
network: 'composable',
prefix: 50,
standardAccount: '*25519',
symbols: ['LAYR'],
website: 'https://composable.finance'
},
{
decimals: [9],
displayName: 'xx network',
network: 'xxnetwork',
prefix: 55,
standardAccount: '*25519',
symbols: ['XX'],
website: 'https://xx.network'
},
{
decimals: [12],
displayName: 'HydraDX',
network: 'hydradx',
prefix: 63,
standardAccount: '*25519',
symbols: ['HDX'],
website: 'https://hydradx.io'
},
{
decimals: [18],
displayName: 'AvN Mainnet',
network: 'aventus',
prefix: 65,
standardAccount: '*25519',
symbols: ['AVT'],
website: 'https://aventus.io'
},
{
decimals: [12],
displayName: 'Crust Network',
network: 'crust',
prefix: 66,
standardAccount: '*25519',
symbols: ['CRU'],
website: 'https://crust.network'
},
{
decimals: [9, 9, 9],
displayName: 'Genshiro Network',
network: 'genshiro',
prefix: 67,
standardAccount: '*25519',
symbols: ['GENS', 'EQD', 'LPT0'],
website: 'https://genshiro.equilibrium.io'
},
{
decimals: [9],
displayName: 'Equilibrium Network',
network: 'equilibrium',
prefix: 68,
standardAccount: '*25519',
symbols: ['EQ'],
website: 'https://equilibrium.io'
},
{
decimals: [18],
displayName: 'SORA Network',
network: 'sora',
prefix: 69,
standardAccount: '*25519',
symbols: ['XOR'],
website: 'https://sora.org'
},
{
decimals: [10],
displayName: 'Zeitgeist',
network: 'zeitgeist',
prefix: 73,
standardAccount: '*25519',
symbols: ['ZTG'],
website: 'https://zeitgeist.pm'
},
{
decimals: [18],
displayName: 'Manta network',
network: 'manta',
prefix: 77,
standardAccount: '*25519',
symbols: ['MANTA'],
website: 'https://manta.network'
},
{
decimals: [12],
displayName: 'Calamari: Manta Canary Network',
network: 'calamari',
prefix: 78,
standardAccount: '*25519',
symbols: ['KMA'],
website: 'https://manta.network'
},
{
decimals: [12],
displayName: 'Polkadex Mainnet',
network: 'polkadex',
prefix: 88,
standardAccount: '*25519',
symbols: ['PDEX'],
website: 'https://polkadex.trade'
},
{
decimals: [18],
displayName: 'PolkaSmith Canary Network',
network: 'polkasmith',
prefix: 98,
standardAccount: '*25519',
symbols: ['PKS'],
website: 'https://polkafoundry.com'
},
{
decimals: [18],
displayName: 'PolkaFoundry Network',
network: 'polkafoundry',
prefix: 99,
standardAccount: '*25519',
symbols: ['PKF'],
website: 'https://polkafoundry.com'
},
{
decimals: [18],
displayName: 'OriginTrail Parachain',
network: 'origintrail-parachain',
prefix: 101,
standardAccount: 'secp256k1',
symbols: ['TRAC'],
website: 'https://origintrail.io'
},
{
decimals: [10],
displayName: 'Pontem Network',
network: 'pontem-network',
prefix: 105,
standardAccount: '*25519',
symbols: ['PONT'],
website: 'https://pontem.network'
},
{
decimals: [12],
displayName: 'Heiko',
network: 'heiko',
prefix: 110,
standardAccount: '*25519',
symbols: ['HKO'],
website: 'https://parallel.fi/'
},
{
decimals: null,
displayName: 'Integritee Incognito',
network: 'integritee-incognito',
prefix: 113,
standardAccount: '*25519',
symbols: null,
website: 'https://integritee.network'
},
{
decimals: [18],
displayName: 'Clover Finance',
network: 'clover',
prefix: 128,
standardAccount: '*25519',
symbols: ['CLV'],
website: 'https://clover.finance'
},
{
decimals: [18],
displayName: 'Altair',
network: 'altair',
prefix: 136,
standardAccount: '*25519',
symbols: ['AIR'],
website: 'https://centrifuge.io/'
},
{
decimals: [12],
displayName: 'Parallel',
network: 'parallel',
prefix: 172,
standardAccount: '*25519',
symbols: ['PARA'],
website: 'https://parallel.fi/'
},
{
decimals: [18],
displayName: 'Social Network',
network: 'social-network',
prefix: 252,
standardAccount: '*25519',
symbols: ['NET'],
website: 'https://social.network'
},
{
decimals: [15],
displayName: 'QUARTZ by UNIQUE',
network: 'quartz_mainnet',
prefix: 255,
standardAccount: '*25519',
symbols: ['QTZ'],
website: 'https://unique.network'
},
{
decimals: [18],
displayName: 'Pioneer Network by Bit.Country',
network: 'pioneer_network',
prefix: 268,
standardAccount: '*25519',
symbols: ['NEER'],
website: 'https://bit.country'
},
{
decimals: [18],
displayName: 'Efinity',
network: 'efinity',
prefix: 1110,
standardAccount: 'Sr25519',
symbols: ['EFI'],
website: 'https://efinity.io/'
},
{
decimals: [18],
displayName: 'Moonbeam',
network: 'moonbeam',
prefix: 1284,
standardAccount: 'secp256k1',
symbols: ['GLMR'],
website: 'https://moonbeam.network'
},
{
decimals: [18],
displayName: 'Moonriver',
network: 'moonriver',
prefix: 1285,
standardAccount: 'secp256k1',
symbols: ['MOVR'],
website: 'https://moonbeam.network'
},
{
decimals: [12],
displayName: 'Kapex',
network: 'kapex',
prefix: 2007,
standardAccount: '*25519',
symbols: ['KAPEX'],
website: 'https://totemaccounting.com'
},
{
decimals: [10],
displayName: 'Interlay',
network: 'interlay',
prefix: 2032,
standardAccount: '*25519',
symbols: ['INTR'],
website: 'https://interlay.io/'
},
{
decimals: [12],
displayName: 'Kintsugi',
network: 'kintsugi',
prefix: 2092,
standardAccount: '*25519',
symbols: ['KINT'],
website: 'https://interlay.io/'
},
{
decimals: [18],
displayName: 'Subspace testnet',
network: 'subspace_testnet',
prefix: 2254,
standardAccount: '*25519',
symbols: ['tSSC'],
website: 'https://subspace.network'
},
{
decimals: [18],
displayName: 'Subspace',
network: 'subspace',
prefix: 6094,
standardAccount: '*25519',
symbols: ['SSC'],
website: 'https://subspace.network'
},
{
decimals: [12],
displayName: 'Basilisk',
network: 'basilisk',
prefix: 10041,
standardAccount: '*25519',
symbols: ['BSX'],
website: 'https://bsx.fi'
},
{
decimals: [12],
displayName: 'CESS Testnet',
network: 'cess-testnet',
prefix: 11330,
standardAccount: '*25519',
symbols: ['TCESS'],
website: 'https://cess.cloud'
},
{
decimals: [12],
displayName: 'CESS',
network: 'cess',
prefix: 11331,
standardAccount: '*25519',
symbols: ['CESS'],
website: 'https://cess.cloud'
},
{
decimals: [18],
displayName: 'Automata ContextFree',
network: 'contextfree',
prefix: 11820,
standardAccount: '*25519',
symbols: ['CTX'],
website: 'https://ata.network'
}
];
+22 -15
View File
@@ -3,32 +3,39 @@
export type Icon = 'beachball' | 'empty' | 'jdenticon' | 'polkadot' | 'substrate';
export interface NetworkFromSubstrate {
export interface KnownSubstrate {
decimals: number[] | null,
displayName: string;
network: string | null;
prefix: number;
genesisHash?: string[] | null;
hasLedgerSupport?: boolean;
icon?: Icon | null;
isIgnored?: boolean;
slip44?: number;
standardAccount: '*25519' | null;
standardAccount: '*25519' | 'Ed25519' | 'Sr25519' | 'secp256k1' | null;
symbols: string[] | null;
website: string | null;
}
export interface NetworkFromSubstrateNamed extends NetworkFromSubstrate {
export type KnownIcon = Record<string, Icon>;
export type KnownLedger = Record<string, number>;
export type KnownGenesis = Record<string, string[]>;
export type KnownTestnet = Record<string, true>;
export interface SubstrateNetwork extends KnownSubstrate {
genesisHash: string[];
hasLedgerSupport: boolean;
icon: Icon;
isIgnored: boolean;
isTestnet: boolean;
slip44?: number | null;
}
export interface Network extends SubstrateNetwork {
network: string;
}
export interface Network extends NetworkFromSubstrateNamed {
genesisHash: string[];
icon: Icon;
}
export interface Ss58Registry {
registry: NetworkFromSubstrate[];
registry: KnownSubstrate[];
specification: string;
schema: Record<string, string>;
schema: Record<keyof KnownSubstrate, string>;
}
+13
View File
@@ -0,0 +1,13 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": [
{ "path": "../hw-ledger" },
{ "path": "../util" },
{ "path": "../x-fetch" }
]
}
+39 -34
View File
@@ -1,45 +1,50 @@
{
"name": "@polkadot/util-crypto",
"version": "5.9.2",
"description": "A collection of useful crypto utilities for @polkadot",
"main": "index.js",
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
],
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"repository": "github:polkadot-js/common",
"bugs": "https://github.com/polkadot-js/common/issues",
"contributors": [],
"description": "A collection of useful crypto utilities for @polkadot",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/util-crypto",
"repository": {
"directory": "packages/util-crypto",
"type": "git",
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": [
"./cryptoInit.js",
"./cryptoInit.cjs",
"./detectPackage.js",
"./detectPackage.cjs"
],
"type": "module",
"version": "8.2.2",
"browser": {
"crypto": false,
"stream": false
},
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.8",
"@polkadot/networks": "5.9.2",
"@polkadot/util": "5.9.2",
"@polkadot/wasm-crypto": "^3.2.4",
"@polkadot/x-randomvalues": "5.9.2",
"base-x": "^3.0.8",
"base64-js": "^1.5.1",
"blakejs": "^1.1.0",
"bn.js": "^4.11.9",
"create-hash": "^1.2.0",
"elliptic": "^6.5.4",
"hash.js": "^1.1.7",
"js-sha3": "^0.8.0",
"scryptsy": "^2.1.0",
"tweetnacl": "^1.0.3",
"xxhashjs": "^0.2.2"
"@babel/runtime": "^7.16.5",
"@noble/hashes": "^0.4.5",
"@noble/secp256k1": "^1.3.4",
"@polkadot/networks": "8.2.2",
"@polkadot/util": "8.2.2",
"@polkadot/wasm-crypto": "^4.5.1",
"@polkadot/x-bigint": "8.2.2",
"@polkadot/x-randomvalues": "8.2.2",
"ed2curve": "^0.3.0",
"micro-base": "^0.10.0",
"tweetnacl": "^1.0.3"
},
"devDependencies": {
"@types/bn.js": "^4.11.6",
"@types/create-hash": "^1.2.2",
"@types/elliptic": "^6.4.12",
"@types/scryptsy": "^2.0.0",
"@types/xxhashjs": "^0.2.2"
"@types/ed2curve": "^0.2.2"
},
"peerDependencies": {
"@polkadot/util": "5.9.2"
"@polkadot/util": "8.2.2"
}
}
@@ -1,13 +1,15 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import { decodeAddress } from './decode';
/**
* @name addressToEvm
* @summary Converts an SS58 address to its corresponding EVM address.
*/
export function addressToEvm (address: string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
export function addressToEvm (address: HexString | string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
const decoded = decodeAddress(address, ignoreChecksum);
return decoded.subarray(0, 20);
+3 -2
View File
@@ -1,9 +1,10 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { base58Decode } from '../base58/decode';
import { base58Decode } from '../base58';
import { checkAddressChecksum } from './checksum';
import { defaults } from './defaults';
@@ -13,7 +14,7 @@ import { defaults } from './defaults';
* @description
* From the provided input, validate that the address is a valid input.
*/
export function checkAddress (address: string, prefix: Prefix): [boolean, string | null] {
export function checkAddress (address: HexString | string, prefix: Prefix): [boolean, string | null] {
let decoded;
try {
@@ -1,7 +1,7 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { base58Decode } from '../base58/decode';
import { base58Decode } from '../base58';
import { checkAddressChecksum } from './checksum';
describe('checkAddressChecksum', (): void => {
@@ -17,6 +17,18 @@ describe('checkAddressChecksum', (): void => {
).toEqual([true, 34, 2, 66]);
});
it('correctly extracts the info from a 2-byte-prefix address (69)', (): void => {
expect(
checkAddressChecksum(base58Decode('cnVvyMzRdqjwejTFuByQQ4w2yu78V2hpFixjHQz5zr6NSYsxA'))
).toEqual([true, 34, 2, 69]);
});
it('correctly extracts the info from a 2-byte-prefix address (252)', (): void => {
expect(
checkAddressChecksum(base58Decode('xw8Ffc2SZtDqUJKd9Ky4vc7PRz2D2asuVkEEzf3WGAbw9cnfq'))
).toEqual([true, 34, 2, 252]);
});
it('correctly extracts the info from a 2-byte-prefix address (255)', (): void => {
expect(
checkAddressChecksum(base58Decode('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k'))
+18 -14
View File
@@ -3,21 +3,15 @@
import { hexToU8a, stringToU8a, u8aToHex } from '@polkadot/util';
import { createTestPairs, TestKeyringMap } from '../../../keyring/src/testingPairs';
import { ALICE_PUBLIC_SR } from './encode.spec';
import { decodeAddress } from '.';
describe('decodeAddress', (): void => {
let keyring: TestKeyringMap;
beforeAll((): void => {
keyring = createTestPairs({ type: 'sr25519' });
});
it('decodes an address', (): void => {
expect(
decodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY')
).toEqual(
keyring.alice.publicKey
ALICE_PUBLIC_SR
);
});
@@ -89,6 +83,22 @@ describe('decodeAddress', (): void => {
);
});
it('decodes a 2-byte prefix (69)', (): void => {
expect(
decodeAddress('cnUaoo5wodnTVA4bnr4woSweto8hWZADUvLFXkR9Q6U7BRsbF')
).toEqual(
hexToU8a('0x88eafe0305d460d1695cf34c2f786050df8e40d215e488790cc70929c9e8316d')
);
});
it('decodes a 2-byte prefix (252)', (): void => {
expect(
decodeAddress('xw9Hca4RJTmBRgzJT4ieJBh7XCK9gE3NXBDSEmgGHd4TCrbnG')
).toEqual(
hexToU8a('0xfc422da6c3bc6dfa2a436a506428072941662f816987baaa8914e02ff5947f4b')
);
});
it('decodes a 2-byte prefix (255)', (): void => {
expect(
decodeAddress('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k')
@@ -103,12 +113,6 @@ describe('decodeAddress', (): void => {
).toEqual('0x035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9');
});
it.skip('allows invalid prefix (in list)', (): void => {
expect(
(): Uint8Array => decodeAddress('6GfvWUvHvU8otbZ7sFhXH4eYeMcKdUkL61P3nFy52efEPVUx')
).toThrow(/address prefix/);
});
it('fails when length is invalid', (): void => {
expect(
(): Uint8Array => decodeAddress('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
+7 -4
View File
@@ -1,16 +1,19 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L6
import { assert, isHex, isU8a, u8aToU8a } from '@polkadot/util';
import { base58Decode } from '../base58/decode';
import { base58Decode } from '../base58';
import { checkAddressChecksum } from './checksum';
import { defaults } from './defaults';
export function decodeAddress (encoded: string | Uint8Array, ignoreChecksum?: boolean, ss58Format: Prefix = -1): Uint8Array {
export function decodeAddress (encoded?: HexString | string | Uint8Array | null, ignoreChecksum?: boolean, ss58Format: Prefix = -1): Uint8Array {
assert(encoded, 'Invalid empty address passed');
if (isU8a(encoded) || isHex(encoded)) {
return u8aToU8a(encoded);
}
@@ -23,10 +26,10 @@ export function decodeAddress (encoded: string | Uint8Array, ignoreChecksum?: bo
const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded);
assert(ignoreChecksum || isValid, 'Invalid decoded address checksum');
assert([-1, ss58Decoded].includes(ss58Format), `Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
assert([-1, ss58Decoded].includes(ss58Format), () => `Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
return decoded.slice(ss58Length, endPos);
} catch (error) {
throw new Error(`Decoding ${encoded as string}: ${(error as Error).message}`);
throw new Error(`Decoding ${encoded}: ${(error as Error).message}`);
}
}
+8 -2
View File
@@ -1,12 +1,18 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { available } from '@polkadot/networks';
import type { Network } from '@polkadot/networks/types';
import { availableNetworks } from '../networks';
function networkToPrefix ({ prefix }: Network): number {
return prefix;
}
export const defaults = {
allowedDecodedLengths: [1, 2, 4, 8, 32, 33],
// publicKey has prefix + 2 checksum bytes, short only prefix + 1 checksum byte
allowedEncodedLengths: [3, 4, 6, 10, 35, 36, 37, 38],
allowedPrefix: available.map(({ prefix }) => prefix),
allowedPrefix: availableNetworks.map(networkToPrefix),
prefix: 42
};
+16 -7
View File
@@ -1,28 +1,37 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { DeriveJunction } from '../key/DeriveJunction';
import type { Prefix } from './types';
import { assert } from '@polkadot/util';
import { keyExtractPath } from '../key';
import { DeriveJunction } from '../key/DeriveJunction';
import { schnorrkelDerivePublic } from '../schnorrkel';
import { sr25519DerivePublic } from '../sr25519';
import { decodeAddress } from './decode';
import { encodeAddress } from './encode';
function filterHard ({ isHard }: DeriveJunction): boolean {
return isHard;
}
/**
* @name deriveAddress
* @summary Creates a sr25519 derived address from the supplied and path.
* @description
* Creates a sr25519 derived address based on the input address/publicKey and the uri supplied.
*/
export function deriveAddress (who: Uint8Array | string, suri: string, ss58Format?: Prefix): string {
export function deriveAddress (who: HexString | Uint8Array | string, suri: string, ss58Format?: Prefix): string {
const { path } = keyExtractPath(suri);
assert(path.length && !path.some((path) => path.isHard), 'Expected suri to contain a combination of non-hard paths');
assert(path.length && !path.every(filterHard), 'Expected suri to contain a combination of non-hard paths');
return encodeAddress(path.reduce((publicKey: Uint8Array, path: DeriveJunction): Uint8Array => {
return schnorrkelDerivePublic(publicKey, path.chainCode);
}, decodeAddress(who)), ss58Format);
let publicKey = decodeAddress(who);
for (const { chainCode } of path) {
publicKey = sr25519DerivePublic(publicKey, chainCode);
}
return encodeAddress(publicKey, ss58Format);
}
+22 -10
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { createTestPairs } from '@polkadot/keyring/testingPairs';
import { encodeAddress } from '.';
const keyring = createTestPairs({ type: 'ed25519' }, false);
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_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 = [
{
@@ -26,12 +26,24 @@ const SUBKEY = [
publicKey: '0x04a047d52fe542484c69bc528990cfeaf3a663dded0638ee1b51cf78bacd1072',
ss58Format: 66
},
{
// sora
address: 'cnVRwXfAnz3RSVQyBUC8f8McrK3YBX2QYd4WoctpeSC6VTJYm',
publicKey: '0xae640d53cfa815f4a6a50ae70235cd7d9d134d0f1c3a4ccd118e321dfb6ab51f',
ss58Format: 69
},
{
// ecdsa
address: '4pbsSkWcBaYoFHrKJZp5fDVUKbqSYD9dhZZGvpp3vQ5ysVs5ybV',
publicKey: '0x035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9',
ss58Format: 200
},
{
// social-network
address: 'xw5g1Eec8LT99pZLZMaTWwrwvNtfM6vrSuZeVbtEszCDUwByg',
publicKey: '0x5c64f1151f0ce4358c27238fb20c88e7c899825436f565410724c8c2c5add869',
ss58Format: 252
},
{
address: 'yGF4JP7q5AK46d1FPCEm9sYQ4KooSjHMpyVAjLnsCSWVafPnf',
publicKey: '0x66cd6cf085627d6c85af1aaf2bd10cf843033e929b4e3b1c2ba8e4aa46fe111b',
@@ -57,7 +69,7 @@ const SUBKEY = [
describe('encode', (): void => {
it('encodes an address to a valid value', (): void => {
expect(
keyring.alice.address
encodeAddress(ALICE_PUBLIC_ED)
).toEqual('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua');
});
@@ -76,7 +88,7 @@ describe('encode', (): void => {
it('fails when non-valid publicKey provided', (): void => {
expect(
(): string => encodeAddress(
keyring.alice.publicKey.slice(0, 30)
ALICE_PUBLIC_ED.slice(0, 30)
)
).toThrow(/Expected a valid key/);
});
@@ -129,7 +141,7 @@ describe('encode', (): void => {
it('encodes with 2 byte prefix', (): void => {
expect(
encodeAddress(keyring.alice.publicKey, 255)
encodeAddress(ALICE_PUBLIC_ED, 255)
).toEqual('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k');
});
@@ -143,19 +155,19 @@ describe('encode', (): void => {
it('does not encode for > 16,383, < 0', (): void => {
expect(
() => encodeAddress(keyring.alice.publicKey, -1)
() => encodeAddress(ALICE_PUBLIC_ED, -1)
).toThrow(/range ss58Format specified/);
expect(
() => encodeAddress(keyring.alice.publicKey, 16384)
() => encodeAddress(ALICE_PUBLIC_ED, 16384)
).toThrow(/range ss58Format specified/);
});
it('does not encode reserved', (): void => {
expect(
() => encodeAddress(keyring.alice.publicKey, 46)
() => encodeAddress(ALICE_PUBLIC_ED, 46)
).toThrow(/range ss58Format specified/);
expect(
() => encodeAddress(keyring.alice.publicKey, 47)
() => encodeAddress(ALICE_PUBLIC_ED, 47)
).toThrow(/range ss58Format specified/);
});
});
+16 -15
View File
@@ -1,37 +1,38 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L34
import { assert, u8aConcat } from '@polkadot/util';
import { base58Encode } from '../base58/encode';
import { base58Encode } from '../base58';
import { decodeAddress } from './decode';
import { defaults } from './defaults';
import { sshash } from './sshash';
export function encodeAddress (_key: Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
export function encodeAddress (key: HexString | Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
// decode it, this means we can re-encode an address
const key = decodeAddress(_key);
const u8a = decodeAddress(key);
assert(ss58Format >= 0 && ss58Format <= 16383 && ![46, 47].includes(ss58Format), 'Out of range ss58Format specified');
assert(defaults.allowedDecodedLengths.includes(key.length), `Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
assert(defaults.allowedDecodedLengths.includes(u8a.length), () => `Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
const isPublicKey = [32, 33].includes(key.length);
const input = u8aConcat(
new Uint8Array(
ss58Format < 64
? [ss58Format]
: [
((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,
(ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6)
]
),
key
ss58Format < 64
? [ss58Format]
: [
((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,
(ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6)
],
u8a
);
return base58Encode(
u8aConcat(input, sshash(input).subarray(0, isPublicKey ? 2 : 1))
u8aConcat(
input,
sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)
)
);
}
@@ -1,7 +1,8 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type BN from 'bn.js';
import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { decodeAddress } from './decode';
@@ -14,6 +15,6 @@ import { createKeyDerived } from './keyDerived';
* @description
* Creates a Substrate derived address based on the input address/publicKey and the index supplied.
*/
export function encodeDerivedAddress (who: Uint8Array | string, index: BigInt | BN | number, ss58Format?: Prefix): string {
export function encodeDerivedAddress (who: HexString | Uint8Array | string, index: bigint | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format);
}
@@ -1,7 +1,8 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type BN from 'bn.js';
import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { encodeAddress } from './encode';
@@ -13,6 +14,6 @@ import { createKeyMulti } from './keyMulti';
* @description
* Creates a Substrate multisig address based on the input address and the required threshold.
*/
export function encodeMultiAddress (who: (Uint8Array | string)[], threshold: BigInt | BN | number, ss58Format?: Prefix): string {
export function encodeMultiAddress (who: (HexString | Uint8Array | string)[], threshold: bigint | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyMulti(who, threshold), ss58Format);
}
+2 -5
View File
@@ -1,8 +1,7 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { createTestPairs } from '@polkadot/keyring/testingPairs';
import { ALICE_PUBLIC_SR } from './encode.spec';
import { addressEq } from '.';
describe('addressEq', (): void => {
@@ -34,12 +33,10 @@ describe('addressEq', (): void => {
});
it('returns true for equal, address vs publicKey', (): void => {
const keyring = createTestPairs({ type: 'sr25519' });
expect(
addressEq(
'5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
keyring.alice.publicKey
ALICE_PUBLIC_SR
)
).toEqual(true);
});
+3 -1
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import { u8aEq } from '@polkadot/util';
import { decodeAddress } from './decode';
@@ -19,6 +21,6 @@ import { decodeAddress } from './decode';
* u8aEq(new Uint8Array([0x68, 0x65]), new Uint8Array([0x68, 0x65])); // true
* ```
*/
export function addressEq (a: string | Uint8Array, b: string | Uint8Array): boolean {
export function addressEq (a: HexString | string | Uint8Array, b: HexString | string | Uint8Array): boolean {
return u8aEq(decodeAddress(a), decodeAddress(b));
}
@@ -1,28 +1,23 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { HashType } from '../secp256k1/types';
import type { Prefix } from './types';
import { u8aConcat } from '@polkadot/util';
import { assert, u8aConcat } from '@polkadot/util';
import { secp256k1Hasher } from '../secp256k1/hasher';
import { hasher } from '../secp256k1/hasher';
import { encodeAddress } from './encode';
/**
* @name evmToAddress
* @summary Converts an EVM address to its corresponding SS58 address.
*/
export function evmToAddress (evmAddress: string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string {
const wrapError = (message: string) => `Converting ${evmAddress as string}: ${message}`;
export function evmToAddress (evmAddress: HexString | string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string {
const message = u8aConcat('evm:', evmAddress);
if (message.length !== 24) {
throw new Error(wrapError('Invalid evm address length'));
}
assert(message.length === 24, () => `Converting ${evmAddress as string}: Invalid evm address length`);
const address = secp256k1Hasher(hashType, message);
return encodeAddress(address, ss58Format);
return encodeAddress(hasher(hashType, message), ss58Format);
}
@@ -13,5 +13,7 @@ export { encodeDerivedAddress } from './encodeDerived';
export { encodeMultiAddress } from './encodeMulti';
export { evmToAddress } from './evmToAddress';
export { addressEq } from './eq';
export { isAddress } from './is';
export { setSS58Format } from './setSS58Format';
export { sortAddresses } from './sort';
export { validateAddress } from './validate';
+111
View File
@@ -0,0 +1,111 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { isAddress } from '.';
describe('isAddress', (): void => {
it('decodes an address', (): void => {
expect(
isAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY')
).toEqual(true);
});
it('decodes the council address', (): void => {
expect(
isAddress('F3opxRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29')
).toEqual(true);
});
it('converts a publicKey (hex) as-is', (): void => {
expect(
isAddress('0x01020304')
).toEqual(true);
});
it('decodes a short address', (): void => {
expect(
isAddress('F7NZ')
).toEqual(true);
});
it('decodes a 1-byte accountId (with prefix)', (): void => {
expect(
isAddress('g4b', false, 2)
).toEqual(true);
});
it('decodes a 2-byte accountId', (): void => {
expect(
isAddress('3xygo', false, 2)
).toEqual(true);
});
it('encodes a 4-byte address', (): void => {
expect(
isAddress('zswfoZa', false, 2)
).toEqual(true);
});
it('decodes a 8-byte address', (): void => {
expect(
isAddress('848Gh2GcGaZia', false, 2)
).toEqual(true);
});
it('decodes a 33-byte address', (): void => {
expect(
isAddress('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou')
).toEqual(true);
});
it('decodes a 2-byte prefix (65)', (): void => {
expect(
isAddress('cLtA6nCDyvwKcEHH4QkZDSHMhS9s78BvUJUsKUbUAn1Jc2SCF')
).toEqual(true);
});
it('decodes a 2-byte prefix (69)', (): void => {
expect(
isAddress('cnUaoo5wodnTVA4bnr4woSweto8hWZADUvLFXkR9Q6U7BRsbF')
).toEqual(true);
});
it('decodes a 2-byte prefix (252)', (): void => {
expect(
isAddress('xw9Hca4RJTmBRgzJT4ieJBh7XCK9gE3NXBDSEmgGHd4TCrbnG')
).toEqual(true);
});
it('decodes a 2-byte prefix (255)', (): void => {
expect(
isAddress('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k')
).toEqual(true);
});
it('decodes a 2-byte prefix (ecdsa, from Substrate)', (): void => {
expect(
isAddress('4pbsSkWcBaYoFHrKJZp5fDVUKbqSYD9dhZZGvpp3vQ5ysVs5ybV')
).toEqual(true);
});
it('fails when length is invalid', (): void => {
expect(
isAddress('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
).toEqual(false);
});
it('fails when the checksum does not match', (): void => {
expect(
isAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMa9cj')
).toEqual(false);
expect(
isAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaDwU')
).toEqual(false);
});
it('fails when invalid base58 encoded address is found', (): void => {
expect(
isAddress('F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29')
).toEqual(false);
});
});
+15
View File
@@ -0,0 +1,15 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { validateAddress } from './validate';
export function isAddress (address?: HexString | string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): address is string {
try {
return validateAddress(address, ignoreChecksum, ss58Format);
} catch (error) {
return false;
}
}
@@ -1,21 +1,23 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type BN from 'bn.js';
import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import { bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util';
import { blake2AsU8a } from '../blake2/asU8a';
import { BN_LE_16_OPTS } from '../bn';
import { decodeAddress } from './decode';
const PREFIX = stringToU8a('modlpy/utilisuba');
export function createKeyDerived (who: Uint8Array | string, index: BigInt | BN | number): Uint8Array {
export function createKeyDerived (who: HexString | Uint8Array | string, index: bigint | BN | number): Uint8Array {
return blake2AsU8a(
u8aConcat(
PREFIX,
decodeAddress(who),
bnToU8a(index, { bitLength: 16, isLe: true })
bnToU8a(index, BN_LE_16_OPTS)
)
);
}
+7 -5
View File
@@ -1,22 +1,24 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type BN from 'bn.js';
import type { BN } from '@polkadot/util';
import type { HexString } from '@polkadot/util/types';
import { bnToU8a, compactToU8a, stringToU8a, u8aConcat, u8aSorted } from '@polkadot/util';
import { blake2AsU8a } from '../blake2/asU8a';
import { decodeAddress } from './decode';
import { BN_LE_16_OPTS } from '../bn';
import { addressToU8a } from './util';
const PREFIX = stringToU8a('modlpy/utilisuba');
export function createKeyMulti (who: (Uint8Array | string)[], threshold: BigInt | BN | number): Uint8Array {
export function createKeyMulti (who: (HexString | Uint8Array | string)[], threshold: bigint | BN | number): Uint8Array {
return blake2AsU8a(
u8aConcat(
PREFIX,
compactToU8a(who.length),
...u8aSorted(who.map((who) => decodeAddress(who))),
bnToU8a(threshold, { bitLength: 16, isLe: true })
...u8aSorted(who.map(addressToU8a)),
bnToU8a(threshold, BN_LE_16_OPTS)
)
);
}
@@ -3,12 +3,18 @@
import type { Prefix } from './types';
import { logger } from '@polkadot/util';
import { defaults } from './defaults';
const l = logger('setSS58Format');
/**
* @description Sets the global SS58 format to use for address encoding
* @deprecated Use keyring.setSS58Format
*/
export function setSS58Format (prefix: Prefix): void {
l.warn('Global setting of the ss58Format is deprecated and not recommended. Set format on the keyring (if used) or as pat of the address encode function');
defaults.prefix = prefix;
}
+7 -4
View File
@@ -1,15 +1,18 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { u8aSorted } from '@polkadot/util';
import { decodeAddress } from './decode';
import { encodeAddress } from './encode';
import { addressToU8a } from './util';
export function sortAddresses (addresses: (HexString | Uint8Array | string)[], ss58Format?: Prefix): string[] {
const u8aToAddress = (u8a: Uint8Array) => encodeAddress(u8a, ss58Format);
export function sortAddresses (addresses: (Uint8Array | string)[], ss58Format?: Prefix): string[] {
return u8aSorted(
addresses.map((who) => decodeAddress(who))
).map((u8a) => encodeAddress(u8a, ss58Format));
addresses.map(addressToU8a)
).map(u8aToAddress);
}
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { decodeAddress } from './decode';
export function addressToU8a (who: string | Uint8Array): Uint8Array {
return decodeAddress(who);
}
@@ -0,0 +1,111 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { validateAddress } from '.';
describe('validateAddress', (): void => {
it('decodes an address', (): void => {
expect(
validateAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY')
).toEqual(true);
});
it('decodes the council address', (): void => {
expect(
validateAddress('F3opxRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29')
).toEqual(true);
});
it('converts a publicKey (hex) as-is', (): void => {
expect(
validateAddress('0x01020304')
).toEqual(true);
});
it('decodes a short address', (): void => {
expect(
validateAddress('F7NZ')
).toEqual(true);
});
it('decodes a 1-byte accountId (with prefix)', (): void => {
expect(
validateAddress('g4b', false, 2)
).toEqual(true);
});
it('decodes a 2-byte accountId', (): void => {
expect(
validateAddress('3xygo', false, 2)
).toEqual(true);
});
it('encodes a 4-byte address', (): void => {
expect(
validateAddress('zswfoZa', false, 2)
).toEqual(true);
});
it('decodes a 8-byte address', (): void => {
expect(
validateAddress('848Gh2GcGaZia', false, 2)
).toEqual(true);
});
it('decodes a 33-byte address', (): void => {
expect(
validateAddress('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou')
).toEqual(true);
});
it('decodes a 2-byte prefix (65)', (): void => {
expect(
validateAddress('cLtA6nCDyvwKcEHH4QkZDSHMhS9s78BvUJUsKUbUAn1Jc2SCF')
).toEqual(true);
});
it('decodes a 2-byte prefix (69)', (): void => {
expect(
validateAddress('cnUaoo5wodnTVA4bnr4woSweto8hWZADUvLFXkR9Q6U7BRsbF')
).toEqual(true);
});
it('decodes a 2-byte prefix (252)', (): void => {
expect(
validateAddress('xw9Hca4RJTmBRgzJT4ieJBh7XCK9gE3NXBDSEmgGHd4TCrbnG')
).toEqual(true);
});
it('decodes a 2-byte prefix (255)', (): void => {
expect(
validateAddress('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k')
).toEqual(true);
});
it('decodes a 2-byte prefix (ecdsa, from Substrate)', (): void => {
expect(
validateAddress('4pbsSkWcBaYoFHrKJZp5fDVUKbqSYD9dhZZGvpp3vQ5ysVs5ybV')
).toEqual(true);
});
it('fails when length is invalid', (): void => {
expect(
() => validateAddress('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
).toThrow(/address length/);
});
it('fails when the checksum does not match', (): void => {
expect(
() => validateAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMa9cj')
).toThrow(/address checksum/);
expect(
() => validateAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaDwU')
).toThrow(/address checksum/);
});
it('fails when invalid base58 encoded address is found', (): void => {
expect(
() => validateAddress('F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29')
).toThrow(/Decoding F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29: Invalid base58 character "I" \(0x49\) at index 4/);
});
});
@@ -0,0 +1,11 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from './types';
import { decodeAddress } from './decode';
export function validateAddress (encoded?: HexString | string | null, ignoreChecksum?: boolean, ss58Format?: Prefix): encoded is string {
return !!decodeAddress(encoded, ignoreChecksum, ss58Format);
}
+50 -3
View File
@@ -1,6 +1,53 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// https://github.com/multiformats/js-multibase/blob/master/src/constants.js
export const BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
export const BITS_PER_CHAR = 5;
import { utils } from 'micro-base';
import { createDecode, createEncode, createIs, createValidate } from './helpers';
const chars = 'abcdefghijklmnopqrstuvwxyz234567';
const config = {
chars,
coder: utils.chain(
// We define our own chain, the default base32 has padding
utils.radix2(5),
utils.alphabet(chars),
{
decode: (input: string) => input.split(''),
encode: (input: string[]) => input.join('')
}
),
ipfs: 'b',
type: 'base32'
};
/**
* @name base32Validate
* @summary Validates a base32 value.
* @description
* Validates that the supplied value is valid base32, throwing exceptions if not
*/
export const base32Validate = createValidate(config);
/**
* @name isBase32
* @description Checks if the input is in base32, returning true/false
*/
export const isBase32 = createIs(base32Validate);
/**
* @name base32Decode
* @summary Delookup a base32 value.
* @description
* From the provided input, decode the base32 and return the result as an `Uint8Array`.
*/
export const base32Decode = createDecode(config, base32Validate);
/**
* @name base32Encode
* @summary Creates a base32 value.
* @description
* From the provided input, create the base32 and return the result as a string.
*/
export const base32Encode = createEncode(config);
@@ -3,7 +3,7 @@
import { u8aToString } from '@polkadot/util';
import { base32Decode } from './';
import { base32Decode } from '.';
describe('base32Decode', (): void => {
it('decodes a base32', (): void => {
-58
View File
@@ -1,58 +0,0 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// adapted from https://github.com/multiformats/js-multibase/blob/424709195b46ffb1d6f2f69a7707598ebe751e5e/src/rfc4648.js
import { assert } from '@polkadot/util';
import { BASE32_ALPHABET, BITS_PER_CHAR } from './bs32';
import { base32Validate } from './validate';
// Build the character lookup table:
const LOOKUP = BASE32_ALPHABET
.split('')
.reduce((lookup: Record<string, number>, char: string, index: number): Record<string, number> => {
lookup[char] = index;
return lookup;
}, {});
/** @internal */
function decode (output: Uint8Array, input: string, offset: number): [Uint8Array, number, number] {
let bits = 0;
let buffer = 0;
let written = 0;
for (let i = offset; i < input.length; i++) {
buffer = (buffer << BITS_PER_CHAR) | LOOKUP[input[i]];
bits += BITS_PER_CHAR;
if (bits >= 8) {
bits -= 8;
output[written++] = 0xff & (buffer >> bits);
}
}
return [output, bits, buffer];
}
/**
* @name base32Decode
* @summary Delookup a base32 value.
* @description
* From the provided input, decode the base32 and return the result as an `Uint8Array`.
*/
export function base32Decode (value: string, ipfsCompat = false): Uint8Array {
base32Validate(value, ipfsCompat);
const offset = (ipfsCompat ? 1 : 0);
const [output, bits, buffer] = decode(
new Uint8Array(((value.length - offset) * BITS_PER_CHAR / 8) | 0),
value,
offset
);
assert(!(bits >= BITS_PER_CHAR || 0xff & (buffer << (8 - bits))), 'Unexpected end of data');
return output;
}
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { base58Decode } from '../base58';
import { base32Encode } from './';
import { base32Encode } from '.';
describe('base32Encode', (): void => {
it('encodes to a base32', (): void => {
@@ -11,6 +11,12 @@ describe('base32Encode', (): void => {
).toEqual('irswgzloorzgc3djpjssazlwmvzhs5dinfxgoijb');
});
it('encodes to a base32 (ipfs-compat)', (): void => {
expect(
base32Encode('Decentralize everything!!', true)
).toEqual('birswgzloorzgc3djpjssazlwmvzhs5dinfxgoijb');
});
it('encodes a base58 to a base32', (): void => {
expect(
base32Encode(

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