git.delta.rocks / unique-network / refs/commits / ab1a681cee4d

difftreelog

Merge pull request #2 from usetech-llc/feature/NFTPAR-91

usetech-llc2020-10-02parents: #edcd436 #b97c488.patch.diff
in: master
Feature/nftpar 91

7 files changed

modifiedREADME.mddiffbeforeafterboth
before · README.md
1![Docker build](https://github.com/usetech-llc/nft_parachain/workflows/Docker%20build/badge.svg)23# NFT Parachain45## Project Description67The NFT Pallet is the core of NFT functionality. Like ERC-721 standard in Ethereum ecosystem, this pallet provides the basement for creating collections of unique non-divisible things, also called Non Fungible Tokens (NFTs), minting NFT of a given Collection, and managing their ownership.89The pallet also enables storing NFT properties. Though (according to ERC-721) NFT properties belong to logic of a concrete application that operates a Collection, so purposefully the NFT Tracking Module does not have any knowledge about properties except their byte size leaving application logic out to be controlled by Smart Contracts.1011The NFT Chain also provides:1213* Smart Contracts Pallet and example smart contract that interacts with NFT Runtime14* ERC-1155 Functionality (currently PoC as Re-Fungible tokens, i.e. items that are still unique, but that can be split between multiple users)15* Variety of economic options for dapp producers to choose from to create freemium games and other ways to attract users. As a step one, we implemented an economic model when a collection sponsor can be set to pay for collection Transfer transactions.1617Wider NFT Ecosystem (most of it was developed during Hackusama):18* [SubstraPunks Game hosted on IPFS](https://github.com/usetech-llc/substrapunks)19* [NFT Wallet and UI](https://uniqueapps.usetech.com/#/nft)20* [NFT Asset for Unity Framework](https://github.com/usetech-llc/nft_unity)2122Please see our [walk-thorugh instructions](doc/hackusama_walk_through.md) to try everything out!2324## Hackusama Update2526During the Kusama Hackaphon the following changes were made:27* Enabled Smart Contracts Pallet28* Enabled integration between Smart Contracts and NFT Pallet (required special edition of RC4 Substrate version)29* Fixed misc. bugs in NFT Pallet30* Deployed NFT TestNet. Public node available at wss://unique.usetech.com, custom UI types - see below in this README.31* New Features:32  * Re-Fungible Token Mode33  * Off-Chain Schema to store token image URLs34  * Alternative economic model35  * White Lists and Public Mint Permission36* Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet Blockchain.3738## Application Development3940If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).4142## Building4344Building NFT chain requires special versions of Rust and toolchain. We don't use the most recent versions of everything so that we can keep the builds stable.45461. Install Rust:4748```bash49curl https://sh.rustup.rs -sSf | sh50sudo apt-get install libssl-dev pkg-config libclang-dev clang51```52532. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.54553. Install Rust Toolchain 1.44.0:5657```bash58rustup install 1.44.059```60614. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)62```bash63rustup toolchain list64rustup default 1.44.0-x86_64-unknown-linux-gnu65```66675. Install nightly toolchain and add wasm target for it:6869```bash70rustup toolchain install nightly-2020-05-0171rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu72```73746. Build:75```bash76cargo build77```7879## Run8081You can start a development chain with:8283```bash84cargo run -- --dev85```8687Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8889If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units. Give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminal windows open.9091We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below:9293```bash94cargo run -- \95  --base-path /tmp/alice \96  --chain=local \97  --alice \98  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \99  --telemetry-url ws://telemetry.polkadot.io:1024 \100  --validator101```102103In the second terminal, we'll start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's bootnode ID on TCP port 30333:104105```bash106cargo run -- \107  --base-path /tmp/bob \108  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \109  --chain=local \110  --bob \111  --port 30334 \112  --telemetry-url ws://telemetry.polkadot.io:1024 \113  --validator114```115116Additional CLI usage options are available and may be shown by running `cargo run -- --help`.117118119## UI custom types120```121{122  "Schedule": {123    "version": "u32",124    "put_code_per_byte_cost": "Gas",125    "grow_mem_cost": "Gas",126    "regular_op_cost": "Gas",127    "return_data_per_byte_cost": "Gas",128    "event_data_per_byte_cost": "Gas",129    "event_per_topic_cost": "Gas",130    "event_base_cost": "Gas",131    "call_base_cost": "Gas",132    "instantiate_base_cost": "Gas",133    "dispatch_base_cost": "Gas",134    "sandbox_data_read_cost": "Gas",135    "sandbox_data_write_cost": "Gas",136    "transfer_cost": "Gas",137    "instantiate_cost": "Gas",138    "max_event_topics": "u32",139    "max_stack_height": "u32",140    "max_memory_pages": "u32",141    "max_table_size": "u32",142    "enable_println": "bool",143    "max_subject_len": "u32"144  },145  "AccessMode": {146    "_enum": [147      "Normal",148      "WhiteList"149    ]150  },151  "CollectionMode": {152    "_enum": {153      "Invalid": null,154      "NFT": "u32",155      "Fungible": "u32",156      "ReFungible": "(u32, u32)"157    }158  },159  "Ownership": {160    "Owner": "AccountId",161    "Fraction": "u128"162  },163  "FungibleItemType": {164    "Collection": "u64",165    "Owner": "AccountId",166    "Value": "u128"167  },168  "ReFungibleItemType": {169    "Collection": "u64",170    "Owner": "Vec<Ownership>",171    "Data": "Vec<u8>"172  },173  "NftItemType": {174    "Collection": "u64",175    "Owner": "AccountId",176    "Data": "Vec<u8>"177  },178  "Ownership": {179    "owner": "AccountId",180    "fraction": "u128"181  },182  "ReFungibleItemType": {183    "Collection": "u64",184    "Owner": "Vec<Ownership<AccountId>>",185    "Data": "Vec<u8>"186  },187  "CollectionType": {188    "Owner": "AccountId",189    "Mode": "CollectionMode",190    "Access": "AccessMode",191    "DecimalPoints": "u32",192    "Name": "Vec<u16>",193    "Description": "Vec<u16>",194    "TokenPrefix": "Vec<u8>",195    "CustomDataSize": "u32",196    "MintMode": "bool",197    "OffchainSchema": "Vec<u8>",198    "Sponsor": "AccountId",199    "UnconfirmedSponsor": "AccountId"200  },201  "RawData": "Vec<u8>",202  "Address": "AccountId",203  "LookupSource": "AccountId",204  "Weight": "u64"205}206207```
after · README.md
1![Docker build](https://github.com/usetech-llc/nft_parachain/workflows/Docker%20build/badge.svg)23# NFT Parachain45## Project Description67The NFT Pallet is the core of NFT functionality. Like ERC-721 standard in Ethereum ecosystem, this pallet provides the basement for creating collections of unique non-divisible things, also called Non Fungible Tokens (NFTs), minting NFT of a given Collection, and managing their ownership.89The pallet also enables storing NFT properties. Though (according to ERC-721) NFT properties belong to logic of a concrete application that operates a Collection, so purposefully the NFT Tracking Module does not have any knowledge about properties except their byte size leaving application logic out to be controlled by Smart Contracts.1011The NFT Chain also provides:1213* Smart Contracts Pallet and example smart contract that interacts with NFT Runtime14* ERC-1155 Functionality (currently PoC as Re-Fungible tokens, i.e. items that are still unique, but that can be split between multiple users)15* Variety of economic options for dapp producers to choose from to create freemium games and other ways to attract users. As a step one, we implemented an economic model when a collection sponsor can be set to pay for collection Transfer transactions.1617Wider NFT Ecosystem (most of it was developed during Hackusama):18* [SubstraPunks Game hosted on IPFS](https://github.com/usetech-llc/substrapunks)19* [NFT Wallet and UI](https://uniqueapps.usetech.com/#/nft)20* [NFT Asset for Unity Framework](https://github.com/usetech-llc/nft_unity)2122Please see our [walk-thorugh instructions](doc/hackusama_walk_through.md) to try everything out!2324## Hackusama Update2526During the Kusama Hackaphon the following changes were made:27* Enabled Smart Contracts Pallet28* Enabled integration between Smart Contracts and NFT Pallet (required special edition of RC4 Substrate version)29* Fixed misc. bugs in NFT Pallet30* Deployed NFT TestNet. Public node available at wss://unique.usetech.com, custom UI types - see below in this README.31* New Features:32  * Re-Fungible Token Mode33  * Off-Chain Schema to store token image URLs34  * Alternative economic model35  * White Lists and Public Mint Permission36* Use example: [SubstraPunks Game](https://github.com/usetech-llc/substrapunks), fully hosted on IPFS and NFT Testnet Blockchain.3738## Application Development3940If you are building an application that operates NFT tokens, use [this document](doc/application_development.md).4142## Building4344Building NFT chain requires special versions of Rust and toolchain. We don't use the most recent versions of everything so that we can keep the builds stable.45461. Install Rust:4748```bash49curl https://sh.rustup.rs -sSf | sh50sudo apt-get install libssl-dev pkg-config libclang-dev clang51```52532. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.54553. Install Rust Toolchain 1.44.0:5657```bash58rustup install 1.44.059```60614. Make it default (actual toochain version may be different, so do a `rustup toolchain list` first)62```bash63rustup toolchain list64rustup default 1.44.0-x86_64-unknown-linux-gnu65```66675. Install nightly toolchain and add wasm target for it:6869```bash70rustup toolchain install nightly-2020-05-0171rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-01-x86_64-unknown-linux-gnu72```73746. Build:75```bash76cargo build77```7879## Run8081You can start a development chain with:8283```bash84cargo run -- --dev85```8687Detailed logs may be shown by running the node with the following environment variables set: `RUST_LOG=debug RUST_BACKTRACE=1 cargo run -- --dev`.8889If you want to see the multi-node consensus algorithm in action locally, then you can create a local testnet with two validator nodes for Alice and Bob, who are the initial authorities of the genesis chain that have been endowed with testnet units. Give each node a name and expose them so they are listed on the Polkadot [telemetry site](https://telemetry.polkadot.io/#/Local%20Testnet). You'll need two terminal windows open.9091We'll start Alice's substrate node first on default TCP port 30333 with her chain database stored locally at `/tmp/alice`. The bootnode ID of her node is `QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN`, which is generated from the `--node-key` value that we specify below:9293```bash94cargo run -- \95  --base-path /tmp/alice \96  --chain=local \97  --alice \98  --node-key 0000000000000000000000000000000000000000000000000000000000000001 \99  --telemetry-url ws://telemetry.polkadot.io:1024 \100  --validator101```102103In the second terminal, we'll start Bob's substrate node on a different TCP port of 30334, and with his chain database stored locally at `/tmp/bob`. We'll specify a value for the `--bootnodes` option that will connect his node to Alice's bootnode ID on TCP port 30333:104105```bash106cargo run -- \107  --base-path /tmp/bob \108  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmQZ8TjTqeDj3ciwr93EJ95hxfDsb9pEYDizUAbWpigtQN \109  --chain=local \110  --bob \111  --port 30334 \112  --telemetry-url ws://telemetry.polkadot.io:1024 \113  --validator114```115116Additional CLI usage options are available and may be shown by running `cargo run -- --help`.117118119## UI custom types120```121{122  "Schedule": {123    "version": "u32",124    "put_code_per_byte_cost": "Gas",125    "grow_mem_cost": "Gas",126    "regular_op_cost": "Gas",127    "return_data_per_byte_cost": "Gas",128    "event_data_per_byte_cost": "Gas",129    "event_per_topic_cost": "Gas",130    "event_base_cost": "Gas",131    "call_base_cost": "Gas",132    "instantiate_base_cost": "Gas",133    "dispatch_base_cost": "Gas",134    "sandbox_data_read_cost": "Gas",135    "sandbox_data_write_cost": "Gas",136    "transfer_cost": "Gas",137    "instantiate_cost": "Gas",138    "max_event_topics": "u32",139    "max_stack_height": "u32",140    "max_memory_pages": "u32",141    "max_table_size": "u32",142    "enable_println": "bool",143    "max_subject_len": "u32"144  },145  "AccessMode": {146    "_enum": [147      "Normal",148      "WhiteList"149    ]150  },151  "CollectionMode": {152    "_enum": {153      "Invalid": null,154      "NFT": "u32",155      "Fungible": "u32",156      "ReFungible": "(u32, u32)"157    }158  },159  "Ownership": {160    "Owner": "AccountId",161    "Fraction": "u128"162  },163  "FungibleItemType": {164    "Collection": "u64",165    "Owner": "AccountId",166    "Value": "u128"167  },168  "ReFungibleItemType": {169    "Collection": "u64",170    "Owner": "Vec<Ownership>",171    "Data": "Vec<u8>"172  },173  "NftItemType": {174    "Collection": "u64",175    "Owner": "AccountId",176    "Data": "Vec<u8>"177  },178  "Ownership": {179    "owner": "AccountId",180    "fraction": "u128"181  },182  "ReFungibleItemType": {183    "Collection": "u64",184    "Owner": "Vec<Ownership<AccountId>>",185    "Data": "Vec<u8>"186  },187  "CollectionType": {188    "Owner": "AccountId",189    "Mode": "CollectionMode",190    "Access": "AccessMode",191    "DecimalPoints": "u32",192    "Name": "Vec<u16>",193    "Description": "Vec<u16>",194    "TokenPrefix": "Vec<u8>",195    "CustomDataSize": "u32",196    "MintMode": "bool",197    "OffchainSchema": "Vec<u8>",198    "Sponsor": "AccountId",199    "UnconfirmedSponsor": "AccountId"200  },201  "ApprovePermissions": {202    "Approved": "AccountId",203    "Amount": "u64"204  },205  "RawData": "Vec<u8>",206  "Address": "AccountId",207  "LookupSource": "AccountId",208  "Weight": "u64"209}210211```
modifiedtests/package-lock.jsondiffbeforeafterboth
--- a/tests/package-lock.json
+++ b/tests/package-lock.json
@@ -3916,148 +3916,40 @@
       }
     },
     "@polkadot/api": {
-      "version": "1.31.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.31.2.tgz",
-      "integrity": "sha512-5nMraRQYFt+xeInQi5i7c00fwOiSeZgU3Y1LJWz+z+Vnxep7xzjVBMLgBi4fe7g2eWKUYB79ApFNV8r2thsQZg==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.34.1.tgz",
+      "integrity": "sha512-3gCibNRchH+XbEdULS1bwiV1RgarZW1PDw1Y1mAQBVqPrUpkYqntp1D52SQOpAbRzldkwk296Sj+mx9/IeDRXA==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/api-derive": "1.31.2",
+        "@polkadot/api-derive": "1.34.1",
         "@polkadot/keyring": "^3.4.1",
-        "@polkadot/metadata": "1.31.2",
-        "@polkadot/rpc-core": "1.31.2",
-        "@polkadot/rpc-provider": "1.31.2",
-        "@polkadot/types": "1.31.2",
-        "@polkadot/types-known": "1.31.2",
+        "@polkadot/metadata": "1.34.1",
+        "@polkadot/rpc-core": "1.34.1",
+        "@polkadot/rpc-provider": "1.34.1",
+        "@polkadot/types": "1.34.1",
+        "@polkadot/types-known": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3",
-        "eventemitter3": "^4.0.6",
-        "rxjs": "^6.6.2"
-      },
-      "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
-          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/types-known": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
-          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.2"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
-          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "eventemitter3": "^4.0.7",
+        "rxjs": "^6.6.3"
       }
     },
     "@polkadot/api-derive": {
-      "version": "1.31.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.31.2.tgz",
-      "integrity": "sha512-j33elEBZpY7/ucsBRYdUxeWHID8vlvPKm7k9dWgaH8txYuzms0SFfkMHyECgo15SL+RTNhu/VxzSRWryk6dvTA==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.34.1.tgz",
+      "integrity": "sha512-LMlCkNJRp29MwKa36crYuY6cZpnkHCFrPCv9dmJEuDbMqrK+EAhXM9/6sTDYJ4uKNhyetJKe9rXslkXdI6pidA==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/api": "1.31.2",
-        "@polkadot/rpc-core": "1.31.2",
-        "@polkadot/rpc-provider": "1.31.2",
-        "@polkadot/types": "1.31.2",
+        "@polkadot/api": "1.34.1",
+        "@polkadot/rpc-core": "1.34.1",
+        "@polkadot/rpc-provider": "1.34.1",
+        "@polkadot/types": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3",
         "memoizee": "^0.4.14",
-        "rxjs": "^6.6.2"
-      },
-      "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
-          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/types-known": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
-          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.2"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
-          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "rxjs": "^6.6.3"
       }
     },
     "@polkadot/dev": {
@@ -4142,194 +4034,56 @@
       }
     },
     "@polkadot/keyring": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-3.4.1.tgz",
