Compare commits

..
54 Commits
Author SHA1 Message Date
Github Actions 8481647d2c [CI Skip] release/stable 1.25.1
skip-checks: true
2020-07-20 07:35:42 +00:00
Jaco Greeff 658dda66a4 1.25 (#2440)
* 1.25

* Bump metadata
2020-07-20 09:25:04 +02:00
Github Actions 87f18efe72 [CI Skip] release/beta 1.25.0-beta.12
skip-checks: true
2020-07-17 12:38:05 +00:00
Jaco Greeff bcdfcce89c Bump dev 2020-07-17 14:26:19 +02:00
Github Actions 9418f1de56 [CI Skip] release/beta 1.25.0-beta.11
skip-checks: true
2020-07-17 12:15:43 +00:00
Jaco Greeff 37c8b8e592 Dev bumpd 2020-07-17 14:03:45 +02:00
Github Actions 4f8db79a40 [CI Skip] release/beta 1.25.0-beta.10
skip-checks: true
2020-07-17 10:28:46 +00:00
Jaco Greeff 54cf086a89 Update ContractExecResult (#2437) 2020-07-17 12:17:35 +02:00
Github Actions 37ddcaa32d [CI Skip] release/beta 1.25.0-beta.9
skip-checks: true
2020-07-17 09:38:57 +00:00
Jaco Greeff 6a2baf8352 Types for Polkadot purchase (#2436) 2020-07-17 11:27:21 +02:00
Github Actions ecca91dffd [CI Skip] release/beta 1.25.0-beta.8
skip-checks: true
2020-07-17 06:59:19 +00:00
Jaco Greeff 42576d74ac Bump deps (#2435) 2020-07-17 08:47:57 +02:00
Github Actions 26a6f20dbf [CI Skip] release/beta 1.25.0-beta.7
skip-checks: true
2020-07-17 06:33:03 +00:00
Chevdor c3ee8393b2 Add 'Registrar #1' as user (#2433) 2020-07-17 08:20:08 +02:00
Github Actions b6f0b9f262 [CI Skip] release/beta 1.25.0-beta.6
skip-checks: true
2020-07-15 17:25:30 +00:00
Jaco Greeff 991dc48020 Raw/Bytes toHuman() uses utf8 as available (#2431)
* Raw/Bytes toHuman() uses utf8 as available

* Rewrite yarn.lock

* Bump babel
2020-07-15 18:55:50 +02:00
Github Actions e4a82f9a1d [CI Skip] release/beta 1.25.0-beta.5
skip-checks: true
2020-07-15 08:58:08 +00:00
Jaco Greeff c8b6012553 networkstate reputation i32 (#2430) 2020-07-15 10:48:18 +02:00
Github Actions d0fe862605 [CI Skip] release/beta 1.25.0-beta.4
skip-checks: true
2020-07-14 17:14:55 +00:00
Jaco Greeff 61a0198695 Fallback for setImmediate (#2428) 2020-07-14 19:04:16 +02:00
Github Actions 345a97dc9f [CI Skip] release/beta 1.25.0-beta.3
skip-checks: true
2020-07-14 13:02:42 +00:00
Brad LarsonandBrad Larson f821ab8ecd [NEW] Support for custom headers with providers (#2423)
* [NEW] Support for custom headers with providers

This allows the user to supply arbitrary headers when constructing the
providers.

* [FIX] null -> undefined, use isChildClass

Co-authored-by: Brad Larson <brad@polychain.capital>
2020-07-14 14:49:42 +02:00
Github Actions f9e2bf332d [CI Skip] release/beta 1.25.0-beta.2
skip-checks: true
2020-07-14 08:40:25 +00:00
Jaco Greeff ad69430980 Clazz prototype fix for Linkage (#2426)
* Cleanup progress calcs for Aura

* Clazz prototype
2020-07-14 10:28:38 +02:00
Github Actions d25743016c [CI Skip] release/beta 1.25.0-beta.1
skip-checks: true
2020-07-14 08:15:18 +00:00
Jaco Greeff ee0a46adc4 Cleanup progress calcs for Aura (#2425) 2020-07-14 10:02:44 +02:00
Github Actions f516abfc3f [CI Skip] release/beta 1.25.0-beta.0
skip-checks: true
2020-07-13 18:53:28 +00:00
philipstanislaus 1a96ca5c0e Update types for centrifuge chain v1.2.0 (#2424)
* Update types for centrifuge chain v1.2.0

* Make linter happy
2020-07-13 20:41:15 +02:00
Github Actions 8c73cd7d6e [CI Skip] release/stable 1.24.1
skip-checks: true
2020-07-13 09:49:07 +00:00
Jaco Greeff 36232c0289 1.24 (#2421) 2020-07-13 11:38:47 +02:00
Github Actions 50d4e0397f [CI Skip] release/beta 1.24.0-beta.2
skip-checks: true
2020-07-10 13:28:14 +00:00
Jaco Greeff 539a8c4cb5 Types for poll module (#2418) 2020-07-10 15:17:03 +02:00
Github Actions b849976b3b [CI Skip] release/beta 1.24.0-beta.1
skip-checks: true
2020-07-08 14:35:48 +00:00
Jaco Greeff 2395401a2b Raw/Bytes isUtf8 & assert in toUtf8 (#2414) 2020-07-08 16:24:13 +02:00
Github Actions 0e1bbd5cac [CI Skip] release/beta 1.24.0-beta.0
skip-checks: true
2020-07-08 12:57:36 +00:00
Jaco Greeff e9489d41cb Raw isAscii & toUtf8 (#2413)
* Raw isAscii & toUtf8

* Tests for isAscii & toUtf8

* Cleanup return types
2020-07-08 14:46:12 +02:00
Github Actions 63483b9db7 [CI Skip] release/stable 1.23.1
skip-checks: true
2020-07-06 05:45:32 +00:00
Jaco Greeff b26c7f9f0a 1.23.1 (ith version bump) 2020-07-06 07:31:36 +02:00
Github Actions a165c9375c [CI Skip] release/beta 1.23.0-beta.7
skip-checks: true
2020-07-06 05:27:04 +00:00
Jaco Greeff 28631f7180 1.23 (#2411) 2020-07-06 07:15:07 +02:00
Github Actions 6489251b47 [CI Skip] release/beta 1.23.0-beta.6
skip-checks: true
2020-07-03 15:34:13 +00:00
Jaco Greeff 66884febea Add OpaqueCall type (#2408) 2020-07-03 17:22:02 +02:00
Github Actions 8058dc350f [CI Skip] release/beta 1.23.0-beta.5
skip-checks: true
2020-07-03 10:05:48 +00:00
Jaco Greeff 63096cc238 Remove unneeded base extends (#2407)
* Remove unneeded base extends

* CHANGELOG

* Result with value on enum
2020-07-03 11:55:39 +02:00
Github Actions 05600c0cd0 [CI Skip] release/beta 1.23.0-beta.4
skip-checks: true
2020-07-03 09:46:07 +00:00
Jaco Greeff eed5e23e65 Validate number sign in AbstractInt (#2406) 2020-07-03 11:33:30 +02:00
Github Actions cdf5b15673 [CI Skip] release/beta 1.23.0-beta.3
skip-checks: true
2020-07-02 05:27:15 +00:00
Jaco Greeff 1922676bd7 Bump deps (#2404) 2020-07-02 07:14:08 +02:00
Github Actions b6c427e985 [CI Skip] release/beta 1.23.0-beta.2
skip-checks: true
2020-07-01 15:55:54 +00:00
Jaco Greeff 0327aedf8e Update ProxyType for Kusama, Polkadot & Westend (#2403)
* Update ProxyType fro Kusama, Polkadot & Westend

* CHANGELOG
2020-07-01 17:42:22 +02:00
Github Actions d7035cebb1 [CI Skip] release/beta 1.23.0-beta.1
skip-checks: true
2020-07-01 11:51:42 +00:00
Daniel Maricic 8b492021af Fixed typo in README (#2402) 2020-07-01 13:39:07 +02:00
Github Actions 6a01fc7c8c [CI Skip] release/beta 1.23.0-beta.0
skip-checks: true
2020-07-01 05:58:34 +00:00
Jaco Greeff bbc30ec9dc Cross-referencing type failure (#2400)
* Cross-referencing type failure

* typo

* Adjust toRawType() with name from registry

* Rewrite yarn.lock

* Adjustments

* Test adjustments
2020-07-01 07:47:21 +02:00
68 changed files with 2196 additions and 1381 deletions
+32 -3
View File
@@ -1,8 +1,37 @@
# CHANGELOG
## 1.22.1 Jun 29, 2020
## 1.25.1 Jul 20, 2020
- **Important** Substrate changed the tip structure, only older chains supply `OpenTip: 'OpenTipTo225'` if using tips
- **Important** Contract RPC result updated on Substrate, on older chains supply `ContractExecResult: 'ContractExecResultTo255'`
- Support for custom HTTP headers in providers (Thanks to https://github.com/brad-larson)
- Update known types for Centrifuge (Thanks to https://github.com/philipstanislaus)
- Update API users with Registrar #1 (Thanks to https://github.com/chevdor)
- Raw/Bytes `toHuman()` displays utf-8 as available
- Add fallback for `setImmediate` when not polyfilled
- Update `NetworkState` reputation type for `system_networkState` RPC
- Update session progress calcs for Aura (cater for negative)
- Fix class prototype for (basically-deprecated) Linkage type
- Add Polkadot types for `purchase` pallet
## 1.24.1 Jul 13, 2020
- Added `isAscii` & `isUtf8` getters to `Bytes` & `Raw` types
- Added `toUtf8()` helper to `Bytes` & `Raw` types
- `@polkadot/util` 2.18
## 1.23.1 Jul 6, 2020
- Small README typo fix (Thanks to https://github.com/woss)
- Add latest Substrate master types
- Adjust `<Codec>.toRawType()` to use registry name as available
- Update `ProxyType` for Kusama, Polkadot & Westend with `IdentityJudgement`
- Validate number format (signed/unsigned) for number types
- Remove core codec dependencies on Base class (with proper TS encapsulation)
- `@polkadot/util` 2.17
## 1.22.1 Jun 30, 2020
- **Important** Substrate changed the treasury tip structure, on older chains supply `OpenTip: 'OpenTipTo225'`
- Allow for `[u8; 33]` in U8aFixed (Thanks to https://github.com/akru)
- Improve derive accountId -> accountIndex lookups (optimize entries queries)
- Vesting balance calculations via `derive.balances.all` has been updated for locks
@@ -15,7 +44,7 @@
- Add support for `CheckMortality` signed extension (old `CheckEra` is now an alias)
- Promise API will default to using `getStorage` on non-subscription calls, reducing RPC overhead
- Optimize derive BN allocations, using in-place operators as applicable
- Add new substrate types for Babe EquivocationProof
- Add new Substrate types for Babe `EquivocationProof`
- Adjust `Releases` enum to use a shared instance
## 1.20.1 Jun 22, 2020
+1 -1
View File
@@ -7,7 +7,7 @@
# @polkadot/api
This library provides a clean wrapper around all the methods exposed by a Polkadot/Subtrate network client and defines all the types exposed by a node. For complete documentation around the classes, interfaces and their use, visit the [documentation portal](https://polkadot.js.org/api/).
This library provides a clean wrapper around all the methods exposed by a Polkadot/Substrate network client and defines all the types exposed by a node. For complete documentation around the classes, interfaces and their use, visit the [documentation portal](https://polkadot.js.org/api/).
If you are an existing user, please be sure to track the [CHANGELOG](CHANGELOG.md) and [UPGRADING](UPGRADING.md) guides when changing versions.
+1 -1
View File
@@ -9,5 +9,5 @@
"packages": [
"packages/*"
],
"version": "1.22.1"
"version": "1.25.1"
}
+7 -7
View File
@@ -24,15 +24,15 @@
"test:watch": "polkadot-dev-run-test --watch"
},
"devDependencies": {
"@babel/core": "^7.10.3",
"@babel/register": "^7.10.3",
"@babel/runtime": "^7.10.3",
"@polkadot/dev": "^0.55.14",
"@polkadot/ts": "^0.3.26",
"@babel/core": "^7.10.5",
"@babel/register": "^7.10.5",
"@babel/runtime": "^7.10.5",
"@polkadot/dev": "^0.55.27",
"@polkadot/ts": "^0.3.29",
"@polkadot/typegen": "workspace:packages/typegen",
"@types/jest": "^26.0.3",
"@types/jest": "^26.0.5",
"@vuepress/plugin-search": "^1.5.2",
"copyfiles": "^2.3.0"
},
"version": "1.22.1"
"version": "1.25.1"
}
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-contract",
"version": "1.22.1",
"version": "1.25.1",
"description": "Interfaces for interacting with contracts and contract ABIs",
"main": "index.js",
"keywords": [
@@ -26,12 +26,12 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-contract#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/api": "1.22.1",
"@polkadot/rpc-core": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/api": "1.25.1",
"@polkadot/rpc-core": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"bn.js": "^5.1.2",
"rxjs": "^6.5.5"
"rxjs": "^6.6.0"
}
}
+10 -10
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api-derive",
"version": "1.22.1",
"version": "1.25.1",
"description": "Common functions used across Polkadot, derived from RPC calls and storage queries.",
"main": "index.js",
"keywords": [
@@ -27,18 +27,18 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api-derive#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/api": "1.22.1",
"@polkadot/rpc-core": "1.22.1",
"@polkadot/rpc-provider": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@polkadot/util-crypto": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/api": "1.25.1",
"@polkadot/rpc-core": "1.25.1",
"@polkadot/rpc-provider": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"@polkadot/util-crypto": "^2.18.1",
"bn.js": "^5.1.2",
"memoizee": "^0.4.14",
"rxjs": "^6.5.5"
"rxjs": "^6.6.0"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1"
"@polkadot/keyring": "^2.18.1"
}
}
+5 -8
View File
@@ -30,14 +30,11 @@ function createDerive (api: ApiInterfaceRx, info: DeriveSessionInfo, [currentSlo
function queryAura (api: ApiInterfaceRx): Observable<DeriveSessionProgress> {
return api.derive.session.info().pipe(
map((info): DeriveSessionProgress =>
createDerive(api, info, [
api.registry.createType('u64', 1),
api.registry.createType('u64', 1),
api.registry.createType('u64', 1),
api.registry.createType('SessionIndex', 1)
])
)
map((info): DeriveSessionProgress => ({
...info,
eraProgress: api.registry.createType('BlockNumber'),
sessionProgress: api.registry.createType('BlockNumber')
}))
);
}
+1 -1
View File
@@ -97,7 +97,7 @@ Some of the users of the API (let us know if you are missing from the list), inc
- [Polkawallet.io](https://polkawallet.io) and [Polkawallet (Github)](https://github.com/polkawallet-io/polkawallet-RN/) A mobile wallet for the Polkadot network to manage funds and make transactions, available on both Androind and iOS
- [PolkaStats.io](https://polkastats.io), [PolkaStats frontend GitHub repository](https://github.com/Colm3na/polkastats-v2) and [PolkaStats backend GitHub repository](https://github.com/Colm3na/polkastats-backend-v2) Polkadot network statistics (currently Kusama and Alexander). Shows network information and staking details from validators and intentions.
- [Polkadot API Server (GitHub)](https://github.com/SimplyVC/polkadot_api_server) A lightweight server for querying Polkadot nodes from any language, built primarily as a backend for [PANIC for Polkadot (GitHub)](https://github.com/SimplyVC/panic_polkadot/), a validator monitoring and alerting tool.
- [Identity Registrar #1 from Chevdor on Westend, Kusama and Polkadot](https://www.chevdor.com/tags/registrar/)
## Classes
[Classes](SUMMARY.md)
+13 -13
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/api",
"version": "1.22.1",
"version": "1.25.1",
"description": "Promise and RxJS wrappers around the Polkadot JS RPC",
"main": "index.js",
"keywords": [
@@ -26,21 +26,21 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/api#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/api-derive": "1.22.1",
"@polkadot/keyring": "^2.16.1",
"@polkadot/metadata": "1.22.1",
"@polkadot/rpc-core": "1.22.1",
"@polkadot/rpc-provider": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/types-known": "1.22.1",
"@polkadot/util": "^2.16.1",
"@polkadot/util-crypto": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/api-derive": "1.25.1",
"@polkadot/keyring": "^2.18.1",
"@polkadot/metadata": "1.25.1",
"@polkadot/rpc-core": "1.25.1",
"@polkadot/rpc-provider": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/types-known": "1.25.1",
"@polkadot/util": "^2.18.1",
"@polkadot/util-crypto": "^2.18.1",
"bn.js": "^5.1.2",
"eventemitter3": "^4.0.4",
"rxjs": "^6.5.5"
"rxjs": "^6.6.0"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1"
"@polkadot/keyring": "^2.18.1"
}
}
+8 -2
View File
@@ -17,7 +17,7 @@ import { RegistrarInfo, Registration } from '@polkadot/types/interfaces/identity
import { AuthIndex } from '@polkadot/types/interfaces/imOnline';
import { DeferredOffenceOf, Kind, OffenceDetails, OpaqueTimeSlot, ReportIdOf } from '@polkadot/types/interfaces/offences';
import { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery';
import { AccountId, AccountIndex, Balance, BalanceOf, BlockNumber, ExtrinsicsWeight, Hash, KeyTypeId, Moment, Perbill, ProxyType, Releases, ValidatorId } from '@polkadot/types/interfaces/runtime';
import { AccountId, AccountIndex, Balance, BalanceOf, BlockNumber, ExtrinsicsWeight, Hash, KeyTypeId, Moment, OpaqueCall, Perbill, ProxyType, Releases, ValidatorId } from '@polkadot/types/interfaces/runtime';
import { Scheduled, TaskAddress } from '@polkadot/types/interfaces/scheduler';
import { Keys, SessionIndex } from '@polkadot/types/interfaces/session';
import { Bid, BidKind, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society';
@@ -392,7 +392,7 @@ declare module '@polkadot/api/types/storage' {
};
multisig: {
[index: string]: QueryableStorageEntry<ApiType>;
calls: AugmentedQuery<ApiType, (arg: U8aFixed | string | Uint8Array) => Observable<Option<ITuple<[Bytes, AccountId, BalanceOf]>>>> & QueryableStorageEntry<ApiType>;
calls: AugmentedQuery<ApiType, (arg: U8aFixed | string | Uint8Array) => Observable<Option<ITuple<[OpaqueCall, AccountId, BalanceOf]>>>> & QueryableStorageEntry<ApiType>;
/**
* The set of open multisig operations.
**/
@@ -470,6 +470,12 @@ declare module '@polkadot/api/types/storage' {
* Lookup from identity to the block number and index of the task.
**/
lookup: AugmentedQuery<ApiType, (arg: Bytes | string | Uint8Array) => Observable<Option<TaskAddress>>> & QueryableStorageEntry<ApiType>;
/**
* Storage version of the pallet.
*
* New networks start with last version.
**/
storageVersion: AugmentedQuery<ApiType, () => Observable<Releases>> & QueryableStorageEntry<ApiType>;
};
session: {
[index: string]: QueryableStorageEntry<ApiType>;
+115 -31
View File
@@ -4,6 +4,7 @@
import { AnyNumber, ITuple } from '@polkadot/types/types';
import { Compact, Option, U8aFixed, Vec } from '@polkadot/types/codec';
import { Bytes, Data, bool, u16, u32, u64 } from '@polkadot/types/primitive';
import { BabeEquivocationProof } from '@polkadot/types/interfaces/babe';
import { MemberCount, ProposalIndex } from '@polkadot/types/interfaces/collective';
import { CodeHash, Gas, Schedule } from '@polkadot/types/interfaces/contracts';
import { AccountVote, Conviction, PropIndex, Proposal, ReferendumIndex } from '@polkadot/types/interfaces/democracy';
@@ -12,7 +13,7 @@ import { Extrinsic, Signature } from '@polkadot/types/interfaces/extrinsics';
import { GrandpaEquivocationProof, KeyOwnerProof } from '@polkadot/types/interfaces/grandpa';
import { IdentityFields, IdentityInfo, IdentityJudgement, RegistrarIndex } from '@polkadot/types/interfaces/identity';
import { Heartbeat } from '@polkadot/types/interfaces/imOnline';
import { AccountId, AccountIndex, Address, Balance, BalanceOf, BlockNumber, Call, ChangesTrieConfiguration, Hash, Header, KeyValue, LookupSource, Moment, Perbill, Percent, ProxyType, Weight } from '@polkadot/types/interfaces/runtime';
import { AccountId, AccountIndex, Address, Balance, BalanceOf, BlockNumber, Call, ChangesTrieConfiguration, Hash, Header, KeyValue, LookupSource, Moment, OpaqueCall, Perbill, Percent, ProxyType, Weight } from '@polkadot/types/interfaces/runtime';
import { Period, Priority } from '@polkadot/types/interfaces/scheduler';
import { Keys } from '@polkadot/types/interfaces/session';
import { SocietyJudgement } from '@polkadot/types/interfaces/society';
@@ -31,6 +32,27 @@ declare module '@polkadot/api/types/submittable' {
**/
setUncles: AugmentedSubmittable<(newUncles: Vec<Header> | (Header | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>>;
};
babe: {
[index: string]: SubmittableExtrinsicFunction<ApiType>;
/**
* Report authority equivocation/misbehavior. This method will verify
* the equivocation proof and validate the given key ownership proof
* against the extracted offender. If both are valid, the offence will
* be reported.
**/
reportEquivocation: AugmentedSubmittable<(equivocationProof: BabeEquivocationProof | { offender?: any; slotNumber?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: KeyOwnerProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Report authority equivocation/misbehavior. This method will verify
* the equivocation proof and validate the given key ownership proof
* against the extracted offender. If both are valid, the offence will
* be reported.
* This extrinsic must be called unsigned and it is expected that only
* block authors will call it (validated in `ValidateUnsigned`), as such
* if the block author is defined it will be defined as the equivocation
* reporter.
**/
reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: BabeEquivocationProof | { offender?: any; slotNumber?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: KeyOwnerProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
};
balances: {
[index: string]: SubmittableExtrinsicFunction<ApiType>;
/**
@@ -873,19 +895,27 @@ declare module '@polkadot/api/types/submittable' {
* equivocation proof and validate the given key ownership proof
* against the extracted offender. If both are valid, the offence
* will be reported.
*
* Since the weight of the extrinsic is 0, in order to avoid DoS by
* submission of invalid equivocation reports, a mandatory pre-validation of
* the extrinsic is implemented in a `SignedExtension`.
**/
reportEquivocation: AugmentedSubmittable<(equivocationProof: GrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: KeyOwnerProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Report voter equivocation/misbehavior. This method will verify the
* equivocation proof and validate the given key ownership proof
* against the extracted offender. If both are valid, the offence
* will be reported.
*
* This extrinsic must be called unsigned and it is expected that only
* block authors will call it (validated in `ValidateUnsigned`), as such
* if the block author is defined it will be defined as the equivocation
* reporter.
**/
reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: GrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: KeyOwnerProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
};
identity: {
[index: string]: SubmittableExtrinsicFunction<ApiType>;
/**
* Add a registrar to the system.
*
* The dispatch origin for this call must be `RegistrarOrigin` or `Root`.
* The dispatch origin for this call must be `T::RegistrarOrigin`.
*
* - `account`: the account of the registrar.
*
@@ -898,6 +928,16 @@ declare module '@polkadot/api/types/submittable' {
* # </weight>
**/
addRegistrar: AugmentedSubmittable<(account: AccountId | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Add the given account to the sender's subs.
*
* Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated
* to the sender.
*
* The dispatch origin for this call must be _Signed_ and the sender must have a registered
* sub identity of `sub`.
**/
addSub: AugmentedSubmittable<(sub: LookupSource | Address | AccountId | AccountIndex | string | Uint8Array, data: Data | { None: any } | { Raw: any } | { BlakeTwo256: any } | { Sha256: any } | { Keccak256: any } | { ShaThree256: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Cancel a previous request.
*
@@ -946,7 +986,7 @@ declare module '@polkadot/api/types/submittable' {
* `Slash`. Verification request deposits are not returned; they should be cancelled
* manually using `cancel_request`.
*
* The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.
* The dispatch origin for this call must match `T::ForceOrigin`.
*
* - `target`: the account whose identity the judgement is upon. This must be an account
* with a registered identity.
@@ -983,6 +1023,36 @@ declare module '@polkadot/api/types/submittable' {
* # </weight>
**/
provideJudgement: AugmentedSubmittable<(regIndex: Compact<RegistrarIndex> | AnyNumber | Uint8Array, target: LookupSource | Address | AccountId | AccountIndex | string | Uint8Array, judgement: IdentityJudgement | { Unknown: any } | { FeePaid: any } | { Reasonable: any } | { KnownGood: any } | { OutOfDate: any } | { LowQuality: any } | { Erroneous: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Remove the sender as a sub-account.
*
* Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated
* to the sender (*not* the original depositor).
*
* The dispatch origin for this call must be _Signed_ and the sender must have a registered
* super-identity.
*
* NOTE: This should not normally be used, but is provided in the case that the non-
* controller of an account is maliciously registered as a sub-account.
**/
quitSub: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>>;
/**
* Remove the given account from the sender's subs.
*
* Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated
* to the sender.
*
* The dispatch origin for this call must be _Signed_ and the sender must have a registered
* sub identity of `sub`.
**/
removeSub: AugmentedSubmittable<(sub: LookupSource | Address | AccountId | AccountIndex | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Alter the associated name of the given sub-account.
*
* The dispatch origin for this call must be _Signed_ and the sender must have a registered
* sub identity of `sub`.
**/
renameSub: AugmentedSubmittable<(sub: LookupSource | Address | AccountId | AccountIndex | string | Uint8Array, data: Data | { None: any } | { Raw: any } | { BlakeTwo256: any } | { Sha256: any } | { Keccak256: any } | { ShaThree256: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Request a judgement from a registrar.
*
@@ -1334,7 +1404,7 @@ declare module '@polkadot/api/types/submittable' {
* - Plus Call Weight
* # </weight>
**/
asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec<AccountId> | (AccountId | string | Uint8Array)[], maybeTimepoint: Option<Timepoint> | null | object | string | Uint8Array, call: Bytes | string | Uint8Array, storeCall: bool | boolean | Uint8Array, maxWeight: Weight | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>>;
asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec<AccountId> | (AccountId | string | Uint8Array)[], maybeTimepoint: Option<Timepoint> | null | object | string | Uint8Array, call: OpaqueCall | string | Uint8Array, storeCall: bool | boolean | Uint8Array, maxWeight: Weight | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Immediately dispatch a multi-signature call using a single approval from the caller.
*
@@ -1748,6 +1818,14 @@ declare module '@polkadot/api/types/submittable' {
* # </weight>
**/
schedule: AugmentedSubmittable<(when: BlockNumber | AnyNumber | Uint8Array, maybePeriodic: Option<Period> | null | object | string | Uint8Array, priority: Priority | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Anonymously schedule a task after a delay.
*
* # <weight>
* Same as [`schedule`].
* # </weight>
**/
scheduleAfter: AugmentedSubmittable<(after: BlockNumber | AnyNumber | Uint8Array, maybePeriodic: Option<Period> | null | object | string | Uint8Array, priority: Priority | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Schedule a named task.
*
@@ -1761,6 +1839,14 @@ declare module '@polkadot/api/types/submittable' {
* # </weight>
**/
scheduleNamed: AugmentedSubmittable<(id: Bytes | string | Uint8Array, when: BlockNumber | AnyNumber | Uint8Array, maybePeriodic: Option<Period> | null | object | string | Uint8Array, priority: Priority | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Schedule a named task after a delay.
*
* # <weight>
* Same as [`schedule_named`].
* # </weight>
**/
scheduleNamedAfter: AugmentedSubmittable<(id: Bytes | string | Uint8Array, after: BlockNumber | AnyNumber | Uint8Array, maybePeriodic: Option<Period> | null | object | string | Uint8Array, priority: Priority | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
};
session: {
[index: string]: SubmittableExtrinsicFunction<ApiType>;
@@ -2172,7 +2258,7 @@ declare module '@polkadot/api/types/submittable' {
/**
* Cancel enactment of a deferred slash.
*
* Can be called by either the root origin or the `T::SlashCancelOrigin`.
* Can be called by the `T::SlashCancelOrigin`.
*
* Parameters: era and indices of the slashes for that era to kill.
*
@@ -2306,7 +2392,9 @@ declare module '@polkadot/api/types/submittable' {
* - Contains a limited number of reads and writes.
* -----------
* N is the Number of payouts for the validator (including the validator)
* Base Weight: 110 + 54.2 * N µs (Median Slopes)
* Base Weight:
* - Reward Destination Staked: 110 + 54.2 * N µs (Median Slopes)
* - Reward Destination Controller (Creating): 120 + 41.95 * N µs (Median Slopes)
* DB Weight:
* - Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward,
* ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)
@@ -2908,7 +2996,7 @@ declare module '@polkadot/api/types/submittable' {
/**
* Add a member `who` to the set.
*
* May only be called from `AddOrigin` or root.
* May only be called from `T::AddOrigin`.
**/
addMember: AugmentedSubmittable<(who: AccountId | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
@@ -2921,29 +3009,33 @@ declare module '@polkadot/api/types/submittable' {
changeKey: AugmentedSubmittable<(updated: AccountId | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Remove the prime member if it exists.
*
* May only be called from `T::PrimeOrigin`.
**/
clearPrime: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>>;
/**
* Remove a member `who` from the set.
*
* May only be called from `RemoveOrigin` or root.
* May only be called from `T::RemoveOrigin`.
**/
removeMember: AugmentedSubmittable<(who: AccountId | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Change the membership to a new set, disregarding the existing membership. Be nice and
* pass `members` pre-sorted.
*
* May only be called from `ResetOrigin` or root.
* May only be called from `T::ResetOrigin`.
**/
resetMembers: AugmentedSubmittable<(members: Vec<AccountId> | (AccountId | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>>;
/**
* Set the prime member. Must be a current member.
*
* May only be called from `T::PrimeOrigin`.
**/
setPrime: AugmentedSubmittable<(who: AccountId | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Swap out one member `remove` for another `add`.
*
* May only be called from `SwapOrigin` or root.
* May only be called from `T::SwapOrigin`.
*
* Prime membership is *not* passed from `remove` to `add`, if extant.
**/
@@ -2979,6 +3071,8 @@ declare module '@polkadot/api/types/submittable' {
* Approve a proposal. At a later time, the proposal will be allocated to the beneficiary
* and the original deposit will be returned.
*
* May only be called from `T::ApproveOrigin`.
*
* # <weight>
* - Complexity: O(1).
* - DbReads: `Proposals`, `Approvals`
@@ -3021,6 +3115,8 @@ declare module '@polkadot/api/types/submittable' {
/**
* Reject a proposed spend. The original deposit will be slashed.
*
* May only be called from `T::RejectOrigin`.
*
* # <weight>
* - Complexity: O(1)
* - DbReads: `Proposals`, `rejected proposer account`
@@ -3136,7 +3232,10 @@ declare module '@polkadot/api/types/submittable' {
*
* NOTE: If you need to ensure that any account-based filtering is not honored (i.e.
* because you expect `proxy` to have been used prior in the call stack and you do not want
* the call restrictions to apply to any sub-accounts), then use `as_sub` instead.
* the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`
* in the Multisig pallet instead.
*
* NOTE: Prior to version *12, this was called `as_limited_sub`.
*
* The dispatch origin for this call must be _Signed_.
*
@@ -3145,22 +3244,7 @@ declare module '@polkadot/api/types/submittable' {
* - Plus the weight of the `call`
* # </weight>
**/
asLimitedSub: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Send a call through an indexed pseudonym of the sender.
*
* NOTE: If you need to ensure that any account-based filtering is honored (i.e. because
* you expect `proxy` to have been used prior in the call stack and you want it to apply to
* any sub-accounts), then use `as_limited_sub` instead.
*
* The dispatch origin for this call must be _Signed_.
*
* # <weight>
* - Base weight: 2.861 µs
* - Plus the weight of the `call`
* # </weight>
**/
asSub: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
asDerivative: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | { callIndex?: any; args?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>>;
/**
* Send a batch of dispatch calls.
*
+6 -2
View File
@@ -69,7 +69,9 @@ function decorateCall<Method extends DecorateFn<ObsInnerType<ReturnType<Method>>
catchError((error) => tracker.reject(error))
).subscribe((result): void => {
tracker.resolve(result);
setImmediate(() => subscription.unsubscribe());
typeof setImmediate === 'undefined'
? setTimeout(() => subscription.unsubscribe(), 0)
: setImmediate(() => subscription.unsubscribe());
});
});
}
@@ -87,7 +89,9 @@ function decorateSubscribe<Method extends DecorateFn<ObsInnerType<ReturnType<Met
).subscribe((result): void => {
// We use setImmediate here to ensure that the Promise above (tracker) has resolved, before returning
// the first result. By putting is back in the queue, the promise above is guarded for first execution
setImmediate(() => resultCb(result) as void);
typeof setImmediate === 'undefined'
? setTimeout(() => resultCb(result) as void, 0)
: setImmediate(() => resultCb(result) as void);
});
});
}
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/metadata",
"version": "1.22.1",
"version": "1.25.1",
"description": "Helpers to extract information from runtime metadata",
"main": "index.js",
"publishConfig": {
@@ -26,14 +26,14 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/type-metadata#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/types": "1.22.1",
"@polkadot/types-known": "1.22.1",
"@polkadot/util": "^2.16.1",
"@polkadot/util-crypto": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/types": "1.25.1",
"@polkadot/types-known": "1.25.1",
"@polkadot/util": "^2.18.1",
"@polkadot/util-crypto": "^2.18.1",
"bn.js": "^5.1.2"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1"
"@polkadot/keyring": "^2.18.1"
}
}
@@ -565,34 +565,7 @@
]
},
{
"name": "as_sub",
"args": [
{
"name": "index",
"type": "u16"
},
{
"name": "call",
"type": "Call"
}
],
"documentation": [
" Send a call through an indexed pseudonym of the sender.",
"",
" NOTE: If you need to ensure that any account-based filtering is honored (i.e. because",
" you expect `proxy` to have been used prior in the call stack and you want it to apply to",
" any sub-accounts), then use `as_limited_sub` instead.",
"",
" The dispatch origin for this call must be _Signed_.",
"",
" # <weight>",
" - Base weight: 2.861 µs",
" - Plus the weight of the `call`",
" # </weight>"
]
},
{
"name": "as_limited_sub",
"name": "as_derivative",
"args": [
{
"name": "index",
@@ -611,7 +584,10 @@
"",
" NOTE: If you need to ensure that any account-based filtering is not honored (i.e.",
" because you expect `proxy` to have been used prior in the call stack and you do not want",
" the call restrictions to apply to any sub-accounts), then use `as_sub` instead.",
" the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`",
" in the Multisig pallet instead.",
"",
" NOTE: Prior to version *12, this was called `as_limited_sub`.",
"",
" The dispatch origin for this call must be _Signed_.",
"",
@@ -801,7 +777,50 @@
}
]
},
"calls": [],
"calls": [
{
"name": "report_equivocation",
"args": [
{
"name": "equivocation_proof",
"type": "BabeEquivocationProof"
},
{
"name": "key_owner_proof",
"type": "KeyOwnerProof"
}
],
"documentation": [
" Report authority equivocation/misbehavior. This method will verify",
" the equivocation proof and validate the given key ownership proof",
" against the extracted offender. If both are valid, the offence will",
" be reported."
]
},
{
"name": "report_equivocation_unsigned",
"args": [
{
"name": "equivocation_proof",
"type": "BabeEquivocationProof"
},
{
"name": "key_owner_proof",
"type": "KeyOwnerProof"
}
],
"documentation": [
" Report authority equivocation/misbehavior. This method will verify",
" the equivocation proof and validate the given key ownership proof",
" against the extracted offender. If both are valid, the offence will",
" be reported.",
" This extrinsic must be called unsigned and it is expected that only",
" block authors will call it (validated in `ValidateUnsigned`), as such",
" if the block author is defined it will be defined as the equivocation",
" reporter."
]
}
],
"events": null,
"constants": [
{
@@ -2617,7 +2636,7 @@
"documentation": [
" Cancel enactment of a deferred slash.",
"",
" Can be called by either the root origin or the `T::SlashCancelOrigin`.",
" Can be called by the `T::SlashCancelOrigin`.",
"",
" Parameters: era and indices of the slashes for that era to kill.",
"",
@@ -2660,7 +2679,9 @@
" - Contains a limited number of reads and writes.",
" -----------",
" N is the Number of payouts for the validator (including the validator)",
" Base Weight: 110 + 54.2 * N µs (Median Slopes)",
" Base Weight:",
" - Reward Destination Staked: 110 + 54.2 * N µs (Median Slopes)",
" - Reward Destination Controller (Creating): 120 + 41.95 * N µs (Median Slopes)",
" DB Weight:",
" - Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward,",
" ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)",
@@ -2991,9 +3012,9 @@
"type": "EraIndex",
"value": "0xa8000000",
"documentation": [
" Number of eras that slashes are deferred by, after computation. ",
" Number of eras that slashes are deferred by, after computation.",
"",
" This should be less than the bonding duration. ",
" This should be less than the bonding duration.",
" Set to 0 if slashes should be applied immediately, without opportunity for",
" intervention."
]
@@ -3017,7 +3038,7 @@
"type": "u32",
"value": "0x0a000000",
"documentation": [
" Maximum number of balancing iterations to run in the offchain submission. ",
" Maximum number of balancing iterations to run in the offchain submission.",
"",
" If set to 0, balance_solution will not be executed at all."
]
@@ -6114,7 +6135,7 @@
"documentation": [
" Add a member `who` to the set.",
"",
" May only be called from `AddOrigin` or root."
" May only be called from `T::AddOrigin`."
]
},
{
@@ -6128,7 +6149,7 @@
"documentation": [
" Remove a member `who` from the set.",
"",
" May only be called from `RemoveOrigin` or root."
" May only be called from `T::RemoveOrigin`."
]
},
{
@@ -6146,7 +6167,7 @@
"documentation": [
" Swap out one member `remove` for another `add`.",
"",
" May only be called from `SwapOrigin` or root.",
" May only be called from `T::SwapOrigin`.",
"",
" Prime membership is *not* passed from `remove` to `add`, if extant."
]
@@ -6163,7 +6184,7 @@
" Change the membership to a new set, disregarding the existing membership. Be nice and",
" pass `members` pre-sorted.",
"",
" May only be called from `ResetOrigin` or root."
" May only be called from `T::ResetOrigin`."
]
},
{
@@ -6191,14 +6212,18 @@
}
],
"documentation": [
" Set the prime member. Must be a current member."
" Set the prime member. Must be a current member.",
"",
" May only be called from `T::PrimeOrigin`."
]
},
{
"name": "clear_prime",
"args": [],
"documentation": [
" Remove the prime member if it exists."
" Remove the prime member if it exists.",
"",
" May only be called from `T::PrimeOrigin`."
]
}
],
@@ -6398,15 +6423,35 @@
"type": "KeyOwnerProof"
}
],
"documentation": [
" Report voter equivocation/misbehavior. This method will verify the",
" equivocation proof and validate the given key ownership proof",
" against the extracted offender. If both are valid, the offence",
" will be reported."
]
},
{
"name": "report_equivocation_unsigned",
"args": [
{
"name": "equivocation_proof",
"type": "GrandpaEquivocationProof"
},
{
"name": "key_owner_proof",
"type": "KeyOwnerProof"
}
],
"documentation": [
" Report voter equivocation/misbehavior. This method will verify the",
" equivocation proof and validate the given key ownership proof",
" against the extracted offender. If both are valid, the offence",
" will be reported.",
"",
" Since the weight of the extrinsic is 0, in order to avoid DoS by",
" submission of invalid equivocation reports, a mandatory pre-validation of",
" the extrinsic is implemented in a `SignedExtension`."
" This extrinsic must be called unsigned and it is expected that only",
" block authors will call it (validated in `ValidateUnsigned`), as such",
" if the block author is defined it will be defined as the equivocation",
" reporter."
]
}
],
@@ -6469,6 +6514,12 @@
" A key ownership proof provided as part of an equivocation report is invalid."
]
},
{
"name": "InvalidEquivocationProof",
"documentation": [
" An equivocation proof provided as part of an equivocation report is invalid."
]
},
{
"name": "DuplicateOffenceReport",
"documentation": [
@@ -6593,6 +6644,8 @@
"documentation": [
" Reject a proposed spend. The original deposit will be slashed.",
"",
" May only be called from `T::RejectOrigin`.",
"",
" # <weight>",
" - Complexity: O(1)",
" - DbReads: `Proposals`, `rejected proposer account`",
@@ -6612,6 +6665,8 @@
" Approve a proposal. At a later time, the proposal will be allocated to the beneficiary",
" and the original deposit will be returned.",
"",
" May only be called from `T::ApproveOrigin`.",
"",
" # <weight>",
" - Complexity: O(1).",
" - DbReads: `Proposals`, `Approvals`",
@@ -7217,17 +7272,6 @@
}
],
"events": [
{
"name": "Transfer",
"args": [
"AccountId",
"AccountId",
"Balance"
],
"documentation": [
" Transfer happened `from` to `to` with given `value` as part of a `call` or `instantiate`."
]
},
{
"name": "Instantiated",
"args": [
@@ -7259,19 +7303,17 @@
"AccountId",
"AccountId",
"Hash",
"Balance",
"bool"
"Balance"
],
"documentation": [
" Restoration for a contract has been initiated.",
" Restoration for a contract has been successful.",
"",
" # Params",
"",
" - `donor`: `AccountId`: Account ID of the restoring contract",
" - `dest`: `AccountId`: Account ID of the restored contract",
" - `code_hash`: `Hash`: Code hash of the restored contract",
" - `rent_allowance: `Balance`: Rent allowance of the restored contract",
" - `success`: `bool`: True if the restoration was successful"
" - `rent_allowance: `Balance`: Rent allowance of the restored contract"
]
},
{
@@ -7292,17 +7334,6 @@
" Triggered when the current schedule is updated."
]
},
{
"name": "Dispatched",
"args": [
"AccountId",
"bool"
],
"documentation": [
" A call was dispatched from the given account. The bool signals whether it was",
" successful execution or not."
]
},
{
"name": "ContractExecution",
"args": [
@@ -7329,7 +7360,7 @@
{
"name": "TombstoneDeposit",
"type": "BalanceOf",
"value": "0x00407a10f35a00000000000000000000",
"value": "0x00a0acb9030000000000000000000000",
"documentation": [
" The minimum amount required to generate a tombstone."
]
@@ -7350,7 +7381,7 @@
{
"name": "RentByteFee",
"type": "BalanceOf",
"value": "0x00407a10f35a00000000000000000000",
"value": "0x00286bee000000000000000000000000",
"documentation": [
" Price of a byte of storage per one block interval. Should be greater than 0."
]
@@ -7358,7 +7389,7 @@
{
"name": "RentDepositOffset",
"type": "BalanceOf",
"value": "0x00008a5d784563010000000000000000",
"value": "0x0010a5d4e80000000000000000000000",
"documentation": [
" The amount of funds a contract should deposit in order to offset",
" the cost of one byte.",
@@ -7372,7 +7403,7 @@
{
"name": "SurchargeReward",
"type": "BalanceOf",
"value": "0x0080a1a76b4a35000000000000000000",
"value": "0x005cb2ec220000000000000000000000",
"documentation": [
" Reward that is received by the party whose touch has led",
" to removal of a contract."
@@ -7432,6 +7463,27 @@
"documentation": [
" An origin TrieId written in the current block."
]
},
{
"name": "OutOfGas",
"documentation": [
" The executed contract exhausted its gas limit."
]
},
{
"name": "OutputBufferTooSmall",
"documentation": [
" The output buffer supplied to a contract API call was too small."
]
},
{
"name": "InsufficientBalance",
"documentation": [
" Performing the requested transfer would have brought the contract below",
" the subsistence threshold. No transfer is allowed to do this in order to allow",
" for a tombstone to be created. Use `ext_terminate` to remove a contract without",
" leaving a tombstone behind."
]
}
]
},
@@ -7947,7 +7999,7 @@
"documentation": [
" Add a registrar to the system.",
"",
" The dispatch origin for this call must be `RegistrarOrigin` or `Root`.",
" The dispatch origin for this call must be `T::RegistrarOrigin`.",
"",
" - `account`: the account of the registrar.",
"",
@@ -8249,7 +8301,7 @@
" `Slash`. Verification request deposits are not returned; they should be cancelled",
" manually using `cancel_request`.",
"",
" The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.",
" The dispatch origin for this call must match `T::ForceOrigin`.",
"",
" - `target`: the account whose identity the judgement is upon. This must be an account",
" with a registered identity.",
@@ -8263,6 +8315,81 @@
" - One event.",
" # </weight>"
]
},
{
"name": "add_sub",
"args": [
{
"name": "sub",
"type": "LookupSource"
},
{
"name": "data",
"type": "Data"
}
],
"documentation": [
" Add the given account to the sender's subs.",
"",
" Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated",
" to the sender.",
"",
" The dispatch origin for this call must be _Signed_ and the sender must have a registered",
" sub identity of `sub`."
]
},
{
"name": "rename_sub",
"args": [
{
"name": "sub",
"type": "LookupSource"
},
{
"name": "data",
"type": "Data"
}
],
"documentation": [
" Alter the associated name of the given sub-account.",
"",
" The dispatch origin for this call must be _Signed_ and the sender must have a registered",
" sub identity of `sub`."
]
},
{
"name": "remove_sub",
"args": [
{
"name": "sub",
"type": "LookupSource"
}
],
"documentation": [
" Remove the given account from the sender's subs.",
"",
" Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated",
" to the sender.",
"",
" The dispatch origin for this call must be _Signed_ and the sender must have a registered",
" sub identity of `sub`."
]
},
{
"name": "quit_sub",
"args": [],
"documentation": [
" Remove the sender as a sub-account.",
"",
" Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated",
" to the sender (*not* the original depositor).",
"",
" The dispatch origin for this call must be _Signed_ and the sender must have a registered",
" super-identity.",
"",
" NOTE: This should not normally be used, but is provided in the case that the non-",
" controller of an account is maliciously registered as a sub-account."
]
}
],
"events": [
@@ -8333,6 +8460,40 @@
"documentation": [
" A registrar was added."
]
},
{
"name": "SubIdentityAdded",
"args": [
"AccountId",
"AccountId",
"Balance"
],
"documentation": [
" A sub-identity (first) was added to an identity (second) and the deposit paid."
]
},
{
"name": "SubIdentityRemoved",
"args": [
"AccountId",
"AccountId",
"Balance"
],
"documentation": [
" A sub-identity (first) was removed from an identity (second) and the deposit freed."
]
},
{
"name": "SubIdentityRevoked",
"args": [
"AccountId",
"AccountId",
"Balance"
],
"documentation": [
" A sub-identity (first arg) was cleared, and the given deposit repatriated from the",
" main identity account (second arg) to the sub-identity account."
]
}
],
"constants": [
@@ -8467,6 +8628,24 @@
"documentation": [
" Maximum amount of registrars reached. Cannot add any more."
]
},
{
"name": "AlreadyClaimed",
"documentation": [
" Account ID is already named."
]
},
{
"name": "NotSub",
"documentation": [
" Sender is not a sub-account."
]
},
{
"name": "NotOwned",
"documentation": [
" Sub-account isn't owned by sender."
]
}
]
},
@@ -9269,6 +9448,15 @@
"documentation": [
" Society is unfounded."
]
},
{
"name": "Deposit",
"args": [
"Balance"
],
"documentation": [
" Some funds were deposited into the society account."
]
}
],
"constants": [
@@ -10223,6 +10411,19 @@
"documentation": [
" Lookup from identity to the block number and index of the task."
]
},
{
"name": "StorageVersion",
"modifier": "Default",
"type": {
"Plain": "Releases"
},
"fallback": "0x00",
"documentation": [
" Storage version of the pallet.",
"",
" New networks start with last version."
]
}
]
},
@@ -10342,6 +10543,66 @@
" - Will use base weight of 100 which should be good for up to 30 scheduled calls",
" # </weight>"
]
},
{
"name": "schedule_after",
"args": [
{
"name": "after",
"type": "BlockNumber"
},
{
"name": "maybe_periodic",
"type": "Option<Period>"
},
{
"name": "priority",
"type": "Priority"
},
{
"name": "call",
"type": "Call"
}
],
"documentation": [
" Anonymously schedule a task after a delay.",
"",
" # <weight>",
" Same as [`schedule`].",
" # </weight>"
]
},
{
"name": "schedule_named_after",
"args": [
{
"name": "id",
"type": "Bytes"
},
{
"name": "after",
"type": "BlockNumber"
},
{
"name": "maybe_periodic",
"type": "Option<Period>"
},
{
"name": "priority",
"type": "Priority"
},
{
"name": "call",
"type": "Call"
}
],
"documentation": [
" Schedule a named task after a delay.",
"",
" # <weight>",
" Same as [`schedule_named`].",
" # </weight>"
]
}
],
"events": [
@@ -10372,7 +10633,26 @@
}
],
"constants": [],
"errors": []
"errors": [
{
"name": "FailedToSchedule",
"documentation": [
" Failed to schedule a call"
]
},
{
"name": "FailedToCancel",
"documentation": [
" Failed to cancel a scheduled call"
]
},
{
"name": "TargetBlockNumberInPast",
"documentation": [
" Given target block number is in the past."
]
}
]
},
{
"name": "Proxy",
@@ -10713,7 +10993,7 @@
"Map": {
"hasher": "Identity",
"key": "[u8;32]",
"value": "(Bytes,AccountId,BalanceOf)",
"value": "(OpaqueCall,AccountId,BalanceOf)",
"linked": false
}
},
@@ -10772,7 +11052,7 @@
},
{
"name": "call",
"type": "Bytes"
"type": "OpaqueCall"
},
{
"name": "store_call",
@@ -11103,11 +11383,10 @@
"CheckSpecVersion",
"CheckTxVersion",
"CheckGenesis",
"CheckEra",
"CheckMortality",
"CheckNonce",
"CheckWeight",
"ChargeTransactionPayment",
"ValidateEquivocationReport"
"ChargeTransactionPayment"
]
}
}
File diff suppressed because one or more lines are too long
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/rpc-core",
"version": "1.22.1",
"version": "1.25.1",
"description": "A JavaScript wrapper for the Polkadot JsonRPC interface",
"main": "index.js",
"keywords": [
@@ -26,15 +26,15 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/rpc-core#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/metadata": "1.22.1",
"@polkadot/rpc-provider": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/metadata": "1.25.1",
"@polkadot/rpc-provider": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"memoizee": "^0.4.14",
"rxjs": "^6.5.5"
"rxjs": "^6.6.0"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1"
"@polkadot/keyring": "^2.18.1"
}
}
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/rpc-provider",
"version": "1.22.1",
"version": "1.25.1",
"description": "Transport providers for the API",
"main": "index.js",
"keywords": [
@@ -26,19 +26,19 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/rpc-provider#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/metadata": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@polkadot/util-crypto": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/metadata": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"@polkadot/util-crypto": "^2.18.1",
"bn.js": "^5.1.2",
"eventemitter3": "^4.0.4",
"isomorphic-fetch": "^2.2.1",
"websocket": "^1.0.31"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1",
"@polkadot/keyring": "^2.18.1",
"mock-socket": "^9.0.3",
"nock": "^12.0.3"
"nock": "^13.0.2"
}
}
@@ -24,6 +24,12 @@ describe('Http', (): void => {
).not.toThrow();
});
it('allows custom headers', (): void => {
expect(
(): Http => new Http('https://', { foo: 'bar' })
).not.toThrow();
});
it('always returns isConnected true', (): void => {
expect(http.isConnected()).toEqual(true);
});
+6 -2
View File
@@ -40,14 +40,17 @@ export default class HttpProvider implements ProviderInterface {
readonly #endpoint: string;
readonly #headers: Record<string, string>;
/**
* @param {string} endpoint The endpoint url starting with http://
*/
constructor (endpoint: string = defaults.HTTP_URL) {
constructor (endpoint: string = defaults.HTTP_URL, headers: Record<string, string> = {}) {
assert(/^(https|http):\/\//.test(endpoint), `Endpoint should start with 'http://', received '${endpoint}'`);
this.#coder = new Coder();
this.#endpoint = endpoint;
this.#headers = headers;
}
/**
@@ -102,7 +105,8 @@ export default class HttpProvider implements ProviderInterface {
headers: {
Accept: 'application/json',
'Content-Length': `${body.length}`,
'Content-Type': 'application/json'
'Content-Type': 'application/json',
...this.#headers
},
method: 'POST'
});
+10 -3
View File
@@ -7,7 +7,7 @@
import { JsonRpcResponse, ProviderInterface, ProviderInterfaceCallback, ProviderInterfaceEmitted, ProviderInterfaceEmitCb } from '../types';
import EventEmitter from 'eventemitter3';
import { assert, isNull, isUndefined, logger } from '@polkadot/util';
import { assert, isNull, isUndefined, isChildClass, logger } from '@polkadot/util';
import Coder from '../coder';
import defaults from '../defaults';
@@ -67,6 +67,8 @@ export default class WsProvider implements WSProviderInterface {
readonly #endpoints: string[];
readonly #headers: Record<string, string>;
readonly #eventemitter: EventEmitter;
readonly #handlers: Record<string, WsStateAwaiting> = {};
@@ -89,7 +91,7 @@ export default class WsProvider implements WSProviderInterface {
* @param {string | string[]} endpoint The endpoint url. Usually `ws://ip:9944` or `wss://ip:9944`, may provide an array of endpoint strings.
* @param {boolean} autoConnect Whether to connect automatically or not.
*/
constructor (endpoint: string | string[] = defaults.WS_URL, autoConnectMs: number | false = 1000) {
constructor (endpoint: string | string[] = defaults.WS_URL, autoConnectMs: number | false = 1000, headers: Record<string, string> = {}) {
const endpoints = Array.isArray(endpoint)
? endpoint
: [endpoint];
@@ -105,6 +107,7 @@ export default class WsProvider implements WSProviderInterface {
this.#coder = new Coder();
this.#endpointIndex = -1;
this.#endpoints = endpoints;
this.#headers = headers;
this.#websocket = null;
if (autoConnectMs > 0) {
@@ -138,7 +141,11 @@ export default class WsProvider implements WSProviderInterface {
const WS = await getWSClass();
this.#websocket = new WS(this.#endpoints[this.#endpointIndex]);
this.#websocket = typeof WebSocket !== 'undefined' && isChildClass(WebSocket, WS)
? new WS(this.#endpoints[this.#endpointIndex])
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore - WS may be an instance of w3cwebsocket, which supports headers
: new WS(this.#endpoints[this.#endpointIndex], undefined, undefined, this.#headers);
this.#websocket.onclose = this.#onSocketClose;
this.#websocket.onerror = this.#onSocketError;
this.#websocket.onmessage = this.#onSocketMessage;
@@ -28,6 +28,12 @@ describe('Ws', (): void => {
createWs([]).isConnected()
).toEqual(false);
});
it('allows you to initialize the provider with custom headers', (): void => {
expect(
(): WsProvider => new WsProvider(TEST_WS_URL, 1000, { foo: 'bar' })
).not.toThrow();
});
});
describe('Endpoint Parsing', (): void => {
+11 -11
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/typegen",
"version": "1.22.1",
"version": "1.25.1",
"description": "Type generation scripts",
"main": "index.js",
"bin": {
@@ -33,20 +33,20 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/typegen#readme",
"dependencies": {
"@babel/core": "^7.10.3",
"@babel/register": "^7.10.3",
"@babel/runtime": "^7.10.3",
"@polkadot/api": "1.22.1",
"@polkadot/metadata": "1.22.1",
"@polkadot/rpc-provider": "1.22.1",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@babel/core": "^7.10.5",
"@babel/register": "^7.10.5",
"@babel/runtime": "^7.10.5",
"@polkadot/api": "1.25.1",
"@polkadot/metadata": "1.25.1",
"@polkadot/rpc-provider": "1.25.1",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"handlebars": "^4.7.6",
"websocket": "^1.0.31",
"yargs": "^15.3.1"
"yargs": "^15.4.1"
},
"devDependencies": {
"@types/websocket": "^1.0.0",
"@types/websocket": "^1.0.1",
"@types/yargs": "^15.0.5"
}
}
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/types-known",
"version": "1.22.1",
"version": "1.25.1",
"description": "A JavaScript wrapper for the Polkadot JsonRPC interface",
"main": "index.js",
"keywords": [
@@ -26,9 +26,9 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types-known#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/types": "1.22.1",
"@polkadot/util": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/types": "1.25.1",
"@polkadot/util": "^2.18.1",
"bn.js": "^5.1.2"
},
"devDependencies": {
@@ -4,17 +4,29 @@
import { OverrideVersionedType } from '@polkadot/types/types';
const sharedTypes = {
Address: 'GenericAddress',
LookupSource: 'GenericAddress',
Multiplier: 'Fixed64',
ReferendumInfo: 'ReferendumInfoTo239',
StakingLedger: 'StakingLedgerTo240',
Weight: 'u32'
};
const versioned: OverrideVersionedType[] = [
{
// most chains started at 1000 (Fulvous at 224)
minmax: [1, undefined],
minmax: [1, 228],
types: {
...sharedTypes,
Address: 'AccountId',
LookupSource: 'AccountId',
Multiplier: 'Fixed64',
ReferendumInfo: 'ReferendumInfoTo239',
StakingLedger: 'StakingLedgerTo240',
Weight: 'u32'
LookupSource: 'AccountId'
}
},
{
minmax: [229, undefined],
types: {
...sharedTypes
}
}
];
+4 -1
View File
@@ -7,7 +7,10 @@ import { OverrideVersionedType } from '@polkadot/types/types';
const sharedTypes = {
Address: 'AccountId',
Keys: 'SessionKeys5',
LookupSource: 'AccountId'
LookupSource: 'AccountId',
ProxyType: {
_enum: ['Any', 'NonTransfer', 'Governance', 'Staking', 'IdentityJudgement']
}
};
const versioned: OverrideVersionedType[] = [
+1 -1
View File
@@ -9,7 +9,7 @@ const sharedTypes = {
Keys: 'SessionKeys5',
LookupSource: 'AccountId',
ProxyType: {
_enum: ['Any', 'NonTransfer', 'Governance', 'Staking', 'SudoBalances']
_enum: ['Any', 'NonTransfer', 'Governance', 'Staking', 'SudoBalances', 'IdentityJudgement']
}
};
+1 -1
View File
@@ -9,7 +9,7 @@ const sharedTypes = {
Keys: 'SessionKeys5',
LookupSource: 'AccountId',
ProxyType: {
_enum: ['Any', 'NonTransfer', 'Staking', 'SudoBalances']
_enum: ['Any', 'NonTransfer', 'Staking', 'SudoBalances', 'IdentityJudgement']
}
};
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@polkadot/types",
"version": "1.22.1",
"version": "1.25.1",
"description": "Implementation of the Parity codec",
"main": "index.js",
"keywords": [
@@ -26,17 +26,17 @@
},
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types#readme",
"dependencies": {
"@babel/runtime": "^7.10.3",
"@polkadot/metadata": "1.22.1",
"@polkadot/util": "^2.16.1",
"@polkadot/util-crypto": "^2.16.1",
"@babel/runtime": "^7.10.5",
"@polkadot/metadata": "1.25.1",
"@polkadot/util": "^2.18.1",
"@polkadot/util-crypto": "^2.18.1",
"@types/bn.js": "^4.11.6",
"bn.js": "^5.1.2",
"memoizee": "^0.4.14",
"rxjs": "^6.5.5"
"rxjs": "^6.6.0"
},
"devDependencies": {
"@polkadot/keyring": "^2.16.1",
"@polkadot/keyring": "^2.18.1",
"@types/memoizee": "^0.4.4"
}
}
+22 -2
View File
@@ -14,7 +14,7 @@ import { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
import { EthereumAddress, StatementKind } from '@polkadot/types/interfaces/claims';
import { MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective';
import { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus';
import { AliveContractInfo, CodeHash, ContractCallRequest, ContractExecResult, ContractExecResultSuccess, ContractInfo, ContractStorageKey, Gas, PrefabWasmModule, PrefabWasmModuleReserved, Schedule, ScheduleTo212, SeedOf, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
import { AliveContractInfo, CodeHash, ContractCallRequest, ContractExecResult, ContractExecResultSuccess, ContractExecResultSuccessTo255, ContractExecResultTo255, ContractInfo, ContractStorageKey, Gas, PrefabWasmModule, PrefabWasmModuleReserved, Schedule, ScheduleTo212, SeedOf, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
import { 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 { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections';
import { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine';
@@ -29,9 +29,11 @@ import { StorageKind } from '@polkadot/types/interfaces/offchain';
import { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences';
import { AbridgedCandidateReceipt, AttestedCandidate, AuctionIndex, Bidder, CandidateCommitments, CandidateReceipt, CollatorId, CollatorSignature, DoubleVoteReport, DownwardMessage, GlobalValidationSchedule, HeadData, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, LeasePeriod, LeasePeriodOf, LocalValidationData, NewBidder, ParaId, ParaInfo, ParaPastCodeMeta, ParaScheduling, ParachainDispatchOrigin, Remark, Retriable, Scheduling, SigningContext, SlotRange, Statement, SubId, UpwardMessage, ValidationCode, ValidatorSignature, ValidityAttestation, WinningData, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
import { RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
import { Approvals } from '@polkadot/types/interfaces/poll';
import { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase';
import { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery';
import { RpcMethods } from '@polkadot/types/interfaces/rpc';
import { AccountId, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, Call, ChangesTrieConfiguration, Consensus, ConsensusEngineId, Digest, DigestItem, ExtrinsicsWeight, Fixed128, Fixed64, H160, H256, H512, Hash, Header, Index, Justification, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, Origin, Pays, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, ProxyType, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, StorageData, ValidatorId, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime';
import { AccountId, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, Call, ChangesTrieConfiguration, Consensus, ConsensusEngineId, Digest, DigestItem, ExtrinsicsWeight, Fixed128, Fixed64, H160, H256, H512, Hash, Header, Index, Justification, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, OpaqueCall, Origin, Pays, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, ProxyType, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, StorageData, ValidatorId, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime';
import { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, TaskAddress } from '@polkadot/types/interfaces/scheduler';
import { FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, ValidatorCount } from '@polkadot/types/interfaces/session';
import { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society';
@@ -225,6 +227,9 @@ declare module '@polkadot/types/types/registry' {
'Compact<Moment>': Compact<Moment>;
'Option<Moment>': Option<Moment>;
'Vec<Moment>': Vec<Moment>;
OpaqueCall: OpaqueCall;
'Option<OpaqueCall>': Option<OpaqueCall>;
'Vec<OpaqueCall>': Vec<OpaqueCall>;
Origin: Origin;
'Option<Origin>': Option<Origin>;
'Vec<Origin>': Vec<Origin>;
@@ -419,6 +424,12 @@ declare module '@polkadot/types/types/registry' {
ContractCallRequest: ContractCallRequest;
'Option<ContractCallRequest>': Option<ContractCallRequest>;
'Vec<ContractCallRequest>': Vec<ContractCallRequest>;
ContractExecResultSuccessTo255: ContractExecResultSuccessTo255;
'Option<ContractExecResultSuccessTo255>': Option<ContractExecResultSuccessTo255>;
'Vec<ContractExecResultSuccessTo255>': Vec<ContractExecResultSuccessTo255>;
ContractExecResultTo255: ContractExecResultTo255;
'Option<ContractExecResultTo255>': Option<ContractExecResultTo255>;
'Vec<ContractExecResultTo255>': Vec<ContractExecResultTo255>;
ContractExecResultSuccess: ContractExecResultSuccess;
'Option<ContractExecResultSuccess>': Option<ContractExecResultSuccess>;
'Vec<ContractExecResultSuccess>': Vec<ContractExecResultSuccess>;
@@ -1268,6 +1279,15 @@ declare module '@polkadot/types/types/registry' {
WinningDataEntry: WinningDataEntry;
'Option<WinningDataEntry>': Option<WinningDataEntry>;
'Vec<WinningDataEntry>': Vec<WinningDataEntry>;
Approvals: Approvals;
'Option<Approvals>': Option<Approvals>;
'Vec<Approvals>': Vec<Approvals>;
AccountStatus: AccountStatus;
'Option<AccountStatus>': Option<AccountStatus>;
'Vec<AccountStatus>': Vec<AccountStatus>;
AccountValidity: AccountValidity;
'Option<AccountValidity>': Option<AccountValidity>;
'Vec<AccountValidity>': Vec<AccountValidity>;
CallMetadataV0: CallMetadataV0;
'Option<CallMetadataV0>': Option<CallMetadataV0>;
'Vec<CallMetadataV0>': Vec<CallMetadataV0>;
+3 -2
View File
@@ -6,7 +6,7 @@ import { H256 } from '../interfaces/runtime';
import { AnyNumber, Codec, Registry } from '../types';
import BN from 'bn.js';
import { assert, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isHex, isString, isU8a, u8aToBn } from '@polkadot/util';
import { BN_ZERO, assert, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isHex, isString, isU8a, u8aToBn } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
import Raw from './Raw';
@@ -77,6 +77,7 @@ export default abstract class AbstractInt extends BN implements Codec {
this.#isHexJson = isHexJson;
this.#isSigned = isSigned;
assert(isSigned || this.gte(BN_ZERO), `${this.toRawType()}: Negative number passed to unsigned type`);
assert(super.bitLength() <= bitLength, `${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${bitLength}`);
}
@@ -161,7 +162,7 @@ export default abstract class AbstractInt extends BN implements Codec {
* @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
public toHuman (isExpanded?: boolean): any {
public toHuman (isExpanded?: boolean): string {
// FIXME we need proper expansion here
return this instanceof this.registry.createClass('Balance')
? this.isMax()
+1 -1
View File
@@ -171,7 +171,7 @@ export default class BTreeSet<V extends Codec = Codec> extends Set<V> implements
* @description Returns the base runtime type name for this instance
*/
public toRawType (): string {
return `BTreeSet<${new this.#ValClass(this.registry).toRawType()}>`;
return `BTreeSet<${this.registry.getClassName(this.#ValClass) || new this.#ValClass(this.registry).toRawType()}>`;
}
/**
+72 -15
View File
@@ -2,15 +2,17 @@
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import { AnyNumber, Codec, Constructor, ICompact, InterfaceTypes, Registry } from '../types';
import { H256 } from '@polkadot/types/interfaces';
import { AnyJson, AnyNumber, Codec, Constructor, ICompact, InterfaceTypes, Registry } from '../types';
import BN from 'bn.js';
import { compactAddLength, compactFromU8a, compactStripLength, compactToU8a, isBigInt, isBn, isNumber, isString } from '@polkadot/util';
import { DEFAULT_BITLENGTH } from '@polkadot/util/compact/defaults';
import { blake2AsU8a } from '@polkadot/util-crypto';
import typeToConstructor from './utils/typeToConstructor';
import { UIntBitLength } from './AbstractInt';
import Base from './Base';
import Raw from './Raw';
export interface CompactEncodable extends Codec {
bitLength (): number;
@@ -26,11 +28,17 @@ export interface CompactEncodable extends Codec {
* used by other types to add length-prefixed encoding, or in the case of wrapped types, taking
* a number and making the compact representation thereof
*/
export default class Compact<T extends CompactEncodable> extends Base<T> implements ICompact<T> {
export default class Compact<T extends CompactEncodable> implements ICompact<T> {
public readonly registry: Registry;
readonly #Type: Constructor<T>;
readonly #raw: T;
constructor (registry: Registry, Type: Constructor<T> | keyof InterfaceTypes, value: Compact<T> | AnyNumber = 0) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
super(registry, Compact.decodeCompact<T>(registry, typeToConstructor(registry, Type), value));
this.registry = registry;
this.#Type = typeToConstructor(registry, Type);
this.#raw = Compact.decodeCompact<T>(registry, this.#Type, value) as T;
}
public static with<T extends CompactEncodable> (Type: Constructor<T> | keyof InterfaceTypes): Constructor<Compact<T>> {
@@ -61,7 +69,7 @@ export default class Compact<T extends CompactEncodable> extends Base<T> impleme
/** @internal */
public static decodeCompact<T extends CompactEncodable> (registry: Registry, Type: Constructor<T>, value: Compact<T> | AnyNumber): CompactEncodable {
if (value instanceof Compact) {
return new Type(registry, value._raw);
return new Type(registry, value.#raw);
} else if (isString(value) || isNumber(value) || isBn(value) || isBigInt(value)) {
return new Type(registry, value);
}
@@ -71,20 +79,41 @@ export default class Compact<T extends CompactEncodable> extends Base<T> impleme
return new Type(registry, _value);
}
/**
* @description The length of the value when encoded as a Uint8Array
*/
public get encodedLength (): number {
return this.toU8a().length;
}
/**
* @description returns a hash of the contents
*/
public get hash (): H256 {
return new Raw(this.registry, blake2AsU8a(this.toU8a(), 256));
}
/**
* @description Checks if the value is an empty value
*/
public get isEmpty (): boolean {
return this.#raw.isEmpty;
}
/**
* @description Returns the number of bits in the value
*/
public bitLength (): number {
return this._raw.bitLength();
return this.#raw.bitLength();
}
/**
* @description Compares the value of the input to see if there is a match
*/
public eq (other?: unknown): boolean {
return this._raw.eq(
return this.#raw.eq(
other instanceof Compact
? other._raw
? other.#raw
: other
);
}
@@ -93,21 +122,49 @@ export default class Compact<T extends CompactEncodable> extends Base<T> impleme
* @description Returns the BN representation of the number
*/
public toBn (): BN {
return this._raw.toBn();
return this.#raw.toBn();
}
/**
* @description Returns a hex string representation of the value. isLe returns a LE (number-only) representation
*/
public toHex (isLe?: boolean): string {
return this.#raw.toHex(isLe);
}
/**
* @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
*/
public toHuman (isExtended?: boolean): AnyJson {
return this.#raw.toHuman(isExtended);
}
/**
* @description Converts the Object to JSON, typically used for RPC transfers
*/
public toJSON (): AnyJson {
return this.#raw.toJSON();
}
/**
* @description Returns the number representation for the value
*/
public toNumber (): number {
return this._raw.toNumber();
return this.#raw.toNumber();
}
/**
* @description Returns the base runtime type name for this instance
*/
public toRawType (): string {
return `Compact<${this._raw.toRawType()}>`;
return `Compact<${this.registry.getClassName(this.#Type) || this.#raw.toRawType()}>`;
}
/**
* @description Returns the string representation of the value
*/
public toString (): string {
return this.#raw.toString();
}
/**
@@ -116,13 +173,13 @@ export default class Compact<T extends CompactEncodable> extends Base<T> impleme
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
public toU8a (isBare?: boolean): Uint8Array {
return Compact.encodeU8a(this._raw.toBn());
return Compact.encodeU8a(this.#raw.toBn());
}
/**
* @description Returns the embedded [[UInt]] or [[Moment]] value
*/
public unwrap (): T {
return this._raw;
return this.#raw;
}
}
+51 -31
View File
@@ -2,13 +2,15 @@
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import { H256 } from '@polkadot/types/interfaces';
import { AnyJson, Codec, Constructor, InterfaceTypes, Registry } from '../types';
import { assert, hexToU8a, isHex, isNumber, isObject, isString, isU8a, isUndefined, stringCamelCase, stringUpperFirst, u8aConcat, u8aToHex } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
import Null from '../primitive/Null';
import { mapToTypeMap } from './utils';
import Base from './Base';
import Raw from './Raw';
import Struct from './Struct';
// export interface, this is used in Enum.with, so required as public by TS
@@ -114,25 +116,29 @@ function decodeEnum (registry: Registry, def: TypesDef, value?: any, index?: num
// TODO:
// - As per Enum, actually use TS enum
// - It should rather probably extend Enum instead of copying code
export default class Enum extends Base<Codec> {
private _def: TypesDef;
export default class Enum implements Codec {
public readonly registry: Registry;
private _index: number;
readonly #def: TypesDef;
private _indexes: number[];
readonly #index: number;
private _isBasic: boolean;
readonly #indexes: number[];
readonly #isBasic: boolean;
readonly #raw: Codec;
constructor (registry: Registry, def: Record<string, keyof InterfaceTypes | Constructor> | string[], value?: unknown, index?: number) {
const defInfo = extractDef(registry, def);
const decoded = decodeEnum(registry, defInfo.def, value, index);
super(registry, decoded.value);
this._def = defInfo.def;
this._isBasic = defInfo.isBasic;
this._indexes = Object.keys(defInfo.def).map((_, index): number => index);
this._index = this._indexes.indexOf(decoded.index) || 0;
this.registry = registry;
this.#def = defInfo.def;
this.#isBasic = defInfo.isBasic;
this.#indexes = Object.keys(defInfo.def).map((_, index): number => index);
this.#index = this.#indexes.indexOf(decoded.index) || 0;
this.#raw = decoded.value;
}
public static with (Types: Record<string, keyof InterfaceTypes | Constructor> | string[]): EnumConstructor<Enum> {
@@ -140,7 +146,7 @@ export default class Enum extends Base<Codec> {
constructor (registry: Registry, value?: unknown, index?: number) {
super(registry, Types, value, index);
Object.keys(this._def).forEach((_key): void => {
Object.keys(this.#def).forEach((_key): void => {
const name = stringUpperFirst(stringCamelCase(_key.replace(' ', '_')));
const askey = `as${name}`;
const iskey = `is${name}`;
@@ -175,21 +181,35 @@ export default class Enum extends Base<Codec> {
* @description The length of the value when encoded as a Uint8Array
*/
public get encodedLength (): number {
return 1 + this._raw.encodedLength;
return 1 + this.#raw.encodedLength;
}
/**
* @description returns a hash of the contents
*/
public get hash (): H256 {
return new Raw(this.registry, blake2AsU8a(this.toU8a(), 256));
}
/**
* @description The index of the metadata value
*/
public get index (): number {
return this._index;
return this.#index;
}
/**
* @description true if this is a basic enum (no values)
*/
public get isBasic (): boolean {
return this._isBasic;
return this.#isBasic;
}
/**
* @description Checks if the value is an empty value
*/
public get isEmpty (): boolean {
return this.#raw.isEmpty;
}
/**
@@ -203,35 +223,35 @@ export default class Enum extends Base<Codec> {
* @description Checks if the Enum points to a [[Null]] type (deprecated, use isNone)
*/
public get isNull (): boolean {
return this._raw instanceof Null;
return this.#raw instanceof Null;
}
/**
* @description The available keys for this enum
*/
public get defEntries (): string[] {
return Object.keys(this._def);
return Object.keys(this.#def);
}
/**
* @description The available keys for this enum
*/
public get defKeys (): string[] {
return Object.keys(this._def);
return Object.keys(this.#def);
}
/**
* @description The name of the type this enum value represents
*/
public get type (): string {
return this.defKeys[this._index];
return this.defKeys[this.#index];
}
/**
* @description The value of the enum
*/
public get value (): Codec {
return this._raw;
return this.#raw;
}
/**
@@ -241,7 +261,7 @@ export default class Enum extends Base<Codec> {
// cater for the case where we only pass the enum index
if (isNumber(other)) {
return this.toNumber() === other;
} else if (this._isBasic && isString(other)) {
} else if (this.#isBasic && isString(other)) {
return this.type === other;
} else if (isU8a(other)) {
return !this.toU8a().some((entry, index): boolean => entry !== other[index]);
@@ -268,34 +288,34 @@ export default class Enum extends Base<Codec> {
* @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
*/
public toHuman (isExtended?: boolean): AnyJson {
return this._isBasic
return this.#isBasic
? this.type
: { [this.type]: this._raw.toHuman(isExtended) };
: { [this.type]: this.#raw.toHuman(isExtended) };
}
/**
* @description Converts the Object to JSON, typically used for RPC transfers
*/
public toJSON (): AnyJson {
return this._isBasic
return this.#isBasic
? this.type
: { [this.type]: this._raw.toJSON() };
: { [this.type]: this.#raw.toJSON() };
}
/**
* @description Returns the number representation for the value
*/
public toNumber (): number {
return this._index;
return this.#index;
}
/**
* @description Returns a raw struct representation of the enum types
*/
protected _toRawStruct (): string[] | Record<string, string> {
return this._isBasic
return this.#isBasic
? this.defKeys
: Struct.typesToMap(this.registry, this._def);
: Struct.typesToMap(this.registry, this.#def);
}
/**
@@ -319,11 +339,11 @@ export default class Enum extends Base<Codec> {
* @param isBare true when the value has none of the type-specific prefixes (internal)
*/
public toU8a (isBare?: boolean): Uint8Array {
const index = this._indexes[this._index];
const index = this.#indexes[this.#index];
return u8aConcat(
new Uint8Array([index]),
this._raw.toU8a(isBare)
this.#raw.toU8a(isBare)
);
}
}
+1 -1
View File
@@ -180,7 +180,7 @@ export default class CodecMap<K extends Codec = Codec, V extends Codec = Codec>
* @description Returns the base runtime type name for this instance
*/
public toRawType (): string {
return `${this.#type}<${new this.#KeyClass(this.registry).toRawType()},${new this.#ValClass(this.registry).toRawType()}>`;
return `${this.#type}<${this.registry.getClassName(this.#KeyClass) || new this.#KeyClass(this.registry).toRawType()},${this.registry.getClassName(this.#ValClass) || new this.#ValClass(this.registry).toRawType()}>`;
}
/**
+46 -14
View File
@@ -2,13 +2,15 @@
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import { Codec, Constructor, InterfaceTypes, Registry } from '../types';
import { H256 } from '@polkadot/types/interfaces';
import { AnyJson, Codec, Constructor, InterfaceTypes, Registry } from '../types';
import { isNull, isU8a, isUndefined, u8aToHex } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
import Null from '../primitive/Null';
import { typeToConstructor } from './utils';
import Base from './Base';
import Raw from './Raw';
/** @internal */
function decodeOptionU8a (registry: Registry, Type: Constructor, value: Uint8Array): Codec {
@@ -48,15 +50,17 @@ function decodeOption (registry: Registry, typeName: Constructor | keyof Interfa
* implements that - decodes, checks for optionality and wraps the required structure
* with a value if/as required/found.
*/
export default class Option<T extends Codec> extends Base<T> {
export default class Option<T extends Codec> implements Codec {
public readonly registry: Registry;
readonly #Type: Constructor<T>;
constructor (registry: Registry, typeName: Constructor<T> | keyof InterfaceTypes, value?: unknown) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
super(registry, decodeOption(registry, typeName, value));
readonly #raw: T;
constructor (registry: Registry, typeName: Constructor<T> | keyof InterfaceTypes, value?: unknown) {
this.registry = registry;
this.#Type = typeToConstructor(registry, typeName);
this.#raw = decodeOption(registry, typeName, value) as T;
}
public static with<O extends Codec> (Type: Constructor<O> | keyof InterfaceTypes): Constructor<Option<O>> {
@@ -72,7 +76,14 @@ export default class Option<T extends Codec> extends Base<T> {
*/
public get encodedLength (): number {
// boolean byte (has value, doesn't have) along with wrapped length
return 1 + this._raw.encodedLength;
return 1 + this.#raw.encodedLength;
}
/**
* @description returns a hash of the contents
*/
public get hash (): H256 {
return new Raw(this.registry, blake2AsU8a(this.toU8a(), 256));
}
/**
@@ -86,7 +97,7 @@ export default class Option<T extends Codec> extends Base<T> {
* @description Checks if the Option has no value
*/
public get isNone (): boolean {
return this._raw instanceof Null;
return this.#raw instanceof Null;
}
/**
@@ -100,7 +111,7 @@ export default class Option<T extends Codec> extends Base<T> {
* @description The actual value for the Option
*/
public get value (): Codec {
return this._raw;
return this.#raw;
}
/**
@@ -125,31 +136,52 @@ export default class Option<T extends Codec> extends Base<T> {
: u8aToHex(this.toU8a().subarray(1));
}
/**
* @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
*/
public toHuman (isExtended?: boolean): AnyJson {
return this.#raw.toHuman(isExtended);
}
/**
* @description Converts the Object to JSON, typically used for RPC transfers
*/
public toJSON (): AnyJson {
return this.#raw.toJSON();
}
/**
* @description Returns the base runtime type name for this instance
*/
public toRawType (isBare?: boolean): string {
const wrapped = new this.#Type(this.registry).toRawType();
const wrapped = this.registry.getClassName(this.#Type) || new this.#Type(this.registry).toRawType();
return isBare
? wrapped
: `Option<${wrapped}>`;
}
/**
* @description Returns the string representation of the value
*/
public toString (): string {
return this.#raw.toString();
}
/**
* @description Encodes the value as a Uint8Array as per the SCALE specifications
* @param isBare true when the value has none of the type-specific prefixes (internal)
*/
public toU8a (isBare?: boolean): Uint8Array {
if (isBare) {
return this._raw.toU8a(true);
return this.#raw.toU8a(true);
}
const u8a = new Uint8Array(this.encodedLength);
if (this.isSome) {
u8a.set([1]);
u8a.set(this._raw.toU8a(), 1);
u8a.set(this.#raw.toU8a(), 1);
}
return u8a;
@@ -163,7 +195,7 @@ export default class Option<T extends Codec> extends Base<T> {
throw new Error('Option: unwrapping a None value');
}
return this._raw;
return this.#raw;
}
/**
+17 -1
View File
@@ -23,7 +23,7 @@ const testEncode = (to: CodecTo, expected: any): void =>
expect(e[to]()).toEqual(expected);
});
describe('U8a', (): void => {
describe('Raw', (): void => {
let u8a: Raw;
beforeEach((): void => {
@@ -74,5 +74,21 @@ describe('U8a', (): void => {
it('compares against hex inputs', (): void => {
expect(u8a.eq('0x0102030405')).toBe(true);
});
it('has valid isAscii', (): void => {
expect(u8a.isAscii).toBe(false);
expect(new Raw(registry, '0x2021222324').isAscii).toBe(true);
});
it('has valid toUtf8', (): void => {
expect(new Raw(registry, 'Приветствую, ми').toUtf8()).toEqual('Приветствую, ми');
expect(new Raw(registry, '0xe4bda0e5a5bd').toUtf8()).toEqual('你好');
});
it('throws on invalid utf8', (): void => {
expect(
() => new Raw(registry, '0x7f07b1f87709608bee603bbc79a0dfc29cd315c1351a83aa31adf7458d7d3003').toUtf8()
).toThrow(/The character sequence is not a valid Utf8 string/);
});
});
});
+29 -4
View File
@@ -5,7 +5,7 @@
import { H256 } from '../interfaces/runtime';
import { AnyJson, AnyU8a, IU8a, Registry } from '../types';
import { isU8a, isUndefined, u8aToHex, u8aToU8a } from '@polkadot/util';
import { assert, isAscii, isU8a, isUndefined, isUtf8, u8aToHex, u8aToString, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a } from '@polkadot/util-crypto';
/** @internal */
@@ -49,11 +49,25 @@ export default class Raw extends Uint8Array implements IU8a {
return new Raw(this.registry, blake2AsU8a(this.toU8a(), 256));
}
/**
* @description Returns true if the wrapped value contains only ASCII printable characters
*/
public get isAscii (): boolean {
return isAscii(this);
}
/**
* @description Returns true if the type wraps an empty/default all-0 value
*/
public get isEmpty (): boolean {
return !this.length || isUndefined(this.find((value): boolean => !!value));
return !this.length || isUndefined(this.find((value) => !!value));
}
/**
* @description Returns true if the wrapped value contains only utf8 characters
*/
public get isUtf8 (): boolean {
return isUtf8(this);
}
/**
@@ -77,7 +91,7 @@ export default class Raw extends Uint8Array implements IU8a {
public eq (other?: unknown): boolean {
if (other instanceof Uint8Array) {
return (this.length === other.length) &&
!this.some((value, index): boolean => value !== other[index]);
!this.some((value, index) => value !== other[index]);
}
return this.eq(decodeU8a(other));
@@ -103,7 +117,9 @@ export default class Raw extends Uint8Array implements IU8a {
* @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
*/
public toHuman (): AnyJson {
return this.toJSON();
return this.isUtf8
? this.toUtf8()
: this.toJSON();
}
/**
@@ -135,4 +151,13 @@ export default class Raw extends Uint8Array implements IU8a {
public toU8a (isBare?: boolean): Uint8Array {
return Uint8Array.from(this);
}
/**
* @description Returns the wrapped data as a UTF-8 string
*/
public toUtf8 (): string {
assert(this.isUtf8, 'The character sequence is not a valid Utf8 string');
return u8aToString(this);
}
}
+1 -1
View File
@@ -58,6 +58,6 @@ describe('Result', (): void => {
});
it('returns a proper raw typedef rom a built-in', (): void => {
expect(registry.createType('DispatchResult').toRawType()).toEqual('Result<(),{"_enum":{"Other":"Null","CannotLookup":"Null","BadOrigin":"Null","Module":"{\\"index\\":\\"u8\\",\\"error\\":\\"u8\\"}"}}>');
expect(registry.createType('DispatchResult').toRawType()).toEqual('Result<(),DispatchError>');
});
});
+1 -1
View File
@@ -50,7 +50,7 @@ export default class Result<O extends Codec, E extends Codec> extends Enum {
* @description Checks if the Result has no value
*/
public get isEmpty (): boolean {
return this.isOk && this._raw.isEmpty;
return this.isOk && this.value.isEmpty;
}
/**
+6 -7
View File
@@ -5,7 +5,6 @@
/* eslint-disable sort-keys */
import { TypeRegistry } from '../create';
import AccountId from '../generic/AccountId';
import Text from '../primitive/Text';
import U32 from '../primitive/U32';
import { CodecTo } from '../types';
@@ -221,20 +220,20 @@ describe('Struct', (): void => {
it('generates sane toRawType', (): void => {
expect(
new Struct(registry, {
accountId: AccountId,
accountId: 'AccountId',
balanceCompact: registry.createClass('Compact<Balance>'),
blockNumber: registry.createClass('BlockNumber'),
compactNumber: registry.createClass('Compact<BlockNumber>'),
optionNumber: registry.createClass('Option<BlockNumber>'),
counter: U32,
vector: Vec.with(AccountId)
vector: Vec.with('AccountId')
}).toRawType()
).toEqual(JSON.stringify({
accountId: 'AccountId',
balanceCompact: 'Compact<Balance>', // Override in Uint
blockNumber: 'u32',
compactNumber: 'Compact<u32>',
optionNumber: 'Option<u32>',
blockNumber: 'BlockNumber',
compactNumber: 'Compact<BlockNumber>',
optionNumber: 'Option<BlockNumber>',
counter: 'u32',
vector: 'Vec<AccountId>'
}));
@@ -242,7 +241,7 @@ describe('Struct', (): void => {
it('generates sane toRawType (via with)', (): void => {
const Type = Struct.with({
accountId: AccountId,
accountId: 'AccountId',
balance: registry.createClass('Balance')
});
+3 -3
View File
@@ -267,11 +267,11 @@ export default class Struct<
}
public static typesToMap (registry: Registry, Types: Record<string, Constructor>): Record<string, string> {
return Object.entries(Types).reduce((result, [key, Type]): Record<string, string> => {
result[key] = new Type(registry).toRawType();
return Object.entries(Types).reduce((result: Record<string, string>, [key, Type]): Record<string, string> => {
result[key] = registry.getClassName(Type) || new Type(registry).toRawType();
return result;
}, {} as Record<string, string>);
}, {});
}
/**
+2 -2
View File
@@ -131,14 +131,14 @@ describe('Tuple', (): void => {
it('generates sane value with array types', (): void => {
expect(
new Tuple(registry, [U128, registry.createClass('BlockNumber')]).toRawType()
).toEqual('(u128,u32)');
).toEqual('(u128,BlockNumber)');
});
it('generates sane value with object types', (): void => {
expect(
// eslint-disable-next-line sort-keys
new Tuple(registry, { number: U128, blockNumber: registry.createClass('BlockNumber') }).toRawType()
).toEqual('(u128,u32)');
).toEqual('(u128,BlockNumber)');
});
});
});
+3 -1
View File
@@ -101,7 +101,9 @@ export default class Tuple extends AbstractArray<Codec> {
Array.isArray(this._Types)
? this._Types
: Object.values(this._Types)
).map((Type): string => new Type(this.registry).toRawType());
).map((Type) =>
this.registry.getClassName(Type) || new Type(this.registry).toRawType()
);
return `(${types.join(',')})`;
}
+6
View File
@@ -16,6 +16,12 @@ describe('UInt', (): void => {
).toThrow('u32: Input too large. Found input with 164 bits, expected 32');
});
it('fails on negative numbers', (): void => {
expect(
(): UInt => new UInt(registry, -123, 32)
).toThrow('u32: Negative number passed to unsigned type');
});
it('allows for construction via BigInt', (): void => {
expect(
new UInt(registry, 123456789123456789123456789n, 128).toHuman()
+1 -1
View File
@@ -92,6 +92,6 @@ export default class Vec<T extends Codec> extends AbstractArray<T> {
* @description Returns the base runtime type name for this instance
*/
public toRawType (): string {
return `Vec<${new this._Type(this.registry).toRawType()}>`;
return `Vec<${this.registry.getClassName(this._Type) || new this._Type(this.registry).toRawType()}>`;
}
}
+1 -1
View File
@@ -115,7 +115,7 @@ const infoMapping: Record<TypeDefInfo, (registry: Registry, value: TypeDef) => C
const Clazz = Struct.with({ previous: type, next: type } as any);
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
ClassOf.prototype.toRawType = function (): string {
Clazz.prototype.toRawType = function (): string {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
return `Linkage<${this.next.toRawType(true)}>`;
};
+29 -1
View File
@@ -4,7 +4,7 @@
import { TypeDef, TypeDefInfo } from './types';
import { getTypeDef } from '.';
import { TypeRegistry, getTypeDef } from '.';
describe('getTypeDef', (): void => {
it('does not allow invalid tuples, end )', (): void => {
@@ -290,4 +290,32 @@ describe('getTypeDef', (): void => {
type: '[[u8;32];3]'
});
});
it('creates recursive structures', (): void => {
const registry = new TypeRegistry();
registry.register({
Recursive: {
data: 'Vec<Recursive>'
}
});
const raw = registry.createType('Recursive' as 'u32').toRawType();
expect(
getTypeDef(raw)
).toEqual({
info: TypeDefInfo.Struct,
sub: [{
info: TypeDefInfo.Vec,
name: 'data',
sub: {
info: TypeDefInfo.Plain,
type: 'Recursive'
},
type: 'Vec<Recursive>'
}],
type: '{"data":"Vec<Recursive>"}'
});
});
});
+33 -20
View File
@@ -9,10 +9,17 @@ import { assert } from '@polkadot/util';
import sanitize from './sanitize';
import { typeSplit } from './typeSplit';
interface TypeDefOptions {
name?: string;
displayName?: string;
}
const MAX_NESTED = 64;
// decode an enum of either of the following forms
// { _enum: ['A', 'B', 'C'] }
// { _enum: { A: AccountId, B: Balance, C: u32 } }
function _decodeEnum (value: TypeDef, details: string[] | Record<string, string>): TypeDef {
function _decodeEnum (value: TypeDef, details: string[] | Record<string, string>, count: number): TypeDef {
value.info = TypeDefInfo.Enum;
// not as pretty, but remain compatible with oo7 for both struct and Array types
@@ -24,7 +31,7 @@ function _decodeEnum (value: TypeDef, details: string[] | Record<string, string>
}))
: Object.entries(details).map(([name, type]): TypeDef =>
// eslint-disable-next-line @typescript-eslint/no-use-before-define
getTypeDef(type || 'Null', { name })
getTypeDef(type || 'Null', { name }, count)
);
return value;
@@ -50,13 +57,13 @@ function _decodeSet (value: TypeDef, details: Record<string, number>): TypeDef {
// decode a struct, set or enum
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function _decodeStruct (value: TypeDef, type: string, _: string): TypeDef {
function _decodeStruct (value: TypeDef, type: string, _: string, count: number): TypeDef {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const parsed: Record<string, any> = JSON.parse(type);
const keys = Object.keys(parsed);
if (keys.length === 1 && keys[0] === '_enum') {
return _decodeEnum(value, parsed[keys[0]]);
return _decodeEnum(value, parsed[keys[0]], count);
} else if (keys.length === 1 && keys[0] === '_set') {
return _decodeSet(value, parsed[keys[0]]);
}
@@ -66,7 +73,7 @@ function _decodeStruct (value: TypeDef, type: string, _: string): TypeDef {
: undefined;
value.sub = keys.filter((name) => !['_alias'].includes(name)).map((name): TypeDef =>
// eslint-disable-next-line @typescript-eslint/no-use-before-define
getTypeDef(parsed[name], { name })
getTypeDef(parsed[name], { name }, count)
);
return value;
@@ -74,7 +81,7 @@ function _decodeStruct (value: TypeDef, type: string, _: string): TypeDef {
// decode a fixed vector, e.g. [u8;32]
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function _decodeFixedVec (value: TypeDef, type: string, _: string): TypeDef {
function _decodeFixedVec (value: TypeDef, type: string, _: string, count: number): TypeDef {
const [vecType, strLength, displayName] = type.substr(1, type.length - 2).split(';');
const length = parseInt(strLength.trim(), 10);
@@ -84,18 +91,18 @@ function _decodeFixedVec (value: TypeDef, type: string, _: string): TypeDef {
value.displayName = displayName;
value.length = length;
// eslint-disable-next-line @typescript-eslint/no-use-before-define
value.sub = getTypeDef(vecType);
value.sub = getTypeDef(vecType, {}, count);
return value;
}
// decode a tuple
function _decodeTuple (value: TypeDef, _: string, subType: string): TypeDef {
function _decodeTuple (value: TypeDef, _: string, subType: string, count: number): TypeDef {
value.sub = subType.length === 0
? []
: typeSplit(subType).map((inner): TypeDef =>
// eslint-disable-next-line @typescript-eslint/no-use-before-define
getTypeDef(inner)
getTypeDef(inner, {}, count)
);
return value;
@@ -103,7 +110,7 @@ function _decodeTuple (value: TypeDef, _: string, subType: string): TypeDef {
// decode a Int/UInt<bitLength[, name]>
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function _decodeInt (value: TypeDef, type: string, _: string, clazz: 'Int' | 'UInt' = 'Int'): TypeDef {
function _decodeAnyInt (value: TypeDef, type: string, _: string, clazz: 'Int' | 'UInt'): TypeDef {
const [strLength, displayName] = type.substr(clazz.length + 1, type.length - clazz.length - 1 - 1).split(',');
const length = parseInt(strLength.trim(), 10);
@@ -116,8 +123,12 @@ function _decodeInt (value: TypeDef, type: string, _: string, clazz: 'Int' | 'UI
return value;
}
function _decodeInt (value: TypeDef, type: string, subType: string): TypeDef {
return _decodeAnyInt(value, type, subType, 'Int');
}
function _decodeUInt (value: TypeDef, type: string, subType: string): TypeDef {
return _decodeInt(value, type, subType, 'UInt');
return _decodeAnyInt(value, type, subType, 'UInt');
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -139,7 +150,7 @@ function hasWrapper (type: string, [start, end]: [string, string, TypeDefInfo, a
return true;
}
const nestedExtraction: [string, string, TypeDefInfo, (value: TypeDef, type: string, subType: string) => TypeDef][] = [
const nestedExtraction: [string, string, TypeDefInfo, (value: TypeDef, type: string, subType: string, count: number) => TypeDef][] = [
['[', ']', TypeDefInfo.VecFixed, _decodeFixedVec],
['{', '}', TypeDefInfo.Struct, _decodeStruct],
['(', ')', TypeDefInfo.Tuple, _decodeTuple],
@@ -164,15 +175,17 @@ function extractSubType (type: string, [start, end]: [string, string, TypeDefInf
return type.substr(start.length, type.length - start.length - end.length);
}
interface TypeDefOptions {
name?: string;
displayName?: string;
}
export function getTypeDef (_type: string, { displayName, name }: TypeDefOptions = {}): TypeDef {
export function getTypeDef (_type: string, { displayName, name }: TypeDefOptions = {}, count = 0): TypeDef {
// create the type via Type, allowing types to be sanitized
const type = sanitize(_type);
const value: TypeDef = { displayName, info: TypeDefInfo.Plain, name, type };
if (++count === MAX_NESTED) {
console.warn('getTypeDef: Maximum nested limit reached');
return value;
}
const nested = nestedExtraction.find((nested): boolean =>
hasWrapper(type, nested)
);
@@ -180,7 +193,7 @@ export function getTypeDef (_type: string, { displayName, name }: TypeDefOptions
if (nested) {
value.info = nested[2];
return nested[3](value, type, extractSubType(type, nested));
return nested[3](value, type, extractSubType(type, nested), count);
}
const wrapped = wrappedExtraction.find((wrapped): boolean =>
@@ -189,7 +202,7 @@ export function getTypeDef (_type: string, { displayName, name }: TypeDefOptions
if (wrapped) {
value.info = wrapped[2];
value.sub = getTypeDef(extractSubType(type, wrapped));
value.sub = getTypeDef(extractSubType(type, wrapped), {}, count);
}
return value;
+29 -1
View File
@@ -76,7 +76,35 @@ describe('TypeRegistry', (): void => {
expect((first as any).next.unwrap().next.isSome).toBe(false);
});
it('can register cross-referencing types ()', (): void => {
it('can register non-embedded recursive types', (): void => {
registry.register({
Operation: {
data: 'OperationData'
},
OperationData: {
ops: 'Vec<Operation>'
},
Rule: {
data: 'RuleData'
},
RuleData: {
ops: 'Vec<Operation>'
}
});
expect(registry.hasDef('Rule')).toBe(true);
expect(registry.hasClass('Rule')).toBe(false);
const Rule = registry.getOrThrow('Rule');
expect(registry.hasClass('Rule')).toBe(true);
const instance = new Rule(registry);
expect(instance.toRawType()).toEqual('{"data":"RuleData"}');
});
it('can register cross-referencing types', (): void => {
registry.register({
A: {
next: 'B'
+8
View File
@@ -225,6 +225,14 @@ export class TypeRegistry implements Registry {
return this.#chainProperties;
}
public getClassName (clazz: Constructor): string | undefined {
const entry = [...this.#classes.entries()].find(([, test]) => test === clazz);
return entry
? entry[0]
: undefined;
}
public getDefinition (name: string): string | undefined {
return this.#definitions.get(name);
}
+1 -9
View File
@@ -24,15 +24,7 @@ describe('Block', (): void => {
).toEqual(
// each of the containing structures have been stringified on their own
JSON.stringify({
header: JSON.stringify({
parentHash: 'H256',
number: 'Compact<u32>',
stateRoot: 'H256',
extrinsicsRoot: 'H256',
digest: JSON.stringify({
logs: 'Vec<{"_enum":{"Other":"Bytes","AuthoritiesChange":"Vec<AccountId>","ChangesTrieRoot":"H256","SealV0":"(u64,H512)","Consensus":"(u32,Bytes)","Seal":"(u32,Bytes)","PreRuntime":"(u32,Bytes)"}}>'
})
}),
header: 'Header',
extrinsics: 'Vec<Extrinsic>'
})
);
@@ -76,10 +76,21 @@ export default {
gasLimit: 'u64',
inputData: 'Bytes'
},
ContractExecResultSuccess: {
ContractExecResultSuccessTo255: {
status: 'u8',
data: 'Raw'
},
ContractExecResultTo255: {
_enum: {
Success: 'ContractExecResultSuccessTo255',
Error: 'Null'
}
},
ContractExecResultSuccess: {
flags: 'u32',
data: 'Vec<u8>',
gasConsumed: 'u64'
},
ContractExecResult: {
_enum: {
Success: 'ContractExecResultSuccess',
@@ -36,10 +36,24 @@ export interface ContractExecResult extends Enum {
/** @name ContractExecResultSuccess */
export interface ContractExecResultSuccess extends Struct {
readonly flags: u32;
readonly data: Bytes;
readonly gasConsumed: u64;
}
/** @name ContractExecResultSuccessTo255 */
export interface ContractExecResultSuccessTo255 extends Struct {
readonly status: u8;
readonly data: Raw;
}
/** @name ContractExecResultTo255 */
export interface ContractExecResultTo255 extends Enum {
readonly isSuccess: boolean;
readonly asSuccess: ContractExecResultSuccessTo255;
readonly isError: boolean;
}
/** @name ContractInfo */
export interface ContractInfo extends Enum {
readonly isAlive: boolean;
@@ -39,6 +39,8 @@ export { default as vesting } from './vesting/definitions';
export { default as attestations } from './attestations/definitions';
export { default as claims } from './claims/definitions';
export { default as parachains } from './parachains/definitions';
export { default as poll } from './poll/definitions';
export { default as purchase } from './purchase/definitions';
// pull in metadata & rpc last, assuming that is uses info from above
export { default as metadata } from './metadata/definitions';
@@ -0,0 +1,15 @@
// Copyright 2017-2020 @polkadot/types authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// order important in structs... :)
/* eslint-disable sort-keys */
import { Definitions } from '../../types';
export default {
rpc: {},
types: {
Approvals: '[bool; 4]'
}
} as Definitions;
@@ -0,0 +1,4 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
export * from './types';
@@ -0,0 +1,10 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
import { Vec } from '@polkadot/types/codec';
import { bool } from '@polkadot/types/primitive';
/** @name Approvals */
export interface Approvals extends Vec<bool> {}
export type PHANTOM_POLL = 'poll';
@@ -0,0 +1,24 @@
// Copyright 2017-2020 @polkadot/types authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// order important in structs... :)
/* eslint-disable sort-keys */
import { Definitions } from '../../types';
export default {
rpc: {},
types: {
AccountStatus: {
validity: 'AccountValidity',
freeBalance: 'Balance',
lockedBalance: 'Balance',
signature: 'Vec<u8>',
vat: 'Permill'
},
AccountValidity: {
_enum: ['Invalid', 'Initiated', 'Pending', 'ValidLow', 'ValidHigh', 'Completed']
}
}
} as Definitions;
@@ -0,0 +1,4 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
export * from './types';
@@ -0,0 +1,27 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
import { Enum, Struct } from '@polkadot/types/codec';
import { Bytes } from '@polkadot/types/primitive';
import { Balance, Permill } from '@polkadot/types/interfaces/runtime';
/** @name AccountStatus */
export interface AccountStatus extends Struct {
readonly validity: AccountValidity;
readonly freeBalance: Balance;
readonly lockedBalance: Balance;
readonly signature: Bytes;
readonly vat: Permill;
}
/** @name AccountValidity */
export interface AccountValidity extends Enum {
readonly isInvalid: boolean;
readonly isInitiated: boolean;
readonly isPending: boolean;
readonly isValidLow: boolean;
readonly isValidHigh: boolean;
readonly isCompleted: boolean;
}
export type PHANTOM_PURCHASE = 'purchase';
@@ -65,6 +65,7 @@ export default {
LookupTarget: 'AccountId',
ModuleId: 'LockIdentifier',
Moment: 'u64',
OpaqueCall: 'Bytes',
Origin: 'DoNotConstruct<Origin>',
Pays: {
_enum: ['Yes', 'No']
@@ -133,6 +133,9 @@ export interface ModuleId extends LockIdentifier {}
/** @name Moment */
export interface Moment extends u64 {}
/** @name OpaqueCall */
export interface OpaqueCall extends Bytes {}
/** @name Origin */
export interface Origin extends DoNotConstruct {}
@@ -222,7 +222,7 @@ export default {
},
NetworkStatePeersetInfo: {
connected: 'bool',
reputation: 'u64'
reputation: 'i32'
},
NodeRole: {
_enum: {
@@ -4,7 +4,7 @@
import { ITuple } from '@polkadot/types/types';
import { Compact, Enum, HashMap, Option, Result, Struct, U8aFixed, Vec } from '@polkadot/types/codec';
import { GenericEvent } from '@polkadot/types/generic';
import { Bytes, Text, bool, u32, u64, u8 } from '@polkadot/types/primitive';
import { Bytes, Text, bool, i32, u32, u64, u8 } from '@polkadot/types/primitive';
import { AccountData } from '@polkadot/types/interfaces/balances';
import { BlockNumber, Digest, Hash, Index, Pays, Weight } from '@polkadot/types/interfaces/runtime';
@@ -191,7 +191,7 @@ export interface NetworkStatePeerset extends Struct {
/** @name NetworkStatePeersetInfo */
export interface NetworkStatePeersetInfo extends Struct {
readonly connected: bool;
readonly reputation: u64;
readonly reputation: i32;
}
/** @name NodeRole */
+2
View File
@@ -33,6 +33,8 @@ export * from './vesting/types';
export * from './attestations/types';
export * from './claims/types';
export * from './parachains/types';
export * from './poll/types';
export * from './purchase/types';
export * from './metadata/types';
export * from './rpc/types';
export * from './author/types';
+4 -4
View File
@@ -67,11 +67,11 @@ export default class Data extends Enum {
}
get asRaw (): Bytes {
return this._raw as Bytes;
return this.value as Bytes;
}
get asSha256 (): H256 {
return this._raw as H256;
return this.value as H256;
}
get isRaw (): boolean {
@@ -97,7 +97,7 @@ export default class Data extends Enum {
return new Uint8Array(1);
} else if (this.index === 1) {
// don't add the length, just the data
const data = this._raw.toU8a(true);
const data = this.value.toU8a(true);
const length = Math.min(data.length, 32);
const u8a = new Uint8Array(length + 1);
@@ -111,7 +111,7 @@ export default class Data extends Enum {
const u8a = new Uint8Array(33);
u8a.set([this.index + 32], 0);
u8a.set(this._raw.toU8a(), 1);
u8a.set(this.value.toU8a(), 1);
return u8a;
}
+1
View File
@@ -124,6 +124,7 @@ export interface Registry {
createType <K extends keyof InterfaceTypes> (type: K, ...params: unknown[]): InterfaceTypes[K];
get <T extends Codec = Codec> (name: string, withUnknown?: boolean): Constructor<T> | undefined;
getChainProperties (): ChainProperties | undefined;
getClassName (clazz: Constructor): string | undefined;
getDefinition (name: string): string | undefined;
getOrThrow <T extends Codec = Codec> (name: string, msg?: string): Constructor<T>;
getOrUnknown <T extends Codec = Codec> (name: string): Constructor<T>;
+1038 -1025
View File
File diff suppressed because it is too large Load Diff