Compare commits

...
283 Commits
Author SHA1 Message Date
Github Actions 54e6b61972 [CI Skip] release/stable 5.5.1
skip-checks: true
2021-01-31 07:57:36 +00:00
Jaco Greeff c52a7b1e64 5.5 (#862)
* 5.5

* Remove extra arg from mnemonicToLegacySeed
2021-01-31 08:51:43 +01:00
Github Actions 749cd2e381 [CI Skip] release/beta 5.4.5-1
skip-checks: true
2021-01-30 19:07:49 +00:00
Jaco Greeff 24b1790c99 Add hmac{Sha256, 512} (#861)
* Add hmac{Sha256, 512}

* Adjust

* private hmac
2021-01-30 20:02:21 +01:00
Github Actions 62823635b0 [CI Skip] release/beta 5.4.5-0
skip-checks: true
2021-01-30 17:38:17 +00:00
Jaco Greeff bc84220108 Add Ledger-compatible derivation (#860)
* Add Ledger-compatible derivation

* Export hd from root

* Renames
2021-01-30 18:33:15 +01:00
Jaco Greeff 5158951326 Give bot permissions to post issues 2021-01-26 16:36:49 +01:00
Github Actions 500b739ddd [CI Skip] release/stable 5.4.4
skip-checks: true
2021-01-24 15:44:51 +00:00
Jaco Greeff b741d228ac Use xglobal everywhere 2021-01-24 16:40:04 +01:00
Jaco Greeff 437ff8b51d Use x-gobal in node polyfills 2021-01-24 16:39:22 +01:00
Github Actions 354dd0a7a4 [CI Skip] release/stable 5.4.3
skip-checks: true
2021-01-24 15:03:21 +00:00
Jaco Greeff 3804123ca6 Remove browser.ts global reference (#856)
* Remove browser.ts global reference

* fallback text

* formatting

* Additional formatting

* global > self > window > this

* Add x-global package

* Update tests

* Correct jest mapping
2021-01-24 15:58:42 +01:00
Github Actions bbc752e475 [CI Skip] release/stable 5.4.2
skip-checks: true
2021-01-24 11:13:49 +00:00
Jaco Greeff 80f69b88b2 5.4.2 (#855) 2021-01-24 12:09:14 +01:00
Github Actions a02eab478e [CI Skip] release/stable 5.4.1
skip-checks: true
2021-01-24 07:58:18 +00:00
Jaco Greeff 22fdb9a1f9 5.4 (#854) 2021-01-24 08:53:32 +01:00
Github Actions 496d2123ed [CI Skip] release/beta 5.3.2-8
skip-checks: true
2021-01-23 08:38:47 +00:00
Jaco Greeff 15a2e6c6cf Allow formatBalance to take array defaults (#853) 2021-01-23 09:34:04 +01:00
Github Actions 62a9a7aeb5 [CI Skip] release/beta 5.3.2-7
skip-checks: true
2021-01-22 09:34:00 +00:00
Jaco Greeff 8541088893 Bump wasm (#851) 2021-01-22 10:28:34 +01:00
Github Actions e558cf8f7f [CI Skip] release/beta 5.3.2-6
skip-checks: true
2021-01-21 19:30:31 +00:00
Jaco Greeff 01827deaf5 EDCSA derive test (#850) 2021-01-21 20:24:48 +01:00
Github Actions 6d71677c17 [CI Skip] release/beta 5.3.2-5
skip-checks: true
2021-01-21 12:35:26 +00:00
Jaco Greeff ee42a717aa Bump wasm (#848) 2021-01-21 13:30:39 +01:00
Github Actions cfa8ab7ab6 [CI Skip] release/beta 5.3.2-4
skip-checks: true
2021-01-21 10:39:31 +00:00
Adam DossaandAdam Dossa 4ecd14c187 Update ledger key to polymesh (from polymath) (#847)
Co-authored-by: Adam Dossa <adamdossa@Adams-MacBook-Pro.local>
2021-01-21 11:34:17 +01:00
Github Actions d9318bc917 [CI Skip] release/beta 5.3.2-3
skip-checks: true
2021-01-20 13:17:28 +00:00
Jaco Greeff 6f6db63580 Add vrf{Sign, Verify} to kering interface (#846) 2021-01-20 14:11:50 +01:00
Github Actions ebd1e64694 [CI Skip] release/beta 5.3.2-2
skip-checks: true
2021-01-20 11:59:45 +00:00
Jaco Greeff f12aa92383 Add schnorrkelVrf{Sign, Verify} functions (#845)
* Add schnorrkelVrf{Sign, Verify} functions

* Apply suggestions from code review
2021-01-20 12:54:59 +01:00
Github Actions 2df0638b19 [CI Skip] release/beta 5.3.2-1
skip-checks: true
2021-01-19 20:36:18 +00:00
Jaco Greeff 542f484703 Move x-rxjs from @polkadot/api (#844)
* Move x-rxjs from @polkadot/api

* yarn

* x-rxjs bump

* jest config
2021-01-19 21:30:42 +01:00
Github Actions f9dbedb93a [CI Skip] release/beta 5.3.2-0
skip-checks: true
2021-01-19 20:16:43 +00:00
Jaco Greeff 2492ae5d60 Update ss58 (#843) 2021-01-19 21:11:05 +01:00
Jaco Greeff c5ab1c0e1a Update CHANGELOG.md 2021-01-17 15:57:20 +01:00
Github Actions fa9a7c197b [CI Skip] release/stable 5.3.1
skip-checks: true
2021-01-17 14:25:00 +00:00
Jaco Greeff 05b9f13a45 5.3 (#839)
* 5.3

* Update CHANGELOG.md
2021-01-17 15:20:03 +01:00
Github Actions b4511920b0 [CI Skip] release/beta 5.2.4-7
skip-checks: true
2021-01-15 17:54:46 +00:00
Jaco Greeff 4d6ee85071 ss58 Updates (#829)
* ss58 Updates

* Uniarts
2021-01-15 18:49:12 +01:00
Github Actions 3f96caf54d [CI Skip] release/beta 5.2.4-6
skip-checks: true
2021-01-14 21:42:41 +00:00
Jaco Greeff 0b804ff776 Move @polkadot/hw-{ledger, ledger-transports} (#836)
* Move @polkadot/{ledger, ledger-transports}

* yarn rewrite

* Move to hw-*

* Update header
2021-01-14 22:37:51 +01:00
Github Actions 0b1cec4e2d [CI Skip] release/beta 5.2.4-5
skip-checks: true
2021-01-14 14:51:40 +00:00
Thibaut Sardan dd4bf9feba add hasLedgerSupport prop to networks (#835) 2021-01-14 15:46:21 +01:00
Github Actions 4d41bbcf04 [CI Skip] release/beta 5.2.4-4
skip-checks: true
2021-01-13 23:17:34 +00:00
Adam DossaandAdam Dossa 04780bda5c Add Polymesh Ledger Integration (#834)
* Add Polymesh Ledger Integration

* Revert "Add Polymesh Ledger Integration"

This reverts commit e0f901d475fca258c56456e459c4ebc499f11d91.

* Add genesisHash

* Fix hash formating

Co-authored-by: Adam Dossa <adamdossa@Adams-MacBook-Pro.local>
2021-01-14 00:11:29 +01:00
Github Actions becc991dc8 [CI Skip] release/beta 5.2.4-3
skip-checks: true
2021-01-12 14:35:35 +00:00
Jaco Greeff 815756d168 ss58 29 (#833) 2021-01-12 15:29:41 +01:00
Github Actions c960cee703 [CI Skip] release/beta 5.2.4-2
skip-checks: true
2021-01-09 10:49:29 +00:00
Jaco Greeff c7da06215d Bump deps (#828) 2021-01-09 11:43:54 +01:00
Jaco Greeff 55053f76a9 Update index.ts (#831) 2021-01-09 11:30:13 +01:00
Github Actions 19fb9dafc9 [CI Skip] release/beta 5.2.4-1
skip-checks: true
2021-01-03 10:26:20 +00:00
Jaco Greeff f0f0dec8ea 2021 (#824) 2021-01-03 11:20:22 +01:00
Github Actions 649b2f5e4a [CI Skip] release/beta 5.2.4-0
skip-checks: true
2020-12-31 11:00:45 +00:00
Jaco Greeff af06ec22c5 pre swap 2020-12-31 11:55:21 +01:00
Github Actions bb976e746a [CI Skip] release/stable 5.2.3
skip-checks: true
2020-12-31 09:59:04 +00:00
Jaco Greeff 814f8418f2 Fix nacl imports (#823)
* Fix nacl imports

* patch

* rewrite
2020-12-31 10:54:31 +01:00
Github Actions a00dd1e4ca [CI Skip] release/beta 5.2.3-1
skip-checks: true
2020-12-27 12:02:49 +00:00
Jaco Greeff 66e24c3750 pre 2020-12-27 12:57:56 +01:00
Github Actions 1ff4c58fe3 [CI Skip] release/stable 5.2.2
skip-checks: true
2020-12-27 11:55:30 +00:00
Jaco Greeff 5ff15b18a1 Filter ss58 testnets (#822)
* Filter ss58 testnets

* Remove genesisHash testnet

* Ignore reserved
2020-12-27 12:50:18 +01:00
Github Actions 83975e9235 [CI Skip] release/stable 5.2.1
skip-checks: true
2020-12-27 07:44:02 +00:00
Jaco Greeff 3adf475ef4 5.2 (#821)
* 5.2

* Bump
2020-12-27 08:39:14 +01:00
Github Actions ccc6edebbb [CI Skip] release/beta 5.1.2-3
skip-checks: true
2020-12-25 08:58:15 +00:00
Jaco Greeff 0d7ed7420d Add keccak512 (#820)
* Add keccak512

* dedupe

* Adjust hex test

* ss58

* fix expectation
2020-12-25 09:52:49 +01:00
Github Actions dbf1837b97 [CI Skip] release/beta 5.1.2-2
skip-checks: true
2020-12-24 07:56:46 +00:00
Jaco Greeff 9ae738ac51 Add Valiu (#818) 2020-12-24 08:51:22 +01:00
Github Actions a4000efc43 [CI Skip] release/beta 5.1.2-1
skip-checks: true
2020-12-23 11:03:53 +00:00
Jaco Greeff 7871a17942 Add arrayFlatten (#816)
* Add arrayFlatten

* Add test for arrayFlatten

* Add arrayChunk

* Update packages/util/src/array/chunk.ts
2020-12-23 11:58:59 +01:00
Github Actions 5aad1d09b2 [CI Skip] release/beta 5.1.2-0
skip-checks: true
2020-12-22 09:22:25 +00:00
Jaco Greeff 4eb5d7dfd3 Bump deps (#815)
* Bump deps

* Rewrite
2020-12-22 10:16:34 +01:00
Github Actions 0a841e8f4a [CI Skip] release/stable 5.1.1
skip-checks: true
2020-12-19 14:23:05 +00:00
Jaco Greeff 53ffd0c9f0 5.1 (#813) 2020-12-19 15:17:01 +01:00
Github Actions 5d3a9f2e2e [CI Skip] release/beta 5.0.2-9
skip-checks: true
2020-12-19 10:41:44 +00:00
Jaco Greeff 9d6f38edb3 Bump deps 2020-12-19 11:36:55 +01:00
Github Actions 9e5e032e1d [CI Skip] release/beta 5.0.2-8
skip-checks: true
2020-12-18 10:24:04 +00:00
Jaco Greeff 31426858c6 detectPackage import revert 2020-12-18 11:18:02 +01:00
Github Actions 46b4ca0c91 [CI Skip] release/beta 5.0.2-7
skip-checks: true
2020-12-17 13:02:30 +00:00
Jaco Greeff f4cb68c567 Mark detectPackage as sideEffect 2020-12-17 13:57:41 +01:00
Github Actions ab4b234510 [CI Skip] release/beta 5.0.2-6
skip-checks: true
2020-12-17 12:19:30 +00:00
Jaco Greeff d5151c4f01 Adjust detectPackage 2020-12-17 13:14:38 +01:00
Jaco Greeff 6df4689aa3 Cleanup detectPackage 2020-12-17 13:05:26 +01:00
Github Actions 9727a6a9a5 [CI Skip] release/beta 5.0.2-5
skip-checks: true
2020-12-17 11:42:14 +00:00
Jaco Greeff 7f00182fd9 Bump wasm-crypto 2020-12-17 12:37:21 +01:00
Github Actions 261b0add27 [CI Skip] release/beta 5.0.2-4
skip-checks: true
2020-12-17 11:25:06 +00:00
Jaco Greeff 5d6e753384 sideEffects 2020-12-17 12:20:15 +01:00
Github Actions 15c2e79e6e [CI Skip] release/beta 5.0.2-3
skip-checks: true
2020-12-17 11:12:29 +00:00
Jaco Greeff f763a66219 Allow detectPackage with a function (#811) 2020-12-17 12:07:00 +01:00
Jaco Greeff 1061df6e4a Adjust blakejs commonjs imports (#809) 2020-12-17 12:03:21 +01:00
Github Actions 4c121e6f50 [CI Skip] release/beta 5.0.2-2
skip-checks: true
2020-12-17 10:52:01 +00:00
Jaco Greeff 74b3a04c4a Dedupe 2020-12-17 11:46:57 +01:00
Github Actions e4488463ba [CI Skip] release/beta 5.0.2-1
skip-checks: true
2020-12-16 14:48:44 +00:00
Jaco Greeff c6fd67b5d5 detectPackage with import.meta.url (#810)
* detectPackage with import.meta.url

* Bump dev

* Remove duplicate detectPackage

* Fix detectPackage import
2020-12-16 15:44:00 +01:00
Github Actions e5dc596867 [CI Skip] release/beta 5.0.2-0
skip-checks: true
2020-12-15 14:54:43 +00:00
Jaco Greeff a28f8dad37 detectPackage cleanups (#807) 2020-12-15 15:49:00 +01:00
Github Actions 7855658bfd [CI Skip] release/stable 5.0.1
skip-checks: true
2020-12-13 14:19:15 +00:00
Jaco Greeff de14a85817 5.0 (#800)
* 5.0

* Update CHANGELOG.md

* CHANGELOG
2020-12-13 15:13:40 +01:00
Github Actions de2206bb27 [CI Skip] release/beta 4.2.2-21
skip-checks: true
2020-12-13 12:50:35 +00:00
Jaco Greeff 451a7aecde Adjust memoize normalize for BigInt (#806)
* Adjust memoize normalizer to cater for BigInt

* Update memomize typings

* cleanups

* Renames
2020-12-13 13:46:22 +01:00
Github Actions 5170194105 [CI Skip] release/beta 4.2.2-20
skip-checks: true
2020-12-13 12:11:48 +00:00
Jaco Greeff b2286ac06a Add memoize util (#805)
* Add memoize util

* Allow for instanceId & normalize overrides

* memoize tests
2020-12-13 13:05:58 +01:00
Github Actions 57cc6d6d46 [CI Skip] release/beta 4.2.2-19
skip-checks: true
2020-12-13 09:40:57 +00:00
Jaco Greeff 6e1b5901b3 Update .123trigger 2020-12-13 10:36:28 +01:00
Github Actions 203db7467f [CI Skip] release/beta 4.2.2-18
skip-checks: true
2020-12-13 09:33:25 +00:00
Jaco Greeff aa7d4838c7 Bump wasm-crypto (#803) 2020-12-13 10:28:45 +01:00
Github Actions b778f606c5 [CI Skip] release/beta 4.2.2-17
skip-checks: true
2020-12-12 18:00:15 +00:00
Jaco Greeff 45146efce8 Limit logger size via DEBUG_MAX (#802)
* Limit logger size via DEBUG_MAX

* Any negative disables

* Node imports

* Update test
2020-12-12 18:54:31 +01:00
Github Actions 9229f9f295 [CI Skip] release/beta 4.2.2-16
skip-checks: true
2020-12-12 12:35:27 +00:00
Jaco Greeff 2e1c29a5a8 Bump wasm-crypto (#801) 2020-12-12 13:30:36 +01:00
Github Actions 79f925b589 [CI Skip] release/beta 4.2.2-15
skip-checks: true
2020-12-11 22:34:04 +00:00
Jaco Greeff 572c2789cc Bump dev 2020-12-11 23:28:34 +01:00
Github Actions 913f9636ba [CI Skip] release/beta 4.2.2-14
skip-checks: true
2020-12-11 16:42:05 +00:00
Jaco Greeff 83e5592305 Bump WASM, re-add tests 2020-12-11 17:39:58 +01:00
Github Actions b7e579f6b8 [CI Skip] release/beta 4.2.2-13
skip-checks: true
2020-12-11 16:21:40 +00:00
Jaco Greeff c211b811a6 Skip tests until wasm updated 2020-12-11 17:19:35 +01:00
Jaco Greeff 4c02b25a2d Small adjustments for esm (& default build) (#798) 2020-12-11 17:08:16 +01:00
Github Actions 28b2435019 [CI Skip] release/beta 4.2.2-12
skip-checks: true
2020-12-11 08:58:02 +00:00
Jaco Greeff a0e5d60a0a Bump dev 2020-12-11 09:53:45 +01:00
Github Actions 311eceec0d [CI Skip] release/beta 4.2.2-11
skip-checks: true
2020-12-10 16:24:24 +00:00
Jaco Greeff cf24dcdf22 Build esm alongside (unused, but published) (#797) 2020-12-10 17:19:19 +01:00
Github Actions ead3eceef4 [CI Skip] release/beta 4.2.2-10
skip-checks: true
2020-12-10 14:32:25 +00:00
Jaco Greeff 59df9aefc4 Bump wasm (#795)
* Bump wasm

* Bump wasm

* Bump

* Network kilt, etc.
2020-12-10 15:28:02 +01:00
Github Actions cb97cc1786 [CI Skip] release/beta 4.2.2-9
skip-checks: true
2020-12-09 18:19:43 +00:00
Jaco Greeff cf18ecf193 Bump dev (prefer esm in esm mode) (#794) 2020-12-09 19:14:26 +01:00
Github Actions 6e6b13f29a [CI Skip] release/beta 4.2.2-8
skip-checks: true
2020-12-09 16:42:57 +00:00
Jaco Greeff f75a16159d Bump dev (esm type import changes) (#793) 2020-12-09 17:37:15 +01:00
Github Actions b8fe6be9cc [CI Skip] release/beta 4.2.2-7
skip-checks: true
2020-12-09 15:37:44 +00:00
Jaco Greeff 9993325679 Bump WASM, allow esm alongside cjs (#792) 2020-12-09 16:32:12 +01:00
Github Actions ce8fe9f49d [CI Skip] release/beta 4.2.2-6
skip-checks: true
2020-12-09 10:07:34 +00:00
Jaco Greeff 408a6706b1 Adjust imports (#791) 2020-12-09 11:02:55 +01:00
Github Actions 79c7fa3b75 [CI Skip] release/beta 4.2.2-5
skip-checks: true
2020-12-08 10:30:14 +00:00
Jaco Greeff e9713b6c93 Remove --fix on CI (#790) 2020-12-08 11:25:28 +01:00
Github Actions 706a3e0cc2 [CI Skip] release/beta 4.2.2-4
skip-checks: true
2020-12-07 15:19:14 +00:00
Jaco Greeff b1a40516c1 Bump dev (import sorting) (#789) 2020-12-07 16:13:47 +01:00
Github Actions 7cf449074d [CI Skip] release/beta 4.2.2-3
skip-checks: true
2020-12-05 11:40:41 +00:00
Jaco Greeff 2ce7a79263 Bump deps (minor) (#786)
* Bump deps (minor)

* Update Phala
2020-12-05 12:35:10 +01:00
Github Actions cfa5660d54 [CI Skip] release/beta 4.2.2-2
skip-checks: true
2020-12-01 17:56:59 +00:00
Jaco Greeff 1256f2a54a Bump berry (#783)
* Bump berry

* rewrite
2020-12-01 18:33:29 +01:00
Github Actions 2695afa68e [CI Skip] release/beta 4.2.2-1
skip-checks: true
2020-12-01 12:29:57 +00:00
Jaco Greeff af71673c7b import type (#782) 2020-12-01 13:24:37 +01:00
Github Actions 7f489e1a99 [CI Skip] release/beta 4.2.2-0
skip-checks: true
2020-11-24 11:59:02 +00:00
Jaco Greeff 10fb33877c Bump deps (#779)
* Bump deps

* promisify
2020-11-24 12:53:12 +01:00
Github Actions 731def1f56 [CI Skip] release/stable 4.2.1
skip-checks: true
2020-11-23 11:55:30 +00:00
Jaco Greeff 06057da172 4.2 (#778)
* 4.2

* dedupe
2020-11-23 12:49:57 +01:00
Github Actions af3e79e70a [CI Skip] release/beta 4.1.2-3
skip-checks: true
2020-11-23 10:34:05 +00:00
Jaco Greeff 9e5ee72adf Link to Substrate ss58 source (#777) 2020-11-23 11:28:30 +01:00
Github Actions 6a8344020f [CI Skip] release/beta 4.1.2-2
skip-checks: true
2020-11-18 11:28:14 +00:00
Jaco Greeff a1ad6f1dd0 Dedupe bn.js (#775) 2020-11-18 12:22:38 +01:00
Github Actions 71f2b64868 [CI Skip] release/beta 4.1.2-1
skip-checks: true
2020-11-17 15:31:33 +00:00
Jaco Greeff ad7e949c8c s/Tera/Tril/ (#771)
* s/Tera/Tril/

* expentation
2020-11-17 16:26:43 +01:00
Github Actions d24241d656 [CI Skip] release/beta 4.1.2-0
skip-checks: true
2020-11-17 15:01:01 +00:00
Jaco Greeff 91d2e9bbbd s/Giga/Bill/, s/Mega/Mill/ (#770) 2020-11-17 15:54:54 +01:00
Github Actions 8acc5680ac [CI Skip] release/stable 4.1.1
skip-checks: true
2020-11-15 14:42:02 +00:00
Jaco Greeff 4d54ce4686 4.1 (#768) 2020-11-15 15:37:22 +01:00
Github Actions 441e89edd7 [CI Skip] release/beta 4.0.2-14
skip-checks: true
2020-11-15 11:49:59 +00:00
Jaco Greeff f1da9f05fb Cleanup/simplify ETH signing (#767)
* Cleanup/simplify ETH signing

* Cleanup options

* Adjust ETH tests

* checksummed

* mutli ethereum
2020-11-15 12:45:09 +01:00
Github Actions 464d2d38b4 [CI Skip] release/beta 4.0.2-13
skip-checks: true
2020-11-15 09:36:48 +00:00
Jaco Greeff 1ea282c803 Bump deps (#766) 2020-11-15 10:32:04 +01:00
Github Actions 974559bf2e [CI Skip] release/beta 4.0.2-12
skip-checks: true
2020-11-11 10:54:28 +00:00
Jaco Greeff c353003c70 Bump dev (#765) 2020-11-11 11:49:33 +01:00
Github Actions 623bde1a61 [CI Skip] release/beta 4.0.2-11
skip-checks: true
2020-11-10 16:38:24 +00:00
Jaco Greeff 67234fc013 Bumps 2020-11-10 17:32:44 +01:00
Github Actions 4a6d6d647a [CI Skip] release/beta 4.0.2-10
skip-checks: true
2020-11-10 15:12:55 +00:00
Jaco Greeff b375b6c2d5 Mark detectPackage as sideEffects (#764) 2020-11-10 16:07:53 +01:00
Github Actions 1c6fd4558c [CI Skip] release/beta 4.0.2-9
skip-checks: true
2020-11-10 14:40:14 +00:00
Antoine Estienne 3800ffd61a Add eth tests and truncate address for keccak (#763)
* add eth tests and truncate address for keccak

* lint

* refactor
2020-11-10 15:34:45 +01:00
Github Actions d447ed8fc9 [CI Skip] release/beta 4.0.2-8
skip-checks: true
2020-11-10 11:30:18 +00:00
Jaco Greeff abb1062462 Re-enable esm modules (#762) 2020-11-10 12:25:05 +01:00
Github Actions c6bdf78606 [CI Skip] release/beta 4.0.2-7
skip-checks: true
2020-11-09 21:32:14 +00:00
Jaco Greeff 7687d5bf00 Unused esnext 2020-11-09 22:26:52 +01:00
Github Actions 5b246891d7 [CI Skip] release/beta 4.0.2-6
skip-checks: true
2020-11-09 21:15:15 +00:00
Jaco Greeff 3b9617faf4 Extract detectPackage /cryptoWait as side effect (#761) 2020-11-09 22:09:53 +01:00
Github Actions aa57da0806 [CI Skip] release/beta 4.0.2-5
skip-checks: true
2020-11-09 15:34:11 +00:00
Jaco Greeff 66841bba88 Build esnext outputs (#760) 2020-11-09 16:28:42 +01:00
Github Actions 7d963e3602 [CI Skip] release/beta 4.0.2-4
skip-checks: true
2020-11-08 20:40:03 +00:00
Jaco Greeff 82b25aecfb Replace pbkdf2 (#758)
* Replace pbkdf2

* Optional length

* cleanups
2020-11-08 21:34:34 +01:00
Github Actions 9b204fc660 [CI Skip] release/beta 4.0.2-3
skip-checks: true
2020-11-08 19:57:23 +00:00
Jaco Greeff 68bcce7a27 Cleanup pbkdf2 use (#757) 2020-11-08 20:52:02 +01:00
Github Actions 3a57c7da69 [CI Skip] release/beta 4.0.2-2
skip-checks: true
2020-11-08 18:47:26 +00:00
Jaco Greeff 055c4f82f5 Adjust nacl imports (#756) 2020-11-08 19:42:13 +01:00
Github Actions 12d8b07ff1 [CI Skip] release/beta 4.0.2-1
skip-checks: true
2020-11-08 17:12:02 +00:00
Jaco Greeff f07d66562b Remove default exports (#755)
* Remove default exports

* Cleanup tests

* Exports in util

* Single secp256k1 instance

* Length check

* format check

* encoded lengths
2020-11-08 18:07:31 +01:00
Github Actions 80f28da707 [CI Skip] release/beta 4.0.2-0
skip-checks: true
2020-11-08 13:58:25 +00:00
Jaco Greeff 1aec77922f Adjust xxhash imports (only 64 used) (#753) 2020-11-08 14:52:28 +01:00
Github Actions f431f02f11 [CI Skip] release/stable 4.0.1
skip-checks: true
2020-11-08 12:49:18 +00:00
Jaco Greeff 2063183f50 4.0 (#752)
* 4.0

* Exact deps
2020-11-08 13:45:10 +01:00
Github Actions 8280af08a6 [CI Skip] release/beta 4.0.0-11
skip-checks: true
2020-11-08 11:15:38 +00:00
Jaco Greeff 8029a54508 Additional complexity adjustments (#751)
* Adjust encoder/decoder fallbacks

* Dep-dup is functions

* Complexity cleanups

* More complexity adjustments
2020-11-08 12:10:29 +01:00
Github Actions 9e5478e0c0 [CI Skip] release/beta 4.0.0-10
skip-checks: true
2020-11-08 10:25:06 +00:00
Jaco Greeff c67c1966d7 Adjust encoder/decoder fallbacks (#750)
* Adjust encoder/decoder fallbacks

* Dep-dup is functions

* Complexity cleanups
2020-11-08 11:20:22 +01:00
Github Actions e1aa096cef [CI Skip] release/beta 4.0.0-9
skip-checks: true
2020-11-07 16:16:46 +00:00
Jaco Greeff 7135941b6a Cleanups to signature verification (#749) 2020-11-07 17:11:49 +01:00
Github Actions dc24fb82a8 [CI Skip] release/beta 4.0.0-8
skip-checks: true
2020-11-07 15:05:33 +00:00
Jaco Greeff 32cfe3707e Remove jest getRandomValues polyfill (#748)
* Remove jest getRandomValues polyfill

* react-native in all x-*
2020-11-07 15:59:56 +01:00
Github Actions 97378be94e [CI Skip] release/beta 4.0.0-7
skip-checks: true
2020-11-07 14:27:52 +00:00
Jaco Greeff db0559e9c9 RN-specific getRandomValues (no node crypto) (#747)
* RN-specific getRandomValues (no node crypto)

* Use polyfilled as available

* === object
2020-11-07 15:22:42 +01:00
Github Actions 94d6a900f7 [CI Skip] release/beta 4.0.0-6
skip-checks: true
2020-11-07 10:22:24 +00:00
Jaco Greeff d751c03d45 Bump wasm-crypto (#745)
* Bump wasm-crypto

* Use x-randomvalues for randomAsU8a
2020-11-07 11:18:06 +01:00
Github Actions aef8003d50 [CI Skip] release/beta 4.0.0-5
skip-checks: true
2020-11-05 15:05:27 +00:00
Jaco Greeff 2810b35d6c Add Synesthesia to networks (#744)
* Add Synesthesia to networks

* Add networks:crosscheck to steps for PR

* Add notifications team
2020-11-05 15:59:47 +01:00
Github Actions 6148932389 [CI Skip] release/beta 4.0.0-4
skip-checks: true
2020-11-05 14:43:13 +00:00
Jaco Greeff f4889a36d4 Bump wasm (#743) 2020-11-05 15:37:38 +01:00
Github Actions e8879c0ffc [CI Skip] release/beta 4.0.0-3
skip-checks: true
2020-11-03 12:09:33 +00:00
Jaco Greeff ed64514415 Bump wasm-crypto 2020-11-03 13:04:10 +01:00
Github Actions fcc25ee2c8 [CI Skip] release/beta 4.0.0-2
skip-checks: true
2020-11-03 09:34:06 +00:00
Jaco Greeff 695e19a8a7 Remove polyfills (#739)
* Remove polyfills

* CHANGELOG

* jestConfig

* Adjust jest

* Revert explicit overrides (from base)

* Fix dev

* 4.0.0

* Bump wasm-crypto

* min/max duplication

* Split tests, update dev

* startChar

* validate params

* complexity?

* secp256k1Verify options

* sign Options

* hasher extraction
2020-11-03 10:29:22 +01:00
Jaco Greeff 384bf9a41a CodeClimate exclusions 2020-11-01 15:08:35 +01:00
Github Actions 8f24a2758e [CI Skip] release/stable 3.7.1
skip-checks: true
2020-11-01 13:49:36 +00:00
Jaco Greeff 3230663ae1 3.7 (#738)
* 3.7

* Update new rules

* RegExp

* formatBalance cleanups

* Revert

* Formatting

* fill

* format test fix

* cleanups

* Cleanups

* Expand bip39 tests

* Cleanups

* Cleanups
2020-11-01 14:44:14 +01:00
Github Actions 4a0fa7f615 [CI Skip] release/beta 3.6.2-12
skip-checks: true
2020-10-29 20:33:55 +00:00
Jaco Greeff 0f05954dc5 Move @polkadot/x-{fetch,textdecoder,textencoder,ws} (#737)
* Move @polkadot/x-{fetch,textdecoder,textencoder,ws}

* Adjust copyrights

* Fix jest aliassing

* tsconfig resolution
2020-10-29 21:28:22 +01:00
Github Actions 55f442f9fa [CI Skip] release/beta 3.6.2-11
skip-checks: true
2020-10-29 19:25:00 +00:00
Jaco Greeff 7e5edc46a3 Add Totem (ss58 = 14) (#736) 2020-10-29 20:19:30 +01:00
Github Actions d500f98fb4 [CI Skip] release/beta 3.6.2-10
skip-checks: true
2020-10-29 13:41:24 +00:00
Jaco Greeff 7b8902ce3f assertResult with undefined 2020-10-29 14:35:28 +01:00
Github Actions 98b3ad642f [CI Skip] release/beta 3.6.2-9
skip-checks: true
2020-10-29 12:33:33 +00:00
Jaco Greeff 14466e27ac assertReturn (#735) 2020-10-29 13:28:19 +01:00
Github Actions 16ffd1b467 [CI Skip] release/beta 3.6.2-8
skip-checks: true
2020-10-28 14:04:56 +00:00
Jaco Greeff ca52fd7e5b Bump dev (#733)
* Bump dev

* Rewrite
2020-10-28 14:59:36 +01:00
Github Actions ea5d3df64c [CI Skip] release/beta 3.6.2-7
skip-checks: true
2020-10-28 12:58:18 +00:00
Jaco Greeff b51ed71796 string* takes in String (class) inputs (#732) 2020-10-28 13:52:40 +01:00
Github Actions bf28507ae8 [CI Skip] release/beta 3.6.2-6
skip-checks: true
2020-10-26 22:02:25 +00:00
Jaco Greeff 6715bef24a Align JS bip39 with wasm-crypto (#730)
* Align JS bip39 with wasm-crypto

* Cleanups
2020-10-26 22:57:11 +01:00
Github Actions badbbd76cb [CI Skip] release/beta 3.6.2-5
skip-checks: true
2020-10-26 20:43:23 +00:00
Jaco Greeff 253776a510 Cleanup elliptic imports (#729) 2020-10-26 21:37:51 +01:00
Github Actions e1ef295bfa [CI Skip] release/beta 3.6.2-4
skip-checks: true
2020-10-26 19:36:31 +00:00
Jaco Greeff 73c89f4e3c Remove chalk dependency (#728) 2020-10-26 20:30:36 +01:00
Github Actions a52e0dfb16 [CI Skip] release/beta 3.6.2-3
skip-checks: true
2020-10-26 14:51:26 +00:00
Jaco Greeff 9f8ed7bb50 Remove copy-to-apps script 2020-10-26 15:46:29 +01:00
Github Actions a932f9408a [CI Skip] release/beta 3.6.2-2
skip-checks: true
2020-10-26 10:37:31 +00:00
Jaco Greeff 7907ce6dbf Bump actions, cleanups (#727) 2020-10-26 11:31:49 +01:00
Github Actions 230d510491 [CI Skip] release/beta 3.6.2-1
skip-checks: true
2020-10-23 11:10:06 +00:00
Jaco Greeff 415fd1b2d1 Bump deps (#726) 2020-10-23 13:05:45 +02:00
Github Actions 89c954216d [CI Skip] release/beta 3.6.2-0
skip-checks: true
2020-10-23 08:08:22 +00:00
Jaco Greeff b689796b25 Create .nojekyll 2020-10-23 10:03:23 +02:00
Jaco Greeff c4c18d324b Create 404.html 2020-10-23 10:02:53 +02:00
Jaco Greeff b7bf500343 Create index.html 2020-10-23 10:02:36 +02:00
Github Actions e5c6baf425 [CI Skip] release/stable 3.6.1
skip-checks: true
2020-10-18 11:56:50 +00:00
Jaco Greeff 0127899c5e 3.6 (#724) 2020-10-18 13:50:52 +02:00
Github Actions f23611cad6 [CI Skip] release/beta 3.6.0-beta.17
skip-checks: true
2020-10-18 10:58:39 +00:00
Jaco Greeff a74df109b0 Use githubusercontent (#723)
* Use githubusercontent

* crosscheck
2020-10-18 12:52:39 +02:00
Github Actions 9582013bfa [CI Skip] release/beta 3.6.0-beta.16
skip-checks: true
2020-10-17 15:01:16 +00:00
Jaco Greeff 6c148dcb3b Add ss58 output to issue (#721) 2020-10-17 16:55:43 +02:00
Jaco Greeff 65488bbff8 Bump deps (#722)
* Bump deps

* Rewrite
2020-10-17 16:53:04 +02:00
Github Actions 40cbb81d1e [CI Skip] release/beta 3.6.0-beta.15
skip-checks: true
2020-10-17 08:19:20 +00:00
Jaco Greeff 77b896054f Remove (unused) typedoc (#720)
* Remove (unused) typedoc

* rm typedoc package
2020-10-17 10:13:30 +02:00
Github Actions 89c717bd11 [CI Skip] release/beta 3.6.0-beta.14
skip-checks: true
2020-10-16 10:22:22 +00:00
Jaco Greeff b22f5643a9 Update chainx details (#718) 2020-10-16 12:16:25 +02:00
Github Actions 8d68ed3117 [CI Skip] release/beta 3.6.0-beta.13
skip-checks: true
2020-10-16 10:15:32 +00:00
Jaco Greeff 65b1c81c21 Expose all claimed/available networks (#719)
* Expose all claimed/available networks

* Expansion
2020-10-16 12:09:37 +02:00
Github Actions 28cd140cfb [CI Skip] release/beta 3.6.0-beta.12
skip-checks: true
2020-10-16 09:09:31 +00:00
Jaco Greeff 73b553fbd2 Update ss58-check.yml 2020-10-16 11:03:08 +02:00
Jaco Greeff f12075798d Update ss58-check.yml 2020-10-16 10:54:42 +02:00
Jaco Greeff 323db21306 Rename ss58-template.md to ss58-check.md 2020-10-16 10:54:12 +02:00
Jaco Greeff d54302eacc Rename ISSUE_TEMPLATE.md to ss58-template.md 2020-10-16 10:53:12 +02:00
Jaco Greeff 9a98d5b6e4 Swap to nightly runs (networkCheck) (#714)
* Swap to nightly runs (newtorkCheck)

* Update template

* Rename

* Update
2020-10-16 10:50:10 +02:00
Jaco Greeff 5ec613adf9 Delete ss58-registry.yml 2020-10-16 10:43:46 +02:00
Github Actions 567ce7955a [CI Skip] release/beta 3.6.0-beta.11
skip-checks: true
2020-10-16 08:33:42 +00:00
Jaco Greeff b185dcb072 Update with different issue creator (#713) 2020-10-16 10:28:04 +02:00
Github Actions 79010f83dc [CI Skip] release/beta 3.6.0-beta.10
skip-checks: true
2020-10-16 08:22:42 +00:00
Jaco Greeff 5354f93946 Ignore checkNetworks on normal runs (#712)
* Ignore checkNetworks on normal runs

* Every 15 min (for now)
2020-10-16 10:16:16 +02:00
Jaco Greeff e787e66ef9 Add label to nightly run 2020-10-16 09:34:09 +02:00
Jaco Greeff 440e826fed Update file path 2020-10-16 09:26:37 +02:00
Jaco Greeff d2e5e1d441 Create issue on failure of ss58 nightly run (#711) 2020-10-15 19:16:04 +02:00
Github Actions 32fc32f414 [CI Skip] release/beta 3.6.0-beta.9
skip-checks: true
2020-10-15 00:39:19 +00:00
Jaco Greeff 0a7b2a7a9f Support multipe genesisHashes (#710) 2020-10-15 02:33:18 +02:00
Github Actions c315e6fdaa [CI Skip] release/beta 3.6.0-beta.8
skip-checks: true
2020-10-14 23:52:33 +00:00
Jaco Greeff b5d9ed36e1 Add Dock genesis to networks (was avail on apps UI) (#708) 2020-10-15 01:46:22 +02:00
Github Actions f24c7983c8 [CI Skip] release/beta 3.6.0-beta.7
skip-checks: true
2020-10-14 12:58:32 +00:00
Jaco Greeff 3447cd40bf Add @polkadot/networks (#707)
* Add @polkadot/networks

* Update .github/workflows/ss58-registry.yml

* Use prefixes from @polkadot/network

* Update packages/networks/src/checkLatest.spec.ts

* Cleanups

* Auto-check fields based on schema

* typo

* language
2020-10-14 14:52:29 +02:00
Github Actions 95f4702e26 [CI Skip] release/beta 3.6.0-beta.6
skip-checks: true
2020-10-12 16:17:25 +00:00
Jake Naviasky 506142da8a Add evmToAddress and addressToEvm crypto utils. (#705) 2020-10-12 18:11:20 +02:00
Github Actions 34f6eac538 [CI Skip] release/beta 3.6.0-beta.5
skip-checks: true
2020-10-07 11:30:17 +00:00
Jaco Greeff ae1a37cdf7 Verify with MultiSignature (#703)
* Verify with MultiSignature

* Bump dev
2020-10-07 13:24:24 +02:00
Github Actions fab087bbe5 [CI Skip] release/beta 3.6.0-beta.4
skip-checks: true
2020-10-06 13:36:00 +00:00
Jaco Greeff 8608098996 Remove docs (replaced by docs repo) (#702) 2020-10-06 15:30:49 +02:00
Github Actions 220f4029b1 [CI Skip] release/beta 3.6.0-beta.3
skip-checks: true
2020-10-04 13:41:57 +00:00
Jaco Greeff d21daf1434 Bump dev (without lerna) (#701)
* Bump dev (without lerna)

* Add yarn plugins
2020-10-04 15:35:59 +02:00
Github Actions 1a4c16f797 [CI Skip] release/beta 3.6.0-beta.2
skip-checks: true
2020-10-02 12:44:29 +00:00
Jaco Greeff 975103fd3c Remove SUMMARY.md is prep for rework (#700) 2020-10-02 14:38:11 +02:00
Github Actions fb84ac7c25 [CI Skip] release/beta 3.6.0-beta.1
skip-checks: true
2020-10-01 06:47:08 +00:00
Rocco Musolino 13ae8665d5 remove doc broken link (#697) 2020-10-01 08:40:50 +02:00
Github Actions 4e8b2beb0b [CI Skip] release/beta 3.6.0-beta.0
skip-checks: true
2020-10-01 06:09:37 +00:00
Jaco Greeff dd1220ac97 s/mnemonicToBip39/mnemonicToLegacySeed/ (#699)
* s/mnemonicToBip39/mnemonicToLegacySeed/

* Update CHANGELOG.md
2020-10-01 08:03:18 +02:00
535 changed files with 8399 additions and 13003 deletions
+9 -2
View File
@@ -1,2 +1,9 @@
5
2.6.22.12.2
6
2.6.2
2.12.2
5.2.2
5.2.3
5.4.2
5.4.3
5.4.4
-4
View File
@@ -1,4 +0,0 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('./babel.config.js');
+2 -1
View File
@@ -1,4 +1,5 @@
exclude_patterns:
- "**/*.spec.js"
- "**/*.spec.ts"
- "docs/**/*.js"
- "packages/networks/src/index.ts"
- "packages/util/src/is/utf8.ts"
-4
View File
@@ -1,4 +0,0 @@
.eslintrc.js
**/build/*
**/coverage/*
**/node_modules/*
+11 -2
View File
@@ -1,10 +1,19 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint');
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
'.eslintrc.js',
'.github/**',
'.vscode/**',
'.yarn/**',
'**/build/*',
'**/coverage/*',
'**/node_modules/*'
],
parserOptions: {
...base.parserOptions,
project: [
+10
View File
@@ -0,0 +1,10 @@
---
title: SS58 registry is outdated
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
Check the nightly cron output or run `yarn networks:crosscheck` locally. The output as found from the test includes:
+2 -2
View File
@@ -5,11 +5,11 @@ jobs:
pr:
strategy:
matrix:
step: ['lint', 'test', 'build', 'docs']
step: ['lint', 'test', 'build', 'networks:crosscheck']
name: ${{ matrix.step }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- name: ${{ matrix.step }}
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
+2 -3
View File
@@ -8,18 +8,17 @@ jobs:
master:
strategy:
matrix:
step: ['build:release', 'docs:release']
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@v1
- uses: actions/checkout@v2
with:
token: ${{ secrets.GH_PAT }}
- name: ${{ matrix.step }}
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
GH_PAGES_SRC: build-docs
GH_PAT: ${{ secrets.GH_PAT }}
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+24
View File
@@ -0,0 +1,24 @@
name: SS58
on:
schedule:
- cron: '45 3 * * *'
jobs:
ss58:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: check
env:
CI_LOG: 123
run: |
yarn install --immutable | grep -v 'YN0013'
yarn networks:crosscheck
- name: issue
if: ${{ failure() }}
uses: JasonEtco/create-an-issue@v2
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT_BOT }}
with:
filename: .github/ss58-check.md
+1 -1
View File
@@ -1 +1 @@
10
12
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
+55
View File
File diff suppressed because one or more lines are too long
+3 -1
View File
@@ -7,5 +7,7 @@ nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
yarnPath: .yarn/releases/yarn-2.2.2.cjs
yarnPath: .yarn/releases/yarn-2.4.0.cjs
+143
View File
@@ -1,5 +1,148 @@
# CHANGELOG
## 5.5.1 Jan 31, 2021
Changes:
- Added `hdLedger` to util-crypto for Ledger-compatible bip32+ed25519 derivation
- Added `hmac{Sha256, 512}` to util-crypto
- Add `slip44` indices for Ledger into `@polkadot/networks`
- Remove `module` entry in `package.json` (only rely on exports map)
- Remove direct references to `global` object, use `@polkadot/x-global`
- Update `@ledgerhq` dependencies to latest
## 5.4.1 Jan 24, 2021
Contributed:
- Adjust Ledger app lookup for Polymesh (Thanks to https://github.com/adamdossa)
Changes:
- Allow decimals as `number[]` & symbol as `string[]` in balanceFormat defaults
- Add `schnorrkelVrf{Sign, Verify}` to `@polkadot/util-crypto`
- Export `vrf{Sign, Verify}` on keyring interface
- Move `@polkadot/x-rxjs` packages from the api repo
- Align `@polkadot/networks` with Substrate master
- Explicit edcsa tests for derivation
- `@polkadot/wasm-crypto` 3.2.1
## 5.3.1 Jan 17, 2021
**Important** For users of the `@polkadot/ledger` package, it is now included in this repo (since it is a general utility) and renamed to `@polkadot/hw-ledger`
Contributed:
- Add Dock Ledger integration (Thanks to https://github.com/lovesh)
- Add Polymesh Ledger integration (Thanks to https://github.com/adamdossa)
- Add flag for Ledger capabilities on networks (Thanks to https://github.com/Tbaut)
Changes:
- Move `@polkadot/ledger` packages into common
- Update `@polkadot/networks` to align with latest Substrate ss58-registry
## 5.2.1 Dec 27, 2020
Changes:
- Add `arrayFlatten` to merge a series of arrays into a single
- Add `arrayChunk` to chunk an array into multiples of defined size
- Add `bitLength` param (allowed 256, 512) to `keccakAs{Hex, U8a}`
- Align `@polkadot/networks` with Substrate master
## 5.1.1 Dec 19, 2020
Changes:
- `detectPackage` now can take a path-retrieval callback as second argument
- Adjust `blake2js` imports to consistently cater for esm & cjs usage
- Explicitly mark `detectPackage` usage as having side-effects
- Align `@polkadot/networks` with Substrate master
- `@polkadot/wasm-crypto` 3.1.1
## 5.0.1 Dec 13, 2020
**Important** While this package contains no external interface changes, it now compiles and ships both cjs and esm modules. This means that modern bundlers will have more information for tree-shaking available. Additionally when using Node with `.mjs` extensions, the esm version imports will be used on recent Node versions. Adding an export map, as here, may have some impacts so a major semver bump is advised. There may be (small) dragons hiding in the dark corners...
Changes:
- Build and expose both cjs and esm via exports map
- Use `import type { ... }` form for all type imports
- Align with Substrate master network list
- Debug logs now don't depend on `NODE_ENV`, but rather `DEBUG=<type,type,...>` (`*` logs all)
- Limit debug console output via `DEBUG_MAX=<number>` value, trimming when passed
- Add `memoize` util, allowing for function memoization (as used in the API)
- Align `@polkadot/networks` with Substrate master
- `@polkadot/wasm-crypto` 3.0.1
## 4.2.1 Nov 23, 2020
Changes:
- Rename default Mega to Million, Giga to Billion and Tera to Trillion in formatter
- Dedupe bn.js by aligning versions between different libraries
- Add explicit link to base Substrate ss58 formats (as managed in `@polkadot/util`)
## 4.1.1 Nov 16, 2020
Contributed:
- Expand ETH tests, allow for verification against address (Thanks to https://github.com/joelamouche)
Changes:
- Replace pbkdf2 imports with explicit use from sync-only package
- Adjust secp256k1 imports with shared elliptic
- Expand crypto tests for explicit wasm vs JS compares in all cases
## 4.0.1 Nov 8, 2020
- **Breaking change** Polyfills are not injected by these libraries anymore to avoid clobbering external globals, the user should provide them if their environment is missing base functionality.
Changes:
- Remove built-in utility polyfills for `Array.fill`, `String.padStart`, `String.padEnd` as well as `Object.setPrototypeOf`. These should be provided by the actual user of the libraries if so required.
- Update `@polkadot/wasm-crypto` library (under-the-hood cleanups)
- Remove explicit crypto polyfill injection (aligning with updated `@polkadot/wasm-crypto`)
- Add cross-environment `@polkadot/x-randomvalues` (for use in `@polkadot/wasm-crypto`)
## 3.7.1 Nov 1, 2020
Changes:
- Remove the use of `chalk` (logger) for less overall dependencies
- `string*` utilities now also allows `String` (class) inputs
- Align bip39 use with wasm-crypto for English-only wordlist, default, non supplied)
- Adjust elliptic imports for explicit paths (allows tree-shaking)
- Add Totem (ss58 prefix 14) into `@polkadot/networks`
- Move `@polkadot/x-{fetch,textdecoder,textencoder,ws}` into `common` repo
## 3.6.1 Oct 18, 2020
Contributed:
- Add evmToAddress and addressToEvm `@polkadot/util-crypto` (Thanks to https://github.com/jnaviask)
- Remove invalid link to docs (thanks to https://github.com/roccomuso)
Changes:
- Rename `mnemonicToBip39` to `mnemonicToLegacySeed` (used in non-Substrate compatible fashion)
- Update pair signature verification to handle MultiSignature results
- Move documentation to docs repo
- Added `@polkadot/networks` for a list of known networks and their identifying information
## 3.5.1 Sep 27, 2020
Contributed:
+2 -2
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/babel');
module.exports = require('@polkadot/dev/config/babel-config-cjs.cjs');
-19
View File
@@ -1,19 +0,0 @@
#!/bin/bash
# Copyright 2017-2020 @polkadot/util authors & contributors
# SPDX-License-Identifier: Apache-2.0
function copy_folder () {
SRC="packages/$1/build"
DST="../apps/node_modules/@polkadot/$1"
echo "** Copying $SRC to $DST"
rm -rf $DST
cp -r $SRC $DST
}
yarn polkadot-dev-build-ts
copy_folder "keyring"
copy_folder "util"
copy_folder "util-crypto"
+1
View File
@@ -0,0 +1 @@
-41
View File
@@ -1,41 +0,0 @@
module.exports = {
base: '/common/',
title: 'polkadot-js/common',
description: 'Common utilities and libraries that are in use accross all @polkadot projects',
markdown: {
lineNumbers: true
},
themeConfig: {
displayAllHeaders: true,
nav: [
{ text: 'Polkadot/Substrate Apps', link: 'https://polkadot.js.org/apps/' },
{ text: 'Project family', link: 'https://polkadot.js.org/' },
{
text: 'Documentation',
items: [
{ text: 'API Reference', link: 'https://polkadot.js.org/api/' },
{ text: 'Utility Reference (this)', link: 'https://polkadot.js.org/common/' },
{ text: 'UI Libs Reference', link: 'https://polkadot.js.org/ui/' },
]
},
{ text: 'GitHub', link: 'https://github.com/polkadot-js/common' }
],
search: false,
sidebar: [
{
title: 'Examples (keyring)',
path: '/examples/keyring/',
collapsable: false,
sidebarDepth: 1,
children: [
['/examples/keyring/01_create_account/', 'Create account'],
['/examples/keyring/02_load_accounts/', 'Load Accounts']
]
},
['/util/', '@polkadot/util'],
['/util-crypto/', '@polkadot/util-crypto'],
['/keyring/', '@polkadot/keyring'],
'/CONTRIBUTING.md'
]
}
};
-9
View File
@@ -1,9 +0,0 @@
$accentColor = #fd8824
$textColor = #2c3e50
.home .hero .description,
.home .feature h2,
.home .feature p {
color: $textColor
opacity: 0.75
}
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=1">
<meta http-equiv="refresh" content="0;URL='https://polkadot.js.org/docs/'" />
<title>Redirecting to https://polkadot.js.org/docs/</title>
</head>
<body>
Redirecting to <a href="https://polkadot.js.org/docs/">https://polkadot.js.org/docs/</a>
</body>
</html>
-51
View File
@@ -1,51 +0,0 @@
---
home: true
heroText:
tagline:
# Bringing JavaScript to the Polkadot world.
# actionText: Repository Overview
# actionLink: /REPOS.md
features:
- title: Keyring
details: Manage user keys allowing for signing, encryption and decryption.
- title: Utilities
details: Various user utilities to work with data and perform check on it.
- title: Crypto
details: A thin and easy-to-use wrapper around cryptographic and hashing libraries.
footer: Apache-2 Licensed | Copyright © 2017-2019 polkadot-js authors and contributors
---
## Welcome
Various useful utility functions that are used across all projects in the [@polkadot](https://polkadot.js.org) namespace. It provides utility functions with additional safety checks, allowing not only for consistent coding, but also reducing the general boilerplate.
::: tip Examples
In a rush and just want examples? [Jump right in](/examples/keyring/) and get a handle on using the various components in your projects.
:::
## Available packages
It is split up into a number of internal packages, namely utilities -
- [keyring](keyring/README.md) Keyring management
- [util](util/README.md) General utilities
- [util-crypto](util-crypto/README.md) Crypto and hashing utilities
## The Polkadot Project
You can read more about the Polkadot Network at [https://polkadot.network/](https://polkadot.network/)
## Github repositories
You can find the Polkadot repositories at:
- [https://github.com/polkadot-js](https://github.com/polkadot-js)
- [https://github.com/paritytech/polkadot](https://github.com/paritytech/polkadot)
- [https://github.com/paritytech/substrate](https://github.com/paritytech/substrate)
This documentation is generated from [https://github.com/polkadot-js/common](https://github.com/polkadot-js/common)
## Contributing
Contribution to Polkadot JS Common are more than welcome. You can [report issues](https://github.com/polkadot-js/common/issues/new) and [log feature requests](https://github.com/polkadot-js/common/issues/new).
-1
View File
@@ -1 +0,0 @@
yarn.lock
@@ -1,5 +0,0 @@
# Create Account
The following example shows how to create and account with keyring.
<<< @/docs/examples/keyring/01_create_account/index.js
@@ -1,22 +0,0 @@
/* eslint-disable header/header */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/unbound-method */
// Import Keyring class and utility function
const Keyring = require('@polkadot/keyring').default;
const stringToU8a = require('@polkadot/util/string/toU8a').default;
async function main () {
// Create account seed for Alice
const ALICE_SEED = 'Alice'.padEnd(32, ' ');
// Create an instance of the Keyring
const keyring = new Keyring();
// Create pair and add Alice to keyring pair dictionary (with account seed)
const pairAlice = keyring.addFromSeed(stringToU8a(ALICE_SEED));
console.log(`Created keyring pair for Alice with address: ${keyring.getPair(pairAlice.address).address}`);
}
main().catch(console.error).finally(() => process.exit());
@@ -1,19 +0,0 @@
{
"name": "01_create_account",
"version": "0.1.0",
"description": "Example showing how to create an account",
"main": "index.js",
"author": "ltfschoen",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/util": "^0.32.10",
"@polkadot/keyring": "^0.32.10"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
@@ -1,5 +0,0 @@
# Load Accounts
The following example shows how to load all accounts from the keyring as pairs and convert them into JSON format.
<<< @/docs/examples/keyring/02_load_accounts/index.js
@@ -1,34 +0,0 @@
/* eslint-disable header/header */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/unbound-method */
// Import Keyring class and utility function
const Keyring = require('@polkadot/keyring').default;
const stringToU8a = require('@polkadot/util/string/toU8a').default;
async function main () {
// Create account seed for Alice and Bob
const ALICE_SEED = 'Alice'.padEnd(32, ' ');
const BOB_SEED = 'Bob'.padEnd(32, ' ');
// Create an instance of the Keyring
const keyring = new Keyring();
// Create their pairs with account seeds. Add to keyring pair dictionary
keyring.addFromSeed(stringToU8a(ALICE_SEED));
keyring.addFromSeed(stringToU8a(BOB_SEED));
// Note that we did not use `addFromAddress` since it does not add the
// secret key to memory so we cannot later retrieve it with `getPairs`
// Retrieve all keyring pairs from the keyring pair dictionary
keyring
.getPairs()
.forEach((pair, index) => {
const { address } = pair;
console.log(`\nAccount with index #${index} has json: `, JSON.stringify(keyring.toJson(address), null, 2));
});
}
main().catch(console.error).finally(() => process.exit());
@@ -1,19 +0,0 @@
{
"name": "02_load_accounts",
"version": "0.1.0",
"description": "Example showing how to load accounts",
"main": "index.js",
"author": "ltfschoen",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/util": "^0.32.10",
"@polkadot/keyring": "^0.32.10"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
@@ -1,5 +0,0 @@
# Validate Adress
- This function will return true if the address is a legitamate Polkadot address and false if it is not
- Works both with Ed25519 and Sr25519 key types
@@ -1,24 +0,0 @@
/* eslint-disable header/header */
const { decodeAddress, encodeAddress } = require('@polkadot/keyring');
const { hexToU8a, isHex } = require('@polkadot/util');
const address = '5GrpknVvGGrGH3EFuURXeMrWHvbpj3VfER1oX5jFtuGbfzCE';
const isValidAddressPolkadotAddress = () => {
try {
encodeAddress(
isHex(address)
? hexToU8a(address)
: decodeAddress(address)
);
return true;
} catch (error) {
return false;
}
};
const isValid = isValidAddressPolkadotAddress();
console.log(isValid);
@@ -1,18 +0,0 @@
{
"name": "03_validate_address",
"version": "0.1.0",
"description": "Example showing how to validate a polkadot address",
"main": "index.js",
"author": "Jesse",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/keyring": "*"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
-12
View File
@@ -1,12 +0,0 @@
# Keyring Examples
Here you will find a list of examples that takes you through the basics of connecting to a local node, retrieving data from the Node and chain and execute transactions on the chain.
## Running the examples
From within each folder run the following to install required dependencies and to execute the example:
```shell
yarn;
yarn start
```
@@ -1,5 +0,0 @@
# Encrypt & Decrypt Message using NaCl
The following example shows how to encrypt and decrypt a message with NaCl (pronouced "salt"), which is a Networking and Cryptography library used in util-crypto.
[include](index.js)
@@ -1,27 +0,0 @@
/* eslint-disable header/header */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/unbound-method */
const { naclDecrypt, naclEncrypt } = require('@polkadot/util-crypto');
async function main () {
const secret = new Uint8Array(32);
const messagePreEncryption = new Uint8Array([1, 2, 3, 4, 5, 4, 3, 2, 1]);
const noncePreEncryption = new Uint8Array(24);
// Encrypt the message
const { encrypted, nonce } = naclEncrypt(messagePreEncryption, secret, noncePreEncryption);
// Show contents of the encrypted message
console.log(`Encrypted message: ${JSON.stringify(encrypted, null, 2)}`);
// Decrypt the message
const messageDecrypted = naclDecrypt(encrypted, nonce, secret);
// Convert each Uint8Array to a string for comparison
const isMatch = messagePreEncryption.toString === messageDecrypted.toString;
// Verify that the decrypted message matches the original message
console.log(`Does the decrypted message match the original message? ${isMatch}`);
}
main().catch(console.error).finally(() => process.exit());
@@ -1,18 +0,0 @@
{
"name": "01_encrypt_decrypt_message_nacl",
"version": "0.1.0",
"description": "Example showing how to encrypt and decrypt a message using NaCl",
"main": "index.js",
"author": "ltfschoen",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/util-crypto": "^0.32.10"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
@@ -1,5 +0,0 @@
# Sign & Verify Message using NaCl
The following example shows how to sign and verify a message with NaCl (pronouced "salt"), which is a Networking and Cryptography library used in util-crypto.
[include](index.js)
@@ -1,33 +0,0 @@
/* eslint-disable header/header */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/unbound-method */
const { stringToU8a, u8aToHex } = require('@polkadot/util');
const { naclEncrypt, naclKeypairFromSeed, naclSign, naclVerify, randomAsU8a } = require('@polkadot/util-crypto');
async function main () {
// Create account seed for Alice as fallback if generated mnemonic not valid
const seedAlice = 'Alice'.padEnd(32, ' ');
// Generate new public/secret keypair for Alice from the supplied seed
const { publicKey, secretKey } = naclKeypairFromSeed(stringToU8a(seedAlice));
// Encrypt message. Create Uint8Array's filled with random bytes of specified length
const secret = randomAsU8a(32);
const messagePreEncryption = stringToU8a('please send me DOTs');
const noncePreEncryption = randomAsU8a(24);
const { encrypted } = naclEncrypt(messagePreEncryption, secret, noncePreEncryption);
// Sign the message with a valid signature
const messageSignature = naclSign(encrypted, secretKey);
console.log(`Message signature: ${u8aToHex(messageSignature)}`);
// Validate that the message was correctly signed
const isValidSignature = naclVerify(encrypted, messageSignature, publicKey);
console.log(`Was the message correctly signed? ${isValidSignature}`);
}
main().catch(console.error).finally(() => process.exit());
@@ -1,18 +0,0 @@
{
"name": "02_sign_verify_message_nacl",
"version": "0.1.0",
"description": "Example showing how to sign and verify a message using NaCl",
"main": "index.js",
"author": "ltfschoen",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/util-crypto": "^0.32.10"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
@@ -1,5 +0,0 @@
# Create & Generate Mnemonic using BIP39
The following example shows how to create and generate mnemonics using BIP39.
[include](index.js)
@@ -1,29 +0,0 @@
/* eslint-disable header/header */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/no-unused-vars */
const { mnemonicGenerate, mnemonicToSeed, mnemonicValidate, naclKeypairFromSeed } = require('@polkadot/util-crypto');
async function main () {
// Create mnemonic string for Alice using BIP39
const mnemonicAlice = mnemonicGenerate();
console.log(`Generated mnemonic: ${mnemonicAlice}`);
// Validate the mnemic string that was generated
const isValidMnemonic = mnemonicValidate(mnemonicAlice);
console.log(`isValidMnemonic: ${isValidMnemonic}`);
// Create valid seed from mnemonic as u8a and convert it to a string
// FIXME - Replace with mnemonicToSeed once exposed
const seedAlice = mnemonicToSeed(mnemonicAlice);
// Generate new public/secret keypair for Alice from the supplied seed
const { publicKey, secretKey } = naclKeypairFromSeed(seedAlice);
// Encrypt, Sign and Validate the message. See Example 'Sign & Verify Message'
}
main().catch(console.error).finally(() => process.exit());
@@ -1,18 +0,0 @@
{
"name": "03_mnemonic_generate_validate_bip39",
"version": "0.1.0",
"description": "Example showing how to sign and verify a message using NaCl",
"main": "index.js",
"author": "ltfschoen",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules",
"start": "node index.js"
},
"dependencies": {
"@polkadot/util-crypto": "^0.32.10"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
@@ -1,5 +0,0 @@
# Generate a Multisig Account
Substrate provides a multisig dispatch function in its
[Utility pallet](https://crates.parity.io/pallet_utility/index.html). This example generates the
address that would correspond to a set of addresses and threshold.
@@ -1,40 +0,0 @@
/* eslint-disable header/header */
import { createKeyMulti, encodeAddress, sortAddresses } from '@polkadot/util-crypto';
const SS58Prefix = 0;
// Input the addresses that will make up the multisig account.
const addresses = [
'1nUC7afqmo7zwRFWxDjrUQu9skk6fk99pafb4SiyGSRc8z3',
'1ZX2XntfLEHrBPy73DpfQp9rG7pbLyvrFjEpi7mNKQgyga5',
'14b1kB7CrqzRUeMsKc26FJ73f8FCpxAX6sNieu9gfYSfJuoL'
];
// The number of accounts that must approve. Must be greater than 0 and less than
// or equal to the total number of addresses.
const threshold = 2;
// The address (as index in `addresses`) that will submit a transaction.
const index = 0;
function main () {
// Address as a byte array.
const multiAddress = createKeyMulti(addresses, threshold);
// Convert byte array to SS58 encoding.
const Ss58Address = encodeAddress(multiAddress, SS58Prefix);
console.log(`\nMultisig Address: ${Ss58Address}`);
// Take addresses and remove the sender.
const otherSignatories = addresses.filter((who) => who !== addresses[index]);
// Sort them by public key.
const otherSignatoriesSorted = sortAddresses(otherSignatories, SS58Prefix);
console.log(`\nOther Signatories: ${otherSignatoriesSorted}\n`);
process.exit();
}
main();
@@ -1,14 +0,0 @@
{
"name": "04_generate_multisig_address",
"version": "0.1.0",
"description": "Example showing how to generate a multisig address for Substrate's Utility pallet",
"main": "index.js",
"author": "joepetrowski",
"license": "MIT",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@polkadot/util-crypto": "^2.9.0-beta.1"
}
}
-13
View File
@@ -1,13 +0,0 @@
# Util-Crypto Examples
Here you will find a list of examples that takes you through the basics of encrypting and decrypting messages using NaCl, signing a message with a seed and verifying it using NaCl, and generating and validating mnemonics for account seeds.
## Running the examples
From within each folder run the following to install required dependencies and to execute the example:
```shell
yarn;
yarn start
```
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=1">
<meta http-equiv="refresh" content="0;URL='https://polkadot.js.org/docs/'" />
<title>Redirecting to https://polkadot.js.org/docs/</title>
</head>
<body>
Redirecting to <a href="https://polkadot.js.org/docs/">https://polkadot.js.org/docs/</a>
</body>
</html>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

+22 -5
View File
@@ -1,19 +1,36 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest');
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/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/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: './jest.resolver.js'
resolver: '@polkadot/dev/config/jest-resolver.cjs'
});
-10
View File
@@ -1,10 +0,0 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const path = require('path');
module.exports = function resolver (file, config) {
return file.includes('package.json')
? path.join(config.basedir.replace('/src', '/'), file)
: config.defaultResolver(file, config);
};
-13
View File
@@ -1,13 +0,0 @@
{
"npmClient": "yarn",
"useWorkspaces": true,
"command": {
"publish": {
"allowBranch": "master"
}
},
"packages": [
"packages/*"
],
"version": "3.5.1"
}
+8 -13
View File
@@ -7,28 +7,23 @@
"packages/*"
],
"resolutions": {
"babel-core": "^7.0.0-bridge.0",
"typescript": "^4.0.3"
"typescript": "^4.1.3"
},
"scripts": {
"build": "polkadot-dev-build-ts",
"build:release": "polkadot-ci-ghact-build",
"docs": "polkadot-dev-build-docs",
"docs:release": "polkadot-ci-ghact-docs",
"lint": "polkadot-dev-run-lint",
"clean": "polkadot-dev-clean-build",
"networks:crosscheck": "polkadot-dev-run-test packages/networks/src/crosscheck",
"postinstall": "polkadot-dev-yarn-only",
"test": "polkadot-dev-run-test --coverage --runInBand",
"test": "polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck",
"test:one": "polkadot-dev-run-test"
},
"devDependencies": {
"@babel/core": "^7.11.6",
"@polkadot/dev": "^0.55.54",
"@polkadot/ts": "^0.3.47",
"@types/jest": "^26.0.14",
"typedoc": "^0.19.2",
"typedoc-plugin-markdown": "^3.0.2",
"typedoc-plugin-no-inherit": "^1.2.0"
"@babel/core": "^7.12.10",
"@polkadot/dev": "^0.61.24",
"@polkadot/ts": "^0.3.59",
"@types/jest": "^26.0.20"
},
"version": "3.5.1"
"version": "5.5.1"
}
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+2
View File
@@ -0,0 +1,2 @@
# @polkadot/hw-ledger-transports
@@ -0,0 +1,24 @@
{
"name": "@polkadot/hw-ledger-transports",
"version": "5.5.1",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"main": "node.js",
"browser": "browser.js",
"react-native": "react-native.js",
"sideEffects": false,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@ledgerhq/hw-transport-webusb": "^5.41.0"
},
"devDependencies": {
"@types/ledgerhq__hw-transport-node-hid": "^4.22.2",
"@types/ledgerhq__hw-transport-webusb": "^4.70.1"
},
"optionalDependencies": {
"@ledgerhq/hw-transport-node-hid-singleton": "^5.41.0"
}
}
@@ -0,0 +1,24 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type Transport from '@ledgerhq/hw-transport';
import type { TransportDef } from './types';
import LedgerWebUSB from '@ledgerhq/hw-transport-webusb';
const transports: TransportDef[] = [
// deprecated
// import LedgerU2F from '@ledgerhq/hw-transport-u2f';
// {
// create: (): Promise<Transport> =>
// LedgerU2F.create(),
// type: 'u2f'
// },
{
create: (): Promise<Transport> =>
LedgerWebUSB.create(),
type: 'webusb'
}
];
export { transports };
+15
View File
@@ -0,0 +1,15 @@
// 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 { }
}
+17
View File
@@ -0,0 +1,17 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type Transport from '@ledgerhq/hw-transport';
import type { TransportDef } from './types';
import LedgerHid from '@ledgerhq/hw-transport-node-hid-singleton';
const transports: TransportDef[] = [
{
create: (): Promise<Transport> =>
LedgerHid.create(),
type: 'hid'
}
];
export { transports };
@@ -0,0 +1,8 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { TransportDef } from './types';
const transports: TransportDef[] = [];
export { transports };
@@ -0,0 +1,11 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
import Transport from '@ledgerhq/hw-transport';
export type LedgerTypes = 'hid' | 'u2f' | 'webusb';
export interface TransportDef {
create (): Promise<Transport>;
type: LedgerTypes;
}
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+2
View File
@@ -0,0 +1,2 @@
# @polkadot/hw-ledger
+17
View File
@@ -0,0 +1,17 @@
{
"name": "@polkadot/hw-ledger",
"version": "5.5.1",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"main": "index.js",
"sideEffects": false,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@polkadot/hw-ledger-transports": "5.5.1",
"@polkadot/util": "^5.5.1",
"@zondax/ledger-polkadot": "^0.13.0"
}
}
+118
View File
@@ -0,0 +1,118 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
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, bufferToU8a, u8aToBuffer, u8aToHex } from '@polkadot/util';
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: u8aToHex(bufferToU8a(signature))
};
});
}
#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;
};
}
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
// SPDX-License-Identifier: Apache-2.0
export type LedgerTypes = 'hid' | 'u2f' | 'webusb';
export interface AccountOptions {
account: number;
addressIndex: number;
change: number;
}
export interface LedgerAddress {
address: string;
publicKey: string;
}
export interface LedgerSignature {
signature: string;
}
export interface LedgerVersion {
isLocked: boolean;
isTestMode: boolean;
version: [number, number, number];
}
-4
View File
@@ -15,7 +15,3 @@ Classes and Functions can be imported as follows:
```js
import Keyring from '@polkadot/keyring';
```
## Utilities
[Utilities](SUMMARY.md)
+16 -24
View File
@@ -1,34 +1,26 @@
{
"name": "@polkadot/keyring",
"version": "3.5.1",
"version": "5.5.1",
"description": "Keyring management",
"main": "index.js",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polkadot-js/common.git"
},
"keywords": [
"Polkadot",
"Keyring",
"ed25519"
],
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [
"Jaco Greeff <jacogr@gmail.com>"
],
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/polkadot-js/common/issues"
},
"main": "index.js",
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
],
"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",
"dependencies": {
"@babel/runtime": "^7.11.2",
"@polkadot/util": "3.5.1",
"@polkadot/util-crypto": "3.5.1"
"@babel/runtime": "^7.12.5",
"@polkadot/util": "5.5.1",
"@polkadot/util-crypto": "5.5.1"
},
"peerDependencies": {
"@polkadot/util": "5.5.1",
"@polkadot/util-crypto": "5.5.1"
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// default substrate dev phrase
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
//
// new URL(import.meta.url).pathname)
//
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
// there is a complete dead end with usage thereof
//
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
//
// cjs: util.detectPackage(packageInfo, () => __dirname);
// esm: detectPackage(packageInfo, () => import.meta.url);
//
// With the above we additionally need a .d.ts to just export the packageInfo
import { detectPackage } from '@polkadot/util';
import packageInfo from './package-info.json';
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname);
export { packageInfo };
+46 -2
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { cryptoWaitReady, setSS58Format, encodeAddress } from '@polkadot/util-crypto';
import { cryptoWaitReady, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
import Keyring from '.';
@@ -84,6 +84,16 @@ describe('keypair', (): void => {
const signature = pair.sign(MESSAGE);
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
it('signs and verifies (withType)', (): void => {
const MESSAGE = stringToU8a('this is a message');
const pair = keyring.getPair(publicKeyOne);
const signature = pair.sign(MESSAGE, { withType: true });
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
});
@@ -150,6 +160,16 @@ describe('keypair', (): void => {
const signature = pair.sign(MESSAGE);
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
it('signs and verifies (withType)', (): void => {
const MESSAGE = stringToU8a('this is a message');
const pair = keyring.getPair(publicKeyOne);
const signature = pair.sign(MESSAGE, { withType: true });
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
});
@@ -245,6 +265,16 @@ describe('keypair', (): void => {
const signature = pair.sign(MESSAGE);
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
it('signs and verifies (withType)', (): void => {
const MESSAGE = stringToU8a('this is a message');
const pair = keyring.getPair(addressKeyOne);
const signature = pair.sign(MESSAGE, { withType: true });
expect(pair.verify(MESSAGE, signature)).toBe(true);
expect(pair.verify(new Uint8Array(), signature)).toBe(false);
});
});
@@ -300,6 +330,20 @@ describe('keypair', (): void => {
const signature = signer.sign(MESSAGE);
expect(verifier.verify(MESSAGE, signature)).toBe(true);
expect(verifier.verify(new Uint8Array(), signature)).toBe(false);
});
it('allows for signing/verification (withType)', (): 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":{}}')
);
const signature = signer.sign(MESSAGE, { withType: true });
expect(verifier.verify(MESSAGE, signature)).toBe(true);
expect(verifier.verify(new Uint8Array(), signature)).toBe(false);
});
});
+5 -12
View File
@@ -1,19 +1,12 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { detectPackage } from '@polkadot/util';
import { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
import './detectPackage';
import Keyring from './keyring';
import { Keyring } from './keyring';
// eslint-disable-next-line @typescript-eslint/no-var-requires
detectPackage(require('./package.json'), typeof __dirname !== 'undefined' && __dirname);
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
export default Keyring;
export {
Keyring,
decodeAddress,
encodeAddress,
setSS58Format
};
export { Keyring };
+8 -8
View File
@@ -1,15 +1,15 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeypairType, Keypair } from '@polkadot/util-crypto/types';
import { KeyringInstance, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, KeyringOptions } from './types';
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from './types';
import { assert, hexToU8a, isHex, isUndefined, stringToU8a } from '@polkadot/util';
import { base64Decode, decodeAddress, encodeAddress, keyExtractSuri, keyFromPath, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed, mnemonicToBip39, mnemonicToMiniSecret } from '@polkadot/util-crypto';
import { base64Decode, decodeAddress, encodeAddress, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed } from '@polkadot/util-crypto';
import { DEV_PHRASE } from './defaults';
import createPair from './pair';
import Pairs from './pairs';
import { createPair } from './pair';
import { Pairs } from './pairs';
const keypairFromSeed = {
ecdsa: (seed: Uint8Array): Keypair => secp256k1FromSeed(seed),
@@ -34,7 +34,7 @@ const keypairFromSeed = {
* lookup of a pair for a given account address or public key using `getPair`. JSON metadata associated with
* an account may be obtained using `toJson` accompanied by the account passphrase.
*/
export default class Keyring implements KeyringInstance {
export class Keyring implements KeyringInstance {
readonly #pairs: Pairs;
readonly #type: KeypairType;
@@ -183,7 +183,7 @@ export default class Keyring implements KeyringInstance {
if ([12, 15, 18, 21, 24].includes(parts.length)) {
seed = type === 'ethereum'
? mnemonicToBip39(phrase)
? mnemonicToLegacySeed(phrase)
: 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');
+3 -3
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { createTestPairs } from '../testingPairs';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('decode', (): void => {
it('fails when no data provided', (): void => {
+5 -5
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair$JsonEncodingTypes } from '../types';
import { PairInfo } from './types';
import type { KeyringPair$JsonEncodingTypes } from '../types';
import type { PairInfo } from './types';
import { assert, stringToU8a, u8aFixLength } from '@polkadot/util';
import { naclDecrypt, scryptEncode, scryptFromU8a } from '@polkadot/util-crypto';
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH, SCRYPT_LENGTH } from './defaults';
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
const SEED_OFFSET = PKCS8_HEADER.length;
@@ -42,7 +42,7 @@ function decodePkcs8 (encoded: Uint8Array): DecodeResult {
};
}
export default function decode (passphrase?: string, encrypted?: Uint8Array | null, encType: KeyringPair$JsonEncodingTypes[] = ENCODING): DecodeResult {
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');
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair$JsonEncodingTypes } from '../types';
import type { KeyringPair$JsonEncodingTypes } from '../types';
const ENCODING: KeyringPair$JsonEncodingTypes[] = ['scrypt', 'xsalsa20-poly1305'];
const NONCE_LENGTH = 24;
+4 -4
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { PKCS8_DIVIDER, PKCS8_HEADER, NONCE_LENGTH, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH } from './defaults';
import { createTestPairs } from '../testingPairs';
import { NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_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;
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('encode', (): void => {
it('returns PKCS8 when no passphrase supplied', (): void => {
+4 -4
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { PairInfo } from './types';
import type { PairInfo } from './types';
import { u8aConcat, assert } from '@polkadot/util';
import { assert, u8aConcat } from '@polkadot/util';
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults';
export default function encode ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
assert(secretKey, 'Expected a valid secretKey to be passed to encode');
const encoded = u8aConcat(
+16 -6
View File
@@ -1,15 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a } from '@polkadot/util';
import { cryptoWaitReady, encodeAddress as toSS58, setSS58Format } from '@polkadot/util-crypto';
import { hexToU8a } from '@polkadot/util';
import { PAIRS } from '../testing';
import testingPairs from '../testingPairs';
import createPair from '.';
import { createTestPairs } from '../testingPairs';
import { createPair } from '.';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('pair', (): void => {
beforeEach(async (): Promise<void> => {
@@ -57,6 +56,17 @@ describe('pair', (): void => {
).toEqual(false);
});
it('allows vrf sign and verify', (): void => {
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
expect(
keyring.alice.vrfVerify(
message,
keyring.alice.vrfSign(message)
)
).toBe(true);
});
it('allows setting/getting of meta', (): void => {
keyring.bob.setMeta({ foo: 'bar', something: 'else' });
+36 -22
View File
@@ -1,16 +1,16 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
import { PairInfo } from './types';
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
import type { PairInfo } from './types';
import { assert, u8aConcat, u8aToHex } from '@polkadot/util';
import { blake2AsU8a, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclKeypairFromSeed as naclFromSeed, naclSign, naclVerify, schnorrkelKeypairFromSeed as schnorrkelFromSeed, schnorrkelSign, schnorrkelVerify, secp256k1Expand, secp256k1KeypairFromSeed as secp256k1FromSeed, secp256k1Sign, secp256k1Verify, secp256k1Compress } from '@polkadot/util-crypto';
import { assert, u8aConcat, u8aEq, u8aToHex } 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 decode from './decode';
import encode from './encode';
import toJson from './toJson';
import { decodePair } from './decode';
import { encodePair } from './encode';
import { pairToJson } from './toJson';
interface Setup {
toSS58: (publicKey: Uint8Array) => string;
@@ -47,13 +47,6 @@ const TYPE_ADDRESS = {
sr25519: (p: Uint8Array) => p
};
const TYPE_VERIFY = {
ecdsa: (m: Uint8Array, s: Uint8Array, p: Uint8Array) => secp256k1Verify(m, s, TYPE_ADDRESS.ecdsa(p), 'blake2'),
ed25519: naclVerify,
ethereum: (m: Uint8Array, s: Uint8Array, p: Uint8Array) => secp256k1Verify(m, s, TYPE_ADDRESS.ethereum(p), 'keccak', true),
sr25519: schnorrkelVerify
};
function isEmpty (u8a: Uint8Array): boolean {
return u8a.reduce((count, u8) => count + u8, 0) === 0;
}
@@ -64,7 +57,7 @@ function isLocked (secretKey?: Uint8Array): secretKey is undefined {
}
/**
* @name pair
* @name createPair
* @summary Creates a keyring pair object
* @description Creates a keyring pair object with provided account public key, metadata, and encoded arguments.
* The keyring pair stores the account state including the encoded address and associated metadata.
@@ -94,9 +87,9 @@ function isLocked (secretKey?: Uint8Array): secretKey is undefined {
* 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 default 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?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
const decodePkcs8 = (passphrase?: string, userEncoded?: Uint8Array | null): void => {
const decoded = decode(passphrase, userEncoded || encoded, encTypes);
const decoded = decodePair(passphrase, userEncoded || encoded, encTypes);
if (decoded.secretKey.length === 64) {
publicKey = decoded.publicKey;
@@ -112,7 +105,7 @@ export default function createPair ({ toSS58, type }: Setup, { publicKey, secret
const recode = (passphrase?: string): Uint8Array => {
isLocked(secretKey) && encoded && decodePkcs8(passphrase, encoded);
encoded = encode({ publicKey, secretKey }, passphrase); // re-encode, latest version
encoded = encodePair({ publicKey, secretKey }, passphrase); // re-encode, latest version
encTypes = undefined; // swap to defaults, latest version follows
return encoded;
@@ -182,9 +175,30 @@ export default function createPair ({ toSS58, type }: Setup, { publicKey, secret
? u8aToHex(secp256k1Compress(publicKey))
: encodeAddress();
return toJson(type, { address, meta }, recode(passphrase), !!passphrase);
return pairToJson(type, { address, meta }, recode(passphrase), !!passphrase);
},
verify: (message: Uint8Array, signature: Uint8Array): boolean =>
TYPE_VERIFY[type](message, signature, publicKey)
signatureVerify(message, signature, TYPE_ADDRESS[type](publicKey)).isValid,
vrfSign: (message: Uint8Array, context?: 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);
}
const proof = TYPE_SIGNATURE[type](message, { publicKey, secretKey });
return u8aConcat(
blake2AsU8a(u8aConcat(context || '', extra || '', proof)),
proof
);
},
vrfVerify: (message: Uint8Array, vrfResult: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean =>
type === 'sr25519'
? schnorrkelVrfVerify(message, vrfResult, publicKey, context, extra)
: (
signatureVerify(message, vrfResult.subarray(32), TYPE_ADDRESS[type](publicKey)).isValid &&
u8aEq(vrfResult.subarray(0, 32), blake2AsU8a(u8aConcat(context || '', extra || '', vrfResult.subarray(32))))
)
};
}
+9 -3
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
import { encodeAddress } from '@polkadot/util-crypto';
@@ -22,7 +22,7 @@ const json: KeyringPair$Json = {
meta
};
export default function everybody (): KeyringPair {
export function nobody (): KeyringPair {
const pair: KeyringPair = {
address,
addressRaw: publicKey,
@@ -53,6 +53,12 @@ export default function everybody (): KeyringPair {
type: 'ed25519',
// 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
};
+3 -3
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { createTestPairs } from '../testingPairs';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('toJson', (): void => {
it('creates an unencoded output with no passphrase', (): void => {
+4 -4
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeypairType } from '@polkadot/util-crypto/types';
import { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
import { base64Encode } from '@polkadot/util-crypto';
@@ -19,7 +19,7 @@ const VERSION = '3';
const ENC_NONE: KeyringPair$JsonEncodingTypes[] = ['none'];
export default function toJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
export function pairToJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
return {
address,
encoded: base64Encode(encoded),
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
export interface PairInfo {
+3 -3
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPairs, KeyringPair } from './types';
import type { KeyringPair, KeyringPairs } from './types';
import { assert, isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
type KeyringPairMap = Record<string, KeyringPair>;
export default class Pairs implements KeyringPairs {
export class Pairs implements KeyringPairs {
readonly #map: KeyringPairMap = {};
public add (pair: KeyringPair): KeyringPair {
+66 -53
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// From https://github.com/paritytech/substrate/wiki/Secret-URI-Test-Vectors
@@ -10,53 +10,62 @@ import Keyring from '.';
const PHRASE = 'bottom drive obey lake curtain smoke basket hold race lonely fit walk';
const TESTS = [
{
pk: '0x46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a',
ss: '5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV',
uri: PHRASE
},
{
pk: '0xb69355deefa7a8f33e9297f5af22e680f03597a99d4f4b1c44be47e7a2275802',
ss: '5GC6LfpV352HtJPySfAecb5JdePtf4R9Vq49NUU8RhzgBqgq',
uri: `${PHRASE}///password`
},
{
pk: '0x40b9675df90efa6069ff623b0fdfcf706cd47ca7452a5056c7ad58194d23440a',
ss: '5DXZzrDxHbkQov4QBAY4TjpwnHCMrKXkomTnKSw8UArBEY5v',
uri: `${PHRASE}/foo`
},
{
pk: '0x547d4a55642ec7ebadc0bd29b6e570b8c926059b3c0655d4948075e9a7e6f31e',
ss: '5DyV6fZuvPemWrUqBgWwTSgoV86w6xms3KhkFU6cQcWxU8eP',
uri: `${PHRASE}//foo`
},
{
pk: '0x3841947ffcde6f5fef26fb68b59bb8665637e30e32ec2051f99cf6b9c674fe09',
ss: '5DLU27is5iViNopQb2KxsTyPx6j4vCu8X3sk3j3NNLkPCqKM',
uri: `${PHRASE}//foo/bar`
},
{
pk: '0xdc142f7476a7b0aa262aeccf207f1d18daa90762db393006741e8a31f39dbc53',
ss: '5H3GPTqDSpjkfDwbHy12PD6BWm8jvGSX4xYC8UMprHpTPcRg',
uri: `${PHRASE}/foo//bar`
},
{
pk: '0xa2e56b06407a6d1e819d2fc33fa0ec604b29c2e868b70b3696bb049b8725934b',
ss: '5FkHmNgbg64MwStgCyDi2Uw3ufFu11mqQgmWT9uwK4Lghvpv',
uri: `${PHRASE}//foo/bar//42/69`
},
{
pk: '0x0e0d24e3e1ff2c07f269c99e2e0df8681fda1851ac42fc846ca2daaa90cd8f14',
ss: '5CP8S23JBNXYNpJsL7ESPJBNnUZE6itcfM4EnDxEhaVEU6dT',
uri: `${PHRASE}//foo/bar//42/69///password`
},
{
pk: '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d',
ss: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
uri: `${PHRASE}//Alice`
}
];
const TESTS = {
ecdsa: [
{
pk: '0x020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1',
ss: '5C7C2Z5sWbytvHpuLTvzKunnnRwQxft1jiqrLD5rhucQ5S9X',
uri: `${PHRASE}//Alice`
}
],
sr25519: [
{
pk: '0x46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a',
ss: '5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV',
uri: PHRASE
},
{
pk: '0xb69355deefa7a8f33e9297f5af22e680f03597a99d4f4b1c44be47e7a2275802',
ss: '5GC6LfpV352HtJPySfAecb5JdePtf4R9Vq49NUU8RhzgBqgq',
uri: `${PHRASE}///password`
},
{
pk: '0x40b9675df90efa6069ff623b0fdfcf706cd47ca7452a5056c7ad58194d23440a',
ss: '5DXZzrDxHbkQov4QBAY4TjpwnHCMrKXkomTnKSw8UArBEY5v',
uri: `${PHRASE}/foo`
},
{
pk: '0x547d4a55642ec7ebadc0bd29b6e570b8c926059b3c0655d4948075e9a7e6f31e',
ss: '5DyV6fZuvPemWrUqBgWwTSgoV86w6xms3KhkFU6cQcWxU8eP',
uri: `${PHRASE}//foo`
},
{
pk: '0x3841947ffcde6f5fef26fb68b59bb8665637e30e32ec2051f99cf6b9c674fe09',
ss: '5DLU27is5iViNopQb2KxsTyPx6j4vCu8X3sk3j3NNLkPCqKM',
uri: `${PHRASE}//foo/bar`
},
{
pk: '0xdc142f7476a7b0aa262aeccf207f1d18daa90762db393006741e8a31f39dbc53',
ss: '5H3GPTqDSpjkfDwbHy12PD6BWm8jvGSX4xYC8UMprHpTPcRg',
uri: `${PHRASE}/foo//bar`
},
{
pk: '0xa2e56b06407a6d1e819d2fc33fa0ec604b29c2e868b70b3696bb049b8725934b',
ss: '5FkHmNgbg64MwStgCyDi2Uw3ufFu11mqQgmWT9uwK4Lghvpv',
uri: `${PHRASE}//foo/bar//42/69`
},
{
pk: '0x0e0d24e3e1ff2c07f269c99e2e0df8681fda1851ac42fc846ca2daaa90cd8f14',
ss: '5CP8S23JBNXYNpJsL7ESPJBNnUZE6itcfM4EnDxEhaVEU6dT',
uri: `${PHRASE}//foo/bar//42/69///password`
},
{
pk: '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d',
ss: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
uri: `${PHRASE}//Alice`
}
]
};
describe('keyring.addFromUri', (): void => {
const keyring = new Keyring({ type: 'sr25519' });
@@ -65,12 +74,16 @@ describe('keyring.addFromUri', (): void => {
await cryptoWaitReady();
});
TESTS.forEach(({ pk, ss, uri }): void => {
it(`creates ${uri}`, (): void => {
const pair = keyring.addFromUri(uri);
Object.entries(TESTS).forEach(([type, tests]): void => {
describe(type, (): void => {
tests.forEach(({ pk, ss, uri }): void => {
it(`creates ${uri}`, (): void => {
const pair = keyring.addFromUri(uri, {}, type as 'sr25519');
expect(u8aToHex(pair.publicKey)).toEqual(pk);
expect(pair.address).toEqual(ss);
expect(u8aToHex(pair.publicKey)).toEqual(pk);
expect(pair.address).toEqual(ss);
});
});
});
});
});
+5 -5
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringInstance, KeyringOptions } from './types';
import type { KeyringInstance, KeyringOptions } from './types';
import { hexToU8a } from '@polkadot/util';
import createPair from './pair';
import { createPair } from './pair';
import Keyring from '.';
interface PairDef {
@@ -67,9 +67,9 @@ export const PAIRS: PairDef[] = [
* @name testKeyring
* @summary Create an instance of Keyring pre-populated with locked test accounts
* @description The test accounts (i.e. alice, bob, dave, eve, ferdie)
* are available on the dev chain and each test account is initialised with DOT funds.
* are available on the dev chain and each test account is initialized with DOT funds.
*/
export default function testKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
export function createTestKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
const keyring = new Keyring(options);
PAIRS.forEach(({ name, publicKey, secretKey, seed, type = 'sr25519' }): void => {
+5 -5
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { cryptoWaitReady } from '@polkadot/util-crypto';
import testingPairs from './testingPairs';
import { createTestPairs } from './testingPairs';
describe('testingPairs', (): void => {
beforeEach(async (): Promise<void> => {
@@ -12,19 +12,19 @@ describe('testingPairs', (): void => {
it('creates without failing', (): void => {
expect(
Object.keys(testingPairs())
Object.keys(createTestPairs())
).toHaveLength(2 + 0 + 7); // stash, session, pairs
});
it('has the correct address for Alice (non-HDKD)', (): void => {
expect(
testingPairs({ type: 'ed25519' }, false).alice.address
createTestPairs({ type: 'ed25519' }, false).alice.address
).toEqual('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua');
});
it('has the correct address for Alice (HDKD)', (): void => {
expect(
testingPairs({ type: 'ed25519' }).alice.address
createTestPairs({ type: 'ed25519' }).alice.address
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
});
});
+6 -6
View File
@@ -1,17 +1,17 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair, KeyringOptions } from './types';
import type { KeyringOptions, KeyringPair } from './types';
import createKeyring from './testing';
import nobody from './pair/nobody';
import { nobody } from './pair/nobody';
import { createTestKeyring } from './testing';
export interface TestKeyringMap {
[index: string]: KeyringPair;
}
export default function testKeyringPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
const keyring = createKeyring(options, isDerived);
export function createTestPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
const keyring = createTestKeyring(options, isDerived);
const pairs = keyring.getPairs();
const map: TestKeyringMap = { nobody: nobody() };
+5 -3
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from '@polkadot/util-crypto/address/types';
import { KeypairType } from '@polkadot/util-crypto/types';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
export interface KeyringOptions {
ss58Format?: Prefix;
@@ -48,6 +48,8 @@ export interface KeyringPair {
sign (message: Uint8Array, options?: SignOptions): Uint8Array;
toJson (passphrase?: string): KeyringPair$Json;
verify (message: Uint8Array, signature: Uint8Array): boolean;
vrfSign (message: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array;
vrfVerify (message: Uint8Array, vrfResult: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean;
}
export interface KeyringPairs {
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+5
View File
@@ -0,0 +1,5 @@
# @polkadot/networks
A list of all available Substrate networks and their applicable prefixes.
This list is periodically checked against the master list available at https://github.com/paritytech/substrate/blob/master/ss58-registry.json
+21
View File
@@ -0,0 +1,21 @@
{
"name": "@polkadot/networks",
"version": "5.5.1",
"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",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
"dependencies": {
"@babel/runtime": "^7.12.5"
},
"devDependencies": {
"@polkadot/util": "5.5.1",
"@polkadot/x-fetch": "5.5.1"
}
}
+72
View File
@@ -0,0 +1,72 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Ss58Registry } from './types';
import fs from 'fs';
import { fetch } from '@polkadot/x-fetch';
import { all } 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 {
if (!check) {
process.env.CI_LOG && fs.appendFileSync(OUTPUT, `
${error}
`);
throw new Error(error);
}
}
describe('check latest Substrate ss58 registry', (): void => {
let original: Ss58Registry;
beforeAll(async (): Promise<void> => {
original = (await (await fetch(ORIGINAL)).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}`);
});
it('has no missing any entries', (): void => {
const missing = original.registry
.filter(({ prefix }) => !all.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Missing entries found: ${JSON.stringify(missing, null, 2)}`);
});
it('has no extra entries', (): void => {
const missing = all
.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)}`);
});
it('has the same values as the original', (): void => {
const fields = Object.keys(original.schema);
const errors = original.registry
.map((n): [string, string[]] => {
const other = all.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]))
: []
];
})
.filter(([, fields]) => fields.length);
assertAndLog(!errors.length, `Mismatches found: ${JSON.stringify(errors.map(([name, m]) => `${name}:: ${m.join(', ')}`), null, 2)}`);
});
});
+14
View File
@@ -0,0 +1,14 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import filtered, { available } from '.';
describe('filtered', (): void => {
it('has the correct starting order', (): void => {
expect(filtered.slice(0, 3).map(({ prefix }) => prefix)).toEqual([0, 2, 42]);
});
it('has no ignored networks', (): void => {
expect(available.some(({ isIgnored }) => isIgnored)).toEqual(false);
});
});
+467
View File
@@ -0,0 +1,467 @@
// 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 } from './types';
// 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 = 'This prefix is reserved.'): NetworkFromSubstrate => ({
decimals: null,
displayName,
isIgnored: true,
network: `reserved${prefix}`,
prefix,
standardAccount: null,
symbols: null,
website: null
});
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),
{
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),
{
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: [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),
{
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),
createReserved(47),
createReserved(48, 'All prefixes 48 and higher are reserved and cannot be allocated.')
];
// 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
const available: Network[] = all
.filter((n) => !n.isIgnored)
.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)
const filtered: Network[] = available.filter((n) => n.genesisHash.length || n.prefix === 42);
export { all, available };
export default filtered;
+30
View File
@@ -0,0 +1,30 @@
// Copyright 2017-2021 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
export type Icon = 'beachball' | 'empty' | 'jdenticon' | 'polkadot' | 'substrate';
export interface NetworkFromSubstrate {
decimals: number[] | null,
displayName: string;
network: string;
prefix: number;
genesisHash?: string[] | null;
hasLedgerSupport?: boolean;
icon?: Icon | null;
isIgnored?: boolean;
slip44?: number;
standardAccount: '*25519' | null;
symbols: string[] | null;
website: string | null;
}
export interface Network extends NetworkFromSubstrate {
genesisHash: string[];
icon: Icon;
}
export interface Ss58Registry {
registry: NetworkFromSubstrate[];
specification: string;
schema: Record<string, string>;
}
-4
View File
@@ -15,7 +15,3 @@ Functions can be imported as follows:
```js
import { mnemonicGenerate } from '@polkadot/util-crypto';
```
## Utilities
[Utilities](SUMMARY.md)
+19 -24
View File
@@ -1,49 +1,44 @@
{
"name": "@polkadot/util-crypto",
"version": "3.5.1",
"version": "5.5.1",
"description": "A collection of useful crypto utilities for @polkadot",
"main": "index.js",
"keywords": [
"Polkadot"
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
],
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [
"Jaco Greeff <jacogr@gmail.com>"
],
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polkadot-js/common.git"
},
"bugs": {
"url": "https://github.com/polkadot-js/common/issues"
},
"repository": "github:polkadot-js/common",
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
"dependencies": {
"@babel/runtime": "^7.11.2",
"@polkadot/util": "3.5.1",
"@polkadot/wasm-crypto": "^1.4.1",
"@babel/runtime": "^7.12.5",
"@polkadot/networks": "5.5.1",
"@polkadot/util": "5.5.1",
"@polkadot/wasm-crypto": "^3.2.2",
"@polkadot/x-randomvalues": "5.5.1",
"base-x": "^3.0.8",
"bip39": "^3.0.2",
"blakejs": "^1.1.0",
"bn.js": "^5.1.3",
"bn.js": "^4.11.9",
"create-hash": "^1.2.0",
"elliptic": "^6.5.3",
"hash.js": "^1.1.7",
"js-sha3": "^0.8.0",
"pbkdf2": "^3.1.1",
"scryptsy": "^2.1.0",
"tweetnacl": "^1.0.3",
"xxhashjs": "^0.2.2"
},
"devDependencies": {
"@types/bn.js": "^4.11.6",
"@types/create-hash": "^1.2.2",
"@types/elliptic": "^6.4.12",
"@types/pbkdf2": "^3.1.0",
"@types/scryptsy": "^2.0.0",
"@types/xxhashjs": "^0.2.2"
},
"peerDependencies": {
"@polkadot/util": "5.5.1"
}
}
@@ -0,0 +1,14 @@
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a } from '@polkadot/util';
import { addressToEvm } from './addressToEvm';
describe('addressToEvm', (): void => {
it('creates a valid known EVM address', (): void => {
expect(
addressToEvm('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou')
).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee9'));
});
});

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