-      "integrity": "sha512-x8FxzDzyFX5ai+tnPaxAFUBV/2Mw/om8sRoMh+fT6Jzh3nC7pXfecH5ticJPKe73v/y42hn9xM0tiAI5P8Ohcw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-3.5.1.tgz",
+      "integrity": "sha512-Wg8PBACl+RobbmcShl659/5a+foU1j7PGdvdr2pZowkZul8jvwyAN+piIyPSfrsaJkbUoDUR9Pe+oVoeF4ZoXg==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/util": "3.4.1",
-        "@polkadot/util-crypto": "3.4.1"
-      },
-      "dependencies": {
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "@polkadot/util": "3.5.1",
+        "@polkadot/util-crypto": "3.5.1"
       }
     },
     "@polkadot/metadata": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.32.1.tgz",
-      "integrity": "sha512-0naYURBGYOMKF+z7RxOtIfhwziqIZ3GgXzYDRDra6goq72c4uykwpMUjkrJ07N9KaKBZsHmkn2k3v7pP5aqlzg==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
+      "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/types": "1.32.1",
-        "@polkadot/types-known": "1.32.1",
+        "@polkadot/types": "1.34.1",
+        "@polkadot/types-known": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "bn.js": "^5.1.3"
-      },
-      "dependencies": {
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
       }
     },
     "@polkadot/rpc-core": {
-      "version": "1.31.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.31.2.tgz",
-      "integrity": "sha512-amFN0UtxB94TnXVuL9oBSQDFheCrxUN6C/lmVlOBqnWj6ZA1RDAuPPJBNIjhSxNlGmJxS2yIexaCVKgF8kS8Cg==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.34.1.tgz",
+      "integrity": "sha512-BVQDyBEkbRe5b/u8p9UPpTCj0sDZ32sTmPEP43Klc4s9+oHtiNvOFYvkjK5oyW9dlcOwXi8HpLsQxGAeMtM7Tw==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.31.2",
-        "@polkadot/rpc-provider": "1.31.2",
-        "@polkadot/types": "1.31.2",
+        "@polkadot/metadata": "1.34.1",
+        "@polkadot/rpc-provider": "1.34.1",
+        "@polkadot/types": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "memoizee": "^0.4.14",
-        "rxjs": "^6.6.2"
-      },
-      "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
-          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/types-known": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
-          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.2"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
-          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "rxjs": "^6.6.3"
       }
     },
     "@polkadot/rpc-provider": {
-      "version": "1.31.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.31.2.tgz",
-      "integrity": "sha512-vqS1lsk/BBGSuklGKJhJxduKXOyXjc/kZzPWmmH8B92Zh59LqlzoJ8a4gQIjDr0CFjeJZbaaL1yRhE6qwaEe2A==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.34.1.tgz",
+      "integrity": "sha512-bebeis9mB4LS9Spk1WSHoadZHsyHmK4gyyC6uKSLZxHZmnopWna6zWnOBIrYHRz7qDHSZC5eNTseuU8NJXtscA==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.31.2",
-        "@polkadot/types": "1.31.2",
+        "@polkadot/metadata": "1.34.1",
+        "@polkadot/types": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
+        "@polkadot/x-fetch": "^0.3.2",
+        "@polkadot/x-ws": "^0.3.2",
         "bn.js": "^5.1.3",
-        "eventemitter3": "^4.0.6",
-        "isomorphic-fetch": "^2.2.1",
-        "websocket": "^1.0.31"
-      },
-      "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.31.2.tgz",
-          "integrity": "sha512-UAcZLxh6QFwhF2Ccmax6LUYa99NntBZrAe8oUN92UJlHbtAutd5sq322P+liG2EHfyhUZs5T5v8jLD79pMTjdA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/types-known": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.31.2.tgz",
-          "integrity": "sha512-eJsWdMzBlkYYrowR7tl9LYvGW3Za05esDQPxPxc1z2kkwzU2IoX2qijhUb6J9ViESY/h0jWFyEbV/1mBn4uupg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.2"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.31.2",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.31.2.tgz",
-          "integrity": "sha512-sA9IEwYNCsN+Z4eZklxOluJA5OBN2eGNvLz0uUQ6TFvqbi9Z8Mba+h+RZU1iFO6+yq2U7ECvdWzET6RN7zv+oQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.31.2",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "eventemitter3": "^4.0.7"
       }
     },
     "@polkadot/ts": {
@@ -4342,81 +4096,53 @@
       }
     },
     "@polkadot/types": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.32.1.tgz",
