Compare commits

...
109 Commits
Author SHA1 Message Date
Github Actions 23d50248de [CI Skip] release/stable 4.9.1
skip-checks: true
2021-05-06 10:07:39 +00:00
Jaco ad4e54a2f6 4.9 (#3497) 2021-05-06 11:57:51 +02:00
Github Actions e659df27ae [CI Skip] release/beta 4.8.2-17
skip-checks: true
2021-05-06 09:09:11 +00:00
Jaco 6dc3c06fe8 Metadata bump for latest Substrate (#3496) 2021-05-06 11:01:00 +02:00
Github Actions 776956f166 [CI Skip] release/beta 4.8.2-16
skip-checks: true
2021-05-06 09:00:25 +00:00
Jaco 4c5203acba Optimize historic metadata retrieval from rpc core (#3495)
* Optimize historic metadata retrieval from rpc core

* Bump deps
2021-05-06 10:50:46 +02:00
Github Actions d80070a041 [CI Skip] release/beta 4.8.2-15
skip-checks: true
2021-05-05 19:44:34 +00:00
Jaco 1c00cb4c4e Align RPCs with Substrate master (#3493)
* Align RPCs with Substrate master

* Build interfaces, apply fixes

* Metadata v13 changes
2021-05-05 21:35:28 +02:00
Github Actions 736505603e [CI Skip] release/beta 4.8.2-14
skip-checks: true
2021-05-05 19:23:44 +00:00
Jaco c243da79e1 Prepare for auto-capability detection for historic queries (#3474)
* Add auto-capability detection for historic queries

* Detect

* Detection via storage length

* Capabilities via storage sizes

* Update CHANGELOG.md

* Explicit

* CHANGELOG

* Westend upgrade block

* Pass registry explcitly

* Updates

* Adjust

* .at remove capabilities call
2021-05-05 21:12:50 +02:00
Github Actions 2677f38090 [CI Skip] release/beta 4.8.2-13
skip-checks: true
2021-05-05 18:45:37 +00:00
Jaco 41d05d2402 Westend 9000 upgrade block (#3491)
* Westend 9000 upgrade block

* Upgrade block for Westend 9000

* Correct block
2021-05-05 20:37:13 +02:00
Github Actions 0f38584566 [CI Skip] release/beta 4.8.2-12
skip-checks: true
2021-05-05 16:38:02 +00:00
André Silva 2b7fb8667e parachains: update HostConfiguration type (#3492) 2021-05-05 19:27:39 +03:00
Github Actions ca18846bfb [CI Skip] release/beta 4.8.2-11
skip-checks: true
2021-05-05 10:04:57 +00:00
Jaco 4ba372d29b Remove deprecated api-contract methods (#3486)
* Remove deprectaed api-contract methods

* Remove deprecated read/exec from checkTypes
2021-05-05 11:54:25 +02:00
Github Actions bdc2d24366 [CI Skip] release/beta 4.8.2-10
skip-checks: true
2021-05-05 07:06:39 +00:00
Jaco 3de06c1d4c Support for metadata v13 (#3465)
* Support for metadata v13

* Lint fixes

* Lastest tag as string

* Documentation

* MagicNumber opt

* NMap enum entry

* NMapTypeLatest

* Adjust for NMap type overrides

* Static from v13

* Basic NMap support

* lint

* Test expectations
2021-05-05 08:55:49 +02:00
Github Actions b51149d895 [CI Skip] release/beta 4.8.2-9
skip-checks: true
2021-05-04 15:09:01 +00:00
Jaco Greeff e0fef55366 Adjust aliasses for paras* 2021-05-04 17:59:18 +03:00
Github Actions e2aac5f94a [CI Skip] release/beta 4.8.2-8
skip-checks: true
2021-05-04 09:45:59 +00:00
Jaco 8f44f84c7f Update ChangesTrieSignal (#3485) 2021-05-04 11:36:02 +02:00
Jaco d53a61ec86 ConsensusEngineId implements [u8; 4] (#3482)
* ConsensusEngineId implements [u8; 4]

* Adjust tests

* isLE
2021-05-04 11:27:01 +02:00
Github Actions cf18f79c14 [CI Skip] release/beta 4.8.2-7
skip-checks: true
2021-05-04 09:26:08 +00:00
Jaco beb8011b4c Adjust ContractInfo types (#3484) 2021-05-04 11:15:38 +02:00
Github Actions 38a601b665 [CI Skip] release/beta 4.8.2-6
skip-checks: true
2021-05-04 08:18:36 +00:00
Jaco 11a3483ce5 Adjust error logs on create (#3480) 2021-05-04 10:08:44 +02:00
Github Actions 1db133b741 [CI Skip] release/beta 4.8.2-5
skip-checks: true
2021-05-03 19:40:32 +00:00
Jaco 716dce0093 Westend 900 upgrade block (#3478) 2021-05-03 21:30:49 +02:00
Github Actions 3b53442172 [CI Skip] release/beta 4.8.2-4
skip-checks: true
2021-05-03 18:21:51 +00:00
Jaco 253d94a47d Adjust re-encoding of BitVec based on decoded length (#3476) 2021-05-03 20:12:37 +02:00
Github Actions fb1129a49b [CI Skip] release/beta 4.8.2-3
skip-checks: true
2021-05-03 17:23:51 +00:00
Jaco 1cc56d6e44 Adjust para types (#3475) 2021-05-03 19:14:15 +02:00
Github Actions 9e2983a735 [CI Skip] release/beta 4.8.2-2
skip-checks: true
2021-05-03 13:33:19 +00:00
Jaco a6fcba95de Adjust capability detection (#3473)
* Adjust capability detection

* Adjust types

* Fully known isU32
2021-05-03 15:24:31 +02:00
Github Actions c8c535834e [CI Skip] release/beta 4.8.2-1
skip-checks: true
2021-05-03 11:55:00 +00:00
Jaco b8d7c2e3e3 Re-add isPedantic check on storage decoding (#3471)
* Re-add isPedantic check on storage decoding

* Additional length log

* Check for existing system

* Adjust output length
2021-05-03 13:45:37 +02:00
Github Actions 0283d4727b [CI Skip] release/beta 4.8.2-0
skip-checks: true
2021-05-03 11:25:48 +00:00
Jaco a4ab732478 Additional Xcm types (#3472) 2021-05-03 13:16:18 +02:00
Github Actions 0dc121a796 [CI Skip] release/stable 4.8.1
skip-checks: true
2021-05-02 18:21:16 +00:00
Jaco a827131457 4.8 (#3470) 2021-05-02 20:11:35 +02:00
Github Actions 2174537f76 [CI Skip] release/beta 4.7.3-12
skip-checks: true
2021-05-02 07:32:19 +00:00
Jaco 53fca2406a Cleanup WebSocket handlers when close event has been received (#3469) 2021-05-02 09:24:10 +02:00
Github Actions 0eaba284ae [CI Skip] release/beta 4.7.3-11
skip-checks: true
2021-05-02 07:14:56 +00:00
Jaco 378f359a76 add known upgrade block for Polkadot v30 (#3468) 2021-05-02 09:04:48 +02:00
Github Actions 5460d96b5d [CI Skip] release/beta 4.7.3-10
skip-checks: true
2021-05-01 06:40:35 +00:00
Jaco b1353edc84 Expose additional camelCase method on AbiMessage (maps to decorated name) (#3466) 2021-05-01 08:31:16 +02:00
Github Actions 9129fed6e5 [CI Skip] release/beta 4.7.3-9
skip-checks: true
2021-04-30 12:56:27 +00:00
Jaco 7c4abacaca Cater for N-key hashing (#3451)
* Cater for N-key hashing

* Adjust

* Cleanups

* Update packages/types/src/primitive/types.ts

* Update packages/metadata/src/decorate/storage/createFunction.ts

* Update packages/metadata/src/decorate/storage/createFunction.ts

* Adjust

* Adjust

* DoubleMap arg check test

* On-demand create

* Rework
2021-04-30 14:48:19 +02:00
Github Actions 3664c7d81b [CI Skip] release/beta 4.7.3-8
skip-checks: true
2021-04-30 06:58:09 +00:00
Jaco f75b87c5a5 Verification test for 2-byte ss58 (#3464)
* Verification test for 2-byte ss58

* CHANGELOG
2021-04-30 08:50:11 +02:00
Github Actions 1c228216cd [CI Skip] release/beta 4.7.3-7
skip-checks: true
2021-04-30 06:21:25 +00:00
Jaco cec3c12795 Bump metadata (#3463) 2021-04-30 08:13:24 +02:00
Github Actions 0d0d12e85b [CI Skip] release/beta 4.7.3-6
skip-checks: true
2021-04-30 06:05:49 +00:00
Jaco 3a16e69be5 Bump deps (#3462) 2021-04-30 07:56:39 +02:00
Github Actions 4ae8e3909f [CI Skip] release/beta 4.7.3-5
skip-checks: true
2021-04-29 12:15:38 +00:00
Jaco 6e18bb3b1d Allow Metadata instances from JSON or Map (#3459)
* assert isU8a & isHex inputs on Metadata

* Remove _ in param

* Allow hex parsing

* CHANGELOG
2021-04-29 14:07:32 +02:00
Github Actions be153e13a6 [CI Skip] release/beta 4.7.3-4
skip-checks: true
2021-04-29 12:05:39 +00:00
Chevdor 4c01dfd0ab Fix metadata package link (#3458) 2021-04-29 13:55:23 +02:00
Github Actions b57c7a1343 [CI Skip] release/beta 4.7.3-3
skip-checks: true
2021-04-28 16:47:22 +00:00
Jaco da62acdf50 Adjust XcmError with updated WeightLimitReached (#3455) 2021-04-28 18:37:56 +02:00
Github Actions cc95e4fc0a [CI Skip] release/beta 4.7.3-2
skip-checks: true
2021-04-28 08:26:17 +00:00
Jaco 7f5647c6e1 Optimize metadata unknown type validation (#3453) 2021-04-28 10:16:38 +02:00
Github Actions c636d63bc0 [CI Skip] release/beta 4.7.3-1
skip-checks: true
2021-04-27 12:15:39 +00:00
Jaco 30c98ef857 Fix generation of well-known keys (#3452)
* Fix generation of well-known keys

* CHANGELOG

* Linting, unfiy decorate params

* Adjust
2021-04-27 14:05:59 +02:00
Github Actions debecde50f [CI Skip] release/beta 4.7.3-0
skip-checks: true
2021-04-27 05:03:10 +00:00
Jaco cd2cdd1184 De-alias XcmOutcome (#3449) 2021-04-27 06:53:40 +02:00
Github Actions f5c25d75ff [CI Skip] release/stable 4.7.2
skip-checks: true
2021-04-26 18:20:50 +00:00
Jaco 780cc62942 4.7.2 (#3448)
* 4.7.2

* XcmError update
2021-04-26 20:11:39 +02:00
Github Actions 165568c905 [CI Skip] release/beta 4.7.2-5
skip-checks: true
2021-04-26 16:34:59 +00:00
Jaco 976a48d8f9 Update .nvmrc (#3447)
As per https://github.com/polkadot-js/api/issues/3446 (also need one on common before bumping to a patch)
2021-04-26 19:24:44 +03:00
Github Actions 35cbbbe0ed [CI Skip] release/beta 4.7.2-4
skip-checks: true
2021-04-26 12:06:50 +00:00
Jaco 772769c981 Add membership derives (#3442) 2021-04-26 13:57:30 +02:00
Github Actions 1ba2bd1766 [CI Skip] release/beta 4.7.2-3
skip-checks: true
2021-04-26 10:43:48 +00:00
Jaco 4afa345a7d Cleanup encodedLength calculations (#3441)
* Cleanup encodedLength calculations

* Remove array santize

* Test adjustments
2021-04-26 12:33:16 +02:00
Github Actions 5c03359f32 [CI Skip] release/beta 4.7.2-2
skip-checks: true
2021-04-25 15:16:21 +00:00
Jaco Greeff 04120505f0 Fix H32 definition 2021-04-25 18:08:02 +03:00
Github Actions 7bd9dd65f8 [CI Skip] release/beta 4.7.2-1
skip-checks: true
2021-04-25 14:44:02 +00:00
Jaco 5f57ecb2e1 Update ETH types (#3439)
* Update ETH types

* Build
2021-04-25 16:34:42 +02:00
Github Actions 9123f1d805 [CI Skip] release/beta 4.7.2-0
skip-checks: true
2021-04-25 11:28:54 +00:00
Jaco 7050c4a554 Updated Xcm OriginKind enum (#3438) 2021-04-25 13:18:47 +02:00
Github Actions 62afb0b534 [CI Skip] release/stable 4.7.1
skip-checks: true
2021-04-25 05:18:10 +00:00
Jaco Greeff 5157ca5608 CHANGELOG bump 2021-04-25 08:08:28 +03:00
Jaco 315617c027 4.7 (#3435)
* 4.7

* Update CHANGELOG.md
2021-04-25 06:31:42 +02:00
Github Actions 7d33b4dec6 [CI Skip] release/beta 4.6.3-11
skip-checks: true
2021-04-24 08:06:21 +00:00
Jaco 2345f69c71 Add engines field to package.json (#3433) 2021-04-24 09:56:50 +02:00
Github Actions 3cef2fb4d5 [CI Skip] release/beta 4.6.3-10
skip-checks: true
2021-04-23 15:50:43 +00:00
Jaco 2bbf5513b2 Expand DispatchError (#3431) 2021-04-23 17:43:32 +02:00
Github Actions c146f06178 [CI Skip] release/beta 4.6.3-9
skip-checks: true
2021-04-23 05:44:16 +00:00
Jaco 5903704b61 Expand Data (from identity) with all is/as getters (#3429) 2021-04-23 07:34:01 +02:00
Github Actions 90d8db651b [CI Skip] release/beta 4.6.3-8
skip-checks: true
2021-04-22 13:10:53 +00:00
Jaco 557283a3d1 Struct decoding error messaging (#3425)
* Struct decoding error messaging

* Error adjust

* Tests

* Bump common, use stringify

* Linting

* Adjust

* Bumps

* Rebump

* Assert cleanups

* Don't modify original value on encoding

* util bump, fixe compact encoding
2021-04-22 15:02:54 +02:00
Github Actions 88b84dcf75 [CI Skip] release/beta 4.6.3-7
skip-checks: true
2021-04-21 17:13:17 +00:00
Jaco 45d190eaca Revery Westend beefy keys (#3423) 2021-04-21 20:03:43 +03:00
Github Actions 6d32328509 [CI Skip] release/beta 4.6.3-6
skip-checks: true
2021-04-21 10:37:47 +00:00
Jaco ba470e7417 Bump WS reconnect delay from 1s -> 2.5s (#3420) 2021-04-21 12:27:16 +02:00
Github Actions 4a16e46f88 [CI Skip] release/beta 4.6.3-5
skip-checks: true
2021-04-21 09:39:02 +00:00
Jaco Greeff ada0d99a84 Sorting 2021-04-21 12:28:51 +03:00
Github Actions e486fc4316 [CI Skip] release/beta 4.6.3-4
skip-checks: true
2021-04-21 08:58:57 +00:00
Jaco 6e5c6f4e0b Bump deps (#3418)
* Bump deps

* Sorting md
2021-04-21 10:48:52 +02:00
Github Actions 21ddcaf173 [CI Skip] release/beta 4.6.3-3
skip-checks: true
2021-04-21 07:17:45 +00:00
Jaco 6085b994f6 Remove well-known json dependency (#3417) 2021-04-21 09:09:30 +02:00
Github Actions 7c3bf05868 [CI Skip] release/beta 4.6.3-2
skip-checks: true
2021-04-21 07:03:45 +00:00
Jaco 8bce5b4a09 Add support for BoundedVec (#3415)
* Add support for BoundedVec

* Update packages/types/src/create/sanitize.ts

* Cleanup sanitize duplication

* Additional cleanups

* Update packages/types/src/create/sanitize.ts

* Box wrap
2021-04-21 08:52:56 +02:00
Github Actions 7a6077301f [CI Skip] release/beta 4.6.3-1
skip-checks: true
2021-04-20 09:05:25 +00:00
Jaco 3f2767462f Adjust statemint proxy type (#3412) 2021-04-20 10:55:28 +02:00
Github Actions ecc37d11df [CI Skip] release/beta 4.6.3-0
skip-checks: true
2021-04-20 06:02:39 +00:00
Jaco 0589d151da Add Xcm Plurality types (#3411) 2021-04-20 07:53:24 +02:00
Jaco 47cd6c6410 RewardDestination: None types (#3231) 2021-04-20 07:44:42 +02:00
153 changed files with 17023 additions and 1519 deletions
+2 -1
View File
@@ -20,4 +20,5 @@
4.0.2
4.0.3
4.6.2
4.6.2
4.7.2
+1 -1
View File
@@ -1 +1 @@
12
14
+79 -2
View File
@@ -1,8 +1,85 @@
# CHANGELOG
## 4.9.1 May 6, 2021
Upgrade priority: Medium. Required for the next v0.9.0 Polkadot/Kusama chain upgrades where parachains are used.
- **Breaking change** The previously deprecated contracts interfaces, has been removed. Update to `<myContract>.query.*`, `<myContract>.tx.*` and `<myCode>.tx.*` interfaces as per the previous code usage hints.
- **Important** By default the `isPedantic` mode is now switched on for storage queries. This means that the API will fail on any types where the input/output decoding doesn't match 100%
Changes:
- Re-add isPedantic check on storage decoding
- `ConsensusEngineId` now implements `[u8;4]` (mapping closer to Rust source)
- Additional Xcm types
- Adjust parachain types
- Remove error logging on createType (details passed in error)
- Adjust `ContractInfo` type as per latest Substrate
- Adjust `DigestItem` type as per latest Substrate
- Adjust re-encoding of `BitVec` based on decoded length
- Added `contracts_instantiate`, `state_traceBlock` & `system_reservedPeers` RPCs
- Prepare for auto-capability detection with historic `.at` queries
- Add known upgrade block for Westend 900 & 9000
- Remove all deprecated interfaces inside `@polkadot/api-contracts`
- Initial support for NMap storage keys
- Support metadata v13 from Substrate (upcoming upgrade)
- Optimize historic metadata retrieval from rpc core
## 4.8.1 May 2, 2021
Upgrade priority: Low. Recommended when using or developing for parachains.
Changes:
- De-alias xcm `Outcome` (used in multiple pallettes)
- Adjust xcm types as per latest, e.g. `XcmError`
- Fix generate of well-known storage keys (e.g. `:code`)
- Optimize metadata unknown type validation
- Allow metadata creation for `Map` or `Record`
- Expose additional camelCase `method` on `AbiMessage` (maps to decorated name)
- Added explicit double-byte ss58 `AccountId` encoding test
- Add known upgrade block for Polkadot v30
- Cleanup WebSocket handlers when close event has been received
- Update to latest Substrate metadata
## 4.7.2 Apr 26, 2021
Upgrade priority: Low. Recommended for users of 4.7.1 using nvm
Changes:
- Update `EthBlock`/`EthHeader` types (as per Rust origin)
- Updated Xcm `OriginKind` enum
- Add derives for `membership`
- Cleanups on encodedLength calculations
- Update `.nvmrc` to reflect engines changes
## 4.7.1 Apr 25, 2021
Upgrade priority: Low. Recommended for users following Substrate master.
Changes:
- Adjust Struct decoding with better error messages on invalid input objects
- Add support for new `BoundedVec` type
- Expand `Data` type (as used in identity), with all is/as getters
- Updated `Xcm` types (with Plularity)
- Adjust `DispatchError` type as per current Substrate master
- Adjusted Statemint `Proxy` type
- Remove metadata generation dependency on well-known.json (dedupe)
- Adjust WebSocket reconnection delay from 1s to 2.5s
- Revert Beefy keys addition for Westend
- Add explicit `engines` config to `package.json`
- Support for `None` in `RewardDestination`
- Align with latest substrate metadata
## 4.6.2 Apr 19, 2021
Upgrade priority: Low.
Upgrade priority: Low. Recommended for users of Kusama/Polkadot.
Changes:
@@ -18,7 +95,7 @@ Changes:
- Assert keypair validity in signing operations
- Expose `internalError` on submittable results (e.g. event decoding errors)
- Simplify session derives for old/new
- Add statemint to known types
- Add Statemint to known types
- Add support for `rpc.beefy.subscribeJustifications`
- Update Xcm types
- Explicitly handle `isReadyOrError` with `Api.create`
+1 -1
View File
@@ -21,7 +21,7 @@ The API is split up into a number of internal packages -
- [@polkadot/api](packages/api/) The API library, providing both Promise and RxJS Observable-based interfaces. This is the main user-facing entry point.
- [@polkadot/api-derive](packages/api-derive/) Derived results that are injected into the API, allowing for combinations of various query results (only used internally and exposed on the Api instances via `api.derive.*`)
- [@polkadot/api-metadata](packages/api-metadata/) Base extrinsic, storage and constant injectors for injection
- [@polkadot/metadata](packages/metadata/) Base extrinsic, storage and constant injectors for injection
- [@polkadot/rpc-core](packages/rpc-core/) Wrapper around all [JSON-RPC methods](https://polkadot.js.org/docs/substrate/rpc) exposed by a Polkadot network client
- [@polkadot/rpc-provider](packages/rpc-provider/) Providers for connecting to nodes, including WebSockets and Http
+7 -7
View File
@@ -25,14 +25,14 @@
"test:watch": "polkadot-dev-run-test --watch"
},
"devDependencies": {
"@babel/core": "^7.13.15",
"@babel/register": "^7.13.14",
"@babel/runtime": "^7.13.10",
"@polkadot/dev": "^0.62.8",
"@polkadot/ts": "^0.3.62",
"@babel/core": "^7.14.0",
"@babel/register": "^7.13.16",
"@babel/runtime": "^7.14.0",
"@polkadot/dev": "^0.62.12",
"@polkadot/ts": "^0.3.64",
"@polkadot/typegen": "workspace:packages/typegen",
"@types/jest": "^26.0.22",
"@types/jest": "^26.0.23",
"copyfiles": "^2.4.1"
},
"version": "4.6.2"
"version": "4.9.1"
}
+9 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-contract",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Interfaces for interacting with contracts and contract ABIs",
"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/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-contract#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/api": "4.6.2",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/x-rxjs": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/api": "4.9.1",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/x-rxjs": "^6.3.1",
"bn.js": "^4.11.9"
}
}
+8 -6
View File
@@ -6,7 +6,7 @@ import type { ChainProperties, ContractConstructorSpec, ContractEventSpec, Contr
import type { AnyJson, Codec, CodecArg } from '@polkadot/types/types';
import type { AbiConstructor, AbiEvent, AbiMessage, AbiParam, DecodedEvent, DecodedMessage } from './types';
import { assert, assertReturn, compactAddLength, compactStripLength, isNumber, isObject, isString, logger, stringCamelCase, u8aConcat, u8aToHex } from '@polkadot/util';
import { assert, assertReturn, compactAddLength, compactStripLength, isNumber, isObject, isString, logger, stringCamelCase, stringify, u8aConcat, u8aToHex } from '@polkadot/util';
import { MetaRegistry } from './MetaRegistry';
@@ -21,7 +21,7 @@ function findMessage <T extends AbiMessage> (list: T[], messageOrId: T | string
? list.find(({ identifier }) => [identifier, stringCamelCase(identifier)].includes(messageOrId.toString()))
: messageOrId;
return assertReturn(message, `Attempted to call an invalid contract interface, ${JSON.stringify(messageOrId)}`);
return assertReturn(message, `Attempted to call an invalid contract interface, ${stringify(messageOrId)}`);
}
export class Abi {
@@ -81,7 +81,7 @@ export class Abi {
const index = data[0];
const event = this.#events[index];
assert(event, `Unable to find event with index ${index}`);
assert(event, () => `Unable to find event with index ${index}`);
return event.fromU8a(data.subarray(1));
}
@@ -118,7 +118,7 @@ export class Abi {
type: this.registry.getMetaTypeDef(arg.type)
};
} catch (error) {
l.error(`Error expanding argument ${index} in ${JSON.stringify(spec)}`);
l.error(`Error expanding argument ${index} in ${stringify(spec)}`);
throw error;
}
@@ -143,6 +143,7 @@ export class Abi {
#createMessage = (spec: ContractMessageSpec | ContractConstructorSpec, index: number, add: Partial<AbiMessage> = {}): AbiMessage => {
const args = this.#createArgs(spec.args, spec);
const identifier = spec.name.toString();
const message = {
...add,
args,
@@ -151,8 +152,9 @@ export class Abi {
args: this.#decodeArgs(args, data),
message
}),
identifier: spec.name.toString(),
identifier,
index,
method: stringCamelCase(identifier),
selector: spec.selector,
toU8a: (params: CodecArg[], additional?: Uint8Array) =>
this.#encodeArgs(spec, args, params, additional)
@@ -186,7 +188,7 @@ export class Abi {
}
#encodeArgs = ({ name, selector }: ContractMessageSpec | ContractConstructorSpec, args: AbiParam[], data: CodecArg[], additional = EMPTY_U8A): Uint8Array => {
assert(data.length === args.length, `Expected ${args.length} arguments to contract message '${name.toString()}', found ${data.length}`);
assert(data.length === args.length, () => `Expected ${args.length} arguments to contract message '${name.toString()}', found ${data.length}`);
return compactAddLength(
u8aConcat(
+2 -2
View File
@@ -80,7 +80,7 @@ export class MetaRegistry extends TypeRegistry {
#getMetaType = (id: SiLookupTypeId): SiType => {
const type = this.#siTypes[getRegistryOffset(id)];
assert(!isUndefined(type), `getMetaType:: Unable to find ${id.toNumber()} in type values`);
assert(!isUndefined(type), () => `getMetaType:: Unable to find ${id.toNumber()} in type values`);
return this.createType('SiType', type);
}
@@ -184,7 +184,7 @@ export class MetaRegistry extends TypeRegistry {
}
#extractSequence = ({ type }: SiTypeDefSequence, id: SiLookupTypeId): Omit<TypeDef, 'type'> => {
assert(!!type, `ContractRegistry: Invalid sequence type found at id ${id.toString()}`);
assert(!!type, () => `ContractRegistry: Invalid sequence type found at id ${id.toString()}`);
return {
info: TypeDefInfo.Vec,
+5 -14
View File
@@ -6,17 +6,17 @@ import type { ApiTypes, DecorateMethod } from '@polkadot/api/types';
import type { AccountId, EventRecord, Hash } from '@polkadot/types/interfaces';
import type { AnyJson, CodecArg, ISubmittableResult } from '@polkadot/types/types';
import type { AbiConstructor, BlueprintOptions } from '../types';
import type { ContractGeneric, MapConstructorExec } from './types';
import type { MapConstructorExec } from './types';
import { SubmittableResult } from '@polkadot/api';
import { ApiBase } from '@polkadot/api/base';
import { isUndefined, stringCamelCase } from '@polkadot/util';
import { isUndefined } from '@polkadot/util';
import { Abi } from '../Abi';
import { applyOnEvent } from '../util';
import { Base } from './Base';
import { Contract } from './Contract';
import { createBluePrintTx, createBluePrintWithId, EMPTY_SALT, encodeSalt } from './util';
import { createBluePrintTx, EMPTY_SALT, encodeSalt } from './util';
export class BlueprintSubmittableResult<ApiType extends ApiTypes> extends SubmittableResult {
public readonly contract?: Contract<ApiType>;
@@ -34,25 +34,16 @@ export class Blueprint<ApiType extends ApiTypes> extends Base<ApiType> {
*/
public readonly codeHash: Hash;
/**
* @deprecated
* @description Deprecated. Use `.tx.<constructorName>`. Creates a contract in a non-deterministic way.
*/
public readonly createContract: ContractGeneric<BlueprintOptions, SubmittableExtrinsic<ApiType, BlueprintSubmittableResult<ApiType>>>;
readonly #tx: MapConstructorExec<ApiType> = {};
constructor (api: ApiBase<ApiType>, abi: AnyJson | Abi, codeHash: string | Hash | Uint8Array, decorateMethod: DecorateMethod<ApiType>) {
super(api, abi, decorateMethod);
this.codeHash = this.registry.createType('Hash', codeHash);
this.createContract = createBluePrintWithId(this.#deploy);
this.abi.constructors.forEach((c): void => {
const messageName = stringCamelCase(c.identifier);
if (isUndefined(this.#tx[messageName])) {
this.#tx[messageName] = createBluePrintTx((o, p) => this.#deploy(c, o, p));
if (isUndefined(this.#tx[c.method])) {
this.#tx[c.method] = createBluePrintTx((o, p) => this.#deploy(c, o, p));
}
});
}
+3 -17
View File
@@ -10,7 +10,7 @@ import type { MapConstructorExec } from './types';
import { SubmittableResult } from '@polkadot/api';
import { ApiBase } from '@polkadot/api/base';
import { assert, compactAddLength, isFunction, isUndefined, isWasm, logger, stringCamelCase, u8aToU8a } from '@polkadot/util';
import { assert, compactAddLength, isFunction, isUndefined, isWasm, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
import { Abi } from '../Abi';
@@ -20,8 +20,6 @@ import { Blueprint } from './Blueprint';
import { Contract } from './Contract';
import { createBluePrintTx, EMPTY_SALT, encodeSalt } from './util';
const l = logger('Code');
export class CodeSubmittableResult<ApiType extends ApiTypes> extends SubmittableResult {
public readonly blueprint?: Blueprint<ApiType>;
public readonly contract?: Contract<ApiType>;
@@ -49,10 +47,8 @@ export class Code<ApiType extends ApiTypes> extends Base<ApiType> {
assert(isWasm(this.code), 'No WASM code provided');
this.abi.constructors.forEach((c): void => {
const messageName = stringCamelCase(c.identifier);
if (isUndefined(this.#tx[messageName])) {
this.#tx[messageName] = createBluePrintTx((o, p) => this.#instantiate(c, o, p));
if (isUndefined(this.#tx[c.method])) {
this.#tx[c.method] = createBluePrintTx((o, p) => this.#instantiate(c, o, p));
}
});
}
@@ -61,16 +57,6 @@ export class Code<ApiType extends ApiTypes> extends Base<ApiType> {
return this.#tx;
}
/**
* @description Deploy the code bundle and the contract, creating a Blueprint.
* @deprecated Use the `code.tx.<constructor>(...) format to put code and deploy
*/
public createContract (constructorOrId: AbiConstructor | string | number, options: BlueprintOptions, params: CodecArg[]): SubmittableExtrinsic<ApiType, CodeSubmittableResult<ApiType>> {
l.warn('.createContract is deprecated, use code.tx.<constructorName>(...) instead (where code refers to this instance)');
return this.#instantiate(constructorOrId, options, params);
}
#instantiate = (constructorOrId: AbiConstructor | string | number, options: BlueprintOptions, params: CodecArg[]): SubmittableExtrinsic<ApiType, CodeSubmittableResult<ApiType>> => {
return isFunction(this.api.tx.contracts.instantiateWithCode)
? this.#instantiateCurrent(constructorOrId, options, params)
+6 -32
View File
@@ -7,13 +7,13 @@ import type { Bytes } from '@polkadot/types';
import type { AccountId, ContractExecResult, EventRecord, Weight } from '@polkadot/types/interfaces';
import type { AnyJson, CodecArg, ISubmittableResult, Registry } from '@polkadot/types/types';
import type { AbiMessage, ContractCallOutcome, ContractOptions, DecodedEvent } from '../types';
import type { ContractCallResult, ContractCallSend, ContractGeneric, ContractQuery, ContractTx, MapMessageQuery, MapMessageTx } from './types';
import type { ContractCallResult, ContractCallSend, ContractQuery, ContractTx, MapMessageQuery, MapMessageTx } from './types';
import BN from 'bn.js';
import { SubmittableResult } from '@polkadot/api';
import { ApiBase } from '@polkadot/api/base';
import { assert, bnToBn, isFunction, isUndefined, logger, stringCamelCase } from '@polkadot/util';
import { assert, bnToBn, isFunction, isUndefined, logger } from '@polkadot/util';
import { map } from '@polkadot/x-rxjs/operators';
import { Abi } from '../Abi';
@@ -40,16 +40,6 @@ function createTx <ApiType extends ApiTypes> (fn: (options: ContractOptions, par
: fn(...extractOptions(options, params));
}
function createWithId <T> (fn: (messageOrId: AbiMessage | string | number, options: ContractOptions, params: CodecArg[]) => T, warn?: string): ContractGeneric<ContractOptions, T> {
return (messageOrId: AbiMessage | string | number, options: BigInt | string | number | BN | ContractOptions, ...params: CodecArg[]): T => {
warn && l.warn(warn);
return isOptions(options)
? fn(messageOrId, options, params)
: fn(messageOrId, ...extractOptions(options, params));
};
}
export class ContractSubmittableResult extends SubmittableResult {
public readonly contractEvents?: DecodedEvent[];
@@ -93,18 +83,6 @@ export class Contract<ApiType extends ApiTypes> extends Base<ApiType> {
*/
public readonly address: AccountId;
/**
* @deprecated
* @description Deprecated. Use `.tx.<messageName>` to send a transaction.
*/
public readonly exec: ContractGeneric<ContractOptions, SubmittableExtrinsic<ApiType>>;
/**
* @deprecated
* @description Deprecated. Use `.tx.<messageName>` to send a transaction.
*/
public readonly read: ContractGeneric<ContractOptions, ContractCallSend<ApiType>>;
readonly #query: MapMessageQuery<ApiType> = {};
readonly #tx: MapMessageTx<ApiType> = {};
@@ -113,18 +91,14 @@ export class Contract<ApiType extends ApiTypes> extends Base<ApiType> {
super(api, abi, decorateMethod);
this.address = this.registry.createType('AccountId', address);
this.exec = createWithId(this.#exec, '.exec is deprecated, use contract.tx.<messageName>(...) instead (where contract refers to this instance)');
this.read = createWithId(this.#read, '.read is deprecated, use contract.query.<messageName>(...) instead (where contract refers to this instance)');
this.abi.messages.forEach((m): void => {
const messageName = stringCamelCase(m.identifier);
if (isUndefined(this.#tx[messageName])) {
this.#tx[messageName] = createTx((o, p) => this.#exec(m, o, p));
if (isUndefined(this.#tx[m.method])) {
this.#tx[m.method] = createTx((o, p) => this.#exec(m, o, p));
}
if (isUndefined(this.#query[messageName])) {
this.#query[messageName] = createQuery((f, o, p) => this.#read(m, o, p).send(f));
if (isUndefined(this.#query[m.method])) {
this.#query[m.method] = createQuery((f, o, p) => this.#read(m, o, p).send(f));
}
});
}
@@ -30,10 +30,6 @@ async function checkContract (api: ApiPromise, pairs: TestKeyringMap): Promise<v
// execute
await contract.tx.inc({ gasLimit: 1234 }, 123).signAndSend(pairs.eve);
await contract.tx.inc(123, 456, 69).signAndSend(pairs.eve);
// deprecated
await contract.read('get', {}).send(pairs.eve.address);
await contract.exec('inc', {}, 123).signAndSend(pairs.dave);
}
async function main (): Promise<void> {
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api-contract', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/api-contract', version: '4.9.1' };
+1
View File
@@ -39,6 +39,7 @@ export interface AbiMessage {
isConstructor?: boolean;
isMutating?: boolean;
isPayable?: boolean;
method: string;
returnType?: TypeDef | null;
selector: ContractSelector;
toU8a: (params: CodecArg[], additional?: Uint8Array) => Uint8Array;
+13 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-derive",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Common functions used across Polkadot, derived from RPC calls and storage queries.",
"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,17 +19,17 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-derive#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/api": "4.6.2",
"@polkadot/rpc-core": "4.6.2",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/util-crypto": "^6.2.1",
"@polkadot/x-rxjs": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/api": "4.9.1",
"@polkadot/rpc-core": "4.9.1",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/util-crypto": "^6.3.1",
"@polkadot/x-rxjs": "^6.3.1",
"bn.js": "^4.11.9"
},
"devDependencies": {
"@polkadot/keyring": "^6.2.1",
"@polkadot/rpc-provider": "4.6.2"
"@polkadot/keyring": "^6.3.1",
"@polkadot/rpc-provider": "4.9.1"
}
}
@@ -13,6 +13,8 @@ import { catchError, map, switchMap } from '@polkadot/x-rxjs/operators';
import { memo } from '../util';
type Collective = 'council' | 'membership' | 'technicalCommittee';
type Result = [(Hash | Uint8Array | string)[], (Option<Proposal> | null)[], Option<Votes>[]];
function parse (api: ApiInterfaceRx, [hashes, proposals, votes]: Result): DeriveCollectiveProposal[] {
@@ -29,7 +31,7 @@ function parse (api: ApiInterfaceRx, [hashes, proposals, votes]: Result): Derive
.filter((proposal): proposal is DeriveCollectiveProposal => !!proposal);
}
function _proposalsFrom (instanceId: string, api: ApiInterfaceRx, section: 'council' | 'technicalCommittee' = 'council'): (hashes: (Hash | Uint8Array | string)[]) => Observable<DeriveCollectiveProposal[]> {
function _proposalsFrom (instanceId: string, api: ApiInterfaceRx, section: Collective): (hashes: (Hash | Uint8Array | string)[]) => Observable<DeriveCollectiveProposal[]> {
return memo(instanceId, (hashes: (Hash | Uint8Array | string)[]): Observable<DeriveCollectiveProposal[]> =>
(isFunction(api.query[section]?.proposals) && hashes.length
? combineLatest<Result>([
@@ -49,19 +51,19 @@ function _proposalsFrom (instanceId: string, api: ApiInterfaceRx, section: 'coun
);
}
export function proposals (instanceId: string, api: ApiInterfaceRx, section: 'council' | 'technicalCommittee' = 'council'): () => Observable<DeriveCollectiveProposal[]> {
export function proposals (instanceId: string, api: ApiInterfaceRx, section: Collective): () => Observable<DeriveCollectiveProposal[]> {
const proposalsFrom = _proposalsFrom(instanceId, api, section);
return memo(instanceId, (): Observable<DeriveCollectiveProposal[]> =>
isFunction(api.query[section]?.proposals)
? api.query[section].proposals().pipe(
? api.query[section as 'council'].proposals().pipe(
switchMap(proposalsFrom)
)
: of([] as DeriveCollectiveProposal[])
);
}
export function proposal (instanceId: string, api: ApiInterfaceRx, section: 'council' | 'technicalCommittee' = 'council'): (hash: Hash | Uint8Array | string) => Observable<DeriveCollectiveProposal | null> {
export function proposal (instanceId: string, api: ApiInterfaceRx, section: Collective): (hash: Hash | Uint8Array | string) => Observable<DeriveCollectiveProposal | null> {
const proposalsFrom = _proposalsFrom(instanceId, api, section);
return memo(instanceId, (hash: Hash | Uint8Array | string): Observable<DeriveCollectiveProposal | null> =>
+2 -2
View File
@@ -10,9 +10,9 @@ import { proposal as collectiveProposal, proposals as collectiveProposals } from
import { memo } from '../util';
export function proposal (instanceId: string, api: ApiInterfaceRx): (hash: Hash | Uint8Array | string) => Observable<DeriveCollectiveProposal | null> {
return memo(instanceId, collectiveProposal(instanceId, api));
return memo(instanceId, collectiveProposal(instanceId, api, 'council'));
}
export function proposals (instanceId: string, api: ApiInterfaceRx): () => Observable<DeriveCollectiveProposal[]> {
return memo(instanceId, collectiveProposals(instanceId, api));
return memo(instanceId, collectiveProposals(instanceId, api, 'council'));
}
+3 -1
View File
@@ -16,6 +16,7 @@ import * as council from './council';
import * as democracy from './democracy';
import * as elections from './elections';
import * as imOnline from './imOnline';
import * as membership from './membership';
import * as parachains from './parachains';
import * as session from './session';
import * as society from './society';
@@ -27,7 +28,7 @@ import * as tx from './tx';
export { packageInfo } from './packageInfo';
export * from './type';
export const derive = { accounts, balances, bounties, chain, contracts, council, democracy, elections, imOnline, parachains, session, society, staking, technicalCommittee, treasury, tx };
export const derive = { accounts, balances, bounties, chain, contracts, council, democracy, elections, imOnline, membership, parachains, session, society, staking, technicalCommittee, treasury, tx };
type DeriveSection<Section> = {
[Method in keyof Section]: Section[Method] extends AnyFunction
@@ -49,6 +50,7 @@ const deriveAvail: Record<string, string[]> = {
democracy: ['democracy'],
elections: ['electionsPhragmen', 'elections'],
imOnline: ['imOnline'],
membership: ['membership'],
parachains: ['parachains', 'registrar'],
session: ['session'],
society: ['society'],
@@ -0,0 +1,4 @@
// Copyright 2017-2021 @polkadot/api-derive authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './proposals';
@@ -0,0 +1,13 @@
// Copyright 2017-2021 @polkadot/api-derive authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { Observable } from '@polkadot/x-rxjs';
import type { DeriveCollectiveProposal } from '../types';
import { proposals as collectiveProposals } from '../collective';
import { memo } from '../util';
export function proposals (instanceId: string, api: ApiInterfaceRx): () => Observable<DeriveCollectiveProposal[]> {
return memo(instanceId, collectiveProposals(instanceId, api, 'membership'));
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api-derive', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/api-derive', version: '4.9.1' };
+15 -12
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Promise and RxJS wrappers around the Polkadot JS RPC",
"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,17 +19,17 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/api-derive": "4.6.2",
"@polkadot/keyring": "^6.2.1",
"@polkadot/metadata": "4.6.2",
"@polkadot/rpc-core": "4.6.2",
"@polkadot/rpc-provider": "4.6.2",
"@polkadot/types": "4.6.2",
"@polkadot/types-known": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/util-crypto": "^6.2.1",
"@polkadot/x-rxjs": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/api-derive": "4.9.1",
"@polkadot/keyring": "^6.3.1",
"@polkadot/metadata": "4.9.1",
"@polkadot/rpc-core": "4.9.1",
"@polkadot/rpc-provider": "4.9.1",
"@polkadot/types": "4.9.1",
"@polkadot/types-known": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/util-crypto": "^6.3.1",
"@polkadot/x-rxjs": "^6.3.1",
"bn.js": "^4.11.9",
"eventemitter3": "^4.0.7"
}
+34 -1
View File
@@ -184,6 +184,13 @@ declare module '@polkadot/api/types/consts' {
};
electionProviderMultiPhase: {
[key: string]: Codec;
/**
* The repeat threshold of the offchain worker.
*
* For example, if it is 5, that means that at least 5 blocks will elapse between attempts
* to submit the worker's solution.
**/
offchainRepeat: BlockNumber & AugmentedConst<ApiType>;
/**
* Duration of the signed phase.
**/
@@ -200,12 +207,38 @@ declare module '@polkadot/api/types/consts' {
};
elections: {
[key: string]: Codec;
/**
* How much should be locked up in order to submit one's candidacy.
**/
candidacyBond: BalanceOf & AugmentedConst<ApiType>;
/**
* Number of members to elect.
**/
desiredMembers: u32 & AugmentedConst<ApiType>;
/**
* Number of runners_up to keep.
**/
desiredRunnersUp: u32 & AugmentedConst<ApiType>;
/**
* Identifier for the elections-phragmen pallet's lock
**/
palletId: LockIdentifier & AugmentedConst<ApiType>;
/**
* How long each seat is kept. This defines the next block number at which an election
* round will happen. If set to zero, no elections are ever triggered and the module will
* be in passive mode.
**/
termDuration: BlockNumber & AugmentedConst<ApiType>;
/**
* Base deposit associated with voting.
*
* This should be sensibly high to economically ensure the pallet cannot be attacked by
* creating a gigantic number of votes.
**/
votingBondBase: BalanceOf & AugmentedConst<ApiType>;
/**
* The amount of bond that need to be locked for each vote (32 bytes).
**/
votingBondFactor: BalanceOf & AugmentedConst<ApiType>;
};
gilt: {
@@ -257,7 +290,7 @@ declare module '@polkadot/api/types/consts' {
identity: {
[key: string]: Codec;
/**
* The amount held on deposit for a registered identity.
* The amount held on deposit for a registered identity
**/
basicDeposit: BalanceOf & AugmentedConst<ApiType>;
/**
+8
View File
@@ -512,6 +512,10 @@ declare module '@polkadot/api/types/errors' {
};
electionProviderMultiPhase: {
[key: string]: AugmentedError<ApiType>;
/**
* OCW submitted solution for wrong round
**/
OcwCallWrongEra: AugmentedError<ApiType>;
/**
* Submission was too early.
**/
@@ -1291,6 +1295,10 @@ declare module '@polkadot/api/types/errors' {
* No proposal or bounty at that index.
**/
InvalidIndex: AugmentedError<ApiType>;
/**
* Too many approvals in the queue.
**/
TooManyApprovals: AugmentedError<ApiType>;
};
vesting: {
[key: string]: AugmentedError<ApiType>;
+8 -8
View File
@@ -418,10 +418,11 @@ declare module '@polkadot/api/types/events' {
**/
MemberKicked: AugmentedEvent<ApiType, [AccountId]>;
/**
* A new term with \[new_members\]. This indicates that enough candidates existed to run the
* election, not that enough have has been elected. The inner value must be examined for
* this purpose. A `NewTerm(\[\])` indicates that some candidates got their bond slashed and
* none were elected, whilst `EmptyTerm` means that no candidates existed to begin with.
* A new term with \[new_members\]. This indicates that enough candidates existed to run
* the election, not that enough have has been elected. The inner value must be examined
* for this purpose. A `NewTerm(\[\])` indicates that some candidates got their bond
* slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to
* begin with.
**/
NewTerm: AugmentedEvent<ApiType, [Vec<ITuple<[AccountId, Balance]>>]>;
/**
@@ -589,11 +590,10 @@ declare module '@polkadot/api/types/events' {
[key: string]: AugmentedEvent<ApiType>;
/**
* There is an offence reported of the given `kind` happened at the `session_index` and
* (kind-specific) time slot. This event is not deposited for duplicate slashes. last
* element indicates of the offence was applied (true) or queued (false)
* \[kind, timeslot, applied\].
* (kind-specific) time slot. This event is not deposited for duplicate slashes.
* \[kind, timeslot\].
**/
Offence: AugmentedEvent<ApiType, [Kind, OpaqueTimeSlot, bool]>;
Offence: AugmentedEvent<ApiType, [Kind, OpaqueTimeSlot]>;
};
proxy: {
[key: string]: AugmentedEvent<ApiType>;
+1 -6
View File
@@ -17,7 +17,7 @@ import type { SetId, StoredPendingChange, StoredState } from '@polkadot/types/in
import type { RegistrarInfo, Registration } from '@polkadot/types/interfaces/identity';
import type { AuthIndex } from '@polkadot/types/interfaces/imOnline';
import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery';
import type { DeferredOffenceOf, Kind, OffenceDetails, OpaqueTimeSlot, ReportIdOf } from '@polkadot/types/interfaces/offences';
import type { Kind, OffenceDetails, OpaqueTimeSlot, ReportIdOf } from '@polkadot/types/interfaces/offences';
import type { ProxyAnnouncement, ProxyDefinition } from '@polkadot/types/interfaces/proxy';
import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery';
import type { AccountId, AccountIndex, AssetId, Balance, BalanceOf, BlockNumber, Hash, KeyTypeId, Moment, OpaqueCall, Perbill, Releases, Slot, ValidatorId } from '@polkadot/types/interfaces/runtime';
@@ -600,11 +600,6 @@ declare module '@polkadot/api/types/storage' {
* A vector of reports of the same kind that happened at the same time slot.
**/
concurrentReportsIndex: AugmentedQueryDoubleMap<ApiType, (key1: Kind | string | Uint8Array, key2: OpaqueTimeSlot | string | Uint8Array) => Observable<Vec<ReportIdOf>>, [Kind, OpaqueTimeSlot]> & QueryableStorageEntry<ApiType, [Kind, OpaqueTimeSlot]>;
/**
* Deferred reports that have been rejected by the offence handler and need to be submitted
* at a later time.
**/
deferredOffences: AugmentedQuery<ApiType, () => Observable<Vec<DeferredOffenceOf>>, []> & QueryableStorageEntry<ApiType, []>;
/**
* The primary structure that holds all offence records keyed by report identifiers.
**/
+14 -2
View File
@@ -10,7 +10,7 @@ import type { BeefySignedCommitment } from '@polkadot/types/interfaces/beefy';
import type { BlockHash } from '@polkadot/types/interfaces/chain';
import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
import type { AuthorityId } from '@polkadot/types/interfaces/consensus';
import type { ContractCallRequest, ContractExecResult } from '@polkadot/types/interfaces/contracts';
import type { ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequest } from '@polkadot/types/interfaces/contracts';
import type { CreatedBlock } from '@polkadot/types/interfaces/engine';
import type { EthAccount, EthCallRequest, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth';
import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics';
@@ -20,7 +20,7 @@ import type { StorageKind } from '@polkadot/types/interfaces/offchain';
import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime';
import type { ReadProof, RuntimeVersion } from '@polkadot/types/interfaces/state';
import type { ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state';
import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system';
declare module '@polkadot/rpc-core/types.jsonrpc' {
@@ -128,6 +128,10 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
* Returns the value under a specified storage key in a contract
**/
getStorage: AugmentedRpc<(address: AccountId | string | Uint8Array, key: H256 | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<Option<Bytes>>>;
/**
* Instantiate a new contract
**/
instantiate: AugmentedRpc<(request: InstantiateRequest | { origin?: any; endowment?: any; gasLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ContractInstantiateResult>>;
/**
* Returns the projected time a given contract will be able to sustain paying its rent
**/
@@ -442,6 +446,10 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
* Subscribes to storage changes for the provided keys
**/
subscribeStorage: AugmentedRpc<<T = Codec[]>(keys?: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[]) => Observable<T>>;
/**
* Provides a way to trace the re-execution of a single block
**/
traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option<Text> | null | object | string | Uint8Array, storageKeys: Option<Text> | null | object | string | Uint8Array) => Observable<TraceBlockResponse>>;
};
syncstate: {
/**
@@ -510,6 +518,10 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
* Remove a reserved peer
**/
removeReservedPeer: AugmentedRpc<(peerId: Text | string) => Observable<Text>>;
/**
* Returns the list of reserved peers
**/
reservedPeers: AugmentedRpc<() => Observable<Vec<Text>>>;
/**
* Resets the log filter to Substrate defaults
**/
+4 -4
View File
@@ -1276,8 +1276,8 @@ declare module '@polkadot/api/types/submittable' {
* origin is removed as a runner-up.
* - `origin` is a current member. In this case, the deposit is unreserved and origin is
* removed as a member, consequently not being a candidate for the next round anymore.
* Similar to [`remove_members`], if replacement runners exists, they are immediately used.
* If the prime is renouncing, then no prime will exist until the next round.
* Similar to [`remove_members`], if replacement runners exists, they are immediately
* used. If the prime is renouncing, then no prime will exist until the next round.
*
* The dispatch origin of this call must be signed, and have one of the above roles.
*
@@ -2836,7 +2836,7 @@ declare module '@polkadot/api/types/submittable' {
* - Write: Bonded, Payee, [Origin Account], Locks, Ledger
* # </weight>
**/
bond: AugmentedSubmittable<(controller: LookupSource | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact<BalanceOf> | AnyNumber | Uint8Array, payee: RewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [LookupSource, Compact<BalanceOf>, RewardDestination]>;
bond: AugmentedSubmittable<(controller: LookupSource | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact<BalanceOf> | AnyNumber | Uint8Array, payee: RewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [LookupSource, Compact<BalanceOf>, RewardDestination]>;
/**
* Add some extra amount that have appeared in the stash `free_balance` into the balance up
* for staking.
@@ -3142,7 +3142,7 @@ declare module '@polkadot/api/types/submittable' {
* - Write: Payee
* # </weight>
**/
setPayee: AugmentedSubmittable<(payee: RewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [RewardDestination]>;
setPayee: AugmentedSubmittable<(payee: RewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [RewardDestination]>;
/**
* Sets the ideal number of validators.
*
+17 -14
View File
@@ -262,7 +262,8 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
return allKeys;
}, []);
const unknown = exposed.filter((key) => !allKeys.includes(key));
const unknown = exposed.filter((k) => !allKeys.includes(k));
const deletion = allKnown.filter(([k]) => hasResults && !exposed.includes(k) && k !== 'rpc_methods');
if (unknown.length) {
l.warn(`RPC methods not decorated: ${unknown.join(', ')}`);
@@ -270,17 +271,10 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
// loop through all entries we have (populated in decorate) and filter as required
// only remove when we have results and method missing, or with no results if optional
allKnown
.filter(([key]): boolean => hasResults
? !exposed.includes(key) && key !== 'rpc_methods' // rpc_methods doesn't appear, v1
: key === 'rpc_methods' // we didn't find this one, remove
)
// eslint-disable-next-line @typescript-eslint/no-unused-vars
.forEach(([_, { method, section }]): void => {
delete (this._rpc as Record<string, Record<string, unknown>>)[section][method];
delete (this._rpcCore as unknown as Record<string, Record<string, unknown>>)[section][method];
delete (this._rx.rpc as Record<string, Record<string, unknown>>)[section][method];
});
deletion.forEach(([, { method, section }]): void => {
delete (this._rpc as Record<string, Record<string, unknown>>)[section][method];
delete (this._rx.rpc as Record<string, Record<string, unknown>>)[section][method];
});
}
protected _decorateRpc<ApiType extends ApiTypes> (rpc: RpcCore & RpcInterface, decorateMethod: DecorateMethod<ApiType>, input: Partial<DecoratedRpc<ApiType, RpcInterface>> = {}): DecoratedRpc<ApiType, RpcInterface> {
@@ -378,8 +372,16 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
decorated.is = <A extends AnyTuple> (key: IStorageKey<AnyTuple>): key is IStorageKey<A> =>
key.section === creator.section && key.method === creator.method;
decorated.key = (arg1?: Arg, arg2?: Arg): string =>
u8aToHex(compactStripLength(creator(creator.meta.type.isDoubleMap ? [arg1, arg2] : arg1))[1]);
decorated.key = (...args: Arg[]): string =>
u8aToHex(compactStripLength(creator(
creator.meta.type.isPlain
? undefined
: creator.meta.type.isMap
? args[0]
: creator.meta.type.isDoubleMap
? [args[0], args[1]]
: args
))[1]);
decorated.keyPrefix = (key1?: Arg): string =>
u8aToHex(creator.keyPrefix(key1));
@@ -393,6 +395,7 @@ export abstract class Decorate<ApiType extends ApiTypes> extends Events {
decorated.sizeAt = decorateMethod((hash: Hash | Uint8Array | string, arg1?: Arg, arg2?: Arg): Observable<u64> =>
this._rpcCore.state.getStorageSize(getArgs(arg1, arg2), hash));
// FIXME NMap support
// .keys() & .entries() only available on map types
if (creator.iterKey && (creator.meta.type.isMap || creator.meta.type.isDoubleMap)) {
decorated.entries = decorateMethod(
+45 -26
View File
@@ -13,7 +13,7 @@ import BN from 'bn.js';
import { Metadata } from '@polkadot/metadata';
import { TypeRegistry } from '@polkadot/types/create';
import { getSpecAlias, getSpecExtensions, getSpecHasher, getSpecRpc, getSpecTypes, getUpgradeVersion } from '@polkadot/types-known';
import { assert, BN_ZERO, logger, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { assert, BN_ZERO, logger, stringify, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { cryptoWaitReady } from '@polkadot/util-crypto';
import { of } from '@polkadot/x-rxjs';
import { map, switchMap } from '@polkadot/x-rxjs/operators';
@@ -31,7 +31,7 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
#registries: VersionedRegistry[] = [];
#updateSub?: Subscription;
#updateSub?: Subscription | null = null;
constructor (options: ApiOptions, type: ApiTypes, decorateMethod: DecorateMethod<ApiType>) {
super(options, type, decorateMethod);
@@ -58,7 +58,7 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
this._rx.signer = options.signer;
this._rpcCore.setRegistrySwap((hash: string | Uint8Array) => this.getBlockRegistry(hash));
this._rpcCore.setRegistrySwap((blockHash: Uint8Array) => this.getBlockRegistry(blockHash));
if (this.hasSubscriptions) {
this._rpcCore.provider.on('disconnected', this.#onProviderDisconnect);
@@ -102,10 +102,10 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
/**
* @description Sets up a registry based on the block hash defined
*/
public async getBlockRegistry (blockHash: string | Uint8Array): Promise<VersionedRegistry> {
// shortcut in the case where we have an immediate-same request
const lastBlockHash = u8aToU8a(blockHash);
const existingViaHash = this.#registries.find((r) => r.lastBlockHash && u8aEq(lastBlockHash, r.lastBlockHash));
public async getBlockRegistry (blockHash: Uint8Array): Promise<VersionedRegistry> {
const existingViaHash = this.#registries.find(({ lastBlockHash }) =>
lastBlockHash && u8aEq(lastBlockHash, blockHash)
);
if (existingViaHash) {
return existingViaHash;
@@ -129,10 +129,10 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
: await this._rpcCore.state.getRuntimeVersion(header.parentHash).toPromise();
// check for pre-existing registries
const existingViaVersion = this.#registries.find((r) => r.specVersion.eq(version.specVersion));
const existingViaVersion = this.#registries.find(({ specVersion }) => specVersion.eq(version.specVersion));
if (existingViaVersion) {
existingViaVersion.lastBlockHash = lastBlockHash;
existingViaVersion.lastBlockHash = blockHash;
return existingViaVersion;
}
@@ -141,14 +141,14 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
const metadata = await this._rpcCore.state.getMetadata(header.parentHash).toPromise();
const registry = this._initRegistry(new TypeRegistry(blockHash), this._runtimeChain as Text, version, metadata);
// For now, since this is new we ignore the capability lookups (this could be useful once proven)
// this._detectCapabilities(registry, blockHash);
// add our new registry
const result = { isDefault: false, lastBlockHash, metadata, metadataConsts: null, registry, specVersion: version.specVersion };
const result = { isDefault: false, lastBlockHash: blockHash, metadata, metadataConsts: null, registry, specVersion: version.specVersion };
this.#registries.push(result);
// TODO This could be useful for historic, disabled due to cross-looping, i.e. .at queries
// this._detectCapabilities(registry, blockHash);
return result;
}
@@ -156,10 +156,10 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
// on re-connection to the same chain, we don't want to re-do everything from chain again
if (this._isReady) {
return true;
} else if (this.#updateSub) {
this.#updateSub.unsubscribe();
}
this._unsubscribeUpdates();
// only load from on-chain if we are not a clone (default path), alternatively
// just use the values from the source instance provided
[this._genesisHash, this._runtimeMetadata] = this._options.source?._isReady
@@ -190,17 +190,19 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
return [source.genesisHash, source.runtimeMetadata];
}
private _detectCapabilities (registry?: Registry, blockHash?: string | Uint8Array): void {
private _detectCapabilities (registry: Registry, blockHash?: string | Uint8Array): boolean {
detectedCapabilities(this._rx, blockHash)
.toPromise()
.then((types): void => {
if (Object.keys(types).length) {
(registry || this.registry).register(types as Record<string, string>);
registry.register(types as Record<string, string>);
l.debug(`Capabilities detected${blockHash ? ` (${u8aToHex(u8aToU8a(blockHash))})` : ''}: ${JSON.stringify(types)}`);
l.debug(() => `Capabilities detected${blockHash ? ` (${u8aToHex(u8aToU8a(blockHash))})` : ''}: ${stringify(types)}`);
}
})
.catch(l.error);
.catch(undefined);
return true;
}
// subscribe to metadata updates, inject the types on changes
@@ -235,9 +237,8 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
// clear the registry types to ensure that we override correctly
this._initRegistry(thisRegistry.registry.init(), this._runtimeChain as Text, version, metadata);
this.injectMetadata(metadata, false, thisRegistry.registry);
this._detectCapabilities(thisRegistry.registry);
return true;
return this._detectCapabilities(thisRegistry.registry);
})
)
)
@@ -293,15 +294,36 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
// inject metadata and adjust the types as detected
this.injectMetadata(metadata, true);
this._detectCapabilities();
// derive is last, since it uses the decorated rx
this._rx.derive = this._decorateDeriveRx(this._rxDecorateMethod);
this._derive = this._decorateDerive(this._decorateMethod);
// detect the on-chain capabilities
this._detectCapabilities(this.registry);
return true;
}
private _unsubscribeHealth (): void {
if (this.#healthTimer) {
clearInterval(this.#healthTimer);
this.#healthTimer = null;
}
}
private _unsubscribeUpdates (): void {
if (this.#updateSub) {
this.#updateSub.unsubscribe();
this.#updateSub = null;
}
}
protected _unsubscribe (): void {
this._unsubscribeHealth();
this._unsubscribeUpdates();
}
#onProviderConnect = async (): Promise<void> => {
this.emit('connected');
this._isConnected.next(true);
@@ -337,10 +359,7 @@ export abstract class Init<ApiType extends ApiTypes> extends Decorate<ApiType> {
this.emit('disconnected');
this._isConnected.next(false);
if (this.#healthTimer) {
clearInterval(this.#healthTimer);
this.#healthTimer = null;
}
this._unsubscribeHealth();
};
#onProviderError = (error: Error): void => {
+36 -27
View File
@@ -2,18 +2,18 @@
// SPDX-License-Identifier: Apache-2.0
import type { ApiInterfaceRx } from '@polkadot/api/types';
import type { bool, Raw, u32 } from '@polkadot/types';
import type { Raw, u32 } from '@polkadot/types';
import type { Releases } from '@polkadot/types/interfaces';
import type { InterfaceTypes } from '@polkadot/types/types';
import { assert, compactFromU8a } from '@polkadot/util';
import { combineLatest, Observable, of } from '@polkadot/x-rxjs';
import { map, take } from '@polkadot/x-rxjs/operators';
import { catchError, map, take } from '@polkadot/x-rxjs/operators';
// the order and types needs to map with the all array setup below
type ExtractedQ = [bool | null, bool | null, bool | null, Releases | null];
type ExtractedQ = [Releases | null];
type ExtractedR = [Raw | null];
type ExtractedR = [Raw | null, Raw | null];
type ExtractedC = [u32 | null, u32 | null];
@@ -38,23 +38,26 @@ interface AvailableMap<T> {
interface Constants {
accountIdLength: number;
refcount1Length: number;
refcount2Length: number;
refcount3Length: number;
}
const NumberMap = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten'];
function mapCapabilities ({ accountIdLength }: Constants, [leasePeriodsPerSlot, slotRangeCount]: ExtractedC, [systemRefcount32, systemRefcountDual, systemRefcountTriple, stakingVersion]: ExtractedQ, [keys]: ExtractedR): Partial<DetectedTypes> {
function mapCapabilities ({ accountIdLength, refcount1Length, refcount2Length, refcount3Length }: Constants, [leasePeriodsPerSlot, slotRangeCount]: ExtractedC, [stakingVersion]: ExtractedQ, [keys, accountInfo]: ExtractedR): Partial<DetectedTypes> {
const types: Partial<DetectedTypes> = {};
// AccountInfo
if (systemRefcountTriple && systemRefcountTriple.isTrue) {
types.AccountInfo = 'AccountInfoWithTripleRefCount';
} else if (systemRefcountDual && systemRefcountDual.isTrue) {
types.AccountInfo = 'AccountInfoWithDualRefCount';
} else {
types.AccountInfo = 'AccountInfoWithRefCount';
if (accountInfo) {
const length = accountInfo.length;
if (!systemRefcount32 || systemRefcount32.isFalse) {
types.RefCount = 'u8';
if (length === refcount1Length) {
types.AccountInfo = 'AccountInfoWithRefCount';
} else if (length === refcount2Length) {
types.AccountInfo = 'AccountInfoWithDualRefCount';
} else if (length === refcount3Length) {
types.AccountInfo = 'AccountInfoWithTripleRefCount';
}
}
@@ -75,7 +78,7 @@ function mapCapabilities ({ accountIdLength }: Constants, [leasePeriodsPerSlot,
const numIds = tupleLength / accountIdLength;
const numIdsRound = Math.floor(numIds);
assert(numIds >= 2 && numIds <= 11, `Detected ${numIds} in Keys, should be >= 2 and <= 11`);
assert(numIds >= 2 && numIds <= 11, () => `Detected ${numIds} in Keys, should be >= 2 and <= 11`);
if (numIdsRound !== numIds) {
// Beefy?
@@ -84,15 +87,15 @@ function mapCapabilities ({ accountIdLength }: Constants, [leasePeriodsPerSlot,
// @ts-ignore
types.Keys = `SessionKeys${numIdsRound - 1}B`;
} else {
assert(false, `Expected integer number of keys, found ${numIds.toFixed(2)}`);
assert(false, () => `Expected integer number of keys, found ${numIds.toFixed(2)}`);
}
} else {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
types.Keys = `SessionKeys${numIds - 1}`;
}
} catch (error) {
console.error(error);
} catch {
// ignore
}
}
@@ -115,9 +118,12 @@ function mapCapabilities ({ accountIdLength }: Constants, [leasePeriodsPerSlot,
function filterEntries <T> (original: T[]): AvailableMap<T> {
const included = original.map((c) => !!c);
const filtered = original.filter((_, index) => included[index]);
return { filtered, included, original };
return {
filtered: original.filter((_, index) => included[index]),
included,
original
};
}
function extractResults <R, T = unknown> (results: unknown[], map: AvailableMap<T>): R {
@@ -134,18 +140,17 @@ function extractResults <R, T = unknown> (results: unknown[], map: AvailableMap<
* @description Query the chain for the specific capabilities
*/
export function detectedCapabilities (api: ApiInterfaceRx, blockHash?: Uint8Array | string | undefined): Observable<Partial<DetectedTypes>> {
const emptyAccountId = api.registry.createType('AccountId');
const consts = filterEntries([
api.consts.auctions?.leasePeriodsPerSlot,
api.consts.auctions?.slotRangeCount
]);
const queries = filterEntries([
api.query.system?.upgradedToU32RefCount,
api.query.system?.upgradedToDualRefCount,
api.query.system?.upgradedToTripleRefCount,
api.query.staking?.storageVersion
]);
const raws = filterEntries([
api.query.session?.queuedKeys
api.query.session?.queuedKeys.key(),
api.query.system?.account.key(emptyAccountId)
]);
return combineLatest([
@@ -162,20 +167,24 @@ export function detectedCapabilities (api: ApiInterfaceRx, blockHash?: Uint8Arra
: of([]),
raws.filtered.length
? blockHash
? combineLatest(raws.filtered.map((k) => api.rpc.state.getStorage.raw(k.key(), blockHash)))
: combineLatest(raws.filtered.map((k) => api.rpc.state.getStorage.raw(k.key())))
? combineLatest(raws.filtered.map((k) => api.rpc.state.getStorage.raw(k, blockHash)))
: combineLatest(raws.filtered.map((k) => api.rpc.state.getStorage.raw(k)))
: of([])
]).pipe(
map(([cResults, qResults, rResults]): Partial<DetectedTypes> =>
mapCapabilities(
{
accountIdLength: api.registry.createType('AccountId').encodedLength
accountIdLength: emptyAccountId.encodedLength,
refcount1Length: api.registry.createType('AccountInfoWithRefCount').encodedLength,
refcount2Length: api.registry.createType('AccountInfoWithDualRefCount').encodedLength,
refcount3Length: api.registry.createType('AccountInfoWithTripleRefCount').encodedLength
},
extractResults<ExtractedC>(cResults, consts),
extractResults<ExtractedQ>(qResults, queries),
extractResults<ExtractedR>(rResults, raws)
)
),
take(1)
take(1),
catchError(() => of({}))
);
}
+2
View File
@@ -50,6 +50,8 @@ export abstract class ApiBase<ApiType extends ApiTypes> extends Getters<ApiType>
* @description Disconnect from the underlying provider, halting all network traffic
*/
public disconnect (): Promise<void> {
this._unsubscribe();
return this._rpcCore.disconnect();
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/api', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/api', version: '4.9.1' };
+4 -8
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2021 @polkadot/api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ApiOptions, SubmittableExtrinsic } from '../types';
import type { SubmittableExtrinsic } from '../types';
import { createPair } from '@polkadot/keyring/pair';
import { createTestKeyring } from '@polkadot/keyring/testing';
@@ -44,7 +44,7 @@ describe('ApiPromise', (): void => {
}
beforeEach((): void => {
jest.setTimeout(3000000);
jest.setTimeout(10000);
provider = new MockProvider(registry);
});
@@ -53,14 +53,10 @@ describe('ApiPromise', (): void => {
const rpcData = await provider.send('state_getMetadata', []);
const genesisHash = registry.createType('Hash', await provider.send('chain_getBlockHash', [])).toHex();
const specVersion = 0;
const metadata: any = {};
const key = `${genesisHash}-${specVersion}`;
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
metadata[key] = rpcData;
const metadata = { [`${genesisHash}-${specVersion}`]: rpcData as string };
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const api = await ApiPromise.create({ metadata, provider, registry } as ApiOptions);
const api = await ApiPromise.create({ metadata, provider, registry });
expect(api.genesisHash).toBeDefined();
expect(api.runtimeMetadata).toBeDefined();
+1 -3
View File
@@ -165,9 +165,7 @@ export class ApiRx extends ApiBase<'rxjs'> {
this.#isReadyRx = from<Promise<ApiRx>>(
// You can create an observable from an event, however my mind groks this form better
new Promise((resolve): void => {
super.on('ready', (): void => {
resolve(this);
});
super.on('ready', () => resolve(this));
})
);
}
+2 -2
View File
@@ -66,14 +66,14 @@ describe('extractStorageArgs', (): void => {
expect(
(): any =>
extractStorageArgs(storage.staking.erasStakers, [])
).toThrow('staking.erasStakers(EraIndex, AccountId) is a doublemap, requiring 2 arguments, 0 found');
).toThrow('staking.erasStakers(EraIndex, AccountId) is a double map, requiring 2 arguments, 0 found');
});
it('validates doublemap, 2 args (failing with 1 arg)', (): void => {
expect(
(): any =>
extractStorageArgs(storage.staking.erasStakers, [123])
).toThrow('staking.erasStakers(EraIndex, AccountId) is a doublemap, requiring 2 arguments, 1 found');
).toThrow('staking.erasStakers(EraIndex, AccountId) is a double map, requiring 2 arguments, 1 found');
});
// Linked maps have been removed
+16 -5
View File
@@ -6,14 +6,14 @@ import type { StorageEntry } from '@polkadot/types/primitive/types';
import { assert, isUndefined } from '@polkadot/util';
function sig ({ method, section }: StorageEntry, ...args: Type[]): string {
function sig ({ method, section }: StorageEntry, args: Type[]): string {
return `${section}.${method}(${args.join(', ')})`;
}
function doDoubleMap (creator: StorageEntry, args: unknown[]): [StorageEntry, [any, any]] {
const { key1, key2 } = creator.meta.type.asDoubleMap;
assert(args.length === 2, `${sig(creator, key1, key2)} is a doublemap, requiring 2 arguments, ${args.length} found`);
assert(args.length === 2, () => `${sig(creator, [key1, key2])} is a double map, requiring 2 arguments, ${args.length} found`);
// pass as tuple
return [creator, args as [any, any]];
@@ -22,7 +22,7 @@ function doDoubleMap (creator: StorageEntry, args: unknown[]): [StorageEntry, [a
function doMap (creator: StorageEntry, args: unknown[]): [StorageEntry] | [StorageEntry, any] {
const { key } = creator.meta.type.asMap;
assert(args.length === 1, `${sig(creator, key)} is a map, requiring 1 argument, ${args.length} found`);
assert(args.length === 1, () => `${sig(creator, [key])} is a map, requiring 1 argument, ${args.length} found`);
// expand
return args.length
@@ -30,18 +30,29 @@ function doMap (creator: StorageEntry, args: unknown[]): [StorageEntry] | [Stora
: [creator];
}
function doNMap (creator: StorageEntry, args: unknown[]): [StorageEntry, any[]] {
const { keyVec } = creator.meta.type.asNMap;
assert(args.length === keyVec.length, () => `${sig(creator, keyVec)} is a multi map, requiring ${keyVec.length} arguments, ${args.length} found`);
// pass as tuple
return [creator, args];
}
// sets up the arguments in the form of [creator, args] ready to be used in a storage
// call. Additionally, it verifies that the correct number of arguments have been passed
export function extractStorageArgs (creator: StorageEntry, _args: unknown[]): [StorageEntry, [any, any]] | [StorageEntry] | [StorageEntry, any] {
export function extractStorageArgs (creator: StorageEntry, _args: unknown[]): [StorageEntry, any[]] | [StorageEntry] | [StorageEntry, any] {
const args = _args.filter((arg) => !isUndefined(arg));
if (creator.meta.type.isDoubleMap) {
return doDoubleMap(creator, args);
} else if (creator.meta.type.isMap) {
return doMap(creator, args);
} else if (creator.meta.type.isNMap) {
return doNMap(creator, args);
}
assert(args.length === 0, `${sig(creator)} does not take any arguments, ${args.length} found`);
assert(args.length === 0, () => `${sig(creator, [])} does not take any arguments, ${args.length} found`);
// no args
return [creator];
+10 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/metadata",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Helpers to extract information from runtime metadata",
"main": "index.js",
@@ -8,6 +8,9 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"repository": "github:polkadot-js/api",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
@@ -16,14 +19,14 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/type-metadata#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/types": "4.6.2",
"@polkadot/types-known": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/util-crypto": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/types": "4.9.1",
"@polkadot/types-known": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/util-crypto": "^6.3.1",
"bn.js": "^4.11.9"
},
"devDependencies": {
"@polkadot/keyring": "^6.2.1"
"@polkadot/keyring": "^6.3.1"
}
}
+12 -2
View File
@@ -9,10 +9,20 @@ describe('MagicNumber', (): void => {
const registry = new TypeRegistry();
it('succeeds when the magic number matches', (): void => {
expect((): MagicNumber => new MagicNumber(registry, MAGIC_NUMBER)).not.toThrow();
expect(
() => new MagicNumber(registry, MAGIC_NUMBER)
).not.toThrow();
});
it('succeeds when the magic number is empty', (): void => {
expect(
() => new MagicNumber(registry)
).not.toThrow();
});
it('fails when the magic number mismatches', (): void => {
expect((): MagicNumber => new MagicNumber(registry, 0x12345)).toThrow(/MagicNumber/);
expect(
() => new MagicNumber(registry, 0x12345678)
).toThrow(/MagicNumber mismatch/);
});
});
+1 -3
View File
@@ -13,9 +13,7 @@ export class MagicNumber extends U32 {
super(registry, value);
if (!this.isEmpty) {
const magic = registry.createType('u32', MAGIC_NUMBER);
assert(this.eq(magic), `MagicNumber mismatch: expected ${magic.toHex()}, found ${this.toHex()}`);
assert(this.eq(MAGIC_NUMBER), () => `MagicNumber mismatch: expected ${registry.createType('u32', MAGIC_NUMBER).toHex()}, found ${this.toHex()}`);
}
}
}
+27 -25
View File
@@ -3,7 +3,7 @@
import type { Registry } from '@polkadot/types/types';
import { isString, u8aConcat, u8aToU8a } from '@polkadot/util';
import { isHex, isU8a, u8aToU8a } from '@polkadot/util';
import { MetadataVersioned } from './MetadataVersioned';
@@ -11,37 +11,39 @@ import { MetadataVersioned } from './MetadataVersioned';
const VERSION_IDX = 4;
// magic + lowest supported version
const EMPTY_METADATA = u8aConcat(new Uint8Array([0x6d, 0x65, 0x74, 0x61, 9]));
const EMPTY_METADATA = new Uint8Array([0x6d, 0x65, 0x74, 0x61, 9]);
const EMPTY_U8A = new Uint8Array();
function sanitizeInput (_value: Uint8Array | string = EMPTY_U8A): Uint8Array {
if (isString(_value)) {
return sanitizeInput(u8aToU8a(_value));
}
return _value.length === 0
? EMPTY_METADATA
: _value;
function toU8a (value: Uint8Array | string = EMPTY_U8A): Uint8Array {
return isHex(value)
? toU8a(u8aToU8a(value))
: isU8a(value) && value.length === 0
? EMPTY_METADATA
: value;
}
function decodeMetadata (registry: Registry, _value?: Uint8Array | string): MetadataVersioned {
const value = sanitizeInput(_value);
const version = value[VERSION_IDX];
function decodeMetadata (registry: Registry, _value?: Uint8Array | string | Map<string, unknown> | Record<string, unknown>): MetadataVersioned {
if (!_value || isU8a(_value) || isHex(_value)) {
const value = toU8a(_value);
const version = value[VERSION_IDX];
try {
return new MetadataVersioned(registry, value);
} catch (error) {
// This is an f-ing hack as a follow-up to another ugly hack
// https://github.com/polkadot-js/api/commit/a9211690be6b68ad6c6dad7852f1665cadcfa5b2
// when we fail on V9, try to re-parse it as v10... yes... HACK
if (version === 9) {
value[VERSION_IDX] = 10;
try {
return new MetadataVersioned(registry, value);
} catch (error) {
// This is an f-ing hack as a follow-up to another ugly hack
// https://github.com/polkadot-js/api/commit/a9211690be6b68ad6c6dad7852f1665cadcfa5b2
// when we fail on V9, try to re-parse it as v10... yes... HACK
if (version === 9) {
value[VERSION_IDX] = 10;
return decodeMetadata(registry, value);
return decodeMetadata(registry, value);
}
throw error;
}
throw error;
}
return new MetadataVersioned(registry, _value);
}
/**
@@ -50,7 +52,7 @@ function decodeMetadata (registry: Registry, _value?: Uint8Array | string): Meta
* The versioned runtime metadata as a decoded structure
*/
export class Metadata extends MetadataVersioned {
constructor (registry: Registry, value?: Uint8Array | string) {
constructor (registry: Registry, value?: Uint8Array | string | Map<string, unknown> | Record<string, unknown>) {
super(registry, decodeMetadata(registry, value));
}
}
+25 -13
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { MetadataAll, MetadataLatest, MetadataV9, MetadataV10, MetadataV11, MetadataV12 } from '@polkadot/types/interfaces/metadata';
import type { MetadataAll, MetadataLatest, MetadataV9, MetadataV10, MetadataV11, MetadataV12, MetadataV13 } from '@polkadot/types/interfaces/metadata';
import type { AnyJson, Registry } from '@polkadot/types/types';
import { Struct } from '@polkadot/types/codec';
@@ -10,13 +10,16 @@ import { assert } from '@polkadot/util';
import { toV10 } from './v9/toV10';
import { toV11 } from './v10/toV11';
import { toV12 } from './v11/toV12';
import { toLatest } from './v12/toLatest';
import { toV13 } from './v12/toV13';
import { toLatest } from './v13/toLatest';
import { MagicNumber } from './MagicNumber';
import { getUniqTypes, toCallsOnly } from './util';
type MetaMapped = MetadataV9 | MetadataV10 | MetadataV11 | MetadataV12;
type MetaVersions = 9 | 10 | 11 | 12 | 13;
type MetaAsX = 'asV9' | 'asV10' | 'asV11' | 'asV12';
type MetaMapped = MetadataV9 | MetadataV10 | MetadataV11 | MetadataV12 | MetadataV13;
type MetaAsX = 'asV9' | 'asV10' | 'asV11' | 'asV12' | 'asV13';
type MetaVersions = 'latest' | 9 | 10 | 11 | 12 | 13;
const LATEST_VERSION = 13;
/**
* @name MetadataVersioned
@@ -24,7 +27,7 @@ type MetaAsX = 'asV9' | 'asV10' | 'asV11' | 'asV12';
* The versioned runtime metadata as a decoded structure
*/
export class MetadataVersioned extends Struct {
readonly #converted = new Map<number, MetaMapped>();
readonly #converted = new Map<MetaVersions, MetaMapped>();
constructor (registry: Registry, value?: unknown) {
super(registry, {
@@ -34,16 +37,18 @@ export class MetadataVersioned extends Struct {
}
#assertVersion = (version: number): boolean => {
assert(this.version <= version, `Cannot convert metadata from v${this.version} to v${version}`);
assert(this.version <= version, () => `Cannot convert metadata from version ${this.version} to ${version}`);
return this.version === version;
};
#getVersion = <T extends MetaMapped, F extends MetaMapped>(version: MetaVersions, fromPrev: (registry: Registry, input: F, metaVersion: number) => T): T => {
const asCurr = `asV${version}` as MetaAsX;
const asPrev = `asV${version - 1}` as MetaAsX;
const asPrev = version === 'latest'
? `asV${LATEST_VERSION}` as MetaAsX
: `asV${version - 1}` as MetaAsX;
if (this.#assertVersion(version)) {
if (version !== 'latest' && this.#assertVersion(version)) {
return this.#metadata()[asCurr] as T;
}
@@ -101,16 +106,23 @@ export class MetadataVersioned extends Struct {
return this.#getVersion(12, toV12);
}
/**
* @description Returns the wrapped values as a V13 object
*/
public get asV13 (): MetadataV13 {
return this.#getVersion(13, toV13);
}
/**
* @description Returns the wrapped values as a latest version object
*/
public get asLatest (): MetadataLatest {
// This is non-existent & latest - applied here to do the module-specific type conversions
return this.#getVersion(13, toLatest);
return this.#getVersion('latest', toLatest);
}
/**
* @description
* @description The magicNumber for the Metadata (known constant)
*/
public get magicNumber (): MagicNumber {
return this.get('magicNumber') as MagicNumber;
@@ -131,8 +143,8 @@ export class MetadataVersioned extends Struct {
* @description Converts the Object to JSON, typically used for RPC transfers
*/
public toJSON (): Record<string, AnyJson> {
// HACK(y): ensure that we apply the aliasses if we have not done so already, this is
// needed to ensure we have the overrides as intended (only applied in toLatest)
// HACK(y): ensure that we apply the aliases if we have not done so already, this is
// needed to ensure we have the correct overrides (which is only applied in toLatest)
// eslint-disable-next-line no-unused-expressions
this.asLatest;
@@ -17,7 +17,7 @@ function init (meta: string): [Constants, TypeRegistry] {
registry.setMetadata(metadata);
return [decorateConstants(registry, metadata.asLatest), registry];
return [decorateConstants(registry, metadata.asLatest, 12), registry];
}
describe('decorateConstants', (): void => {
@@ -8,7 +8,8 @@ import type { ConstantCodec, Constants, ModuleConstants } from '../types';
import { hexToU8a, stringCamelCase } from '@polkadot/util';
/** @internal */
export function decorateConstants (registry: Registry, { modules }: MetadataLatest): Constants {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function decorateConstants (registry: Registry, { modules }: MetadataLatest, _metaVersion: number): Constants {
return modules.reduce((result: Constants, { constants, name }): Constants => {
if (constants.isEmpty) {
return result;
@@ -16,7 +16,7 @@ export function createUnchecked (registry: Registry, section: string, callIndex:
const funcName = stringCamelCase(callMetadata.name);
const extrinsicFn = (...args: any[]): Call => {
assert(expectedArgs.length === args.length, `Extrinsic ${section}.${funcName} expects ${expectedArgs.length.valueOf()} arguments, got ${args.length}.`);
assert(expectedArgs.length === args.length, () => `Extrinsic ${section}.${funcName} expects ${expectedArgs.length.valueOf()} arguments, got ${args.length}.`);
return registry.createType('Call', {
args,
+1 -1
View File
@@ -46,7 +46,7 @@ describe('Decorated', () => {
});
it('should return constants with the correct type and value', (): void => {
const consts = decorateConstants(registry, metadata.asLatest);
const consts = decorateConstants(registry, metadata.asLatest, metadata.version);
expect(consts.democracy.cooloffPeriod).toBeInstanceOf(registry.createClass('BlockNumber'));
expect(consts.democracy.cooloffPeriod.toHex()).toEqual('0x000c4e00');
+6 -5
View File
@@ -20,13 +20,14 @@ export function expandMetadata (registry: Registry, metadata: Metadata): Decorat
assert(metadata instanceof Metadata, 'You need to pass a valid Metadata instance to Decorated');
const latest = metadata.asLatest;
const version = metadata.version;
return {
consts: decorateConstants(registry, latest),
errors: decorateErrors(registry, latest, metadata.version),
events: decorateEvents(registry, latest, metadata.version),
query: decorateStorage(registry, latest, metadata.version),
tx: decorateExtrinsics(registry, latest, metadata.version)
consts: decorateConstants(registry, latest, version),
errors: decorateErrors(registry, latest, version),
events: decorateEvents(registry, latest, version),
query: decorateStorage(registry, latest, version),
tx: decorateExtrinsics(registry, latest, version)
};
}
@@ -28,7 +28,7 @@ describe('createFunction', (): void => {
method: 'NextKeys',
prefix: 'Session',
section: 'session'
}, { metaVersion: 9 });
}, {});
expect(
u8aToHex(
@@ -49,4 +49,52 @@ describe('createFunction', (): void => {
'5eb36b60f0fc4b9177116eba3e5cd57fea6289a57f5f5b9ffeb0475c66e7a521' // blake2
);
});
it('allows creating of NMap keys (with Bytes)', (): void => {
const storageFn = createFunction(registry, {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
meta: {
type: {
asNMap: {
hashers: [
registry.createType('StorageHasher', 'Twox64Concat'),
registry.createType('StorageHasher', 'Blake2_256'),
registry.createType('StorageHasher', 'Blake2_256')
],
keyVec: [
new Text(registry, 'Bytes'),
new Text(registry, 'AccountId'),
new Text(registry, 'AccountId')
],
value: new Text(registry, 'SessionKeys5')
},
isNMap: true
}
} as any,
method: 'NextKeys',
prefix: 'Session',
section: 'session'
}, {});
expect(
u8aToHex(
storageFn([
// hex, without length prefix
'0x3a73657373696f6e3a6b657973',
// addresses
'DB2mp5nNhbFN86J9hxoAog8JALMhDXgwvWMxrRMLNUFMEY4',
'DB2mp5nNhbFN86J9hxoAog8JALMhDXgwvWMxrRMLNUFMEY4'
])
)
).toEqual(
'0x' +
'd901' + // length
'cec5070d609dd3497f72bde07fc96ba0' + // twox 128
'4c014e6bf8b8c2c011e7290b85696bb3' + // twox 128
'9fe6329cc0b39e09' + // twox 64
'343a73657373696f6e3a6b657973' + // twox 64 (concat, with length)
'5eb36b60f0fc4b9177116eba3e5cd57fea6289a57f5f5b9ffeb0475c66e7a521' + // blake2
'5eb36b60f0fc4b9177116eba3e5cd57fea6289a57f5f5b9ffeb0475c66e7a521' // blake2
);
});
});
@@ -8,16 +8,15 @@ import type { Codec, Registry } from '@polkadot/types/types';
import BN from 'bn.js';
import { Raw } from '@polkadot/types/codec';
import { StorageKey } from '@polkadot/types/primitive';
import { assert, compactAddLength, compactStripLength, isNull, isUndefined, stringLowerFirst, u8aConcat } from '@polkadot/util';
import { StorageKey, Type } from '@polkadot/types/primitive';
import { assert, compactAddLength, compactStripLength, isNull, isUndefined, stringCamelCase, stringify, stringLowerFirst, u8aConcat, u8aToU8a } from '@polkadot/util';
import { xxhashAsU8a } from '@polkadot/util-crypto';
import { getHasher, HasherFunction } from './getHasher';
import { getHasher } from './getHasher';
export interface CreateItemOptions {
key?: string;
metaVersion: number;
skipHashing?: boolean; // We don't hash the keys defined in ./substrate.ts
skipHashing?: boolean;
}
export interface CreateItemFn {
@@ -34,81 +33,35 @@ interface IterFn {
type CreateArgType = boolean | string | number | null | BN | BigInt | Uint8Array | Codec;
const EMPTY_U8A = new Uint8Array([]);
const NULL_HASHER = (value: Uint8Array): Uint8Array => value;
type U8aHasher = (input: Uint8Array) => Uint8Array;
// get the hashers, the base (and in the case of DoubleMap), the second key
/** @internal */
function getHashers ({ meta: { type } }: CreateItemFn): [HasherFunction, HasherFunction?] {
if (type.isDoubleMap) {
return [
getHasher(type.asDoubleMap.hasher),
getHasher(type.asDoubleMap.key2Hasher)
];
} else if (type.isMap) {
return [getHasher(type.asMap.hasher)];
}
// the default
return [getHasher()];
}
// create a base prefixed key
/** @internal */
function createPrefixedKey ({ method, prefix }: CreateItemFn): Uint8Array {
return u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128));
}
// create a key for a DoubleMap type
/** @internal */
function createKeyDoubleMap (registry: Registry, itemFn: CreateItemFn, args: [CreateArgType, CreateArgType], [hasher1, hasher2]: [HasherFunction, HasherFunction?]): Uint8Array {
const { meta: { name, type } } = itemFn;
function createKey (registry: Registry, itemFn: CreateItemFn, keys: Type[], hashers: U8aHasher[], args: CreateArgType[]): Uint8Array {
const { method, section } = itemFn;
// since we are passing an almost-unknown through, trust, but verify
assert(Array.isArray(args) && !isUndefined(args[0]) && !isNull(args[0]) && !isUndefined(args[1]) && !isNull(args[1]), `${(name || 'unknown').toString()} is a DoubleMap and requires two arguments`);
// if this fails, we have bigger issues
assert(!isUndefined(hasher2), '2 hashing functions should be defined for DoubleMaps');
const [key1, key2] = args;
const map = type.asDoubleMap;
const val1 = registry.createType(map.key1.toString() as 'Raw', key1).toU8a();
const val2 = registry.createType(map.key2.toString() as 'Raw', key2).toU8a();
assert(Array.isArray(args) && args.length === keys.length, () => `Call to ${stringCamelCase(section || 'unknown')}.${stringCamelCase(method || 'unknown')} needs ${keys.length} arguments, found ${stringify(args)}`);
// as per createKey, always add the length prefix (underlying it is Bytes)
return compactAddLength(u8aConcat(
createPrefixedKey(itemFn),
hasher1(val1),
hasher2(val2)
));
}
return compactAddLength(
u8aConcat(
createPrefixedKey(itemFn),
...keys.map((type, index): Uint8Array => {
const arg = args[index];
// create a key for either a map or a plain value
/** @internal */
function createKey (registry: Registry, itemFn: CreateItemFn, arg: CreateArgType, hasher: (value: Uint8Array) => Uint8Array): Uint8Array {
const { meta: { name, type } } = itemFn;
let param: Uint8Array = EMPTY_U8A;
assert(!isUndefined(arg) && !isNull(arg), () => `Call to ${stringCamelCase(section || 'unknown')}.${stringCamelCase(method || 'unknown')} has a null or undefined argument at position ${index}`);
if (type.isMap) {
const map = type.asMap;
assert(!isUndefined(arg) && !isNull(arg), `${name.toString()} is a Map and requires one argument`);
param = registry.createType(map.key.toString() as 'Raw', arg).toU8a();
}
// StorageKey is a Bytes, so is length-prefixed
return compactAddLength(u8aConcat(
createPrefixedKey(itemFn),
param.length
? hasher(param)
: EMPTY_U8A
));
return hashers[index](registry.createType(type.toString() as 'Raw', arg).toU8a());
})
)
);
}
// attach the metadata to expand to a StorageFunction
/** @internal */
function expandWithMeta ({ meta, method, prefix, section }: CreateItemFn, _storageFn: (arg?: CreateArgType | [CreateArgType?, CreateArgType?]) => Uint8Array): StorageEntry {
function expandWithMeta ({ meta, method, prefix, section }: CreateItemFn, _storageFn: (arg?: CreateArgType | CreateArgType[]) => Uint8Array): StorageEntry {
const storageFn = _storageFn as StorageEntry;
storageFn.meta = meta;
@@ -155,6 +108,7 @@ function extendHeadMeta (registry: Registry, { meta: { documentation, name, type
function extendPrefixedMap (registry: Registry, itemFn: CreateItemFn, storageFn: StorageEntry): StorageEntry {
const { meta: { type } } = itemFn;
// FIXME NMap support
storageFn.iterKey = extendHeadMeta(registry, itemFn, storageFn, (arg?: any): Raw => {
assert(type.isDoubleMap || isUndefined(arg), 'Filtering arguments for keys/entries are only valid on double maps');
@@ -177,24 +131,31 @@ function extendPrefixedMap (registry: Registry, itemFn: CreateItemFn, storageFn:
/** @internal */
export function createFunction (registry: Registry, itemFn: CreateItemFn, options: CreateItemOptions): StorageEntry {
const { meta: { type } } = itemFn;
const [hasher, key2Hasher] = getHashers(itemFn);
// Can only have zero or one argument:
// - storage.system.account(address)
// - storage.timestamp.blockPeriod()
// For doublemap queries the params is passed in as an tuple, [key1, key2]
const storageFn = expandWithMeta(itemFn, (arg?: CreateArgType | [CreateArgType?, CreateArgType?]): Uint8Array =>
type.isDoubleMap
? createKeyDoubleMap(registry, itemFn, arg as [CreateArgType, CreateArgType], [hasher, key2Hasher])
: createKey(registry, itemFn, arg as CreateArgType, options.skipHashing ? NULL_HASHER : hasher)
// For higher-map queries the params are passed in as an tuple, [key1, key2]
const storageFn = expandWithMeta(itemFn, (arg?: CreateArgType | CreateArgType[]) =>
type.isPlain
? options.skipHashing
? compactAddLength(u8aToU8a(options.key))
: createKey(registry, itemFn, [], [], [])
: type.isMap
? createKey(registry, itemFn, [type.asMap.key], [getHasher(type.asMap.hasher)], [arg as CreateArgType])
: type.isDoubleMap
? createKey(registry, itemFn, [type.asDoubleMap.key1, type.asDoubleMap.key2], [getHasher(type.asDoubleMap.hasher), getHasher(type.asDoubleMap.key2Hasher)], arg as CreateArgType[])
: createKey(registry, itemFn, type.asNMap.keyVec, type.asNMap.hashers.map((h) => getHasher(h)), arg as CreateArgType[])
);
// FIXME NMap support
if (type.isMap || type.isDoubleMap) {
extendPrefixedMap(registry, itemFn, storageFn);
}
storageFn.keyPrefix = (arg?: any): Uint8Array =>
(storageFn.iterKey && storageFn.iterKey(arg)) || compactStripLength(storageFn())[1];
(storageFn.iterKey && storageFn.iterKey(arg)) ||
compactStripLength(storageFn())[1];
return storageFn;
}
@@ -31,6 +31,6 @@ const HASHERS: Record<keyof typeof AllHashers, HasherFunction> = {
};
/** @internal */
export function getHasher (hasher?: StorageHasher): HasherFunction {
return HASHERS[hasher?.type as 'Identity'] || DEFAULT_FN;
export function getHasher (hasher: StorageHasher): HasherFunction {
return HASHERS[hasher.type as 'Identity'] || DEFAULT_FN;
}
@@ -2,19 +2,21 @@
// SPDX-License-Identifier: Apache-2.0
import { TypeRegistry } from '@polkadot/types/create';
import { compactAddLength, u8aToU8a } from '@polkadot/util';
import { getStorage } from './getStorage';
describe('getSorage', (): void => {
const registry = new TypeRegistry();
const storage = getStorage(registry, 8);
const storage = getStorage(registry);
it('should return well known keys', (): void => {
expect(typeof storage.substrate).toBe('object');
expect(storage.substrate.code()).toEqual(compactAddLength(u8aToU8a(':code')));
expect(storage.substrate.changesTrieConfig).toBeTruthy();
expect(storage.substrate.childStorageKeyPrefix).toBeTruthy();
expect(storage.substrate.code).toBeTruthy();
expect(storage.substrate.extrinsicIndex).toBeTruthy();
expect(storage.substrate.heapPages).toBeTruthy();
});
@@ -5,15 +5,15 @@ import type { StorageEntry } from '@polkadot/types/primitive/types';
import type { Registry } from '@polkadot/types/types';
import type { Storage } from '../types';
import * as substrate from './substrate';
import { substrate } from './substrate';
/** @internal */
export function getStorage (registry: Registry, metaVersion: number): Storage {
export function getStorage (registry: Registry): Storage {
return {
substrate: Object
.entries(substrate)
.reduce((storage: Record<string, StorageEntry>, [key, fn]): Record<string, StorageEntry> => {
(storage as Record<string, unknown>)[key] = fn(registry, metaVersion);
(storage as Record<string, unknown>)[key] = fn(registry);
return storage;
}, {})
@@ -21,7 +21,11 @@ describe('decorateStorage', (): void => {
const query = decorateStorage(registry, metadata.asLatest, metadata.version);
it('should throw if the storage function expects an argument', (): void => {
expect(() => query.balances.account()).toThrowError(/requires one argument/);
expect(() => query.balances.account()).toThrowError('Call to balances.account has a null or undefined argument at position 0');
});
it('should throw if the storage function expects multiple arguments', (): void => {
expect(() => query.staking.erasStakers([1])).toThrowError('Call to staking.erasStakers needs 2 arguments, found [1]');
});
it('should return a value if the storage function does not expect an argument', (): void => {
@@ -11,7 +11,8 @@ import { createFunction } from './createFunction';
import { getStorage } from './getStorage';
/** @internal */
export function decorateStorage (registry: Registry, { modules }: MetadataLatest, metaVersion: number): Storage {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function decorateStorage (registry: Registry, { modules }: MetadataLatest, _metaVersion: number): Storage {
return modules.reduce((result: Storage, moduleMetadata): Storage => {
if (moduleMetadata.storage.isNone) {
return result;
@@ -31,11 +32,11 @@ export function decorateStorage (registry: Registry, { modules }: MetadataLatest
method,
prefix,
section
}, { metaVersion });
}, {});
return newModule;
}, {} as ModuleStorage);
return result;
}, { ...getStorage(registry, metaVersion) });
}, { ...getStorage(registry) });
}
@@ -0,0 +1,19 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { TypeRegistry } from '@polkadot/types/create';
import { compactAddLength, u8aToU8a } from '@polkadot/util';
import { substrate } from './substrate';
const registry = new TypeRegistry();
describe('substrate', (): void => {
it('creates a well-known :code key', (): void => {
expect(
substrate.code(registry)()
).toEqual(
compactAddLength(u8aToU8a(':code'))
);
});
});
@@ -12,44 +12,45 @@ interface SubstrateMetadata {
type: string;
}
type Creator = (registry: Registry) => StorageEntry;
// Small helper function to factorize code on this page.
/** @internal */
function createRuntimeFunction (method: string, key: string, { documentation, type }: SubstrateMetadata): (registry: Registry, metaVersion: number) => StorageEntry {
return (registry: Registry, metaVersion: number): StorageEntry =>
function createRuntimeFunction (method: string, key: string, { documentation, type }: SubstrateMetadata): (registry: Registry) => StorageEntry {
return (registry: Registry): StorageEntry =>
createFunction(registry, {
meta: {
documentation: registry.createType('Vec<Text>', [documentation]),
modifier: registry.createType('StorageEntryModifierLatest', 1), // required
name: registry.createType('Text', method),
toJSON: (): any => key,
type: registry.createType('StorageEntryTypeLatest', type, 0)
} as StorageEntryMetadataLatest,
method,
prefix: 'Substrate',
section: 'substrate'
}, { key, metaVersion, skipHashing: true });
}, { key, skipHashing: true });
}
export const code = createRuntimeFunction('code', ':code', {
documentation: 'Wasm code of the runtime.',
type: 'Bytes'
});
export const heapPages = createRuntimeFunction('heapPages', ':heappages', {
documentation: 'Number of wasm linear memory pages required for execution of the runtime.',
type: 'u64'
});
export const extrinsicIndex = createRuntimeFunction('extrinsicIndex', ':extrinsic_index', {
documentation: 'Current extrinsic index (u32) is stored under this key.',
type: 'u32'
});
export const changesTrieConfig = createRuntimeFunction('changesTrieConfig', ':changes_trie', {
documentation: 'Changes trie configuration is stored under this key.',
type: 'u32'
});
export const childStorageKeyPrefix = createRuntimeFunction('childStorageKeyPrefix', ':child_storage:', {
documentation: 'Prefix of child storage keys.',
type: 'u32'
});
export const substrate: Record<string, Creator> = {
changesTrieConfig: createRuntimeFunction('changesTrieConfig', ':changes_trie', {
documentation: ' Changes trie configuration is stored under this key.',
type: 'u32'
}),
childStorageKeyPrefix: createRuntimeFunction('childStorageKeyPrefix', ':child_storage:', {
documentation: ' Prefix of child storage keys.',
type: 'u32'
}),
code: createRuntimeFunction('code', ':code', {
documentation: ' Wasm code of the runtime.',
type: 'Bytes'
}),
extrinsicIndex: createRuntimeFunction('extrinsicIndex', ':extrinsic_index', {
documentation: ' Current extrinsic index (u32) is stored under this key.',
type: 'u32'
}),
heapPages: createRuntimeFunction('heapPages', ':heappages', {
documentation: ' Number of wasm linear memory pages required for execution of the runtime.',
type: 'u64'
})
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/metadata', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/metadata', version: '4.9.1' };
+1 -1
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import metadata from './v12/static';
import metadata from './v13/static';
export default metadata;
+11 -11
View File
@@ -4,16 +4,16 @@
type Types = string | Types[];
/** @internal */
export function flattenUniq (list: Types[]): string[] {
const flat = list.reduce((result: string[], entry): string[] => {
return result.concat(
Array.isArray(entry)
? flattenUniq(entry)
: entry
);
}, []);
export function flattenUniq (list: Types[], start: string[] = []): string[] {
return [...new Set(
list.reduce((result: string[], entry): string[] => {
if (Array.isArray(entry)) {
return flattenUniq(entry, result);
}
return [...new Set(flat)]
.filter((value: string) => value)
.sort();
result.push(entry);
return result;
}, start)
)];
}
+48 -83
View File
@@ -12,10 +12,11 @@ type Arg = { type: Type } & Codec;
type Item = {
type: {
isDoubleMap?: boolean;
isDoubleMap: boolean;
isMap: boolean;
isNMap: boolean;
isPlain: boolean;
asDoubleMap?: {
asDoubleMap: {
key1: Text;
key2: Text;
value: Text;
@@ -24,16 +25,15 @@ type Item = {
key: Text;
value: Text;
};
asNMap: {
keyVec: Text[];
value: Text;
},
asPlain: Text;
};
} & Codec;
type Storage = Option<Vec<Item> | {
// v0
functions?: Vec<Item>;
// V7+
items?: Vec<Item>;
} & Codec>;
type Storage = Option<{ items: Vec<Item> } & Codec>;
type Call = { args: Vec<Arg> } & Codec;
@@ -44,12 +44,6 @@ type Event = { args: Vec<Type> } & Codec;
type Events = Option<Vec<Event>>;
type Module = {
// V0
module?: {
call: {
functions: Vec<Call>;
};
};
// V1+
calls?: Calls;
// V6+
@@ -60,30 +54,25 @@ type Module = {
interface ExtractionMetadata {
modules: Vec<Module>;
// V0
outerEvent?: {
events: Vec<[Text, Vec<Event>] & Codec>;
};
}
/** @internal */
function unwrapCalls (mod: Module): Call[] {
return mod.calls
? mod.calls.unwrapOr([])
// V0
: mod.module
? mod.module.call.functions
: [];
: [];
}
/** @internal */
function typeToString ({ type }: Arg): string {
return type.toString();
}
/** @internal */
function getCallNames ({ modules }: ExtractionMetadata): string[][][] {
return modules.map((mod): string[][] =>
unwrapCalls(mod).map(({ args }): string[] =>
args.map((arg): string =>
arg.type.toString()
)
args.map(typeToString)
)
);
}
@@ -91,90 +80,66 @@ function getCallNames ({ modules }: ExtractionMetadata): string[][][] {
/** @internal */
function getConstantNames ({ modules }: ExtractionMetadata): string[][] {
return modules.map(({ constants }): string[] =>
constants
? constants.map((constant): string =>
constant.type.toString()
)
: []
(constants || []).map(typeToString)
);
}
/** @internal */
function unwrapEvents (events?: Events): Event[] {
if (!events) {
return [];
}
return events.unwrapOr([]);
return events
? events.unwrapOr([])
: [];
}
/** @internal */
function getEventNames ({ modules, outerEvent }: ExtractionMetadata): string[][][] {
const mapArg = ({ args }: Event): string[] =>
args.map((arg): string =>
arg.toString()
);
// V0
if (outerEvent) {
return outerEvent.events.map(([, events]): string[][] =>
events.map(mapArg)
);
}
// V1+
function getEventNames ({ modules }: ExtractionMetadata): string[][][] {
return modules.map(({ events }): string[][] =>
unwrapEvents(events).map(mapArg)
unwrapEvents(events).map(({ args }: Event): string[] =>
args.map((a) => a.toString())
)
);
}
/** @internal */
function unwrapStorage (storage?: Storage): Item[] {
if (!storage) {
return [];
}
const data = storage.unwrapOr([]);
return Array.isArray(data)
? data
: (data.items || data.functions) as Item[];
return storage
? storage.unwrapOr({ items: [] }).items
: [];
}
/** @internal */
function getStorageNames ({ modules }: ExtractionMetadata): string[][][] {
return modules.map(({ storage }): string[][] =>
unwrapStorage(storage).map(({ type }): string[] => {
if (type.isDoubleMap && type.asDoubleMap) {
return [
type.asDoubleMap.key1.toString(),
type.asDoubleMap.key2.toString(),
type.asDoubleMap.value.toString()
];
} else if (type.isMap) {
return [
type.asMap.key.toString(),
type.asMap.value.toString()
];
} else {
return [
unwrapStorage(storage).map(({ type }) =>
type.isPlain
? [
type.asPlain.toString()
];
}
})
]
: type.isMap
? [
type.asMap.value.toString(),
type.asMap.key.toString()
]
: type.isDoubleMap
? [
type.asDoubleMap.value.toString(),
type.asDoubleMap.key1.toString(),
type.asDoubleMap.key2.toString()
]
: [
type.asNMap.value.toString(),
...type.asNMap.keyVec.map((k) => k.toString())
]
)
);
}
/** @internal */
export function getUniqTypes (registry: Registry, meta: ExtractionMetadata, throwError: boolean): string[] {
const types = flattenUniq([
return validateTypes(registry, throwError, flattenUniq([
getCallNames(meta),
getConstantNames(meta),
getEventNames(meta),
getStorageNames(meta)
]);
validateTypes(registry, types, throwError);
return types;
]));
}
+3 -3
View File
@@ -5,7 +5,7 @@ import type { Codec, Registry } from '@polkadot/types/types';
import type { MetadataInterface } from '../types';
import { unwrapStorageType } from '@polkadot/types/primitive/StorageKey';
import { assert, hexToU8a, u8aToHex } from '@polkadot/util';
import { assert, hexToU8a, stringify, u8aToHex } from '@polkadot/util';
import { Metadata } from '../Metadata';
import { getUniqTypes } from './getUniqTypes';
@@ -22,7 +22,7 @@ export function decodeLatestSubstrate<Modules extends Codec> (registry: Registry
expect((metadata[`asV${version}` as keyof Metadata] as unknown as MetadataInterface<Modules>).modules.length).not.toBe(0);
expect(metadata.toJSON()).toEqual(staticSubstrate);
} catch (error) {
console.error(JSON.stringify(metadata.toJSON()));
console.error(stringify(metadata.toJSON()));
throw error;
}
@@ -65,7 +65,7 @@ export function defaultValues (registry: Registry, rpcData: string, withThrow =
if (withFallbackCheck) {
const [hexType, hexOrig] = [u8aToHex(type.toU8a()), u8aToHex(fallback.toU8a(true))];
assert(hexType === hexOrig, `Fallback does not match (${((hexOrig.length - 2) / 2) - ((hexType.length - 2) / 2)} bytes missing): ${hexType} !== ${hexOrig}`);
assert(hexType === hexOrig, () => `Fallback does not match (${((hexOrig.length - 2) / 2) - ((hexType.length - 2) / 2)} bytes missing): ${hexType} !== ${hexOrig}`);
}
} catch (error) {
const message = `${location}:: ${(error as Error).message}`;
+6 -2
View File
@@ -11,8 +11,10 @@ import { flattenUniq } from './flattenUniq';
const l = logger('metadata');
/** @internal */
export function validateTypes (registry: Registry, types: string[], throwError: boolean): void {
const missing = flattenUniq(extractTypes(types)).filter((type) => !registry.hasType(type));
export function validateTypes (registry: Registry, throwError: boolean, types: string[]): string[] {
const missing = flattenUniq(extractTypes(types))
.filter((type) => !registry.hasType(type))
.sort();
if (missing.length !== 0) {
const message = `Unknown types found, no types for ${missing.join(', ')}`;
@@ -23,4 +25,6 @@ export function validateTypes (registry: Registry, types: string[], throwError:
l.warn(message);
}
}
return types;
}
+45 -19
View File
@@ -5786,7 +5786,7 @@
{
"name": "Elections",
"storage": {
"prefix": "PhragmenElection",
"prefix": "Elections",
"items": [
{
"name": "Members",
@@ -5956,8 +5956,8 @@
" origin is removed as a runner-up.",
" - `origin` is a current member. In this case, the deposit is unreserved and origin is",
" removed as a member, consequently not being a candidate for the next round anymore.",
" Similar to [`remove_members`], if replacement runners exists, they are immediately used.",
" If the prime is renouncing, then no prime will exist until the next round.",
" Similar to [`remove_members`], if replacement runners exists, they are immediately",
" used. If the prime is renouncing, then no prime will exist until the next round.",
"",
" The dispatch origin of this call must be signed, and have one of the above roles.",
"",
@@ -6028,10 +6028,11 @@
"Vec<(AccountId,Balance)>"
],
"documentation": [
" A new term with \\[new_members\\]. This indicates that enough candidates existed to run the",
" election, not that enough have has been elected. The inner value must be examined for",
" this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond slashed and",
" none were elected, whilst `EmptyTerm` means that no candidates existed to begin with."
" A new term with \\[new_members\\]. This indicates that enough candidates existed to run",
" the election, not that enough have has been elected. The inner value must be examined",
" for this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond",
" slashed and none were elected, whilst `EmptyTerm` means that no candidates existed to",
" begin with."
]
},
{
@@ -6093,47 +6094,66 @@
}
],
"constants": [
{
"name": "PalletId",
"type": "LockIdentifier",
"value": "0x706872656c656374",
"documentation": [
" Identifier for the elections-phragmen pallet's lock"
]
},
{
"name": "CandidacyBond",
"type": "BalanceOf",
"value": "0x0080c6a47e8d03000000000000000000",
"documentation": []
"documentation": [
" How much should be locked up in order to submit one's candidacy."
]
},
{
"name": "VotingBondBase",
"type": "BalanceOf",
"value": "0x00f0436de36a01000000000000000000",
"documentation": []
"documentation": [
" Base deposit associated with voting.",
"",
" This should be sensibly high to economically ensure the pallet cannot be attacked by",
" creating a gigantic number of votes."
]
},
{
"name": "VotingBondFactor",
"type": "BalanceOf",
"value": "0x0000cc7b9fae00000000000000000000",
"documentation": []
"documentation": [
" The amount of bond that need to be locked for each vote (32 bytes)."
]
},
{
"name": "DesiredMembers",
"type": "u32",
"value": "0x0d000000",
"documentation": []
"documentation": [
" Number of members to elect."
]
},
{
"name": "DesiredRunnersUp",
"type": "u32",
"value": "0x07000000",
"documentation": []
"documentation": [
" Number of runners_up to keep."
]
},
{
"name": "TermDuration",
"type": "BlockNumber",
"value": "0x80130300",
"documentation": []
},
{
"name": "PalletId",
"type": "LockIdentifier",
"value": "0x706872656c656374",
"documentation": []
"documentation": [
" How long each seat is kept. This defines the next block number at which an election",
" round will happen. If set to zero, no elections are ever triggered and the module will",
" be in passive mode."
]
}
],
"errors": [
@@ -6897,6 +6917,12 @@
"documentation": [
" No proposal or bounty at that index."
]
},
{
"name": "TooManyApprovals",
"documentation": [
" Too many approvals in the queue."
]
}
],
"index": 17
File diff suppressed because one or more lines are too long
+12
View File
@@ -0,0 +1,12 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { MetadataV12, MetadataV13 } from '@polkadot/types/interfaces/metadata';
import type { Registry } from '@polkadot/types/types';
/**
* @internal
**/
export function toV13 (registry: Registry, metadata: MetadataV12): MetadataV13 {
return registry.createType('MetadataV13', metadata);
}
@@ -0,0 +1,18 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { TypeRegistry } from '@polkadot/types/create';
import { decodeLatestSubstrate, defaultValues, toLatest } from '../util/testUtil';
import substrateData from './static';
import substrateJson from './static-substrate.json';
describe('MetadataV13 (substrate)', (): void => {
const registry = new TypeRegistry();
decodeLatestSubstrate(registry, 13, substrateData, substrateJson);
toLatest(registry, 13, substrateData);
defaultValues(registry, substrateData, true, true);
});
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
// Copyright 2017-2021 @polkadot/metadata authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { EventMetadataLatest, EventMetadataV12, FunctionMetadataLatest, FunctionMetadataV12, MetadataLatest, MetadataV12, ModuleConstantMetadataLatest, ModuleConstantMetadataV12, ModuleMetadataLatest, ModuleMetadataV12, StorageEntryMetadataLatest, StorageMetadataLatest, StorageMetadataV12 } from '@polkadot/types/interfaces/metadata';
import type { EventMetadataLatest, EventMetadataV13, FunctionMetadataLatest, FunctionMetadataV13, MetadataLatest, MetadataV13, ModuleConstantMetadataLatest, ModuleConstantMetadataV13, ModuleMetadataLatest, ModuleMetadataV13, StorageEntryMetadataLatest, StorageMetadataLatest, StorageMetadataV13 } from '@polkadot/types/interfaces/metadata';
import type { OverrideModuleType, Registry } from '@polkadot/types/types';
import { Type } from '@polkadot/types/primitive';
@@ -16,11 +16,13 @@ const KNOWN_ORIGINS: Record<string, string> = {
TechnicalCommittee: 'CollectiveOrigin'
};
const BOXES = [['<', '>'], ['<', ','], [',', '>'], ['(', ')'], ['(', ','], [',', ','], [',', ')']];
/**
* Find and apply the correct type override
* @internal
**/
function setTypeOverride (sectionTypes: OverrideModuleType, ...types: Type[]): void {
function setTypeOverride (sectionTypes: OverrideModuleType, types: Type[]): void {
types.forEach((type): void => {
const override = Object.keys(sectionTypes).find((aliased) => type.eq(aliased));
@@ -29,9 +31,11 @@ function setTypeOverride (sectionTypes: OverrideModuleType, ...types: Type[]): v
} else {
// FIXME: NOT happy with this approach, but gets over the initial hump cased by (Vec<Announcement>,BalanceOf)
const orig = type.toString();
const alias = Object.entries(sectionTypes).reduce((result: string, [from, to]): string =>
[['<', '>'], ['<', ','], [',', '>'], ['(', ')'], ['(', ','], [',', ','], [',', ')']].reduce((result, [one, two]): string =>
result.replace(`${one}${from}${two}`, `${one}${to}${two}`), result), orig);
const alias = Object
.entries(sectionTypes)
.reduce((result: string, [from, to]) =>
BOXES.reduce((result, [one, two]) =>
result.replace(`${one}${from}${two}`, `${one}${to}${two}`), result), orig);
if (orig !== alias) {
type.setOverride(alias);
@@ -44,9 +48,9 @@ function setTypeOverride (sectionTypes: OverrideModuleType, ...types: Type[]): v
* Apply module-specific type overrides (always be done as part of toLatest)
* @internal
**/
function convertCalls (registry: Registry, calls: FunctionMetadataV12[], sectionTypes: OverrideModuleType): FunctionMetadataLatest[] {
function convertCalls (registry: Registry, calls: FunctionMetadataV13[], sectionTypes: OverrideModuleType): FunctionMetadataLatest[] {
return calls.map((c): FunctionMetadataLatest => {
c.args.forEach(({ type }) => setTypeOverride(sectionTypes, type));
setTypeOverride(sectionTypes, c.args.map(({ type }) => type));
return registry.createType('FunctionMetadataLatest', c);
});
@@ -56,9 +60,9 @@ function convertCalls (registry: Registry, calls: FunctionMetadataV12[], section
* Apply module-specific type overrides (always be done as part of toLatest)
* @internal
*/
function convertConstants (registry: Registry, constants: ModuleConstantMetadataV12[], sectionTypes: OverrideModuleType): ModuleConstantMetadataLatest[] {
function convertConstants (registry: Registry, constants: ModuleConstantMetadataV13[], sectionTypes: OverrideModuleType): ModuleConstantMetadataLatest[] {
return constants.map((c): ModuleConstantMetadataLatest => {
setTypeOverride(sectionTypes, c.type);
setTypeOverride(sectionTypes, [c.type]);
return registry.createType('ModuleConstantMetadataLatest', c);
});
@@ -68,9 +72,9 @@ function convertConstants (registry: Registry, constants: ModuleConstantMetadata
* Apply module-specific type overrides (always be done as part of toLatest)
* @internal
**/
function convertEvents (registry: Registry, events: EventMetadataV12[], sectionTypes: OverrideModuleType): EventMetadataLatest[] {
function convertEvents (registry: Registry, events: EventMetadataV13[], sectionTypes: OverrideModuleType): EventMetadataLatest[] {
return events.map((e): EventMetadataLatest => {
e.args.forEach((type) => setTypeOverride(sectionTypes, type));
setTypeOverride(sectionTypes, e.args.map((type) => type));
return registry.createType('EventMetadataLatest', e);
});
@@ -80,16 +84,18 @@ function convertEvents (registry: Registry, events: EventMetadataV12[], sectionT
* Apply module-specific storage type overrides (always part of toLatest)
* @internal
**/
function convertStorage (registry: Registry, { items, prefix }: StorageMetadataV12, sectionTypes: OverrideModuleType): StorageMetadataLatest {
function convertStorage (registry: Registry, { items, prefix }: StorageMetadataV13, sectionTypes: OverrideModuleType): StorageMetadataLatest {
return registry.createType('StorageMetadataLatest', {
items: items.map((s): StorageEntryMetadataLatest => {
if (s.type.isDoubleMap) {
setTypeOverride(sectionTypes, s.type.asDoubleMap.value, s.type.asDoubleMap.key1, s.type.asDoubleMap.key2);
} else if (s.type.isMap) {
setTypeOverride(sectionTypes, s.type.asMap.value, s.type.asMap.key);
} else {
setTypeOverride(sectionTypes, s.type.asPlain);
}
setTypeOverride(sectionTypes,
s.type.isPlain
? [s.type.asPlain]
: s.type.isMap
? [s.type.asMap.value, s.type.asMap.key]
: s.type.isDoubleMap
? [s.type.asDoubleMap.value, s.type.asDoubleMap.key1, s.type.asDoubleMap.key2]
: [s.type.asNMap.value, ...s.type.asNMap.keyVec]
);
return registry.createType('StorageEntryMetadataLatest', s);
}),
@@ -98,13 +104,15 @@ function convertStorage (registry: Registry, { items, prefix }: StorageMetadataV
}
// generate & register the OriginCaller type
function registerOriginCaller (registry: Registry, modules: ModuleMetadataV12[], metaVersion: number): void {
function registerOriginCaller (registry: Registry, modules: ModuleMetadataV13[], metaVersion: number): void {
registry.register({
OriginCaller: {
_enum: modules
.map((mod, index): [string, number] => [
mod.name.toString(),
metaVersion >= 12 ? mod.index.toNumber() : index
metaVersion >= 12
? mod.index.toNumber()
: index
])
.sort((a, b) => a[1] - b[1])
.reduce((result: Record<string, string>, [name, index]): Record<string, string> => {
@@ -121,7 +129,7 @@ function registerOriginCaller (registry: Registry, modules: ModuleMetadataV12[],
}
/** @internal */
function createModule (registry: Registry, mod: ModuleMetadataV12, { calls, constants, events, storage }: { calls: FunctionMetadataV12[] | null, constants: ModuleConstantMetadataV12[], events: EventMetadataV12[] | null, storage: StorageMetadataV12 | null }): ModuleMetadataLatest {
function createModule (registry: Registry, mod: ModuleMetadataV13, { calls, constants, events, storage }: { calls: FunctionMetadataV13[] | null, constants: ModuleConstantMetadataV13[], events: EventMetadataV13[] | null, storage: StorageMetadataV13 | null }): ModuleMetadataLatest {
const sectionTypes = getModuleTypes(registry, stringCamelCase(mod.name));
return registry.createType('ModuleMetadataLatest', {
@@ -138,7 +146,7 @@ function createModule (registry: Registry, mod: ModuleMetadataV12, { calls, cons
* most-recent metadata, since it allows us a chance to actually apply call and storage specific type aliasses
* @internal
**/
export function toLatest (registry: Registry, { extrinsic, modules }: MetadataV12, metaVersion: number): MetadataLatest {
export function toLatest (registry: Registry, { extrinsic, modules }: MetadataV13, metaVersion: number): MetadataLatest {
registerOriginCaller(registry, modules, metaVersion);
return registry.createType('MetadataLatest', {
+11 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/rpc-core",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "A JavaScript wrapper for the Polkadot JsonRPC interface",
"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,14 +19,14 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/rpc-core#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/metadata": "4.6.2",
"@polkadot/rpc-provider": "4.6.2",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/x-rxjs": "^6.2.1"
"@babel/runtime": "^7.14.0",
"@polkadot/metadata": "4.9.1",
"@polkadot/rpc-provider": "4.9.1",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/x-rxjs": "^6.3.1"
},
"devDependencies": {
"@polkadot/keyring": "^6.2.1"
"@polkadot/keyring": "^6.3.1"
}
}
+25 -29
View File
@@ -84,7 +84,7 @@ export class RpcCore {
#registryDefault: Registry;
#getBlockRegistry?: (blockHash: string | Uint8Array) => Promise<{ registry: Registry }>;
#getBlockRegistry?: (blockHash: Uint8Array) => Promise<{ registry: Registry }>;
readonly #storageCache = new Map<string, string | null>();
@@ -140,8 +140,10 @@ export class RpcCore {
/**
* @description Sets a registry swap (typically from Api)
*/
public setRegistrySwap (registrySwap: (blockHash: string | Uint8Array) => Promise<{ registry: Registry }>): void {
this.#getBlockRegistry = registrySwap;
public setRegistrySwap (registrySwap: (blockHash: Uint8Array) => Promise<{ registry: Registry }>): void {
this.#getBlockRegistry = memoize(registrySwap, {
getInstanceId: () => this.#instanceId
});
}
public addUserInterfaces<Section extends keyof RpcInterface> (userRpc: Record<string, Record<string, DefinitionRpc | DefinitionRpcSub>>): void {
@@ -211,9 +213,9 @@ export class RpcCore {
const callWithRegistry = async (outputAs: OutputType, values: any[]): Promise<Codec | Codec[]> => {
const blockHash = hashIndex === -1
? null
: values[hashIndex] as Uint8Array;
: values[hashIndex] as (Uint8Array | string | null | undefined);
const { registry } = blockHash && this.#getBlockRegistry
? await this.#getBlockRegistry(blockHash)
? await this.#getBlockRegistry(u8aToU8a(blockHash))
: { registry: this.#registryDefault };
const params = this._formatInputs(registry, null, def, values);
const data = await this.provider.send(rpcName, params.map((param): AnyJson => param.toJSON())) as AnyJson;
@@ -343,7 +345,7 @@ export class RpcCore {
? ''
: ` (${def.params.length - reqArgCount} optional)`;
assert(inputs.length >= reqArgCount && inputs.length <= def.params.length, `Expected ${def.params.length} parameters${optText}, ${inputs.length} found instead`);
assert(inputs.length >= reqArgCount && inputs.length <= def.params.length, () => `Expected ${def.params.length} parameters${optText}, ${inputs.length} found instead`);
return inputs.map((input, index): Codec =>
createTypeUnsafe(registry, def.params[index].type, [input], { blockHash })
@@ -438,27 +440,23 @@ export class RpcCore {
? ''
: ` entry ${entryIndex}:`;
if (meta.modifier.isOptional) {
let inner = null;
if (!isEmpty) {
try {
inner = createTypeUnsafe(registry, type, [input], { blockHash, isPedantic: true });
} catch (error) {
l.error(`Unable to decode storage ${key.section || 'unknown'}.${key.method || 'unknown'}:${entryNum}`, (error as Error).message);
}
}
const option = new Option(registry, createClass(registry, type), inner);
if (blockHash) {
option.createdAtHash = registry.createType('Hash', blockHash);
}
return option;
}
try {
if (meta.modifier.isOptional) {
let inner = null;
if (!isEmpty) {
inner = createTypeUnsafe(registry, type, [input], { blockHash, isPedantic: true });
}
const option = new Option(registry, createClass(registry, type), inner);
if (blockHash) {
option.createdAtHash = registry.createType('Hash', blockHash);
}
return option;
}
return createTypeUnsafe(registry, type, [
isEmpty
? meta.fallback
@@ -467,9 +465,7 @@ export class RpcCore {
: input
], { blockHash, isPedantic: true });
} catch (error) {
l.error(`Unable to decode storage ${key.section || 'unknown'}.${key.method || 'unknown'}:${entryNum}`, (error as Error).message);
return createTypeUnsafe(registry, 'Raw', [input], { blockHash });
throw new Error(`Unable to decode storage ${key.section || 'unknown'}.${key.method || 'unknown'}:${entryNum}: ${(error as Error).message}`);
}
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/rpc-core', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/rpc-core', version: '4.9.1' };
+3 -3
View File
@@ -3,7 +3,7 @@
import type { Observable } from '@polkadot/x-rxjs';
import { logger } from '@polkadot/util';
import { logger, stringify } from '@polkadot/util';
import { catchError, distinctUntilChanged, publishReplay, refCount, tap } from '@polkadot/x-rxjs/operators';
import { refCountDelay } from './refCountDelay';
@@ -19,10 +19,10 @@ interface Options {
const l = logger('drr');
const CMP = (a: unknown, b: unknown): boolean =>
JSON.stringify({ t: a }) === JSON.stringify({ t: b });
stringify({ t: a }) === stringify({ t: b });
const ERR = (error: Error): Observable<never> => {
l.error(error);
l.error(error.message);
throw error;
};
+13 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/rpc-provider",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Transport providers for the API",
"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,19 +19,19 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/rpc-provider#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/util-crypto": "^6.2.1",
"@polkadot/x-fetch": "^6.2.1",
"@polkadot/x-global": "^6.2.1",
"@polkadot/x-ws": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/util-crypto": "^6.3.1",
"@polkadot/x-fetch": "^6.3.1",
"@polkadot/x-global": "^6.3.1",
"@polkadot/x-ws": "^6.3.1",
"bn.js": "^4.11.9",
"eventemitter3": "^4.0.7"
},
"devDependencies": {
"@polkadot/keyring": "^6.2.1",
"@polkadot/metadata": "4.6.2",
"@polkadot/keyring": "^6.3.1",
"@polkadot/metadata": "4.9.1",
"mock-socket": "^9.0.3",
"nock": "^13.0.11"
}
+3 -3
View File
@@ -3,7 +3,7 @@
import type { JsonRpcRequest, JsonRpcResponse, JsonRpcResponseBaseError } from '../types';
import { assert, isNumber, isString, isUndefined } from '@polkadot/util';
import { assert, isNumber, isString, isUndefined, stringify } from '@polkadot/util';
function formatErrorData (data?: string | number): string {
if (isUndefined(data)) {
@@ -12,7 +12,7 @@ function formatErrorData (data?: string | number): string {
const formatted = `: ${isString(data)
? data.replace(/Error\("/g, '').replace(/\("/g, '(').replace(/"\)/g, ')').replace(/\(/g, ', ').replace(/\)/g, '')
: JSON.stringify(data)}`;
: stringify(data)}`;
// We need some sort of cut-off here since these can be very large and
// very nested, pick a number and trim the result display to it
@@ -47,7 +47,7 @@ export class RpcCoder {
}
public encodeJson (method: string, params: any | any[]): string {
return JSON.stringify(
return stringify(
this.encodeObject(method, params)
);
}
+2 -2
View File
@@ -44,7 +44,7 @@ export class HttpProvider implements ProviderInterface {
* @param {string} endpoint The endpoint url starting with http://
*/
constructor (endpoint: string = defaults.HTTP_URL, headers: Record<string, string> = {}) {
assert(/^(https|http):\/\//.test(endpoint), `Endpoint should start with 'http://', received '${endpoint}'`);
assert(/^(https|http):\/\//.test(endpoint), () => `Endpoint should start with 'http://', received '${endpoint}'`);
this.#coder = new RpcCoder();
this.#endpoint = endpoint;
@@ -116,7 +116,7 @@ export class HttpProvider implements ProviderInterface {
method: 'POST'
});
assert(response.ok, `[${response.status}]: ${response.statusText}`);
assert(response.ok, () => `[${response.status}]: ${response.statusText}`);
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const result = await response.json();
+8 -5
View File
@@ -60,7 +60,7 @@ export class MockProvider implements ProviderInterface {
chain_getFinalizedHead: () => this.registry.createType('Header', rpcHeader.result).hash,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
chain_getHeader: () => this.registry.createType('Header', rpcHeader.result).toJSON(),
rpc_methods: (): string[] => [],
rpc_methods: () => this.registry.createType('RpcMethods').toJSON(),
state_getKeys: (): string[] => [],
state_getKeysPaged: (): string[] => [],
state_getMetadata: (): string => rpcMetadata,
@@ -69,6 +69,7 @@ export class MockProvider implements ProviderInterface {
system_chain: (): string => 'mockChain',
system_name: (): string => 'mockClient',
system_properties: (): Record<string, number | string> => ({ ss58Format: 42 }),
system_upgradedToTripleRefCount: () => this.registry.createType('bool', true),
system_version: (): string => '9.8.7'
};
@@ -121,16 +122,18 @@ export class MockProvider implements ProviderInterface {
// eslint-disable-next-line @typescript-eslint/require-await
public async send (method: string, params: any[]): Promise<unknown> {
assert(this.requests[method], `provider.send: Invalid method '${method}'`);
l.debug(() => ['send', method, params]);
assert(this.requests[method], () => `provider.send: Invalid method '${method}'`);
return this.requests[method](this.db, params);
}
// eslint-disable-next-line @typescript-eslint/require-await
public async subscribe (type: string, method: string, ...params: unknown[]): Promise<number> {
l.debug((): any => ['subscribe', method, params]);
l.debug(() => ['subscribe', method, params]);
assert(this.subscriptions[method], `provider.subscribe: Invalid method '${method}'`);
assert(this.subscriptions[method], () => `provider.subscribe: Invalid method '${method}'`);
const callback = params.pop() as MockStateSubscriptionCallback;
const id = ++this.subscriptionId;
@@ -151,7 +154,7 @@ export class MockProvider implements ProviderInterface {
l.debug((): any => ['unsubscribe', id, sub]);
assert(sub, `Unable to find subscription for ${id}`);
assert(sub, () => `Unable to find subscription for ${id}`);
delete this.subscriptionMap[id];
delete this.subscriptions[sub].callbacks[id];
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/rpc-provider', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/rpc-provider', version: '4.9.1' };
+15 -6
View File
@@ -32,13 +32,13 @@ interface WsStateSubscription extends SubscriptionHandler {
params: any[];
}
const ALIASSES: { [index: string]: string } = {
const ALIASES: { [index: string]: string } = {
chain_finalisedHead: 'chain_finalizedHead',
chain_subscribeFinalisedHeads: 'chain_subscribeFinalizedHeads',
chain_unsubscribeFinalisedHeads: 'chain_unsubscribeFinalizedHeads'
};
const RETRY_DELAY = 1000;
const RETRY_DELAY = 2500;
const l = logger('api-ws');
@@ -109,7 +109,7 @@ export class WsProvider implements ProviderInterface {
assert(endpoints.length !== 0, 'WsProvider requires at least one Endpoint');
endpoints.forEach((endpoint) => {
assert(/^(wss|ws):\/\//.test(endpoint), `Endpoint should start with 'ws://', received '${endpoint}'`);
assert(/^(wss|ws):\/\//.test(endpoint), () => `Endpoint should start with 'ws://', received '${endpoint}'`);
});
this.#eventemitter = new EventEmitter();
@@ -225,7 +225,6 @@ export class WsProvider implements ProviderInterface {
// 1000 - Normal closure; the connection successfully completed
this.#websocket.close(1000);
this.#websocket = null;
} catch (error) {
l.error(error);
@@ -351,9 +350,19 @@ export class WsProvider implements ProviderInterface {
}
this.#isConnected = false;
if (this.#websocket) {
this.#websocket.onclose = null;
this.#websocket.onerror = null;
this.#websocket.onmessage = null;
this.#websocket.onopen = null;
this.#websocket = null;
}
this.#emit('disconnected');
// reject all hanging requests
eraseRecord(this.#handlers, (handler) => handler.callback(error, undefined));
eraseRecord(this.#handlers, (h) => h.callback(error, undefined));
eraseRecord(this.#waitingForId);
if (this.#autoConnectMs > 0) {
@@ -419,7 +428,7 @@ export class WsProvider implements ProviderInterface {
}
#onSocketMessageSubscribe = (response: JsonRpcResponse): void => {
const method = ALIASSES[response.method as string] || response.method || 'invalid';
const method = ALIASES[response.method as string] || response.method || 'invalid';
const subId = `${method}::${response.params.subscription}`;
const handler = this.#subscriptions[subId];
+3 -1
View File
@@ -3,6 +3,8 @@
import { Server, WebSocket } from 'mock-socket';
import { stringify } from '@polkadot/util';
interface Scope {
body: { [index: string]: Record<string, any> };
requests: number;
@@ -79,7 +81,7 @@ export function mockWs (requests: ({ method: string } & ErrorDef)[], wsUrl: stri
scope.body[request.method] = body;
requestCount++;
socket.send(JSON.stringify(response));
socket.send(stringify(response));
});
});
+13 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/typegen",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Type generation scripts",
"main": "index.js",
@@ -8,6 +8,9 @@
"./detectPackage.js",
"./detectPackage.cjs"
],
"engines": {
"node": ">=14.0.0"
},
"bin": {
"polkadot-types-chain-info": "./scripts/polkadot-types-chain-info.cjs",
"polkadot-types-from-chain": "./scripts/polkadot-types-from-chain.cjs",
@@ -23,17 +26,17 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/typegen#readme",
"dependencies": {
"@babel/core": "^7.13.15",
"@babel/register": "^7.13.14",
"@babel/runtime": "^7.13.10",
"@polkadot/api": "4.6.2",
"@polkadot/metadata": "4.6.2",
"@polkadot/rpc-provider": "4.6.2",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@babel/core": "^7.14.0",
"@babel/register": "^7.13.16",
"@babel/runtime": "^7.14.0",
"@polkadot/api": "4.9.1",
"@polkadot/metadata": "4.9.1",
"@polkadot/rpc-provider": "4.9.1",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"handlebars": "^4.7.7",
"websocket": "^1.0.34",
"yargs": "^16.2.0"
"yargs": "^17.0.1"
},
"devDependencies": {
"@types/websocket": "^1.0.2",
+29 -7
View File
@@ -25,38 +25,60 @@ function entrySignature (allDefs: Record<string, ModuleTypes>, registry: Registr
return ['', '', formatType(allDefs, outputType, imports)];
} else if (storageEntry.type.isMap) {
const map = storageEntry.type.asMap;
// Find similar types of the `key` type
const similarTypes = getSimilarTypes(registry, allDefs, storageEntry.type.asMap.key.toString(), imports);
const similarTypes = getSimilarTypes(registry, allDefs, map.key.toString(), imports);
setImports(allDefs, imports, [
...similarTypes,
storageEntry.type.asMap.value.toString()
map.value.toString()
]);
return [
formatType(allDefs, storageEntry.type.asMap.key.toString(), imports),
formatType(allDefs, map.key.toString(), imports),
`arg: ${similarTypes.join(' | ')}`,
formatType(allDefs, outputType, imports)
];
} else if (storageEntry.type.isDoubleMap) {
const dm = storageEntry.type.asDoubleMap;
// Find similar types of `key1` and `key2` types
const similarTypes1 = getSimilarTypes(registry, allDefs, storageEntry.type.asDoubleMap.key1.toString(), imports);
const similarTypes2 = getSimilarTypes(registry, allDefs, storageEntry.type.asDoubleMap.key2.toString(), imports);
const similarTypes1 = getSimilarTypes(registry, allDefs, dm.key1.toString(), imports);
const similarTypes2 = getSimilarTypes(registry, allDefs, dm.key2.toString(), imports);
setImports(allDefs, imports, [
...similarTypes1,
...similarTypes2,
storageEntry.type.asDoubleMap.value.toString()
dm.value.toString()
]);
const key1Types = similarTypes1.join(' | ');
const key2Types = similarTypes2.join(' | ');
return [
[formatType(allDefs, storageEntry.type.asDoubleMap.key1.toString(), imports), formatType(allDefs, storageEntry.type.asDoubleMap.key2.toString(), imports)].join(', '),
[formatType(allDefs, dm.key1.toString(), imports), formatType(allDefs, dm.key2.toString(), imports)].join(', '),
`key1: ${key1Types}, key2: ${key2Types}`,
formatType(allDefs, outputType, imports)
];
} else if (storageEntry.type.isNMap) {
const nmap = storageEntry.type.asNMap;
// Find similar types for all keys
const similarTypes = nmap.keyVec.map((k) => getSimilarTypes(registry, allDefs, k.toString(), imports));
setImports(allDefs, imports, [
...similarTypes.reduce<string[]>((all, t) => all.concat(t), []),
nmap.value.toString()
]);
const keyTypes = similarTypes.map((t) => t.join(' | '));
return [
nmap.keyVec.map((k) => formatType(allDefs, k.toString(), imports)).join(', '),
keyTypes.map((t, i) => `key${i + 1}: ${t}`).join(', '),
formatType(allDefs, outputType, imports)
];
}
throw new Error(`entryArgs: Cannot parse args of entry ${storageEntry.name.toString()}`);
+2 -2
View File
@@ -10,7 +10,7 @@ import path from 'path';
import { getTypeDef } from '@polkadot/types/create';
import { TypeDefInfo } from '@polkadot/types/create/types';
import * as defaultDefinitions from '@polkadot/types/interfaces/definitions';
import { assert, isString, stringCamelCase, stringUpperFirst } from '@polkadot/util';
import { assert, isString, stringCamelCase, stringify, stringUpperFirst } from '@polkadot/util';
import { createImports, exportInterface, exportType, formatType, readTemplate, setImports, TypeImports, writeFile } from '../util';
@@ -192,7 +192,7 @@ function generateInterfaces (definitions: Record<string, ModuleTypes>, { types }
};
return Object.entries(types).map(([name, type]): [string, string] => {
const def = getTypeDef(isString(type) ? type : JSON.stringify(type), { name });
const def = getTypeDef(isString(type) ? type : stringify(type), { name });
return [name, generators[def.info](definitions, def, imports)];
});
+33 -12
View File
@@ -7,6 +7,7 @@ import type { Codec, DefinitionRpcParam } from '@polkadot/types/types';
import fs from 'fs';
import { Metadata } from '@polkadot/metadata';
import { getStorage as getSubstrateStorage } from '@polkadot/metadata/decorate/storage/getStorage';
import rpcdata from '@polkadot/metadata/static';
import { Vec } from '@polkadot/types/codec';
import { TypeRegistry } from '@polkadot/types/create';
@@ -16,15 +17,17 @@ import { Text } from '@polkadot/types/primitive';
import { unwrapStorageType } from '@polkadot/types/primitive/StorageKey';
import { stringCamelCase, stringLowerFirst } from '@polkadot/util';
interface SectionItem {
link?: string;
name: string;
[bullet: string]: undefined | string | Vec<Text>;
}
interface Section {
link?: string;
name: string;
description?: string;
items: {
link?: string;
name: string;
[bullet: string]: undefined | string | Vec<Text>;
}[];
items: SectionItem[];
}
interface Page {
@@ -156,7 +159,7 @@ function addRpc (): string {
});
return all;
}, []).sort((a, b) => a.name.localeCompare(b.name)),
}, []).sort(sortByName),
title: 'JSON-RPC'
});
}
@@ -192,10 +195,11 @@ function addConstants (metadata: MetadataLatest): string {
/** @internal */
function addStorage (metadata: MetadataLatest): string {
const { substrate } = getSubstrateStorage(metadata.registry);
const moduleSections = metadata.modules
.sort(sortByName)
.filter((moduleMetadata) => !moduleMetadata.storage.isNone)
.map((moduleMetadata) => {
.map((moduleMetadata): Section => {
const sectionName = stringLowerFirst(moduleMetadata.name);
return {
@@ -206,7 +210,9 @@ function addStorage (metadata: MetadataLatest): string {
? ('`' + func.type.asMap.key.toString() + '`')
: func.type.isDoubleMap
? ('`' + func.type.asDoubleMap.key1.toString() + ', ' + func.type.asDoubleMap.key2.toString() + '`')
: '';
: func.type.isNMap
? ('`' + func.type.asNMap.keyVec.map((k) => k.toString()).join(', ') + '`')
: '';
const methodName = stringLowerFirst(func.name);
const outputType = unwrapStorageType(func.type, func.modifier.isOptional);
@@ -220,12 +226,27 @@ function addStorage (metadata: MetadataLatest): string {
};
});
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const knownSection: any = JSON.parse(fs.readFileSync('docs/substrate/storage-known-section.json', 'utf8'));
return renderPage({
description: DESC_STORAGE,
sections: moduleSections.concat([knownSection]),
sections: moduleSections.concat([{
description: 'These are well-known keys that are always available to the runtime implementation of any Substrate-based network.',
items: Object.entries(substrate).map(([name, { meta }]) => {
const arg = meta.type.isMap
? ('`' + meta.type.asMap.key.toString() + '`')
: meta.type.isDoubleMap
? ('`' + meta.type.asDoubleMap.key1.toString() + ', ' + meta.type.asDoubleMap.key2.toString() + '`')
: '';
const methodName = stringLowerFirst(name);
const outputType = unwrapStorageType(meta.type, meta.modifier.isOptional);
return {
interface: '`' + `api.query.substrate.${methodName}` + '`',
name: `${methodName}(${arg}): ` + '`' + outputType + '`',
summary: meta.documentation
};
}),
name: 'substrate'
}]).sort(sortByName),
title: 'Storage'
});
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/typegen', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/typegen', version: '4.9.1' };
+2 -2
View File
@@ -12,7 +12,7 @@ import { GenericAccountId, GenericLookupSource, GenericVote } from '@polkadot/ty
import { AllConvictions } from '@polkadot/types/interfaces/democracy/definitions';
import { Null } from '@polkadot/types/primitive';
import * as primitiveClasses from '@polkadot/types/primitive';
import { isChildClass } from '@polkadot/util';
import { isChildClass, stringify } from '@polkadot/util';
import { isCompactEncodable } from './class';
import { formatType } from './formatting';
@@ -98,7 +98,7 @@ export function getSimilarTypes (registry: Registry, definitions: Record<string,
possibleTypes.push(`([${subs.join(', ')}])[]`);
} else {
throw new Error(`Unhandled subtype in Vec, ${JSON.stringify(subDef)}`);
throw new Error(`Unhandled subtype in Vec, ${stringify(subDef)}`);
}
}
} else if (isChildClass(Enum, Clazz)) {
+2 -2
View File
@@ -7,7 +7,7 @@ import Handlebars from 'handlebars';
import { getTypeDef, paramsNotation } from '@polkadot/types/create';
import { TypeDefInfo } from '@polkadot/types/create/types';
import { isString } from '@polkadot/util';
import { isString, stringify } from '@polkadot/util';
import { readTemplate } from './file';
import { ModuleTypes, setImports, TypeImports } from './imports';
@@ -284,7 +284,7 @@ export function formatType (definitions: Record<string, ModuleTypes>, type: stri
}
default: {
throw new Error(`Cannot format ${JSON.stringify(type)}`);
throw new Error(`Cannot format ${stringify(type)}`);
}
}
}
+8 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/types-known",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "A JavaScript wrapper for the Polkadot JsonRPC interface",
"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,10 +19,10 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types-known#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/networks": "^6.2.1",
"@polkadot/types": "4.6.2",
"@polkadot/util": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/networks": "^6.3.1",
"@polkadot/types": "4.9.1",
"@polkadot/util": "^6.3.1",
"bn.js": "^4.11.9"
},
"devDependencies": {
+6 -6
View File
@@ -48,9 +48,15 @@ const typesModules: Record<string, OverrideModuleType> = {
parachains: {
Id: 'ParaId'
},
parasInclusion: {
ValidatorIndex: 'ParaValidatorIndex'
},
parasScheduler: {
ValidatorIndex: 'ParaValidatorIndex'
},
parasShared: {
ValidatorIndex: 'ParaValidatorIndex'
},
proposeParachain: {
Proposal: 'ParachainProposal'
},
@@ -72,12 +78,6 @@ const typesModules: Record<string, OverrideModuleType> = {
},
treasury: {
Proposal: 'TreasuryProposal'
},
xcm: {
Outcome: 'XcmOutcome'
},
xcmPallet: {
Outcome: 'XcmOutcome'
}
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Auto-generated by @polkadot/dev, do not edit
export const packageInfo = { name: '@polkadot/types-known', version: '4.6.2' };
export const packageInfo = { name: '@polkadot/types-known', version: '4.9.1' };
+9 -8
View File
@@ -12,14 +12,15 @@ const versioned: OverrideVersionedType[] = [
types: {
TAssetBalance: 'u128',
ProxyType: {
_enum: {
Any: 0,
NonTransfer: 1,
CancelProxy: 2,
Assets: 3,
AssetOwner: 4,
AssetManager: 5
}
_enum: [
'Any',
'NonTransfer',
'CancelProxy',
'Assets',
'AssetOwner',
'AssetManager',
'Staking'
]
}
}
}
+3 -12
View File
@@ -6,7 +6,7 @@
import type { OverrideVersionedType } from '@polkadot/types/types';
const sharedTypes = {
Keys: 'SessionKeys7B',
Keys: 'SessionKeys6',
ProxyType: {
_enum: ['Any', 'NonTransfer', 'Staking', 'SudoBalances', 'IdentityJudgement', 'CancelProxy']
}
@@ -71,20 +71,11 @@ const versioned: OverrideVersionedType[] = [
minmax: [48, 49],
types: {
...sharedTypes,
AccountInfo: 'AccountInfoWithDualRefCount',
Keys: 'SessionKeys6'
AccountInfo: 'AccountInfoWithDualRefCount'
}
},
{
// 50 was supposed to have Beefy, didn't
minmax: [50, 50],
types: {
...sharedTypes,
Keys: 'SessionKeys6'
}
},
{
minmax: [51, undefined],
minmax: [50, undefined],
types: {
...sharedTypes
}
+3 -3
View File
@@ -7,7 +7,7 @@ import type { ChainUpgradesRaw } from './types';
import BN from 'bn.js';
import networks from '@polkadot/networks';
import { assert, hexToU8a } from '@polkadot/util';
import { assert, hexToU8a, stringify } from '@polkadot/util';
import kusama from './kusama';
import polkadot from './polkadot';
@@ -30,7 +30,7 @@ function checkOrder (network: string, versions: ChainUpgradesRaw): [number, numb
: curr[0] <= prev[0] || curr[1] <= prev[1];
});
assert(!ooo.length, `${network}: Mismatched upgrade ordering: ${JSON.stringify(ooo)}`);
assert(!ooo.length, () => `${network}: Mismatched upgrade ordering: ${stringify(ooo)}`);
return versions;
}
@@ -39,7 +39,7 @@ function checkOrder (network: string, versions: ChainUpgradesRaw): [number, numb
function mapRaw ([network, versions]: [string, ChainUpgradesRaw]): ChainUpgrades {
const chain = networks.find((n) => n.network === network) || NET_EXTRA[network];
assert(chain, `Unable to find info for chain ${network}`);
assert(chain, () => `Unable to find info for chain ${network}`);
return {
genesisHash: hexToU8a(chain.genesisHash[0]),
@@ -8,7 +8,7 @@ const upgrades: ChainUpgradesRaw = [
[244358, 8], [303079, 9], [314201, 10], [342400, 11], [443963, 12],
[528470, 13], [687751, 14], [746085, 15], [787923, 16], [799302, 17],
[1205128, 18], [1603423, 23], [1733218, 24], [2005673, 25], [2436698, 26],
[3613564, 27], [3899547, 28], [4345767, 29]
[3613564, 27], [3899547, 28], [4345767, 29], [4876134, 30]
];
export default upgrades;
+1 -1
View File
@@ -9,7 +9,7 @@ const upgrades: ChainUpgradesRaw = [
[1030162, 31], [1119657, 32], [1199282, 33], [1342534, 34], [1392263, 35],
[1431703, 36], [1433369, 37], [1490972, 41], [2087397, 43], [2316688, 44],
[2549864, 45], [3925782, 46], [3925843, 47], [4207800, 48], [4627944, 49],
[5124076, 50]
[5124076, 50], [5478664, 900], [5482450, 9000]
];
export default upgrades;
+10 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/types",
"version": "4.6.2",
"version": "4.9.1",
"type": "module",
"description": "Implementation of the Parity codec",
"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,15 +19,15 @@
"bugs": "https://github.com/polkadot-js/api/issues",
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types#readme",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@polkadot/metadata": "4.6.2",
"@polkadot/util": "^6.2.1",
"@polkadot/util-crypto": "^6.2.1",
"@polkadot/x-rxjs": "^6.2.1",
"@babel/runtime": "^7.14.0",
"@polkadot/metadata": "4.9.1",
"@polkadot/util": "^6.3.1",
"@polkadot/util-crypto": "^6.3.1",
"@polkadot/x-rxjs": "^6.3.1",
"@types/bn.js": "^4.11.6",
"bn.js": "^4.11.9"
},
"devDependencies": {
"@polkadot/keyring": "^6.2.1"
"@polkadot/keyring": "^6.3.1"
}
}
+144 -12
View File
@@ -15,13 +15,13 @@ import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
import type { EthereumAddress, StatementKind } from '@polkadot/types/interfaces/claims';
import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective';
import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus';
import type { AliveContractInfo, CodeHash, ContractCallRequest, ContractExecResult, ContractExecResultErr, ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractInfo, ContractStorageKey, DeletedContract, Gas, HostFnWeights, HostFnWeightsTo264, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
import type { AliveContractInfo, CodeHash, ContractCallRequest, ContractExecResult, ContractExecResultErr, ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractInfo, ContractInstantiateResult, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateReturnValue, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
import type { ContractConstructorSpec, ContractContractSpec, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpec, ContractEventSpec, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpec, ContractMessageSpec, ContractProject, ContractProjectContract, ContractProjectSource, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi';
import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan';
import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy';
import type { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections';
import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine';
import type { EthAccount, EthBlock, EthBloom, EthCallRequest, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionStatus, EthWork, EthereumAccountId, EthereumLookupSource, EthereumSignature } from '@polkadot/types/interfaces/eth';
import type { EthAccount, EthBlock, EthBloom, EthCallRequest, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumLookupSource, EthereumSignature } from '@polkadot/types/interfaces/eth';
import type { EvmAccount, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm';
import type { AnySignature, EcdsaSignature, Ed25519Signature, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics';
import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset';
@@ -30,31 +30,31 @@ import type { AuthorityIndex, AuthorityList, AuthorityWeight, EncodedFinalityPro
import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement } from '@polkadot/types/interfaces/identity';
import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline';
import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery';
import type { DoubleMapTypeLatest, DoubleMapTypeV10, DoubleMapTypeV11, DoubleMapTypeV12, DoubleMapTypeV9, ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV9, MapTypeLatest, MapTypeV10, MapTypeV11, MapTypeV12, MapTypeV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV9, ModuleConstantMetadataLatest, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV9, ModuleMetadataLatest, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV9, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV9, StorageMetadataLatest, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata';
import type { DoubleMapTypeLatest, DoubleMapTypeV10, DoubleMapTypeV11, DoubleMapTypeV12, DoubleMapTypeV13, DoubleMapTypeV9, ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV9, MapTypeLatest, MapTypeV10, MapTypeV11, MapTypeV12, MapTypeV13, MapTypeV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV9, ModuleConstantMetadataLatest, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataLatest, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, NMapTypeLatest, NMapTypeV13, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV9, StorageMetadataLatest, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata';
import type { MmrLeafProof } from '@polkadot/types/interfaces/mmr';
import type { StorageKind } from '@polkadot/types/interfaces/offchain';
import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences';
import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, QueuedParathread, RegisteredParachainInfo, RelayChainBlockNumber, RelayChainHash, Remark, Retriable, Scheduling, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, Statement, SubId, SystemInherentData, TransientValidationData, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersDataTuple, WinningData, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, Retriable, Scheduling, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, Statement, SubId, SystemInherentData, TransientValidationData, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersDataTuple, WinningData, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
import type { FeeDetails, InclusionFee, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
import type { Approvals } from '@polkadot/types/interfaces/poll';
import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy';
import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase';
import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery';
import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
import type { AccountId, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, Call, CallHash, CallHashOf, ChangesTrieConfiguration, CodecHash, Consensus, ConsensusEngineId, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H512, H64, Hash, Header, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, StorageData, StorageProof, TransactionPriority, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime';
import type { AccountId, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, StorageData, StorageProof, TransactionPriority, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime';
import type { SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiVariant } from '@polkadot/types/interfaces/scaleInfo';
import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler';
import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session';
import type { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society';
import type { ActiveEraInfo, CompactAssignments, CompactAssignmentsTo257, CompactScore, CompactScoreCompact, ElectionCompute, ElectionPhase, ElectionResult, ElectionScore, ElectionSize, ElectionStatus, EraIndex, EraPoints, EraRewardPoints, EraRewards, Exposure, ExtendedBalance, Forcing, IndividualExposure, KeyType, MomentOf, Nominations, NominatorIndex, NominatorIndexCompact, OffchainAccuracy, OffchainAccuracyCompact, PhragmenScore, Points, RawSolution, ReadySolution, RewardDestination, RewardPoint, RoundSnapshot, SeatHolder, SlashJournalEntry, SlashingSpans, SlashingSpansTo204, SolutionOrSnapshotSize, SolutionSupport, SolutionSupports, SpanIndex, SpanRecord, StakingLedger, StakingLedgerTo223, StakingLedgerTo240, UnappliedSlash, UnappliedSlashOther, UnlockChunk, ValidatorIndex, ValidatorIndexCompact, ValidatorPrefs, ValidatorPrefsTo145, ValidatorPrefsTo196, ValidatorPrefsWithBlocked, ValidatorPrefsWithCommission, VoteWeight, Voter } from '@polkadot/types/interfaces/staking';
import type { ApiId, KeyValueOption, ReadProof, RuntimeVersion, RuntimeVersionApi, StorageChangeSet } from '@polkadot/types/interfaces/state';
import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, ReadProof, RuntimeVersion, RuntimeVersionApi, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state';
import type { WeightToFeeCoefficient } from '@polkadot/types/interfaces/support';
import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TransactionValidityError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system';
import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system';
import type { Bounty, BountyIndex, BountyStatus, BountyStatusActive, BountyStatusCuratorProposed, BountyStatusPendingPayout, OpenTip, OpenTipFinderTo225, OpenTipTip, OpenTipTo225, TreasuryProposal } from '@polkadot/types/interfaces/treasury';
import type { Multiplier } from '@polkadot/types/interfaces/txpayment';
import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility';
import type { VestingInfo } from '@polkadot/types/interfaces/vesting';
import type { AccountId32Junction, AccountIndex64Junction, AccountKey20Junction, AssetInstance, DoubleEncodedCall, Junction, MultiAsset, MultiAssetAbstractFungible, MultiAssetAbstractNonFungible, MultiAssetConcreteFungible, MultiAssetConcreteNonFungible, MultiLocation, NetworkId, VersionedMultiAsset, VersionedMultiLocation, VersionedXcm, Xcm, XcmAssetEffects, XcmError, XcmHrmpChannelAccepted, XcmHrmpChannelClosing, XcmHrmpNewChannelOpenRequest, XcmOrder, XcmOrderBuyExecution, XcmOrderDepositAsset, XcmOrderDepositReserveAsset, XcmOrderExchangeAsset, XcmOrderInitiateReserveWithdraw, XcmOrderInitiateTeleport, XcmOrderQueryHolding, XcmOriginKind, XcmOutcome, XcmQueryResponse, XcmRelayedFrom, XcmReserveAssetDeposit, XcmResponse, XcmTeleportAsset, XcmTransact, XcmTransferAsset, XcmTransferReserveAsset, XcmWithdrawAsset } from '@polkadot/types/interfaces/xcm';
import type { AccountId32Junction, AccountIndex64Junction, AccountKey20Junction, AssetInstance, BodyId, BodyPart, BodyPartAtLeastProportion, BodyPartFraction, BodyPartMoreThanProportion, DoubleEncodedCall, InboundStatus, Junction, MultiAsset, MultiAssetAbstractFungible, MultiAssetAbstractNonFungible, MultiAssetConcreteFungible, MultiAssetConcreteNonFungible, MultiLocation, NetworkId, OutboundStatus, Outcome, PluralityJunction, QueueConfigData, VersionedMultiAsset, VersionedMultiLocation, VersionedXcm, Xcm, XcmAssetEffects, XcmError, XcmHrmpChannelAccepted, XcmHrmpChannelClosing, XcmHrmpNewChannelOpenRequest, XcmOrder, XcmOrderBuyExecution, XcmOrderDepositAsset, XcmOrderDepositReserveAsset, XcmOrderExchangeAsset, XcmOrderInitiateReserveWithdraw, XcmOrderInitiateTeleport, XcmOrderQueryHolding, XcmOriginKind, XcmQueryResponse, XcmRelayedFrom, XcmReserveAssetDeposit, XcmResponse, XcmTeleportAsset, XcmTransact, XcmTransferAsset, XcmTransferReserveAsset, XcmWithdrawAsset, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm';
declare module '@polkadot/types/types/registry' {
export interface InterfaceTypes {
@@ -73,7 +73,6 @@ declare module '@polkadot/types/types/registry' {
'Compact<BalanceOf>': Compact<BalanceOf>;
'Compact<BlockNumber>': Compact<BlockNumber>;
'Compact<BountyIndex>': Compact<BountyIndex>;
'Compact<ConsensusEngineId>': Compact<ConsensusEngineId>;
'Compact<ContractDiscriminant>': Compact<ContractDiscriminant>;
'Compact<CoreIndex>': Compact<CoreIndex>;
'Compact<EraIndex>': Compact<EraIndex>;
@@ -108,6 +107,7 @@ declare module '@polkadot/types/types/registry' {
'Compact<RefCountTo259>': Compact<RefCountTo259>;
'Compact<ReferendumIndex>': Compact<ReferendumIndex>;
'Compact<RegistrarIndex>': Compact<RegistrarIndex>;
'Compact<RelayBlockNumber>': Compact<RelayBlockNumber>;
'Compact<RelayChainBlockNumber>': Compact<RelayChainBlockNumber>;
'Compact<RewardPoint>': Compact<RewardPoint>;
'Compact<SchedulePriority>': Compact<SchedulePriority>;
@@ -225,7 +225,16 @@ declare module '@polkadot/types/types/registry' {
'Option<BlockHash>': Option<BlockHash>;
'Option<BlockLength>': Option<BlockLength>;
'Option<BlockNumber>': Option<BlockNumber>;
'Option<BlockTrace>': Option<BlockTrace>;
'Option<BlockTraceEvent>': Option<BlockTraceEvent>;
'Option<BlockTraceEventData>': Option<BlockTraceEventData>;
'Option<BlockTraceSpan>': Option<BlockTraceSpan>;
'Option<BlockWeights>': Option<BlockWeights>;
'Option<BodyId>': Option<BodyId>;
'Option<BodyPart>': Option<BodyPart>;
'Option<BodyPartAtLeastProportion>': Option<BodyPartAtLeastProportion>;
'Option<BodyPartFraction>': Option<BodyPartFraction>;
'Option<BodyPartMoreThanProportion>': Option<BodyPartMoreThanProportion>;
'Option<bool>': Option<bool>;
'Option<Bool>': Option<Bool>;
'Option<Bounty>': Option<Bounty>;
@@ -248,6 +257,7 @@ declare module '@polkadot/types/types/registry' {
'Option<ChainProperties>': Option<ChainProperties>;
'Option<ChainType>': Option<ChainType>;
'Option<ChangesTrieConfiguration>': Option<ChangesTrieConfiguration>;
'Option<ChangesTrieSignal>': Option<ChangesTrieSignal>;
'Option<CodecHash>': Option<CodecHash>;
'Option<CodeHash>': Option<CodeHash>;
'Option<CollatorId>': Option<CollatorId>;
@@ -279,6 +289,7 @@ declare module '@polkadot/types/types/registry' {
'Option<ContractExecResultTo255>': Option<ContractExecResultTo255>;
'Option<ContractExecResultTo260>': Option<ContractExecResultTo260>;
'Option<ContractInfo>': Option<ContractInfo>;
'Option<ContractInstantiateResult>': Option<ContractInstantiateResult>;
'Option<ContractLayoutArray>': Option<ContractLayoutArray>;
'Option<ContractLayoutCell>': Option<ContractLayoutCell>;
'Option<ContractLayoutEnum>': Option<ContractLayoutEnum>;
@@ -328,6 +339,7 @@ declare module '@polkadot/types/types/registry' {
'Option<DoubleMapTypeV10>': Option<DoubleMapTypeV10>;
'Option<DoubleMapTypeV11>': Option<DoubleMapTypeV11>;
'Option<DoubleMapTypeV12>': Option<DoubleMapTypeV12>;
'Option<DoubleMapTypeV13>': Option<DoubleMapTypeV13>;
'Option<DoubleMapTypeV9>': Option<DoubleMapTypeV9>;
'Option<DoubleVoteReport>': Option<DoubleVoteReport>;
'Option<DownwardMessage>': Option<DownwardMessage>;
@@ -350,6 +362,7 @@ declare module '@polkadot/types/types/registry' {
'Option<ErrorMetadataV10>': Option<ErrorMetadataV10>;
'Option<ErrorMetadataV11>': Option<ErrorMetadataV11>;
'Option<ErrorMetadataV12>': Option<ErrorMetadataV12>;
'Option<ErrorMetadataV13>': Option<ErrorMetadataV13>;
'Option<ErrorMetadataV9>': Option<ErrorMetadataV9>;
'Option<EthAccount>': Option<EthAccount>;
'Option<EthBlock>': Option<EthBlock>;
@@ -380,6 +393,7 @@ declare module '@polkadot/types/types/registry' {
'Option<EthTransactionAction>': Option<EthTransactionAction>;
'Option<EthTransactionCondition>': Option<EthTransactionCondition>;
'Option<EthTransactionRequest>': Option<EthTransactionRequest>;
'Option<EthTransactionSignature>': Option<EthTransactionSignature>;
'Option<EthTransactionStatus>': Option<EthTransactionStatus>;
'Option<EthWork>': Option<EthWork>;
'Option<Event>': Option<Event>;
@@ -389,11 +403,13 @@ declare module '@polkadot/types/types/registry' {
'Option<EventMetadataV10>': Option<EventMetadataV10>;
'Option<EventMetadataV11>': Option<EventMetadataV11>;
'Option<EventMetadataV12>': Option<EventMetadataV12>;
'Option<EventMetadataV13>': Option<EventMetadataV13>;
'Option<EventMetadataV9>': Option<EventMetadataV9>;
'Option<EventRecord>': Option<EventRecord>;
'Option<EvmAccount>': Option<EvmAccount>;
'Option<EvmLog>': Option<EvmLog>;
'Option<EvmVicinity>': Option<EvmVicinity>;
'Option<ExecReturnValue>': Option<ExecReturnValue>;
'Option<ExitError>': Option<ExitError>;
'Option<ExitFatal>': Option<ExitFatal>;
'Option<ExitReason>': Option<ExitReason>;
@@ -407,6 +423,7 @@ declare module '@polkadot/types/types/registry' {
'Option<ExtrinsicMetadataLatest>': Option<ExtrinsicMetadataLatest>;
'Option<ExtrinsicMetadataV11>': Option<ExtrinsicMetadataV11>;
'Option<ExtrinsicMetadataV12>': Option<ExtrinsicMetadataV12>;
'Option<ExtrinsicMetadataV13>': Option<ExtrinsicMetadataV13>;
'Option<ExtrinsicOrHash>': Option<ExtrinsicOrHash>;
'Option<ExtrinsicPayload>': Option<ExtrinsicPayload>;
'Option<ExtrinsicPayloadUnknown>': Option<ExtrinsicPayloadUnknown>;
@@ -430,11 +447,13 @@ declare module '@polkadot/types/types/registry' {
'Option<FunctionArgumentMetadataV10>': Option<FunctionArgumentMetadataV10>;
'Option<FunctionArgumentMetadataV11>': Option<FunctionArgumentMetadataV11>;
'Option<FunctionArgumentMetadataV12>': Option<FunctionArgumentMetadataV12>;
'Option<FunctionArgumentMetadataV13>': Option<FunctionArgumentMetadataV13>;
'Option<FunctionArgumentMetadataV9>': Option<FunctionArgumentMetadataV9>;
'Option<FunctionMetadataLatest>': Option<FunctionMetadataLatest>;
'Option<FunctionMetadataV10>': Option<FunctionMetadataV10>;
'Option<FunctionMetadataV11>': Option<FunctionMetadataV11>;
'Option<FunctionMetadataV12>': Option<FunctionMetadataV12>;
'Option<FunctionMetadataV13>': Option<FunctionMetadataV13>;
'Option<FunctionMetadataV9>': Option<FunctionMetadataV9>;
'Option<FundIndex>': Option<FundIndex>;
'Option<FundInfo>': Option<FundInfo>;
@@ -452,6 +471,7 @@ declare module '@polkadot/types/types/registry' {
'Option<H160>': Option<H160>;
'Option<H2048>': Option<H2048>;
'Option<H256>': Option<H256>;
'Option<H32>': Option<H32>;
'Option<H512>': Option<H512>;
'Option<H64>': Option<H64>;
'Option<Hash>': Option<Hash>;
@@ -489,6 +509,7 @@ declare module '@polkadot/types/types/registry' {
'Option<InboundDownwardMessage>': Option<InboundDownwardMessage>;
'Option<InboundHrmpMessage>': Option<InboundHrmpMessage>;
'Option<InboundHrmpMessages>': Option<InboundHrmpMessages>;
'Option<InboundStatus>': Option<InboundStatus>;
'Option<IncludedBlocks>': Option<IncludedBlocks>;
'Option<InclusionFee>': Option<InclusionFee>;
'Option<IncomingParachain>': Option<IncomingParachain>;
@@ -497,6 +518,8 @@ declare module '@polkadot/types/types/registry' {
'Option<Index>': Option<Index>;
'Option<IndicesLookupSource>': Option<IndicesLookupSource>;
'Option<IndividualExposure>': Option<IndividualExposure>;
'Option<InstantiateRequest>': Option<InstantiateRequest>;
'Option<InstantiateReturnValue>': Option<InstantiateReturnValue>;
'Option<InstructionWeights>': Option<InstructionWeights>;
'Option<InvalidDisputeStatementKind>': Option<InvalidDisputeStatementKind>;
'Option<InvalidTransaction>': Option<InvalidTransaction>;
@@ -528,6 +551,7 @@ declare module '@polkadot/types/types/registry' {
'Option<MapTypeV10>': Option<MapTypeV10>;
'Option<MapTypeV11>': Option<MapTypeV11>;
'Option<MapTypeV12>': Option<MapTypeV12>;
'Option<MapTypeV13>': Option<MapTypeV13>;
'Option<MapTypeV9>': Option<MapTypeV9>;
'Option<MaybeRandomness>': Option<MaybeRandomness>;
'Option<MaybeVrf>': Option<MaybeVrf>;
@@ -542,6 +566,7 @@ declare module '@polkadot/types/types/registry' {
'Option<MetadataV10>': Option<MetadataV10>;
'Option<MetadataV11>': Option<MetadataV11>;
'Option<MetadataV12>': Option<MetadataV12>;
'Option<MetadataV13>': Option<MetadataV13>;
'Option<MetadataV9>': Option<MetadataV9>;
'Option<MmrLeafProof>': Option<MmrLeafProof>;
'Option<MmrRootHash>': Option<MmrRootHash>;
@@ -549,12 +574,14 @@ declare module '@polkadot/types/types/registry' {
'Option<ModuleConstantMetadataV10>': Option<ModuleConstantMetadataV10>;
'Option<ModuleConstantMetadataV11>': Option<ModuleConstantMetadataV11>;
'Option<ModuleConstantMetadataV12>': Option<ModuleConstantMetadataV12>;
'Option<ModuleConstantMetadataV13>': Option<ModuleConstantMetadataV13>;
'Option<ModuleConstantMetadataV9>': Option<ModuleConstantMetadataV9>;
'Option<ModuleId>': Option<ModuleId>;
'Option<ModuleMetadataLatest>': Option<ModuleMetadataLatest>;
'Option<ModuleMetadataV10>': Option<ModuleMetadataV10>;
'Option<ModuleMetadataV11>': Option<ModuleMetadataV11>;
'Option<ModuleMetadataV12>': Option<ModuleMetadataV12>;
'Option<ModuleMetadataV13>': Option<ModuleMetadataV13>;
'Option<ModuleMetadataV9>': Option<ModuleMetadataV9>;
'Option<Moment>': Option<Moment>;
'Option<MomentOf>': Option<MomentOf>;
@@ -580,6 +607,8 @@ declare module '@polkadot/types/types/registry' {
'Option<NextAuthority>': Option<NextAuthority>;
'Option<NextConfigDescriptor>': Option<NextConfigDescriptor>;
'Option<NextConfigDescriptorV1>': Option<NextConfigDescriptorV1>;
'Option<NMapTypeLatest>': Option<NMapTypeLatest>;
'Option<NMapTypeV13>': Option<NMapTypeV13>;
'Option<NodeRole>': Option<NodeRole>;
'Option<Nominations>': Option<Nominations>;
'Option<NominatorIndex>': Option<NominatorIndex>;
@@ -602,6 +631,8 @@ declare module '@polkadot/types/types/registry' {
'Option<Origin>': Option<Origin>;
'Option<OriginCaller>': Option<OriginCaller>;
'Option<OutboundHrmpMessage>': Option<OutboundHrmpMessage>;
'Option<OutboundStatus>': Option<OutboundStatus>;
'Option<Outcome>': Option<Outcome>;
'Option<Owner>': Option<Owner>;
'Option<PalletId>': Option<PalletId>;
'Option<PalletsOrigin>': Option<PalletsOrigin>;
@@ -645,6 +676,7 @@ declare module '@polkadot/types/types/registry' {
'Option<PhantomData>': Option<PhantomData>;
'Option<Phase>': Option<Phase>;
'Option<PhragmenScore>': Option<PhragmenScore>;
'Option<PluralityJunction>': Option<PluralityJunction>;
'Option<Points>': Option<Points>;
'Option<Precommits>': Option<Precommits>;
'Option<PrefabWasmModule>': Option<PrefabWasmModule>;
@@ -662,6 +694,7 @@ declare module '@polkadot/types/types/registry' {
'Option<ProxyDefinition>': Option<ProxyDefinition>;
'Option<ProxyState>': Option<ProxyState>;
'Option<ProxyType>': Option<ProxyType>;
'Option<QueueConfigData>': Option<QueueConfigData>;
'Option<QueuedParathread>': Option<QueuedParathread>;
'Option<Randomness>': Option<Randomness>;
'Option<Raw>': Option<Raw>;
@@ -693,11 +726,14 @@ declare module '@polkadot/types/types/registry' {
'Option<RegistrarInfo>': Option<RegistrarInfo>;
'Option<Registration>': Option<Registration>;
'Option<RegistrationJudgement>': Option<RegistrationJudgement>;
'Option<RelayBlockNumber>': Option<RelayBlockNumber>;
'Option<RelayChainBlockNumber>': Option<RelayChainBlockNumber>;
'Option<RelayChainHash>': Option<RelayChainHash>;
'Option<RelayHash>': Option<RelayHash>;
'Option<Releases>': Option<Releases>;
'Option<Remark>': Option<Remark>;
'Option<Renouncing>': Option<Renouncing>;
'Option<RentProjection>': Option<RentProjection>;
'Option<ReportedRoundStates>': Option<ReportedRoundStates>;
'Option<Reporter>': Option<Reporter>;
'Option<ReportIdOf>': Option<ReportIdOf>;
@@ -790,21 +826,25 @@ declare module '@polkadot/types/types/registry' {
'Option<StorageEntryMetadataV10>': Option<StorageEntryMetadataV10>;
'Option<StorageEntryMetadataV11>': Option<StorageEntryMetadataV11>;
'Option<StorageEntryMetadataV12>': Option<StorageEntryMetadataV12>;
'Option<StorageEntryMetadataV13>': Option<StorageEntryMetadataV13>;
'Option<StorageEntryMetadataV9>': Option<StorageEntryMetadataV9>;
'Option<StorageEntryModifierLatest>': Option<StorageEntryModifierLatest>;
'Option<StorageEntryModifierV10>': Option<StorageEntryModifierV10>;
'Option<StorageEntryModifierV11>': Option<StorageEntryModifierV11>;
'Option<StorageEntryModifierV12>': Option<StorageEntryModifierV12>;
'Option<StorageEntryModifierV13>': Option<StorageEntryModifierV13>;
'Option<StorageEntryModifierV9>': Option<StorageEntryModifierV9>;
'Option<StorageEntryTypeLatest>': Option<StorageEntryTypeLatest>;
'Option<StorageEntryTypeV10>': Option<StorageEntryTypeV10>;
'Option<StorageEntryTypeV11>': Option<StorageEntryTypeV11>;
'Option<StorageEntryTypeV12>': Option<StorageEntryTypeV12>;
'Option<StorageEntryTypeV13>': Option<StorageEntryTypeV13>;
'Option<StorageEntryTypeV9>': Option<StorageEntryTypeV9>;
'Option<StorageHasher>': Option<StorageHasher>;
'Option<StorageHasherV10>': Option<StorageHasherV10>;
'Option<StorageHasherV11>': Option<StorageHasherV11>;
'Option<StorageHasherV12>': Option<StorageHasherV12>;
'Option<StorageHasherV13>': Option<StorageHasherV13>;
'Option<StorageHasherV9>': Option<StorageHasherV9>;
'Option<StorageKey>': Option<StorageKey>;
'Option<StorageKind>': Option<StorageKind>;
@@ -812,6 +852,7 @@ declare module '@polkadot/types/types/registry' {
'Option<StorageMetadataV10>': Option<StorageMetadataV10>;
'Option<StorageMetadataV11>': Option<StorageMetadataV11>;
'Option<StorageMetadataV12>': Option<StorageMetadataV12>;
'Option<StorageMetadataV13>': Option<StorageMetadataV13>;
'Option<StorageMetadataV9>': Option<StorageMetadataV9>;
'Option<StorageProof>': Option<StorageProof>;
'Option<StoredPendingChange>': Option<StoredPendingChange>;
@@ -827,7 +868,10 @@ declare module '@polkadot/types/types/registry' {
'Option<TAssetDepositBalance>': Option<TAssetDepositBalance>;
'Option<Text>': Option<Text>;
'Option<Timepoint>': Option<Timepoint>;
'Option<TokenError>': Option<TokenError>;
'Option<TombstoneContractInfo>': Option<TombstoneContractInfo>;
'Option<TraceBlockResponse>': Option<TraceBlockResponse>;
'Option<TraceError>': Option<TraceError>;
'Option<TransactionPriority>': Option<TransactionPriority>;
'Option<TransactionValidityError>': Option<TransactionValidityError>;
'Option<TransientValidationData>': Option<TransientValidationData>;
@@ -920,7 +964,7 @@ declare module '@polkadot/types/types/registry' {
'Option<XcmOrderInitiateTeleport>': Option<XcmOrderInitiateTeleport>;
'Option<XcmOrderQueryHolding>': Option<XcmOrderQueryHolding>;
'Option<XcmOriginKind>': Option<XcmOriginKind>;
'Option<XcmOutcome>': Option<XcmOutcome>;
'Option<XcmpMessageFormat>': Option<XcmpMessageFormat>;
'Option<XcmQueryResponse>': Option<XcmQueryResponse>;
'Option<XcmRelayedFrom>': Option<XcmRelayedFrom>;
'Option<XcmReserveAssetDeposit>': Option<XcmReserveAssetDeposit>;
@@ -1010,7 +1054,16 @@ declare module '@polkadot/types/types/registry' {
'Vec<BlockHash>': Vec<BlockHash>;
'Vec<BlockLength>': Vec<BlockLength>;
'Vec<BlockNumber>': Vec<BlockNumber>;
'Vec<BlockTrace>': Vec<BlockTrace>;
'Vec<BlockTraceEvent>': Vec<BlockTraceEvent>;
'Vec<BlockTraceEventData>': Vec<BlockTraceEventData>;
'Vec<BlockTraceSpan>': Vec<BlockTraceSpan>;
'Vec<BlockWeights>': Vec<BlockWeights>;
'Vec<BodyId>': Vec<BodyId>;
'Vec<BodyPart>': Vec<BodyPart>;
'Vec<BodyPartAtLeastProportion>': Vec<BodyPartAtLeastProportion>;
'Vec<BodyPartFraction>': Vec<BodyPartFraction>;
'Vec<BodyPartMoreThanProportion>': Vec<BodyPartMoreThanProportion>;
'Vec<bool>': Vec<bool>;
'Vec<Bool>': Vec<Bool>;
'Vec<Bounty>': Vec<Bounty>;
@@ -1033,6 +1086,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<ChainProperties>': Vec<ChainProperties>;
'Vec<ChainType>': Vec<ChainType>;
'Vec<ChangesTrieConfiguration>': Vec<ChangesTrieConfiguration>;
'Vec<ChangesTrieSignal>': Vec<ChangesTrieSignal>;
'Vec<CodecHash>': Vec<CodecHash>;
'Vec<CodeHash>': Vec<CodeHash>;
'Vec<CollatorId>': Vec<CollatorId>;
@@ -1064,6 +1118,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<ContractExecResultTo255>': Vec<ContractExecResultTo255>;
'Vec<ContractExecResultTo260>': Vec<ContractExecResultTo260>;
'Vec<ContractInfo>': Vec<ContractInfo>;
'Vec<ContractInstantiateResult>': Vec<ContractInstantiateResult>;
'Vec<ContractLayoutArray>': Vec<ContractLayoutArray>;
'Vec<ContractLayoutCell>': Vec<ContractLayoutCell>;
'Vec<ContractLayoutEnum>': Vec<ContractLayoutEnum>;
@@ -1113,6 +1168,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<DoubleMapTypeV10>': Vec<DoubleMapTypeV10>;
'Vec<DoubleMapTypeV11>': Vec<DoubleMapTypeV11>;
'Vec<DoubleMapTypeV12>': Vec<DoubleMapTypeV12>;
'Vec<DoubleMapTypeV13>': Vec<DoubleMapTypeV13>;
'Vec<DoubleMapTypeV9>': Vec<DoubleMapTypeV9>;
'Vec<DoubleVoteReport>': Vec<DoubleVoteReport>;
'Vec<DownwardMessage>': Vec<DownwardMessage>;
@@ -1135,6 +1191,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<ErrorMetadataV10>': Vec<ErrorMetadataV10>;
'Vec<ErrorMetadataV11>': Vec<ErrorMetadataV11>;
'Vec<ErrorMetadataV12>': Vec<ErrorMetadataV12>;
'Vec<ErrorMetadataV13>': Vec<ErrorMetadataV13>;
'Vec<ErrorMetadataV9>': Vec<ErrorMetadataV9>;
'Vec<EthAccount>': Vec<EthAccount>;
'Vec<EthBlock>': Vec<EthBlock>;
@@ -1165,6 +1222,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<EthTransactionAction>': Vec<EthTransactionAction>;
'Vec<EthTransactionCondition>': Vec<EthTransactionCondition>;
'Vec<EthTransactionRequest>': Vec<EthTransactionRequest>;
'Vec<EthTransactionSignature>': Vec<EthTransactionSignature>;
'Vec<EthTransactionStatus>': Vec<EthTransactionStatus>;
'Vec<EthWork>': Vec<EthWork>;
'Vec<Event>': Vec<Event>;
@@ -1174,11 +1232,13 @@ declare module '@polkadot/types/types/registry' {
'Vec<EventMetadataV10>': Vec<EventMetadataV10>;
'Vec<EventMetadataV11>': Vec<EventMetadataV11>;
'Vec<EventMetadataV12>': Vec<EventMetadataV12>;
'Vec<EventMetadataV13>': Vec<EventMetadataV13>;
'Vec<EventMetadataV9>': Vec<EventMetadataV9>;
'Vec<EventRecord>': Vec<EventRecord>;
'Vec<EvmAccount>': Vec<EvmAccount>;
'Vec<EvmLog>': Vec<EvmLog>;
'Vec<EvmVicinity>': Vec<EvmVicinity>;
'Vec<ExecReturnValue>': Vec<ExecReturnValue>;
'Vec<ExitError>': Vec<ExitError>;
'Vec<ExitFatal>': Vec<ExitFatal>;
'Vec<ExitReason>': Vec<ExitReason>;
@@ -1192,6 +1252,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<ExtrinsicMetadataLatest>': Vec<ExtrinsicMetadataLatest>;
'Vec<ExtrinsicMetadataV11>': Vec<ExtrinsicMetadataV11>;
'Vec<ExtrinsicMetadataV12>': Vec<ExtrinsicMetadataV12>;
'Vec<ExtrinsicMetadataV13>': Vec<ExtrinsicMetadataV13>;
'Vec<ExtrinsicOrHash>': Vec<ExtrinsicOrHash>;
'Vec<ExtrinsicPayload>': Vec<ExtrinsicPayload>;
'Vec<ExtrinsicPayloadUnknown>': Vec<ExtrinsicPayloadUnknown>;
@@ -1215,11 +1276,13 @@ declare module '@polkadot/types/types/registry' {
'Vec<FunctionArgumentMetadataV10>': Vec<FunctionArgumentMetadataV10>;
'Vec<FunctionArgumentMetadataV11>': Vec<FunctionArgumentMetadataV11>;
'Vec<FunctionArgumentMetadataV12>': Vec<FunctionArgumentMetadataV12>;
'Vec<FunctionArgumentMetadataV13>': Vec<FunctionArgumentMetadataV13>;
'Vec<FunctionArgumentMetadataV9>': Vec<FunctionArgumentMetadataV9>;
'Vec<FunctionMetadataLatest>': Vec<FunctionMetadataLatest>;
'Vec<FunctionMetadataV10>': Vec<FunctionMetadataV10>;
'Vec<FunctionMetadataV11>': Vec<FunctionMetadataV11>;
'Vec<FunctionMetadataV12>': Vec<FunctionMetadataV12>;
'Vec<FunctionMetadataV13>': Vec<FunctionMetadataV13>;
'Vec<FunctionMetadataV9>': Vec<FunctionMetadataV9>;
'Vec<FundIndex>': Vec<FundIndex>;
'Vec<FundInfo>': Vec<FundInfo>;
@@ -1237,6 +1300,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<H160>': Vec<H160>;
'Vec<H2048>': Vec<H2048>;
'Vec<H256>': Vec<H256>;
'Vec<H32>': Vec<H32>;
'Vec<H512>': Vec<H512>;
'Vec<H64>': Vec<H64>;
'Vec<Hash>': Vec<Hash>;
@@ -1274,6 +1338,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<InboundDownwardMessage>': Vec<InboundDownwardMessage>;
'Vec<InboundHrmpMessage>': Vec<InboundHrmpMessage>;
'Vec<InboundHrmpMessages>': Vec<InboundHrmpMessages>;
'Vec<InboundStatus>': Vec<InboundStatus>;
'Vec<IncludedBlocks>': Vec<IncludedBlocks>;
'Vec<InclusionFee>': Vec<InclusionFee>;
'Vec<IncomingParachain>': Vec<IncomingParachain>;
@@ -1282,6 +1347,8 @@ declare module '@polkadot/types/types/registry' {
'Vec<Index>': Vec<Index>;
'Vec<IndicesLookupSource>': Vec<IndicesLookupSource>;
'Vec<IndividualExposure>': Vec<IndividualExposure>;
'Vec<InstantiateRequest>': Vec<InstantiateRequest>;
'Vec<InstantiateReturnValue>': Vec<InstantiateReturnValue>;
'Vec<InstructionWeights>': Vec<InstructionWeights>;
'Vec<InvalidDisputeStatementKind>': Vec<InvalidDisputeStatementKind>;
'Vec<InvalidTransaction>': Vec<InvalidTransaction>;
@@ -1313,6 +1380,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<MapTypeV10>': Vec<MapTypeV10>;
'Vec<MapTypeV11>': Vec<MapTypeV11>;
'Vec<MapTypeV12>': Vec<MapTypeV12>;
'Vec<MapTypeV13>': Vec<MapTypeV13>;
'Vec<MapTypeV9>': Vec<MapTypeV9>;
'Vec<MaybeRandomness>': Vec<MaybeRandomness>;
'Vec<MaybeVrf>': Vec<MaybeVrf>;
@@ -1327,6 +1395,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<MetadataV10>': Vec<MetadataV10>;
'Vec<MetadataV11>': Vec<MetadataV11>;
'Vec<MetadataV12>': Vec<MetadataV12>;
'Vec<MetadataV13>': Vec<MetadataV13>;
'Vec<MetadataV9>': Vec<MetadataV9>;
'Vec<MmrLeafProof>': Vec<MmrLeafProof>;
'Vec<MmrRootHash>': Vec<MmrRootHash>;
@@ -1334,12 +1403,14 @@ declare module '@polkadot/types/types/registry' {
'Vec<ModuleConstantMetadataV10>': Vec<ModuleConstantMetadataV10>;
'Vec<ModuleConstantMetadataV11>': Vec<ModuleConstantMetadataV11>;
'Vec<ModuleConstantMetadataV12>': Vec<ModuleConstantMetadataV12>;
'Vec<ModuleConstantMetadataV13>': Vec<ModuleConstantMetadataV13>;
'Vec<ModuleConstantMetadataV9>': Vec<ModuleConstantMetadataV9>;
'Vec<ModuleId>': Vec<ModuleId>;
'Vec<ModuleMetadataLatest>': Vec<ModuleMetadataLatest>;
'Vec<ModuleMetadataV10>': Vec<ModuleMetadataV10>;
'Vec<ModuleMetadataV11>': Vec<ModuleMetadataV11>;
'Vec<ModuleMetadataV12>': Vec<ModuleMetadataV12>;
'Vec<ModuleMetadataV13>': Vec<ModuleMetadataV13>;
'Vec<ModuleMetadataV9>': Vec<ModuleMetadataV9>;
'Vec<Moment>': Vec<Moment>;
'Vec<MomentOf>': Vec<MomentOf>;
@@ -1365,6 +1436,8 @@ declare module '@polkadot/types/types/registry' {
'Vec<NextAuthority>': Vec<NextAuthority>;
'Vec<NextConfigDescriptor>': Vec<NextConfigDescriptor>;
'Vec<NextConfigDescriptorV1>': Vec<NextConfigDescriptorV1>;
'Vec<NMapTypeLatest>': Vec<NMapTypeLatest>;
'Vec<NMapTypeV13>': Vec<NMapTypeV13>;
'Vec<NodeRole>': Vec<NodeRole>;
'Vec<Nominations>': Vec<Nominations>;
'Vec<NominatorIndex>': Vec<NominatorIndex>;
@@ -1387,6 +1460,8 @@ declare module '@polkadot/types/types/registry' {
'Vec<Origin>': Vec<Origin>;
'Vec<OriginCaller>': Vec<OriginCaller>;
'Vec<OutboundHrmpMessage>': Vec<OutboundHrmpMessage>;
'Vec<OutboundStatus>': Vec<OutboundStatus>;
'Vec<Outcome>': Vec<Outcome>;
'Vec<Owner>': Vec<Owner>;
'Vec<PalletId>': Vec<PalletId>;
'Vec<PalletsOrigin>': Vec<PalletsOrigin>;
@@ -1430,6 +1505,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<PhantomData>': Vec<PhantomData>;
'Vec<Phase>': Vec<Phase>;
'Vec<PhragmenScore>': Vec<PhragmenScore>;
'Vec<PluralityJunction>': Vec<PluralityJunction>;
'Vec<Points>': Vec<Points>;
'Vec<Precommits>': Vec<Precommits>;
'Vec<PrefabWasmModule>': Vec<PrefabWasmModule>;
@@ -1447,6 +1523,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<ProxyDefinition>': Vec<ProxyDefinition>;
'Vec<ProxyState>': Vec<ProxyState>;
'Vec<ProxyType>': Vec<ProxyType>;
'Vec<QueueConfigData>': Vec<QueueConfigData>;
'Vec<QueuedParathread>': Vec<QueuedParathread>;
'Vec<Randomness>': Vec<Randomness>;
'Vec<Raw>': Vec<Raw>;
@@ -1478,11 +1555,14 @@ declare module '@polkadot/types/types/registry' {
'Vec<RegistrarInfo>': Vec<RegistrarInfo>;
'Vec<Registration>': Vec<Registration>;
'Vec<RegistrationJudgement>': Vec<RegistrationJudgement>;
'Vec<RelayBlockNumber>': Vec<RelayBlockNumber>;
'Vec<RelayChainBlockNumber>': Vec<RelayChainBlockNumber>;
'Vec<RelayChainHash>': Vec<RelayChainHash>;
'Vec<RelayHash>': Vec<RelayHash>;
'Vec<Releases>': Vec<Releases>;
'Vec<Remark>': Vec<Remark>;
'Vec<Renouncing>': Vec<Renouncing>;
'Vec<RentProjection>': Vec<RentProjection>;
'Vec<ReportedRoundStates>': Vec<ReportedRoundStates>;
'Vec<Reporter>': Vec<Reporter>;
'Vec<ReportIdOf>': Vec<ReportIdOf>;
@@ -1575,21 +1655,25 @@ declare module '@polkadot/types/types/registry' {
'Vec<StorageEntryMetadataV10>': Vec<StorageEntryMetadataV10>;
'Vec<StorageEntryMetadataV11>': Vec<StorageEntryMetadataV11>;
'Vec<StorageEntryMetadataV12>': Vec<StorageEntryMetadataV12>;
'Vec<StorageEntryMetadataV13>': Vec<StorageEntryMetadataV13>;
'Vec<StorageEntryMetadataV9>': Vec<StorageEntryMetadataV9>;
'Vec<StorageEntryModifierLatest>': Vec<StorageEntryModifierLatest>;
'Vec<StorageEntryModifierV10>': Vec<StorageEntryModifierV10>;
'Vec<StorageEntryModifierV11>': Vec<StorageEntryModifierV11>;
'Vec<StorageEntryModifierV12>': Vec<StorageEntryModifierV12>;
'Vec<StorageEntryModifierV13>': Vec<StorageEntryModifierV13>;
'Vec<StorageEntryModifierV9>': Vec<StorageEntryModifierV9>;
'Vec<StorageEntryTypeLatest>': Vec<StorageEntryTypeLatest>;
'Vec<StorageEntryTypeV10>': Vec<StorageEntryTypeV10>;
'Vec<StorageEntryTypeV11>': Vec<StorageEntryTypeV11>;
'Vec<StorageEntryTypeV12>': Vec<StorageEntryTypeV12>;
'Vec<StorageEntryTypeV13>': Vec<StorageEntryTypeV13>;
'Vec<StorageEntryTypeV9>': Vec<StorageEntryTypeV9>;
'Vec<StorageHasher>': Vec<StorageHasher>;
'Vec<StorageHasherV10>': Vec<StorageHasherV10>;
'Vec<StorageHasherV11>': Vec<StorageHasherV11>;
'Vec<StorageHasherV12>': Vec<StorageHasherV12>;
'Vec<StorageHasherV13>': Vec<StorageHasherV13>;
'Vec<StorageHasherV9>': Vec<StorageHasherV9>;
'Vec<StorageKey>': Vec<StorageKey>;
'Vec<StorageKind>': Vec<StorageKind>;
@@ -1597,6 +1681,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<StorageMetadataV10>': Vec<StorageMetadataV10>;
'Vec<StorageMetadataV11>': Vec<StorageMetadataV11>;
'Vec<StorageMetadataV12>': Vec<StorageMetadataV12>;
'Vec<StorageMetadataV13>': Vec<StorageMetadataV13>;
'Vec<StorageMetadataV9>': Vec<StorageMetadataV9>;
'Vec<StorageProof>': Vec<StorageProof>;
'Vec<StoredPendingChange>': Vec<StoredPendingChange>;
@@ -1612,7 +1697,10 @@ declare module '@polkadot/types/types/registry' {
'Vec<TAssetDepositBalance>': Vec<TAssetDepositBalance>;
'Vec<Text>': Vec<Text>;
'Vec<Timepoint>': Vec<Timepoint>;
'Vec<TokenError>': Vec<TokenError>;
'Vec<TombstoneContractInfo>': Vec<TombstoneContractInfo>;
'Vec<TraceBlockResponse>': Vec<TraceBlockResponse>;
'Vec<TraceError>': Vec<TraceError>;
'Vec<TransactionPriority>': Vec<TransactionPriority>;
'Vec<TransactionValidityError>': Vec<TransactionValidityError>;
'Vec<TransientValidationData>': Vec<TransientValidationData>;
@@ -1705,7 +1793,7 @@ declare module '@polkadot/types/types/registry' {
'Vec<XcmOrderInitiateTeleport>': Vec<XcmOrderInitiateTeleport>;
'Vec<XcmOrderQueryHolding>': Vec<XcmOrderQueryHolding>;
'Vec<XcmOriginKind>': Vec<XcmOriginKind>;
'Vec<XcmOutcome>': Vec<XcmOutcome>;
'Vec<XcmpMessageFormat>': Vec<XcmpMessageFormat>;
'Vec<XcmQueryResponse>': Vec<XcmQueryResponse>;
'Vec<XcmRelayedFrom>': Vec<XcmRelayedFrom>;
'Vec<XcmReserveAssetDeposit>': Vec<XcmReserveAssetDeposit>;
@@ -1795,7 +1883,16 @@ declare module '@polkadot/types/types/registry' {
BlockHash: BlockHash;
BlockLength: BlockLength;
BlockNumber: BlockNumber;
BlockTrace: BlockTrace;
BlockTraceEvent: BlockTraceEvent;
BlockTraceEventData: BlockTraceEventData;
BlockTraceSpan: BlockTraceSpan;
BlockWeights: BlockWeights;
BodyId: BodyId;
BodyPart: BodyPart;
BodyPartAtLeastProportion: BodyPartAtLeastProportion;
BodyPartFraction: BodyPartFraction;
BodyPartMoreThanProportion: BodyPartMoreThanProportion;
bool: bool;
Bool: Bool;
Bounty: Bounty;
@@ -1818,6 +1915,7 @@ declare module '@polkadot/types/types/registry' {
ChainProperties: ChainProperties;
ChainType: ChainType;
ChangesTrieConfiguration: ChangesTrieConfiguration;
ChangesTrieSignal: ChangesTrieSignal;
CodecHash: CodecHash;
CodeHash: CodeHash;
CollatorId: CollatorId;
@@ -1849,6 +1947,7 @@ declare module '@polkadot/types/types/registry' {
ContractExecResultTo255: ContractExecResultTo255;
ContractExecResultTo260: ContractExecResultTo260;
ContractInfo: ContractInfo;
ContractInstantiateResult: ContractInstantiateResult;
ContractLayoutArray: ContractLayoutArray;
ContractLayoutCell: ContractLayoutCell;
ContractLayoutEnum: ContractLayoutEnum;
@@ -1898,6 +1997,7 @@ declare module '@polkadot/types/types/registry' {
DoubleMapTypeV10: DoubleMapTypeV10;
DoubleMapTypeV11: DoubleMapTypeV11;
DoubleMapTypeV12: DoubleMapTypeV12;
DoubleMapTypeV13: DoubleMapTypeV13;
DoubleMapTypeV9: DoubleMapTypeV9;
DoubleVoteReport: DoubleVoteReport;
DownwardMessage: DownwardMessage;
@@ -1920,6 +2020,7 @@ declare module '@polkadot/types/types/registry' {
ErrorMetadataV10: ErrorMetadataV10;
ErrorMetadataV11: ErrorMetadataV11;
ErrorMetadataV12: ErrorMetadataV12;
ErrorMetadataV13: ErrorMetadataV13;
ErrorMetadataV9: ErrorMetadataV9;
EthAccount: EthAccount;
EthBlock: EthBlock;
@@ -1950,6 +2051,7 @@ declare module '@polkadot/types/types/registry' {
EthTransactionAction: EthTransactionAction;
EthTransactionCondition: EthTransactionCondition;
EthTransactionRequest: EthTransactionRequest;
EthTransactionSignature: EthTransactionSignature;
EthTransactionStatus: EthTransactionStatus;
EthWork: EthWork;
Event: Event;
@@ -1959,11 +2061,13 @@ declare module '@polkadot/types/types/registry' {
EventMetadataV10: EventMetadataV10;
EventMetadataV11: EventMetadataV11;
EventMetadataV12: EventMetadataV12;
EventMetadataV13: EventMetadataV13;
EventMetadataV9: EventMetadataV9;
EventRecord: EventRecord;
EvmAccount: EvmAccount;
EvmLog: EvmLog;
EvmVicinity: EvmVicinity;
ExecReturnValue: ExecReturnValue;
ExitError: ExitError;
ExitFatal: ExitFatal;
ExitReason: ExitReason;
@@ -1977,6 +2081,7 @@ declare module '@polkadot/types/types/registry' {
ExtrinsicMetadataLatest: ExtrinsicMetadataLatest;
ExtrinsicMetadataV11: ExtrinsicMetadataV11;
ExtrinsicMetadataV12: ExtrinsicMetadataV12;
ExtrinsicMetadataV13: ExtrinsicMetadataV13;
ExtrinsicOrHash: ExtrinsicOrHash;
ExtrinsicPayload: ExtrinsicPayload;
ExtrinsicPayloadUnknown: ExtrinsicPayloadUnknown;
@@ -2000,11 +2105,13 @@ declare module '@polkadot/types/types/registry' {
FunctionArgumentMetadataV10: FunctionArgumentMetadataV10;
FunctionArgumentMetadataV11: FunctionArgumentMetadataV11;
FunctionArgumentMetadataV12: FunctionArgumentMetadataV12;
FunctionArgumentMetadataV13: FunctionArgumentMetadataV13;
FunctionArgumentMetadataV9: FunctionArgumentMetadataV9;
FunctionMetadataLatest: FunctionMetadataLatest;
FunctionMetadataV10: FunctionMetadataV10;
FunctionMetadataV11: FunctionMetadataV11;
FunctionMetadataV12: FunctionMetadataV12;
FunctionMetadataV13: FunctionMetadataV13;
FunctionMetadataV9: FunctionMetadataV9;
FundIndex: FundIndex;
FundInfo: FundInfo;
@@ -2022,6 +2129,7 @@ declare module '@polkadot/types/types/registry' {
H160: H160;
H2048: H2048;
H256: H256;
H32: H32;
H512: H512;
H64: H64;
Hash: Hash;
@@ -2059,6 +2167,7 @@ declare module '@polkadot/types/types/registry' {
InboundDownwardMessage: InboundDownwardMessage;
InboundHrmpMessage: InboundHrmpMessage;
InboundHrmpMessages: InboundHrmpMessages;
InboundStatus: InboundStatus;
IncludedBlocks: IncludedBlocks;
InclusionFee: InclusionFee;
IncomingParachain: IncomingParachain;
@@ -2067,6 +2176,8 @@ declare module '@polkadot/types/types/registry' {
Index: Index;
IndicesLookupSource: IndicesLookupSource;
IndividualExposure: IndividualExposure;
InstantiateRequest: InstantiateRequest;
InstantiateReturnValue: InstantiateReturnValue;
InstructionWeights: InstructionWeights;
InvalidDisputeStatementKind: InvalidDisputeStatementKind;
InvalidTransaction: InvalidTransaction;
@@ -2098,6 +2209,7 @@ declare module '@polkadot/types/types/registry' {
MapTypeV10: MapTypeV10;
MapTypeV11: MapTypeV11;
MapTypeV12: MapTypeV12;
MapTypeV13: MapTypeV13;
MapTypeV9: MapTypeV9;
MaybeRandomness: MaybeRandomness;
MaybeVrf: MaybeVrf;
@@ -2112,6 +2224,7 @@ declare module '@polkadot/types/types/registry' {
MetadataV10: MetadataV10;
MetadataV11: MetadataV11;
MetadataV12: MetadataV12;
MetadataV13: MetadataV13;
MetadataV9: MetadataV9;
MmrLeafProof: MmrLeafProof;
MmrRootHash: MmrRootHash;
@@ -2119,12 +2232,14 @@ declare module '@polkadot/types/types/registry' {
ModuleConstantMetadataV10: ModuleConstantMetadataV10;
ModuleConstantMetadataV11: ModuleConstantMetadataV11;
ModuleConstantMetadataV12: ModuleConstantMetadataV12;
ModuleConstantMetadataV13: ModuleConstantMetadataV13;
ModuleConstantMetadataV9: ModuleConstantMetadataV9;
ModuleId: ModuleId;
ModuleMetadataLatest: ModuleMetadataLatest;
ModuleMetadataV10: ModuleMetadataV10;
ModuleMetadataV11: ModuleMetadataV11;
ModuleMetadataV12: ModuleMetadataV12;
ModuleMetadataV13: ModuleMetadataV13;
ModuleMetadataV9: ModuleMetadataV9;
Moment: Moment;
MomentOf: MomentOf;
@@ -2150,6 +2265,8 @@ declare module '@polkadot/types/types/registry' {
NextAuthority: NextAuthority;
NextConfigDescriptor: NextConfigDescriptor;
NextConfigDescriptorV1: NextConfigDescriptorV1;
NMapTypeLatest: NMapTypeLatest;
NMapTypeV13: NMapTypeV13;
NodeRole: NodeRole;
Nominations: Nominations;
NominatorIndex: NominatorIndex;
@@ -2172,6 +2289,8 @@ declare module '@polkadot/types/types/registry' {
Origin: Origin;
OriginCaller: OriginCaller;
OutboundHrmpMessage: OutboundHrmpMessage;
OutboundStatus: OutboundStatus;
Outcome: Outcome;
Owner: Owner;
PalletId: PalletId;
PalletsOrigin: PalletsOrigin;
@@ -2215,6 +2334,7 @@ declare module '@polkadot/types/types/registry' {
PhantomData: PhantomData;
Phase: Phase;
PhragmenScore: PhragmenScore;
PluralityJunction: PluralityJunction;
Points: Points;
Precommits: Precommits;
PrefabWasmModule: PrefabWasmModule;
@@ -2232,6 +2352,7 @@ declare module '@polkadot/types/types/registry' {
ProxyDefinition: ProxyDefinition;
ProxyState: ProxyState;
ProxyType: ProxyType;
QueueConfigData: QueueConfigData;
QueuedParathread: QueuedParathread;
Randomness: Randomness;
Raw: Raw;
@@ -2263,11 +2384,14 @@ declare module '@polkadot/types/types/registry' {
RegistrarInfo: RegistrarInfo;
Registration: Registration;
RegistrationJudgement: RegistrationJudgement;
RelayBlockNumber: RelayBlockNumber;
RelayChainBlockNumber: RelayChainBlockNumber;
RelayChainHash: RelayChainHash;
RelayHash: RelayHash;
Releases: Releases;
Remark: Remark;
Renouncing: Renouncing;
RentProjection: RentProjection;
ReportedRoundStates: ReportedRoundStates;
Reporter: Reporter;
ReportIdOf: ReportIdOf;
@@ -2360,21 +2484,25 @@ declare module '@polkadot/types/types/registry' {
StorageEntryMetadataV10: StorageEntryMetadataV10;
StorageEntryMetadataV11: StorageEntryMetadataV11;
StorageEntryMetadataV12: StorageEntryMetadataV12;
StorageEntryMetadataV13: StorageEntryMetadataV13;
StorageEntryMetadataV9: StorageEntryMetadataV9;
StorageEntryModifierLatest: StorageEntryModifierLatest;
StorageEntryModifierV10: StorageEntryModifierV10;
StorageEntryModifierV11: StorageEntryModifierV11;
StorageEntryModifierV12: StorageEntryModifierV12;
StorageEntryModifierV13: StorageEntryModifierV13;
StorageEntryModifierV9: StorageEntryModifierV9;
StorageEntryTypeLatest: StorageEntryTypeLatest;
StorageEntryTypeV10: StorageEntryTypeV10;
StorageEntryTypeV11: StorageEntryTypeV11;
StorageEntryTypeV12: StorageEntryTypeV12;
StorageEntryTypeV13: StorageEntryTypeV13;
StorageEntryTypeV9: StorageEntryTypeV9;
StorageHasher: StorageHasher;
StorageHasherV10: StorageHasherV10;
StorageHasherV11: StorageHasherV11;
StorageHasherV12: StorageHasherV12;
StorageHasherV13: StorageHasherV13;
StorageHasherV9: StorageHasherV9;
StorageKey: StorageKey;
StorageKind: StorageKind;
@@ -2382,6 +2510,7 @@ declare module '@polkadot/types/types/registry' {
StorageMetadataV10: StorageMetadataV10;
StorageMetadataV11: StorageMetadataV11;
StorageMetadataV12: StorageMetadataV12;
StorageMetadataV13: StorageMetadataV13;
StorageMetadataV9: StorageMetadataV9;
StorageProof: StorageProof;
StoredPendingChange: StoredPendingChange;
@@ -2397,7 +2526,10 @@ declare module '@polkadot/types/types/registry' {
TAssetDepositBalance: TAssetDepositBalance;
Text: Text;
Timepoint: Timepoint;
TokenError: TokenError;
TombstoneContractInfo: TombstoneContractInfo;
TraceBlockResponse: TraceBlockResponse;
TraceError: TraceError;
TransactionPriority: TransactionPriority;
TransactionValidityError: TransactionValidityError;
TransientValidationData: TransientValidationData;
@@ -2490,7 +2622,7 @@ declare module '@polkadot/types/types/registry' {
XcmOrderInitiateTeleport: XcmOrderInitiateTeleport;
XcmOrderQueryHolding: XcmOrderQueryHolding;
XcmOriginKind: XcmOriginKind;
XcmOutcome: XcmOutcome;
XcmpMessageFormat: XcmpMessageFormat;
XcmQueryResponse: XcmQueryResponse;
XcmRelayedFrom: XcmRelayedFrom;
XcmReserveAssetDeposit: XcmReserveAssetDeposit;
+1 -3
View File
@@ -30,9 +30,7 @@ export abstract class AbstractArray<T extends Codec> extends Array<T> implements
* @description The length of the value when encoded as a Uint8Array
*/
public get encodedLength (): number {
return this.reduce((total, raw): number => {
return total + raw.encodedLength;
}, compactToU8a(this.length).length);
return this.reduce((total, entry) => total + entry.encodedLength, compactToU8a(this.length).length);
}
/**
+4 -4
View File
@@ -7,7 +7,7 @@ import type { UIntBitLength } from './types';
import BN from 'bn.js';
import { assert, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, BN_ZERO, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isHex, isString, isU8a, u8aToBn } from '@polkadot/util';
import { assert, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, BN_ZERO, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isHex, isString, isU8a, stringify, u8aToBn } from '@polkadot/util';
export const DEFAULT_UINT_BITS = 64;
@@ -37,7 +37,7 @@ function decodeAbstracIntU8a (value: Uint8Array, bitLength: UIntBitLength, isNeg
// NOTE When passing u8a in (typically from decoded data), it is always Little Endian
return u8aToBn(value.subarray(0, bitLength / 8), { isLe: true, isNegative }).toString();
} catch (error) {
throw new Error(`AbstractInt: failed on ${JSON.stringify(value)}:: ${(error as Error).message}`);
throw new Error(`AbstractInt: failed on ${stringify(value)}:: ${(error as Error).message}`);
}
}
@@ -83,8 +83,8 @@ export abstract class AbstractInt extends BN implements Codec {
const isPositive = this.gte(BN_ZERO);
const maxBits = bitLength - (isSigned && isPositive ? 1 : 0);
assert(isSigned || isPositive, `${this.toRawType()}: Negative number passed to unsigned type`);
assert(super.bitLength() <= maxBits, `${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
assert(isSigned || isPositive, () => `${this.toRawType()}: Negative number passed to unsigned type`);
assert(super.bitLength() <= maxBits, () => `${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
}
/**
+2 -2
View File
@@ -4,7 +4,7 @@
import type { CodecHash, Hash } from '../interfaces/runtime';
import type { AnyJson, Codec, Constructor, InterfaceTypes, Registry } from '../types';
import { compactFromU8a, compactToU8a, isHex, isU8a, logger, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util';
import { compactFromU8a, compactToU8a, isHex, isU8a, logger, stringify, u8aConcat, u8aToHex, u8aToU8a } from '@polkadot/util';
import { compareSet, decodeU8a, typeToConstructor } from './utils';
@@ -176,7 +176,7 @@ export class BTreeSet<V extends Codec = Codec> extends Set<V> implements Codec {
* @description Returns the string representation of the value
*/
public toString (): string {
return JSON.stringify(this.toJSON());
return stringify(this.toJSON());
}
/**

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