Compare commits

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

* added equilibrium app in ledger-polkadot package

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

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

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

* allow adding 20 address in createPair

* lint

* move logic to eth specific function

* fix typo

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

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

* re establish right encoding

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

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

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

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

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

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

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

* stringify space param

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

* Remove extra assignment

* CHANGELOG

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

* trigger

* Additional

* Additional
2021-04-21 10:31:28 +02:00
Github Actions 1de30914c2 [CI Skip] release/beta 6.2.2-0
skip-checks: true
2021-04-21 07:19:42 +00:00
Jaco 984bb7c04f Bump deps (#951) 2021-04-21 09:13:31 +02:00
84 changed files with 1917 additions and 1661 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
6
7
2.6.2
2.12.2
+17
View File
@@ -0,0 +1,17 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '15 2 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GH_PAT }}
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
stale-issue-label: 'stale'
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug]'
days-before-stale: 21
days-before-close: 7
+42
View File
@@ -1,5 +1,47 @@
# CHANGELOG
## 6.6.1 May 29, 2021
Changes:
- Adjust HD path validation & replacement
- Sync with Substrate ss58 registry
## 6.5.1 May 22, 2021
Changes:
- Allow hdLedger derivation with optional 25th word password
- Sync with Substrate ss58 registry
## 6.4.1 May 15, 2021
Contributed:
- Update genesis for HydraDx gen-3 (Thanks to https://github.com/jak-pan)
- Allow Ethereum pair in keyring addAddress (Thanks to https://github.com/joelamouche)
Changes:
- Added additional double-byte ss58 tests
- Aligned ss58 registry with Substrate
- Add explicit log for deprecation of `setSS58Format`
## 6.3.1 Apr 25, 2021
Changes:
- Added `stringify` util to correctly handle `JSON.stringify` with `BigInt` values
- Additional input asserts for non-convertible values in `u8aToU8a`
- Adapt `@polkadot/x-global` to return `globalThis` as available
- Minor readability cleanups
- BN manipulation via in-place shifts (as applicable)
- Add explicit `engines` config to `package.json`
## 6.2.1 Apr 18, 2021
Contributed:
+5 -5
View File
@@ -21,10 +21,10 @@
"test:one": "polkadot-dev-run-test"
},
"devDependencies": {
"@babel/core": "^7.13.15",
"@polkadot/dev": "^0.62.8",
"@polkadot/ts": "^0.3.62",
"@types/jest": "^26.0.22"
"@babel/core": "^7.14.3",
"@polkadot/dev": "^0.62.20",
"@polkadot/ts": "^0.3.69",
"@types/jest": "^26.0.23"
},
"version": "6.2.1"
"version": "6.6.1"
}
+7 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/hw-ledger-transports",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
@@ -11,15 +11,18 @@
"browser": "browser.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"dependencies": {
"@babel/runtime": "^7.13.10",
"@ledgerhq/hw-transport-webusb": "^5.49.0"
"@babel/runtime": "^7.14.0",
"@ledgerhq/hw-transport-webusb": "^5.51.1"
},
"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.49.0"
"@ledgerhq/hw-transport-node-hid-singleton": "^5.51.1"
}
}
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '6.6.1' };
+8 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/hw-ledger",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
@@ -12,10 +12,13 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/hw-ledger-transports": "6.2.1",
"@polkadot/util": "^6.2.1",
"@zondax/ledger-polkadot": "^0.13.6"
"@babel/runtime": "^7.14.0",
"@polkadot/hw-ledger-transports": "6.6.1",
"@polkadot/util": "^6.6.1",
"@zondax/ledger-polkadot": "^0.14.0"
}
}
+2 -1
View File
@@ -4,13 +4,14 @@
import type Transport from '@ledgerhq/hw-transport';
import type { SubstrateApp } from '@zondax/ledger-polkadot';
import { newDockApp, newKusamaApp, newPolkadotApp, newPolymeshApp } from '@zondax/ledger-polkadot';
import { newDockApp, newEquilibriumApp, newKusamaApp, newPolkadotApp, newPolymeshApp } from '@zondax/ledger-polkadot';
// 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)
export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp> = {
'dock-mainnet': newDockApp,
equilibrium: newEquilibriumApp,
kusama: newKusamaApp,
polkadot: newPolkadotApp,
polymesh: newPolymeshApp
+4 -4
View File
@@ -28,8 +28,8 @@ export class Ledger {
constructor (transport: LedgerTypes, chain: Chain) {
// u2f is deprecated
assert(['hid', 'webusb'].includes(transport), `Unsupported transport ${transport}`);
assert(Object.keys(ledgerApps).includes(chain), `Unsupported chain ${chain}`);
assert(['hid', 'webusb'].includes(transport), () => `Unsupported transport ${transport}`);
assert(Object.keys(ledgerApps).includes(chain), () => `Unsupported chain ${chain}`);
this.#chain = chain;
this.#transport = transport;
@@ -73,7 +73,7 @@ export class Ledger {
if (!this.#app) {
const def = transports.find(({ type }) => type === this.#transport);
assert(def, `Unable to find a transport for ${this.#transport}`);
assert(def, () => `Unable to find a transport for ${this.#transport}`);
const transport = await def.create();
@@ -98,7 +98,7 @@ export class Ledger {
#wrapError = async <T extends ResponseBase> (promise: Promise<T>): Promise<T> => {
const result = await promise;
assert(result.return_code === LEDGER_SUCCESS_CODE, result.error_message);
assert(result.return_code === LEDGER_SUCCESS_CODE, () => result.error_message);
return result;
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/hw-ledger', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/hw-ledger', version: '6.6.1' };
+9 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/keyring",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "Keyring management",
"author": "Jaco Greeff <jacogr@gmail.com>",
@@ -12,16 +12,19 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"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.13.10",
"@polkadot/util": "6.2.1",
"@polkadot/util-crypto": "6.2.1"
"@babel/runtime": "^7.14.0",
"@polkadot/util": "6.6.1",
"@polkadot/util-crypto": "6.6.1"
},
"peerDependencies": {
"@polkadot/util": "6.2.1",
"@polkadot/util-crypto": "6.2.1"
"@polkadot/util": "6.6.1",
"@polkadot/util-crypto": "6.6.1"
}
}
+11 -2
View File
@@ -121,6 +121,14 @@ describe('keypair', (): void => {
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
});
it('creates via dev seed (2-byte encoding)', (): void => {
keyring.setSS58Format(252);
expect(
keyring.addFromUri('//Alice').address
).toEqual('xw8P6urbSAronL3zZFB7dg8p7LLSgKCUFDUgjohnf1iP434ic');
});
it('adds the pair', (): void => {
expect(
keyring.addFromSeed(seedTwo, {}).publicKey
@@ -311,6 +319,7 @@ describe('keypair', (): void => {
const PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy' + '/m/44\'/60\'/0\'/0/0';
const PRIV_KEY_ONE = '0x070dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46';
const ETH_ADDRESS_ONE = '0x31ea8795EE32D782C8ff41a5C68Dcbf0F5B27f6d';
const ETH_ADDRESS_TWO = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
let keyring: Keyring;
@@ -388,13 +397,13 @@ describe('keypair', (): void => {
);
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
expect(pair.address).toEqual('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.address).toEqual(ETH_ADDRESS_TWO);
pair.decodePkcs8('password');
expect(pair.isLocked).toBe(false);
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
expect(pair.address).toBe('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.address).toBe(ETH_ADDRESS_TWO);
});
it('allows for signing/verification', (): void => {
+3 -3
View File
@@ -47,7 +47,7 @@ export class Keyring implements KeyringInstance {
constructor (options: KeyringOptions = {}) {
options.type = options.type || 'ed25519';
assert(options && ['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined'), `Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type}`);
assert(['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined'), () => `Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type || 'unknown'}`);
this.#pairs = new Pairs();
this.#ss58 = options.ss58Format;
@@ -86,7 +86,7 @@ export class Keyring implements KeyringInstance {
/**
* @name addFromAddress
* @summary Stores an account, given an account address, as a Key/Value (public key, pair) in Keyring Pair Dictionary
* @description Allows user to explicitely provide separate inputs including account address or public key, and optionally
* @description Allows user to explicitly provide separate inputs including account address or public key, and optionally
* the associated account metadata, and the default encoded value as arguments (that may be obtained from the json file
* of an account backup), and then generates a keyring pair from them that it passes to
* `addPair` to stores in a keyring pair dictionary the public key of the generated pair as a key and the pair as the associated value.
@@ -168,7 +168,7 @@ export class Keyring implements KeyringInstance {
? [type]
: type;
assert(['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType), `Unknown crypto type ${cryptoType}`);
assert(['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType), () => `Unknown crypto type ${cryptoType}`);
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
const publicKey = isHex(address)
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/keyring', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/keyring', version: '6.6.1' };
+11 -2
View File
@@ -10,6 +10,8 @@ import { createPair } from '.';
const keyring = createTestPairs({ type: 'ed25519' }, false);
const TEST_ADDRESS = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
describe('pair', (): void => {
beforeEach(async (): Promise<void> => {
await cryptoWaitReady();
@@ -159,8 +161,15 @@ describe('pair', (): void => {
it('has a valid address from a known public', (): void => {
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077') });
expect(pair.address).toEqual('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887');
expect(pair.addressRaw).toEqual(hexToU8a('0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887'));
expect(pair.address).toEqual(TEST_ADDRESS);
expect(pair.addressRaw).toEqual(hexToU8a(TEST_ADDRESS));
});
it('has a valid address from a known ethereum address (20 length)', (): void => {
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: new Uint8Array([75, 32, 205, 127, 248, 119, 52, 31, 46, 171, 170, 23, 158, 23, 46, 108, 95, 180, 186, 168]), secretKey: new Uint8Array([]) });
expect(pair.address.toLowerCase()).toEqual('0x4b20cd7ff877341f2eabaa179e172e6c5fb4baa8');
expect(pair.addressRaw).toEqual(hexToU8a('0x4b20cd7ff877341f2eabaa179e172e6c5fb4baa8'));
});
it('converts to json', (): void => {
+1 -1
View File
@@ -44,7 +44,7 @@ const TYPE_SIGNATURE = {
const TYPE_ADDRESS = {
ecdsa: (p: Uint8Array) => p.length > 32 ? blake2AsU8a(p) : p,
ed25519: (p: Uint8Array) => p,
ethereum: (p: Uint8Array) => keccakAsU8a(secp256k1Expand(p)),
ethereum: (p: Uint8Array) => p.length === 20 ? p : keccakAsU8a(secp256k1Expand(p)),
sr25519: (p: Uint8Array) => p
};
+4 -6
View File
@@ -24,13 +24,11 @@ export class Pairs implements KeyringPairs {
public get (address: string | Uint8Array): KeyringPair {
const pair = this.#map[decodeAddress(address).toString()];
assert(pair, (): string => {
const formatted: string = isU8a(address) || isHex(address)
assert(pair, () => `Unable to retrieve keypair '${
isU8a(address) || isHex(address)
? u8aToHex(u8aToU8a(address))
: address;
return `Unable to retrieve keypair '${formatted}'`;
});
: address
}'`);
return pair;
}
+4 -2
View File
@@ -7,6 +7,8 @@ import { cryptoWaitReady } from '@polkadot/util-crypto';
import { createTestPairs } from './testingPairs';
import Keyring from '.';
const TEST_ADD = '0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac';
describe('testingPairs', (): void => {
beforeEach(async (): Promise<void> => {
await cryptoWaitReady();
@@ -33,7 +35,7 @@ describe('testingPairs', (): void => {
it('has the correct address for Alith (Eth)', (): void => {
expect(
createTestPairs({ type: 'ethereum' }).Alith.address
).toEqual('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac');
).toEqual(TEST_ADD);
});
it('has the correct address for Alith (Eth), same as obtained by createFromUri', (): void => {
@@ -42,7 +44,7 @@ describe('testingPairs', (): void => {
expect(
pair && pair.address
).toEqual('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac');
).toEqual(TEST_ADD);
});
it('checks eth test addresses', (): void => {
+7 -4
View File
@@ -1,10 +1,13 @@
{
"name": "@polkadot/networks",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A list of all available Substrate networks and their applicable prefixes",
"main": "index.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
@@ -13,10 +16,10 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
"dependencies": {
"@babel/runtime": "^7.13.10"
"@babel/runtime": "^7.14.0"
},
"devDependencies": {
"@polkadot/util": "6.2.1",
"@polkadot/x-fetch": "6.2.1"
"@polkadot/util": "6.6.1",
"@polkadot/x-fetch": "6.6.1"
}
}
+7 -8
View File
@@ -1,10 +1,11 @@
// Copyright 2017-2021 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Ss58Registry } from './types';
import type { KnownSubstrate, Ss58Registry } from './types';
import fs from 'fs';
import { stringify } from '@polkadot/util';
import { fetch } from '@polkadot/x-fetch';
import { all } from './';
@@ -39,7 +40,7 @@ describe('check latest Substrate ss58 registry', (): void => {
.filter(({ prefix }) => !all.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Missing entries found: ${JSON.stringify(missing, null, 2)}`);
assertAndLog(!missing.length, `Missing entries found: ${stringify(missing, 2)}`);
});
it('has no extra entries', (): void => {
@@ -47,11 +48,11 @@ describe('check latest Substrate ss58 registry', (): void => {
.filter(({ prefix }) => !original.registry.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Extra entries found: ${JSON.stringify(missing, null, 2)}`);
assertAndLog(!missing.length, `Extra entries found: ${stringify(missing, 2)}`);
});
it('has the same values as the original', (): void => {
const fields = Object.keys(original.schema);
const fields = Object.keys(original.schema) as (keyof KnownSubstrate)[];
const errors = original.registry
.map((n): [string, string[]] => {
const other = all.find(({ prefix }) => prefix === n.prefix);
@@ -59,14 +60,12 @@ describe('check latest Substrate ss58 registry', (): void => {
return [
`${n.displayName} (${n.prefix})`,
other
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
? fields.filter((f) => JSON.stringify(n[f]) !== JSON.stringify(other[f]))
? fields.filter((f) => stringify(n[f]) !== stringify(other[f]))
: []
];
})
.filter(([, fields]) => fields.length);
assertAndLog(!errors.length, `Mismatches found: ${JSON.stringify(errors.map(([name, m]) => `${name}:: ${m.join(', ')}`), null, 2)}`);
assertAndLog(!errors.length, `Mismatches found: ${stringify(errors.map(([n, m]) => `${n}:: ${m.join(', ')}`), 2)}`);
});
});
+9 -3
View File
@@ -14,9 +14,14 @@ export const knownGenesis: KnownGenesis = {
edgeware: [
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
],
equilibrium: [
'0x6f1a800de3daff7f5e037ddf66ab22ce03ab91874debeddb1086f5f7dbd48925'
],
hydradx: [
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047',
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2'
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
],
kulupu: [
'0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'
@@ -49,12 +54,13 @@ export const knownIcon: KnownIcon = {
// support for ledger
export const knownLedger: KnownLedger = {
'dock-mainnet': 0x00000252,
equilibrium: 0x05f5e0fd,
kusama: 0x000001b2,
polkadot: 0x00000162,
polymesh: 0x00000253
};
// testenets should not allow selection
// testnets should not allow selection
export const knownTestnet: KnownTestnet = {
'dock-testnet': true,
jupiter: true,
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/networks', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/networks', version: '6.6.1' };
+40 -13
View File
@@ -84,13 +84,13 @@ export const knownSubstrate: KnownSubstrate[] = [
website: 'https://edgewa.re'
},
{
decimals: [18],
displayName: 'Acala Karura Canary',
decimals: [12],
displayName: 'Karura',
network: 'karura',
prefix: 8,
standardAccount: '*25519',
symbols: ['KAR'],
website: 'https://acala.network/'
website: 'https://karura.network/'
},
{
decimals: [18],
@@ -102,7 +102,7 @@ export const knownSubstrate: KnownSubstrate[] = [
website: 'http://laminar.network/'
},
{
decimals: [18],
decimals: [12],
displayName: 'Acala',
network: 'acala',
prefix: 10,
@@ -254,15 +254,6 @@ export const knownSubstrate: KnownSubstrate[] = [
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',
@@ -479,6 +470,15 @@ export const knownSubstrate: KnownSubstrate[] = [
symbols: ['CRU'],
website: 'https://crust.network'
},
{
decimals: [0, 9, 9, 9, 9, 9, 9, 9],
displayName: 'Equilibrium Network',
network: 'equilibrium',
prefix: 67,
standardAccount: '*25519',
symbols: ['Unknown', 'USD', 'EQ', 'ETH', 'BTC', 'EOS', 'DOT', 'CRV'],
website: 'https://equilibrium.io'
},
{
decimals: [18],
displayName: 'SORA Network',
@@ -488,6 +488,24 @@ export const knownSubstrate: KnownSubstrate[] = [
symbols: ['XOR'],
website: 'https://sora.org'
},
{
decimals: [12],
displayName: 'Manta network',
network: 'manta',
prefix: 77,
standardAccount: '*25519',
symbols: ['MA'],
website: 'https://manta.network'
},
{
decimals: [12],
displayName: 'Calamari: Manta Canary Network',
network: 'calamari',
prefix: 78,
standardAccount: '*25519',
symbols: ['KMA'],
website: 'https://manta.network'
},
{
decimals: [18],
displayName: 'Social Network',
@@ -496,5 +514,14 @@ export const knownSubstrate: KnownSubstrate[] = [
standardAccount: '*25519',
symbols: ['NET'],
website: 'https://social.network'
},
{
decimals: [12],
displayName: 'Basilisk',
network: 'basilisk',
prefix: 10041,
standardAccount: '*25519',
symbols: ['BSX'],
website: 'https://bsx.fi'
}
];
+9 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/util-crypto",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A collection of useful crypto utilities for @polkadot",
"main": "index.js",
@@ -8,6 +8,9 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -16,11 +19,11 @@
"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.13.10",
"@polkadot/networks": "6.2.1",
"@polkadot/util": "6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/networks": "6.6.1",
"@polkadot/util": "6.6.1",
"@polkadot/wasm-crypto": "^4.0.2",
"@polkadot/x-randomvalues": "6.2.1",
"@polkadot/x-randomvalues": "6.6.1",
"base-x": "^3.0.8",
"base64-js": "^1.5.1",
"blakejs": "^1.1.0",
@@ -41,6 +44,6 @@
"@types/xxhashjs": "^0.2.2"
},
"peerDependencies": {
"@polkadot/util": "6.2.1"
"@polkadot/util": "6.6.1"
}
}
@@ -17,6 +17,18 @@ describe('checkAddressChecksum', (): void => {
).toEqual([true, 34, 2, 66]);
});
it('correctly extracts the info from a 2-byte-prefix address (69)', (): void => {
expect(
checkAddressChecksum(base58Decode('cnVvyMzRdqjwejTFuByQQ4w2yu78V2hpFixjHQz5zr6NSYsxA'))
).toEqual([true, 34, 2, 69]);
});
it('correctly extracts the info from a 2-byte-prefix address (252)', (): void => {
expect(
checkAddressChecksum(base58Decode('xw8Ffc2SZtDqUJKd9Ky4vc7PRz2D2asuVkEEzf3WGAbw9cnfq'))
).toEqual([true, 34, 2, 252]);
});
it('correctly extracts the info from a 2-byte-prefix address (255)', (): void => {
expect(
checkAddressChecksum(base58Decode('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k'))
@@ -89,6 +89,22 @@ describe('decodeAddress', (): void => {
);
});
it('decodes a 2-byte prefix (69)', (): void => {
expect(
decodeAddress('cnUaoo5wodnTVA4bnr4woSweto8hWZADUvLFXkR9Q6U7BRsbF')
).toEqual(
hexToU8a('0x88eafe0305d460d1695cf34c2f786050df8e40d215e488790cc70929c9e8316d')
);
});
it('decodes a 2-byte prefix (252)', (): void => {
expect(
decodeAddress('xw9Hca4RJTmBRgzJT4ieJBh7XCK9gE3NXBDSEmgGHd4TCrbnG')
).toEqual(
hexToU8a('0xfc422da6c3bc6dfa2a436a506428072941662f816987baaa8914e02ff5947f4b')
);
});
it('decodes a 2-byte prefix (255)', (): void => {
expect(
decodeAddress('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k')
@@ -103,12 +119,6 @@ describe('decodeAddress', (): void => {
).toEqual('0x035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9');
});
it.skip('allows invalid prefix (in list)', (): void => {
expect(
(): Uint8Array => decodeAddress('6GfvWUvHvU8otbZ7sFhXH4eYeMcKdUkL61P3nFy52efEPVUx')
).toThrow(/address prefix/);
});
it('fails when length is invalid', (): void => {
expect(
(): Uint8Array => decodeAddress('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
+1 -1
View File
@@ -25,7 +25,7 @@ export function decodeAddress (encoded?: string | Uint8Array | null, ignoreCheck
const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded);
assert(ignoreChecksum || isValid, 'Invalid decoded address checksum');
assert([-1, ss58Decoded].includes(ss58Format), `Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
assert([-1, ss58Decoded].includes(ss58Format), () => `Expected ss58Format ${ss58Format}, received ${ss58Decoded}`);
return decoded.slice(ss58Length, endPos);
} catch (error) {
@@ -26,12 +26,24 @@ const SUBKEY = [
publicKey: '0x04a047d52fe542484c69bc528990cfeaf3a663dded0638ee1b51cf78bacd1072',
ss58Format: 66
},
{
// sora
address: 'cnVRwXfAnz3RSVQyBUC8f8McrK3YBX2QYd4WoctpeSC6VTJYm',
publicKey: '0xae640d53cfa815f4a6a50ae70235cd7d9d134d0f1c3a4ccd118e321dfb6ab51f',
ss58Format: 69
},
{
// ecdsa
address: '4pbsSkWcBaYoFHrKJZp5fDVUKbqSYD9dhZZGvpp3vQ5ysVs5ybV',
publicKey: '0x035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9',
ss58Format: 200
},
{
// social-network
address: 'xw5g1Eec8LT99pZLZMaTWwrwvNtfM6vrSuZeVbtEszCDUwByg',
publicKey: '0x5c64f1151f0ce4358c27238fb20c88e7c899825436f565410724c8c2c5add869',
ss58Format: 252
},
{
address: 'yGF4JP7q5AK46d1FPCEm9sYQ4KooSjHMpyVAjLnsCSWVafPnf',
publicKey: '0x66cd6cf085627d6c85af1aaf2bd10cf843033e929b4e3b1c2ba8e4aa46fe111b',
+14 -14
View File
@@ -11,27 +11,27 @@ import { decodeAddress } from './decode';
import { defaults } from './defaults';
import { sshash } from './sshash';
export function encodeAddress (_key: Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
export function encodeAddress (key: Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
// decode it, this means we can re-encode an address
const key = decodeAddress(_key);
const u8a = decodeAddress(key);
assert(ss58Format >= 0 && ss58Format <= 16383 && ![46, 47].includes(ss58Format), 'Out of range ss58Format specified');
assert(defaults.allowedDecodedLengths.includes(key.length), `Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
assert(defaults.allowedDecodedLengths.includes(u8a.length), () => `Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
const isPublicKey = [32, 33].includes(key.length);
const input = u8aConcat(
new Uint8Array(
ss58Format < 64
? [ss58Format]
: [
((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,
(ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6)
]
),
key
ss58Format < 64
? [ss58Format]
: [
((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,
(ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6)
],
u8a
);
return base58Encode(
u8aConcat(input, sshash(input).subarray(0, isPublicKey ? 2 : 1))
u8aConcat(
input,
sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)
)
);
}
@@ -3,12 +3,18 @@
import type { Prefix } from './types';
import { logger } from '@polkadot/util';
import { defaults } from './defaults';
const l = logger('setSS58Format');
/**
* @description Sets the global SS58 format to use for address encoding
* @deprecated Use keyring.setSS58Format
*/
export function setSS58Format (prefix: Prefix): void {
l.warn('Global setting of the ss58Format is deprecated and not recommended. Set format on the keyring (if used) or as pat of the address encode function');
defaults.prefix = prefix;
}
+3 -3
View File
@@ -14,11 +14,11 @@ interface CheckConfig {
const BASE_CONFIG = { alphabet: BASE58_ALPHABET, ipfsChar: 'z', type: 'base58' };
export function validateChars ({ alphabet, ipfsChar, type }: CheckConfig, value?: string | null, ipfsCompat?: boolean): true {
assert(value, `Expected non-null, non-empty ${type} input`);
assert(!ipfsCompat || value[0] === ipfsChar, `Expected ${type} to start with '${ipfsChar}'`);
assert(value, () => `Expected non-null, non-empty ${type} input`);
assert(!ipfsCompat || value[0] === ipfsChar, () => `Expected ${type} to start with '${ipfsChar}'`);
for (let i = (ipfsCompat ? 1 : 0); i < value.length; i++) {
assert(alphabet.includes(value[i]), `Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`);
assert(alphabet.includes(value[i]), () => `Invalid ${type} character "${value[i]}" (0x${value.charCodeAt(i).toString(16)}) at index ${i}`);
}
return true;
@@ -7,6 +7,7 @@ import { hdLedger } from '..';
const MNE_0 = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const MNE_1 = 'open jelly jeans corn ketchup supreme brief element armed lens vault weather original scissors rug priority vicious lesson raven spot gossip powder person volcano';
const MNE_P = `${MNE_1} testing`;
const TESTS = {
Kusama: {
@@ -36,6 +37,11 @@ const TESTS = {
ed25519: '0xe8c68348586d53e4e8d1a864b0e4e17c75e4eb06e0c63c1432bef2ba29e69d41',
index: [0, 0],
mnemonic: MNE_0
},
{
ed25519: '0x3890e8db837eba3f8f25215c753e1091062298ce671a51441e7ef89a7adc4f48',
index: [0, 0],
mnemonic: MNE_P
}
]
}
+14 -3
View File
@@ -11,7 +11,18 @@ import { HARDENED, hdValidatePath } from '../validatePath';
import { ledgerDerivePrivate } from './derivePrivate';
import { ledgerMaster } from './master';
export function hdLedger (mnemonic: string, path: string): Keypair {
export function hdLedger (_mnemonic: string, path: string): Keypair {
const parts = _mnemonic
.split(' ')
.map((s) => s.trim())
.filter((s) => s);
assert([12, 24, 25].includes(parts.length), 'Expected a mnemonic with 24 words (or 25 including a password)');
const [mnemonic, password] = parts.length === 25
? [parts.slice(0, 24).join(' '), parts[24]]
: [parts.join(' '), ''];
assert(mnemonicValidate(mnemonic), 'Invalid mnemonic passed to ledger derivation');
assert(hdValidatePath(path), 'Invalid derivation path');
@@ -19,9 +30,9 @@ export function hdLedger (mnemonic: string, path: string): Keypair {
path
.split('/')
.slice(1)
.map((n) => parseInt(n.replace("'", ''), 10))
.map((n) => parseInt(n.replace(/'$/, ''), 10))
.map((n) => (n < HARDENED) ? (n + HARDENED) : n)
.reduce((x, n) => ledgerDerivePrivate(x, n), ledgerMaster(mnemonic))
.reduce((x, n) => ledgerDerivePrivate(x, n), ledgerMaster(mnemonic, password))
.slice(0, 32)
);
}
+2 -2
View File
@@ -9,8 +9,8 @@ import { mnemonicToSeedSync } from '../../mnemonic/bip39';
const ED25519_CRYPTO = 'ed25519 seed';
// gets an xprv from a mnemonic
export function ledgerMaster (mnemonic: string): Uint8Array {
const seed = mnemonicToSeedSync(mnemonic);
export function ledgerMaster (mnemonic: string, password?: string): Uint8Array {
const seed = mnemonicToSeedSync(mnemonic, password);
const chainCode = hmacSha256(ED25519_CRYPTO, new Uint8Array([1, ...seed]));
let priv;
+1 -1
View File
@@ -12,7 +12,7 @@ export function hdValidatePath (path: string): boolean {
return parts.every((n) => /^\d+'?$/.test(n)) && (
!parts
.map((n) => parseInt(n.replace("'", ''), 10))
.map((n) => parseInt(n.replace(/'$/, ''), 10))
.some((n) => isNaN(n) || (n >= HARDENED) || (n < 0))
);
}
+1 -1
View File
@@ -11,7 +11,7 @@ import { ENCODING, NONCE_LENGTH, SCRYPT_LENGTH } from './constants';
export function jsonDecryptData (encrypted?: Uint8Array | null, passphrase?: string | null, encType: EncryptedJsonEncoding[] = ENCODING): Uint8Array {
assert(encrypted, 'No encrypted data available to decode');
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encypted data');
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encrypted data');
let encoded: Uint8Array | null = encrypted;
+1 -1
View File
@@ -28,7 +28,7 @@ export function keyExtractPath (derivePath: string): ExtractResult {
});
}
assert(constructed === derivePath, `Re-constructed path "${constructed}" does not match input`);
assert(constructed === derivePath, () => `Re-constructed path "${constructed}" does not match input`);
return {
parts,
@@ -26,7 +26,7 @@ import { mnemonicValidate } from './validate';
*/
export function mnemonicToLegacySeed (mnemonic: string, password = '', onlyJs = false, byteLength: 32 | 64 = 32): Uint8Array {
assert(mnemonicValidate(mnemonic), 'Invalid bip39 mnemonic specified');
assert([32, 64].includes(byteLength), `Invalid seed length ${byteLength}, expected 32 or 64`);
assert([32, 64].includes(byteLength), () => `Invalid seed length ${byteLength}, expected 32 or 64`);
if (byteLength && byteLength === 32) {
return isReady() && !onlyJs
+2 -2
View File
@@ -25,8 +25,8 @@ export function naclVerify (message: Uint8Array | string, signature: Uint8Array
const publicKeyU8a = u8aToU8a(publicKey);
const signatureU8a = u8aToU8a(signature);
assert(publicKeyU8a.length === 32, `Invalid publicKey, received ${publicKeyU8a.length}, expected 32`);
assert(signatureU8a.length === 64, `Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
assert(publicKeyU8a.length === 32, () => `Invalid publicKey, received ${publicKeyU8a.length}, expected 32`);
assert(signatureU8a.length === 64, () => `Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
return isReady() && !onlyJs
? ed25519Verify(signatureU8a, messageU8a, publicKeyU8a)
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/util-crypto', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/util-crypto', version: '6.6.1' };
@@ -12,8 +12,8 @@ export function schnorrkelVerify (message: Uint8Array | string, signature: Uint8
const publicKeyU8a = u8aToU8a(publicKey);
const signatureU8a = u8aToU8a(signature);
assert(publicKeyU8a.length === 32, `Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
assert(signatureU8a.length === 64, `Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
assert(publicKeyU8a.length === 32, () => `Invalid publicKey, received ${publicKeyU8a.length} bytes, expected 32`);
assert(signatureU8a.length === 64, () => `Invalid signature, received ${signatureU8a.length} bytes, expected 64`);
return sr25519Verify(signatureU8a, u8aToU8a(message), publicKeyU8a);
}
+2 -2
View File
@@ -54,7 +54,7 @@ function verifyDetect (result: VerifyResult, { message, publicKey, signature }:
}
function verifyMultisig (result: VerifyResult, { message, publicKey, signature }: VerifyInput): VerifyResult {
assert([0, 1, 2].includes(signature[0]), `Unknown crypto type, expected signature prefix [0..2], found ${signature[0]}`);
assert([0, 1, 2].includes(signature[0]), () => `Unknown crypto type, expected signature prefix [0..2], found ${signature[0]}`);
const type = CRYPTO_TYPES[signature[0]] || 'none';
@@ -77,7 +77,7 @@ function verifyMultisig (result: VerifyResult, { message, publicKey, signature }
export function signatureVerify (message: Uint8Array | string, signature: Uint8Array | string, addressOrPublicKey: Uint8Array | string): VerifyResult {
const signatureU8a = u8aToU8a(signature);
assert([64, 65, 66].includes(signatureU8a.length), `Invalid signature length, expected [64..66] bytes, found ${signatureU8a.length}`);
assert([64, 65, 66].includes(signatureU8a.length), () => `Invalid signature length, expected [64..66] bytes, found ${signatureU8a.length}`);
const publicKey = decodeAddress(addressOrPublicKey);
const input = { message, publicKey, signature: signatureU8a };
+7 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/util",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A collection of useful utilities for @polkadot",
"main": "index.js",
@@ -8,6 +8,9 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -16,9 +19,9 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-textdecoder": "6.2.1",
"@polkadot/x-textencoder": "6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/x-textdecoder": "6.6.1",
"@polkadot/x-textencoder": "6.6.1",
"@types/bn.js": "^4.11.6",
"bn.js": "^4.11.9",
"camelcase": "^5.3.1",
+2 -1
View File
@@ -22,6 +22,7 @@ import { isUndefined } from '../is/undefined';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function arrayFilter <T = any> (array: T[], allowNulls = true): T[] {
return array.filter((value) =>
!isUndefined(value) && (allowNulls || !isNull(value))
!isUndefined(value) &&
(allowNulls || !isNull(value))
);
}
+3 -1
View File
@@ -9,6 +9,8 @@ import { assert } from '../assert';
import { BN_MAX_INTEGER, BN_ONE, BN_ZERO } from '../bn';
import { bnToBn } from './toBn';
const SQRT_MAX_SAFE_INTEGER = new BN(94906265);
/**
* @name bnSqrt
* @summary Calculates the integer square root of a BN
@@ -35,7 +37,7 @@ export function bnSqrt <ExtToBn extends ToBn> (value: ExtToBn | BN | BigInt | st
// Use sqrt(MAX_SAFE_INTEGER) as starting point. since we already know the
// output will be larger than this, we expect this to be a safe start
let x0 = new BN(94906265);
let x0 = SQRT_MAX_SAFE_INTEGER.clone();
while (true) {
const x1 = n.div(x0).iadd(x0).ishrn(1);
+5 -9
View File
@@ -10,14 +10,6 @@ import { isBigInt } from '../is/bigInt';
import { isHex } from '../is/hex';
import { isToBn } from '../is/toBn';
function numberToBn <ExtToBn extends ToBn> (value: number | ExtToBn | BN): BN {
return BN.isBN(value)
? value
: isToBn(value)
? value.toBn()
: new BN(value);
}
/**
* @name bnToBn
* @summary Creates a BN value from a BN, BigInt, string (base 10 or hex) or number input.
@@ -43,5 +35,9 @@ export function bnToBn <ExtToBn extends ToBn> (value?: ExtToBn | BN | BigInt | s
return new BN(value.toString());
}
return numberToBn(value);
return BN.isBN(value)
? value
: isToBn(value)
? value.toBn()
: new BN(value);
}
+1 -1
View File
@@ -8,5 +8,5 @@ import { assert } from '../assert';
export function checkMaxMin (type: 'max' | 'min', items: BN[]): BN {
assert(items.length >= 1, 'Must provide one or more BN arguments');
return items.reduce((acc: BN, val: BN) => BN[type](acc, val), items[0]);
return items.reduce<BN>((a, v) => BN[type](a, v), items[0]);
}
+16 -5
View File
@@ -15,25 +15,28 @@ describe('compactFromU8a', (): void => {
it('decodes from same u16 encoded value', (): void => {
expect(
compactFromU8a(new Uint8Array([0b11111101, 0b00000111]), 32)
compactFromU8a(new Uint8Array([0b11111101, 0b00000111]))
).toEqual([2, new BN(511)]);
});
it('decodes from same u32 encoded value (short)', (): void => {
expect(
compactFromU8a(new Uint8Array([254, 255, 3, 0]), 32)
).toEqual([4, new BN(0xffff)]);
compactFromU8a(new Uint8Array([254, 255, 3, 0]))
).toEqual(
// since we use in-place, the words are different... HACK it
[4, new BN(0xffff).ishln(16).ishrn(16)]
);
});
it('decodes from same u32 encoded value (full)', (): void => {
expect(
compactFromU8a(new Uint8Array([3, 249, 255, 255, 255]), 32)
compactFromU8a(new Uint8Array([3, 249, 255, 255, 255]))
).toEqual([5, new BN(0xfffffff9)]);
});
it('decodes from same u32 as u64 encoded value (full, default)', (): void => {
expect(
compactFromU8a(new Uint8Array([3 + ((4 - 4) << 2), 249, 255, 255, 255]), 64)
compactFromU8a(new Uint8Array([3 + ((4 - 4) << 2), 249, 255, 255, 255]))
).toEqual([5, new BN(0xfffffff9)]);
});
@@ -44,4 +47,12 @@ describe('compactFromU8a', (): void => {
)
).toEqual([7, new BN('5af3107a4000', 16)]);
});
it('decodes an actual value', (): void => {
expect(
compactFromU8a(
hexToU8a('0x0284d717')
)[1].toString()
).toEqual('100000000');
});
});
+12 -14
View File
@@ -1,12 +1,10 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BitLength } from './types';
import BN from 'bn.js';
import { BN_FOUR } from '../bn';
import { u8aToBn, u8aToU8a } from '../u8a';
import { DEFAULT_BITLENGTH } from './defaults';
/**
* @name compactFromU8a
@@ -17,29 +15,29 @@ import { DEFAULT_BITLENGTH } from './defaults';
* ```javascript
* import { compactFromU8a } from '@polkadot/util';
*
* const [offset, length] = compactFromU8a(new Uint8Array([254, 255, 3, 0]), 32));
* const [offset, length] = compactFromU8a(new Uint8Array([254, 255, 3, 0]));
*
* console.log('value offset=', offset, 'length=', length); // 4, 0xffff
* ```
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function compactFromU8a (_input: Uint8Array | string, bitLength: BitLength = DEFAULT_BITLENGTH): [number, BN] {
export function compactFromU8a (_input: Buffer | Uint8Array | string | number[]): [number, BN] {
const input = u8aToU8a(_input);
const flag = input[0] & 0b11;
if (flag === 0b00) {
return [1, new BN(input[0]).shrn(2)];
return [1, new BN(input[0]).ishrn(2)];
} else if (flag === 0b01) {
return [2, u8aToBn(input.slice(0, 2), true).shrn(2)];
return [2, u8aToBn(input.slice(0, 2), true).ishrn(2)];
} else if (flag === 0b10) {
return [4, u8aToBn(input.slice(0, 4), true).shrn(2)];
return [4, u8aToBn(input.slice(0, 4), true).ishrn(2)];
}
const length = new BN(input[0])
.shrn(2) // clear flag
.addn(4) // add 4 for base length
.toNumber();
const offset = 1 + length;
const offset = 1 + (
new BN(input[0])
.ishrn(2) // clear flag
.iadd(BN_FOUR) // add 4 for base length
.toNumber()
);
return [offset, u8aToBn(input.subarray(1, offset), true)];
}
+2 -5
View File
@@ -1,9 +1,6 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BitLength } from './types';
import { DEFAULT_BITLENGTH } from './defaults';
import { compactFromU8a } from './fromU8a';
/**
@@ -18,8 +15,8 @@ import { compactFromU8a } from './fromU8a';
* console.log(compactStripLength(new Uint8Array([2 << 2, 0xde, 0xad]))); // [2, Uint8Array[0xde, 0xad]]
* ```
*/
export function compactStripLength (input: Uint8Array, bitLength: BitLength = DEFAULT_BITLENGTH): [number, Uint8Array] {
const [offset, length] = compactFromU8a(input, bitLength);
export function compactStripLength (input: Uint8Array): [number, Uint8Array] {
const [offset, length] = compactFromU8a(input);
const total = offset + length.toNumber();
return [
+7
View File
@@ -72,6 +72,13 @@ describe('encode', (): void => {
);
});
it('does not modify the original', (): void => {
const original = new BN(123456);
expect(compactToU8a(original)).toEqual(new Uint8Array([2, 137, 7, 0]));
expect(original.toString()).toEqual('123456');
});
describe('from Rust', (): void => {
// Copied from https://github.com/paritytech/parity-codec/blob/master/src/codec.rs
const testCases = [
+6 -8
View File
@@ -4,7 +4,7 @@
import BN from 'bn.js';
import { assert } from '../assert';
import { bnToBn, bnToU8a } from '../bn';
import { BN_ONE, BN_TWO, bnToBn, bnToU8a } from '../bn';
import { u8aConcat } from '../u8a';
const MAX_U8 = new BN(2).pow(new BN(8 - 2)).subn(1);
@@ -29,9 +29,9 @@ export function compactToU8a (_value: BN | BigInt | number): Uint8Array {
if (value.lte(MAX_U8)) {
return new Uint8Array([value.toNumber() << 2]);
} else if (value.lte(MAX_U16)) {
return bnToU8a(value.shln(2).addn(0b01), 16, true);
return bnToU8a(value.shln(2).iadd(BN_ONE), 16, true);
} else if (value.lte(MAX_U32)) {
return bnToU8a(value.shln(2).addn(0b10), 32, true);
return bnToU8a(value.shln(2).iadd(BN_TWO), 32, true);
}
const u8a = bnToU8a(value);
@@ -42,13 +42,11 @@ export function compactToU8a (_value: BN | BigInt | number): Uint8Array {
length--;
}
assert(length >= 4, 'Previous tests match anyting less than 2^30; qed');
assert(length >= 4, 'Invalid length, previous checks match anything less than 2^30');
return u8aConcat(
new Uint8Array([
// substract 4 as minimum (also catered for in decoding)
((length - 4) << 2) + 0b11
]),
// subtract 4 as minimum (also catered for in decoding)
[((length - 4) << 2) + 0b11],
u8a.subarray(0, length)
);
}
+1 -5
View File
@@ -22,9 +22,5 @@ export function hexAddPrefix (value?: string | null): string {
return value;
}
const prefix = value && value.length % 2 === 1
? '0'
: '';
return `0x${prefix}${value || ''}`;
return `0x${value && value.length % 2 === 1 ? '0' : ''}${value || ''}`;
}
+2 -6
View File
@@ -22,13 +22,9 @@ const UNPREFIX_HEX_REGEX = /^[a-fA-F0-9]+$/;
export function hexStripPrefix (value?: string | null): string {
if (!value) {
return '';
}
if (hexHasPrefix(value)) {
} else if (hexHasPrefix(value)) {
return value.substr(2);
}
if (UNPREFIX_HEX_REGEX.test(value)) {
} else if (UNPREFIX_HEX_REGEX.test(value)) {
return value;
}
+1 -2
View File
@@ -16,7 +16,7 @@ function reverse (value: string): string {
/**
* @name hexToBn
* @summary Creates a BN.js bignumber object from a hex string.
* @summary Creates a BN.js object from a hex string.
* @description
* `null` inputs returns a `BN(0)` result. Hex input values return the actual value converted to a BN. Anything that is not a hex string (including the `0x` prefix) throws an error.
* @param _value The value to convert
@@ -43,7 +43,6 @@ export function hexToBn (value?: string | number | null, options: ToBnOptions |
// Backwards-compatibility
...(isBoolean(options) ? { isLe: options } : options)
};
const _value = hexStripPrefix(value as string);
// FIXME: Use BN's 3rd argument `isLe` once this issue is fixed
+1 -1
View File
@@ -25,7 +25,7 @@ export function hexToU8a (_value?: string | null, bitLength = -1): Uint8Array {
return new Uint8Array();
}
assert(isHex(_value), `Expected hex value to convert, found '${_value}'`);
assert(isHex(_value), () => `Expected hex value to convert, found '${_value}'`);
const value = hexStripPrefix(_value);
const valLength = value.length / 2;
+1
View File
@@ -22,5 +22,6 @@ export * from './memoize';
export * from './number';
export * from './promisify';
export * from './string';
export * from './stringify';
export * from './u8a';
export * from './versionDetect';
+4 -2
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { stringify } from '../stringify';
interface ObjectIndexed {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[index: string]: any;
@@ -32,13 +34,13 @@ interface ObjectIndexed {
*/
export function isJsonObject (value: unknown): value is ObjectIndexed {
const str = typeof value !== 'string'
? JSON.stringify(value)
? stringify(value)
: value;
try {
const obj = JSON.parse(str) as unknown;
return (typeof obj === 'object' && obj !== null);
return typeof obj === 'object' && obj !== null;
} catch (e) {
return false;
}
+3 -11
View File
@@ -3,8 +3,8 @@
import type { Memoized } from './types';
import { isBigInt } from './is/bigInt';
import { isUndefined } from './is/undefined';
import { stringify } from './stringify';
interface Options {
getInstanceId?: () => string;
@@ -14,20 +14,12 @@ function defaultGetId (): string {
return 'none';
}
function normalize (args: unknown[]): string {
return JSON.stringify(args, (_, value: unknown) =>
isBigInt(value)
? value.toString()
: value
);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function memoize <T, F extends (...args: any[]) => T> (fn: F, { getInstanceId = defaultGetId }: Options = {}): Memoized<F> {
const cache: Record<string, Record<string, T>> = {};
const memoized = (...args: unknown[]): T => {
const stringParams = normalize(args);
const stringParams = stringify(args);
const instanceId = getInstanceId();
if (!cache[instanceId]) {
@@ -42,7 +34,7 @@ export function memoize <T, F extends (...args: any[]) => T> (fn: F, { getInstan
};
memoized.unmemoize = (...args: unknown[]): void => {
const stringParams = normalize(args);
const stringParams = stringify(args);
const instanceId = getInstanceId();
if (cache[instanceId] && !isUndefined(cache[instanceId][stringParams])) {
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/util', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/util', version: '6.6.1' };
+32
View File
@@ -0,0 +1,32 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import BN from 'bn.js';
import { stringify } from './stringify';
describe('stringify', (): void => {
it('stringifies a BigInt', (): void => {
expect(
stringify(1234n)
).toEqual('"1234"');
});
it('stringifies an array of values', (): void => {
expect(
stringify(['a', 1, 2n, new BN(3)])
).toEqual('["a",1,"2","3"]');
});
it('stringifies an array of values (with spaces)', (): void => {
expect(
stringify(['a', 1, 2n, new BN(3)], 2)
).toEqual('[\n "a",\n 1,\n "2",\n "3"\n]');
});
it('stringifies a nested object', (): void => {
expect(
stringify({ a: 'a', b: 1, c: { d: 2n, e: new BN(3) } })
).toEqual('{"a":"a","b":1,"c":{"d":"2","e":"3"}}');
});
});
+15
View File
@@ -0,0 +1,15 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { isBigInt } from './is/bigInt';
export function stringify (args: unknown, space?: string | number): string {
return JSON.stringify(
args,
(_, value: unknown) =>
isBigInt(value)
? value.toString()
: value,
space
);
}
+1 -2
View File
@@ -23,11 +23,10 @@ import { u8aToU8a } from './toU8a';
export function u8aConcat (...list: (Buffer | Uint8Array | number[] | string)[]): Uint8Array {
let length = 0;
let offset = 0;
const u8as = new Array(list.length) as Uint8Array[];
const u8as = new Array<Uint8Array>(list.length);
for (let i = 0; i < list.length; i++) {
u8as[i] = u8aToU8a(list[i]);
length += u8as[i].length;
}
+1 -3
View File
@@ -16,7 +16,5 @@
* ```
*/
export function u8aToBuffer (value?: Uint8Array | null): Buffer {
return !value
? Buffer.from([])
: Buffer.from(value);
return Buffer.from(value || []);
}
+5 -4
View File
@@ -5,7 +5,7 @@ const ALPHABET = new Array(256).fill(0).map((_, n) => n.toString(16).padStart(2,
/** @internal */
function extract (value: Uint8Array): string {
const result = new Array(value.length) as string[];
const result = new Array<string>(value.length);
for (let i = 0; i < value.length; i++) {
result[i] = ALPHABET[value[i]];
@@ -44,8 +44,9 @@ export function u8aToHex (value?: Uint8Array | null, bitLength = -1, isPrefixed
const byteLength = Math.ceil(bitLength / 8);
return prefix + ((byteLength > 0 && value.length > byteLength)
? trim(value, Math.ceil(byteLength / 2))
: extract(value)
return prefix + (
(byteLength > 0 && value.length > byteLength)
? trim(value, Math.ceil(byteLength / 2))
: extract(value)
);
}
+15
View File
@@ -40,6 +40,14 @@ describe('u8aToU8a', (): void => {
);
});
it('creates from a Buffer', (): void => {
expect(
u8aToU8a(Buffer.from([1, 2, 3, 128, 0, 10, 11, 12]))
).toEqual(
new Uint8Array([1, 2, 3, 128, 0, 10, 11, 12])
);
});
it('returns a Uint8Array as-is (u8a input)', (): void => {
expect(
u8aToU8a(new Uint8Array([128, 0, 10]))
@@ -47,4 +55,11 @@ describe('u8aToU8a', (): void => {
new Uint8Array([128, 0, 10])
);
});
it('fails to create from unknown typed values', (): void => {
expect(
// this is where completely invalid data is being passed
() => u8aToU8a(123 as unknown as Uint8Array)
).toThrow('Unable to convert 123 (typeof number) to a Uint8Array');
});
});
+11 -18
View File
@@ -1,25 +1,14 @@
// Copyright 2017-2021 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { bufferToU8a } from '../buffer/toU8a';
import { assert } from '../assert';
import { hexToU8a } from '../hex/toU8a';
import { isBuffer } from '../is/buffer';
import { isHex } from '../is/hex';
import { isString } from '../is/string';
import { isU8a } from '../is/u8a';
import { stringToU8a } from '../string/toU8a';
function convertArray (value: number[] | Uint8Array): Uint8Array {
return Array.isArray(value)
? Uint8Array.from(value)
: value;
}
function convertString (value: string): Uint8Array {
return isHex(value)
? hexToU8a(value)
: stringToU8a(value);
}
/**
* @name u8aToU8a
* @summary Creates a Uint8Array value from a Uint8Array, Buffer, string or hex input.
@@ -29,7 +18,7 @@ function convertString (value: string): Uint8Array {
* <BR>
*
* ```javascript
* import { { u8aToU8a } from '@polkadot/util';
* import { u8aToU8a } from '@polkadot/util';
*
* u8aToU8a(new Uint8Array([0x12, 0x34]); // => Uint8Array([0x12, 0x34])
* u8aToU8a(0x1234); // => Uint8Array([0x12, 0x34])
@@ -38,11 +27,15 @@ function convertString (value: string): Uint8Array {
export function u8aToU8a (value?: number[] | Buffer | Uint8Array | string | null): Uint8Array {
if (!value) {
return new Uint8Array();
} else if (isBuffer(value)) {
return bufferToU8a(value);
} else if (isString(value)) {
return convertString(value);
return isHex(value)
? hexToU8a(value)
: stringToU8a(value);
} else if (Array.isArray(value) || isBuffer(value)) {
return new Uint8Array(value);
}
return convertArray(value);
assert(isU8a(value), () => `Unable to convert ${value.toString()} (typeof ${typeof value}) to a Uint8Array`);
return value;
}
+1 -1
View File
@@ -88,7 +88,7 @@ function getPath (pathOrFn?: FnString | string | false): string {
* @summary Checks that a specific package is only imported once
*/
export function detectPackage ({ name, version }: PackageJson, pathOrFn?: FnString | string | false, deps: PackageJson[] = []): void {
assert(name.startsWith('@polkadot'), `Invalid package descriptor ${name}`);
assert(name.startsWith('@polkadot'), () => `Invalid package descriptor ${name}`);
const entry = getEntry(name);
+6 -3
View File
@@ -1,12 +1,15 @@
{
"name": "@polkadot/x-fetch",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A cross-environment fetch replacement",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -15,8 +18,8 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-fetch#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-global": "6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/x-global": "6.6.1",
"@types/node-fetch": "^2.5.10",
"node-fetch": "^2.6.1"
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-fetch', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-fetch', version: '6.6.1' };
+5 -2
View File
@@ -1,10 +1,13 @@
{
"name": "@polkadot/x-global",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A cross-environment global replacement",
"main": "index.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -13,7 +16,7 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-global#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@babel/runtime": "^7.14.0",
"@types/node-fetch": "^2.5.10",
"node-fetch": "^2.6.1"
}
+9 -7
View File
@@ -4,11 +4,13 @@
export { packageInfo } from './packageInfo';
export const xglobal = (
typeof global !== 'undefined'
? global
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: this as unknown as (Window & typeof globalThis)
typeof globalThis !== 'undefined'
? globalThis
: typeof global !== 'undefined'
? global
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: this as unknown as (Window & typeof globalThis)
);
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-global', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-global', version: '6.6.1' };
+7 -4
View File
@@ -1,12 +1,15 @@
{
"name": "@polkadot/x-randomvalues",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A cross-environment window.crypto.getRandomValues replacement",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -15,10 +18,10 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-randomvalues#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-global": "6.2.1"
"@babel/runtime": "^7.14.0",
"@polkadot/x-global": "6.6.1"
},
"devDependencies": {
"@types/react-native": "^0.64.2"
"@types/react-native": "^0.64.7"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-randomvalues', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-randomvalues', version: '6.6.1' };
+5 -2
View File
@@ -1,10 +1,13 @@
{
"name": "@polkadot/x-rxjs",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A pass-through interface for RxJs (allowing node + mjs usage)",
"main": "index.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -13,7 +16,7 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-rxjs#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@babel/runtime": "^7.14.0",
"rxjs": "^6.6.7"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-rxjs', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-rxjs', version: '6.6.1' };
+6 -3
View File
@@ -1,12 +1,15 @@
{
"name": "@polkadot/x-textdecoder",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A TextDecoder replacement",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -15,7 +18,7 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-textdecoder#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-global": "6.2.1"
"@babel/runtime": "^7.14.0",
"@polkadot/x-global": "6.6.1"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-textdecoder', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-textdecoder', version: '6.6.1' };
+6 -3
View File
@@ -1,12 +1,15 @@
{
"name": "@polkadot/x-textencoder",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A TextDecoder replacement",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -15,7 +18,7 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-textencoder#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-global": "6.2.1"
"@babel/runtime": "^7.14.0",
"@polkadot/x-global": "6.6.1"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-textencoder', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-textencoder', version: '6.6.1' };
+6 -3
View File
@@ -1,12 +1,15 @@
{
"name": "@polkadot/x-ws",
"version": "6.2.1",
"version": "6.6.1",
"type": "module",
"description": "A cross-environment WebSocket replacement",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"sideEffects": false,
"engines": {
"node": ">=14.0.0"
},
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
@@ -15,8 +18,8 @@
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-ws#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/x-global": "6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/x-global": "6.6.1",
"@types/websocket": "^1.0.2",
"websocket": "^1.0.34"
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/x-ws', version: '6.2.1' };
export const packageInfo = { name: '@polkadot/x-ws', version: '6.6.1' };
+1402 -1403
View File
File diff suppressed because it is too large Load Diff