-      "integrity": "sha512-n+77dHE5J3RqmnbOwMdAeQg5yv68/2qZ7JeBw/KjYtSnJoA2pbW7yL01zSkIUCJcaTb/yuSQz9SK7Cz9QQ6MOw==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
+      "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.32.1",
+        "@polkadot/metadata": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "@polkadot/util-crypto": "^3.4.1",
         "@types/bn.js": "^4.11.6",
         "bn.js": "^5.1.3",
         "memoizee": "^0.4.14",
-        "rxjs": "^6.6.2"
-      },
-      "dependencies": {
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
+        "rxjs": "^6.6.3"
       }
     },
     "@polkadot/types-known": {
-      "version": "1.32.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.32.1.tgz",
-      "integrity": "sha512-Vv8m5w+v2nKjYIWEvjohW2xZd+v98bgKwzyl+Y7ssbnxMAYZQYkuzR8IDfUXyzcL+p9VF+YFExVnzCakMm756Q==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
+      "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/types": "1.32.1",
+        "@polkadot/types": "1.34.1",
         "@polkadot/util": "^3.4.1",
         "bn.js": "^5.1.3"
-      },
-      "dependencies": {
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
       }
     },
     "@polkadot/util": {
-      "version": "2.18.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-2.18.1.tgz",
-      "integrity": "sha512-0KAojJMR5KDaaobIyvHVuW9vBP5LG3S0vpRSovB4UPlGDok3ETJSm5lMhA0t2KM8C4gXGBakCotFVGSOvWGgjA==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.5.1.tgz",
+      "integrity": "sha512-9CBVeQlhmghlVeOttZDxwOtDVWLKpHSP0iAE2vG2bnI6T1dSjD0cFHCG9q7GeD6UAN8z+m17/M9WDV2WXzT6kA==",
       "requires": {
-        "@babel/runtime": "^7.10.4",
+        "@babel/runtime": "^7.11.2",
+        "@polkadot/x-textdecoder": "^0.3.2",
+        "@polkadot/x-textencoder": "^0.3.2",
         "@types/bn.js": "^4.11.6",
-        "bn.js": "^5.1.2",
+        "bn.js": "^5.1.3",
         "camelcase": "^5.3.1",
         "chalk": "^4.1.0",
         "ip-regex": "^4.1.0"
       }
     },
     "@polkadot/util-crypto": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-3.4.1.tgz",
-      "integrity": "sha512-RdTAiJ6dFE8nQJ7/wQkvYa6aNZG3Lusf/r7UmPJ56dZldvDTP3OdekzcfYdogU8hSJrE/xX84ii4DrHLnXXfAQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-3.5.1.tgz",
+      "integrity": "sha512-7SWxOYG+dUCAkGW2xCJc9gutLJ02T9LwiumTW8cXFysRai4qLA3XRl+XQHAEdRzKA+97IQmtGMl4/Tjq9TGwYw==",
       "requires": {
         "@babel/runtime": "^7.11.2",
-        "@polkadot/util": "3.4.1",
+        "@polkadot/util": "3.5.1",
         "@polkadot/wasm-crypto": "^1.4.1",
         "base-x": "^3.0.8",
         "bip39": "^3.0.2",
@@ -4428,21 +4154,6 @@
         "scryptsy": "^2.1.0",
         "tweetnacl": "^1.0.3",
         "xxhashjs": "^0.2.2"
-      },
-      "dependencies": {
-        "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "camelcase": "^5.3.1",
-            "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
-          }
-        }
       }
     },
     "@polkadot/wasm-crypto": {
@@ -4450,6 +4161,42 @@
       "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-1.4.1.tgz",
       "integrity": "sha512-GPBCh8YvQmA5bobI4rqRkUhrEHkEWU1+lcJVPbZYsa7jiHFaZpzCLrGQfiqW/vtbU1aBS2wmJ0x1nlt33B9QqQ=="
     },
+    "@polkadot/x-fetch": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-0.3.2.tgz",
+      "integrity": "sha512-lk9M8ql/kBBqiZ8KOWj7LFK7P9OxDgVn2fZPNELJzQbfFZwFF8umBPDIWlQIK7wTnlRsQlzOuf6MGEyMK5p42w==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "@types/node-fetch": "^2.5.7",
+        "node-fetch": "^2.6.1"
+      }
+    },
+    "@polkadot/x-textdecoder": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-0.3.2.tgz",
+      "integrity": "sha512-W3KK6mMzOH5kts8pSkyYyfsQuAsKUHmIm8jQkhQnSR6FRyhwJtHLZnxP3feEwkNkRbGggG6CtDPrxYCuEO0MvA==",
+      "requires": {
+        "@babel/runtime": "^7.11.2"
+      }
+    },
+    "@polkadot/x-textencoder": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-0.3.2.tgz",
+      "integrity": "sha512-nm7N9gWgKsZv8In1Fgfm+jYOPjprna/03Cd8hOqkCMRlSq0L4LS+d8BPrFhPOiT57VFTTW/7csLivFdeKv0GMA==",
+      "requires": {
+        "@babel/runtime": "^7.11.2"
+      }
+    },
+    "@polkadot/x-ws": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-0.3.2.tgz",
+      "integrity": "sha512-1aiG11Py8sgzJsz19melMzvBOn5zeMmfjCPoMryX4//063E0mcfnkujg4O6pTMygxJdFGAV1INB9wvMU9Dg9Wg==",
+      "requires": {
+        "@babel/runtime": "^7.11.2",
+        "@types/websocket": "^1.0.1",
+        "websocket": "^1.0.32"
+      }
+    },
     "@sindresorhus/is": {
       "version": "0.14.0",
       "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -4667,6 +4414,27 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.4.tgz",
       "integrity": "sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ=="
     },
+    "@types/node-fetch": {
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz",
+      "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==",
+      "requires": {
+        "@types/node": "*",
+        "form-data": "^3.0.0"
+      },
+      "dependencies": {
+        "form-data": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+          "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.8",
+            "mime-types": "^2.1.12"
+          }
+        }
+      }
+    },
     "@types/normalize-package-data": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@@ -4691,6 +4459,14 @@
       "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
       "dev": true
     },
+    "@types/websocket": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.1.tgz",
+      "integrity": "sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q==",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
     "@types/yargs": {
       "version": "15.0.5",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
@@ -5951,8 +5727,7 @@
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "at-least-node": {
       "version": "1.0.0",
@@ -7364,7 +7139,6 @@
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
       "requires": {
         "delayed-stream": "~1.0.0"
       }
@@ -9081,8 +8855,7 @@
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
     },
     "delegate": {
       "version": "3.2.0",
@@ -9700,6 +9473,7 @@
       "version": "0.1.13",
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
       "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+      "dev": true,
       "requires": {
         "iconv-lite": "^0.6.2"
       }
@@ -12954,6 +12728,7 @@
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
       "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
+      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3.0.0"
       }
@@ -13338,9 +13113,9 @@
       "dev": true
     },
     "ip-regex": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz",
-      "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA=="
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+      "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
     },
     "ipaddr.js": {
       "version": "1.9.1",
@@ -13717,7 +13492,8 @@
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
     },
     "is-string": {
       "version": "1.0.5",
@@ -13809,15 +13585,6 @@
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
       "dev": true
     },
-    "isomorphic-fetch": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
-      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
-      "requires": {
-        "node-fetch": "^1.0.1",
-        "whatwg-fetch": ">=0.10.0"
-      }
-    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -15870,14 +15637,12 @@
     "mime-db": {
       "version": "1.44.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
-      "dev": true
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
     },
     "mime-types": {
       "version": "2.1.27",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
       "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-      "dev": true,
       "requires": {
         "mime-db": "1.44.0"
       }
@@ -16661,13 +16426,9 @@
       }
     },
     "node-fetch": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
-      "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
-      "requires": {
-        "encoding": "^0.1.11",
-        "is-stream": "^1.0.1"
-      }
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+      "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
     },
     "node-fetch-npm": {
       "version": "2.0.4",
@@ -19728,7 +19489,8 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
     },
     "sane": {
       "version": "4.1.0",
@@ -23597,11 +23359,6 @@
           }
         }
       }
-    },
-    "whatwg-fetch": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz",
-      "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ=="
     },
     "whatwg-mimetype": {
       "version": "2.3.0",
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -23,9 +23,9 @@
   "license": "Apache 2.0",
   "homepage": "",
   "dependencies": {
-    "@polkadot/api": "^1.31.2",
-    "@polkadot/types": "^1.31.2",
-    "@polkadot/util": "^2.18.1",
+    "@polkadot/api": "^1.34.1",
+    "@polkadot/types": "^1.34.1",
+    "@polkadot/util": "^3.4.1",
     "@types/bn.js": "^4.11.6",
     "chai-as-promised": "^7.1.1"
   },
modifiedtests/src/config.tsdiffbeforeafterboth
--- a/tests/src/config.ts
+++ b/tests/src/config.ts
@@ -34,6 +34,20 @@
         "ReFungible": "(u32, u32)"
       }
     },
+    "Ownership": {
+      "Owner": "AccountId",
+      "Fraction": "u128"
+    },
+    "FungibleItemType": {
+      "Collection": "u64",
+      "Owner": "AccountId",
+      "Value": "u128"
+    },
+    "ReFungibleItemType": {
+      "Collection": "u64",
+      "Owner": "Vec<Ownership>",
+      "Data": "Vec<u8>"
+    },
     "NftItemType": {
       "Collection": "u64",
       "Owner": "AccountId",
@@ -57,10 +71,15 @@
       "Description": "Vec<u16>",
       "TokenPrefix": "Vec<u8>",
       "CustomDataSize": "u32",
+      "MintMode": "bool",
       "OffchainSchema": "Vec<u8>",
       "Sponsor": "AccountId",
       "UnconfirmedSponsor": "AccountId"
     },
+    "ApprovePermissions": {
+      "Approved": "AccountId",
+      "Amount": "u64"
+    },
     "RawData": "Vec<u8>",
     "Address": "AccountId",
     "LookupSource": "AccountId",
modifiedtests/src/connection.test.tsdiffbeforeafterboth
--- a/tests/src/connection.test.ts
+++ b/tests/src/connection.test.ts
@@ -15,9 +15,9 @@
     });
   });
 
-  it('Cannot connect to 0.0.0.0', () => {
-    const neverConnectProvider = new WsProvider('ws://0.0.0.0:9944');
-    expect((async () => {
+  it('Cannot connect to 255.255.255.255', async () => {
+    const neverConnectProvider = new WsProvider('ws://255.255.255.255:9944');
+    await expect((async () => {
       await usingApi(async api => {
         const health = await api.rpc.system.health();
       }, { provider: neverConnectProvider });
modifiedtests/src/substrate/promisify-substrate.tsdiffbeforeafterboth
--- a/tests/src/substrate/promisify-substrate.ts
+++ b/tests/src/substrate/promisify-substrate.ts
@@ -4,19 +4,21 @@
 
 export default function promisifySubstrate<T extends (...args: any[]) => any>(api: ApiPromise, action: T): (...args: Parameters<T>) => Promise<PromiseType<ReturnType<T>>> {
   return (...args: Parameters<T>) => {
-    const promise = new Promise<PromiseType<ReturnType<T>>>((resolve, reject) => {
+    const promise = new Promise<PromiseType<ReturnType<T>>>((resolve: ((result: PromiseType<ReturnType<T>>) => void) | undefined, reject: ((error: any) => void) | undefined) => {
       const cleanup = () => {
         api.off('disconnected', fail);
         api.off('error', fail);
+        resolve = undefined;
+        reject = undefined;
       };
 
       const success = (r: any) => {
+        resolve && resolve(r);
         cleanup();
-        resolve(r);
       };
       const fail = (error: any) => {
+        reject && reject(error);
         cleanup();
-        reject(error);
       };
       
       api.on('disconnected', fail);
modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -10,13 +10,16 @@
 
 export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {
   settings = settings || defaultApiOptions();
-  let api: ApiPromise | undefined = undefined;
+  let api: ApiPromise = new ApiPromise(settings);
 
   try {
-    api = new ApiPromise(settings);
-    await promisifySubstrate(api, () => api && api.isReady)();
-    await action(api);
+    await promisifySubstrate(api, async () => {
+      if(api) {
+        await api.isReadyOrError;
+        await action(api);
+      }
+    })();
   } finally {
-    api && api.disconnect();
+    await api.disconnect();
   }
 }
\ No newline at end of file