diff --git a/.gitignore b/.gitignore index 537dce3..aee2bc7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules emit_map.json +emit_map_migration.json *.csv *copy* *.hex \ No newline at end of file diff --git a/get_emit_migration.ipynb b/get_emit_migration.ipynb new file mode 100644 index 0000000..dd6bc25 --- /dev/null +++ b/get_emit_migration.ipynb @@ -0,0 +1,347 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import bittensor\n", + "import pandas as pd\n", + "import json\n", + "import substrateinterface as pysub\n", + "\n", + "from typing import List, Tuple, Optional, Dict\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "WS_URL = \"wss://archive.chain.opentensor.ai:443\"\n", + "sub = bittensor.subtensor(WS_URL)\n", + "BLOCK_TIME = 12\n", + "\n", + "BLOCKS_PER_HOUR = 3600 / BLOCK_TIME" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "START_BLOCK = 3_791_351 # First upgrade block\n", + "END_BLOCK = 3_811_908 # NEW Fix block" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO: Fill in with ss58 addresses\n", + "# Note: this script assumes this *coldkey* was not swapped in the period between START_BLOCK and END_BLOCK\n", + "OWNER_KEY = \"OWNER KEY\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Assume only ever ONE hotkey swap happened\n", + "owned_hotkeys_start = sub.query_subtensor(\"OwnedHotkeys\", START_BLOCK, params=[OWNER_KEY])\n", + "owned_hotkeys_end = sub.query_subtensor(\"OwnedHotkeys\", END_BLOCK, params=[OWNER_KEY])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "all_w_pending = []\n", + "for hk in owned_hotkeys_start:\n", + " pending_em = sub.query_subtensor(\"PendingdHotkeyEmission\", START_BLOCK + 10, params=[hk.value])\n", + " if pending_em:\n", + " all_w_pending.append((hk.value, pending_em.value))\n", + "\n", + "all_w_pending = sorted(all_w_pending, key=lambda x: x[1], reverse=True)\n", + "START_HOTKEY = all_w_pending[0][0]\n", + "print(f\"Start hotkey: {START_HOTKEY}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "all_w_pending = []\n", + "for hk in owned_hotkeys_end:\n", + " pending_em = sub.query_subtensor(\"PendingdHotkeyEmission\", END_BLOCK - 120, params=[hk.value])\n", + " if pending_em:\n", + " all_w_pending.append((hk.value, pending_em.value))\n", + "\n", + "all_w_pending = sorted(all_w_pending, key=lambda x: x[1], reverse=True)\n", + "END_HOTKEY = all_w_pending[0][0]\n", + "print(f\"End hotkey: {END_HOTKEY}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ZERO_KEY = bittensor.u8_key_to_ss58([0]*32)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Find where swap happened\n", + "def find_swap(curr_hk: str) -> Optional[int]:\n", + " curr_block = END_BLOCK\n", + " while curr_block > START_BLOCK:\n", + " # Get last emission drain\n", + " last_emission_drain = sub.query_subtensor(\"LastHotkeyEmissionDrain\", curr_block, params=[curr_hk])\n", + " if not last_emission_drain:\n", + " print(f\"No last emission drain found at block {curr_block}\")\n", + " break\n", + "\n", + " # If the start hotkey, check for swap happened\n", + " zero_key_stake = sub.query_subtensor(\"Stake\", last_emission_drain.value - 1, params=[curr_hk, ZERO_KEY])\n", + " if zero_key_stake.value == 0: # Swap happened before this tempo ran\n", + " print(f\"Hotkey {curr_hk} swapped AFTER block {curr_block}\")\n", + " return last_emission_drain.value # This is first tempo after swap\n", + "\n", + " curr_block = last_emission_drain.value - 1\n", + " \n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "target_hk = START_HOTKEY\n", + "\n", + "swap_block = find_swap(target_hk)\n", + "if swap_block is None:\n", + " print(\"No swap found\")\n", + " exit(1)\n", + "\n", + "print(f\"Swap happened before block {swap_block}\")\n", + "\n", + "# Verify the swap had not yet occurred the block *before* the swap_block\n", + "null_stake_now = sub.query_subtensor(\"Stake\", swap_block - 1, params=[target_hk, ZERO_KEY])\n", + "if null_stake_now.value > 0:\n", + " print(f\"Swap already happened at block {swap_block - 1}\")\n", + " raise ValueError(\"Swap already happened\")\n", + "\n", + "print(f\"Swap not yet happened at block {swap_block - 1}\")\n", + "\n", + "target_block = swap_block\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "TO_EMIT = {}\n", + "EMISSIONS = {}\n", + "\n", + "# Get the pending emission\n", + "pending_emission = sub.query_subtensor(\"PendingdHotkeyEmission\", target_block - 1, params=[target_hk])\n", + "EMISSIONS[target_block] = pending_emission.value\n", + "if not pending_emission:\n", + " print(f\"No pending emission found at block {target_block}\")\n", + " raise Exception(\"No pending emission found\")\n", + "\n", + "TAKE = sub.query_subtensor(\"Delegates\", target_block - 1, params=[target_hk])\n", + "if not TAKE:\n", + " print(f\"No delegate found at block {target_block - 1}\")\n", + " raise Exception(\"No delegate found\")\n", + "\n", + "TAKE = TAKE.value / (2**16-1) # normalize to 1.0\n", + "\n", + "hk_take = pending_emission.value * TAKE\n", + "to_emit_from_pending = pending_emission.value - hk_take\n", + "\n", + "# Find start of this tempo\n", + "## Get the last emission drain\n", + "last_emission_drain = sub.query_subtensor(\"LastHotkeyEmissionDrain\", target_block - 1, params=[target_hk]).value\n", + "if last_emission_drain == 0:\n", + " last_emission_drain = START_BLOCK\n", + "\n", + "## Set the start of this tempo\n", + "start_of_tempo = last_emission_drain\n", + "\n", + "\n", + "# Get the stake map\n", + "stake_map = sub.query_map_subtensor(\"Stake\", start_of_tempo, params=[target_hk])\n", + "if not stake_map:\n", + " print(f\"No stake map found at block {start_of_tempo}\")\n", + " raise Exception(\"No stake map found\")\n", + "\n", + "stake_dict = {ck.value: st.value for ck, st in stake_map}\n", + "\n", + "stake_sum = sum(stake_dict.values())\n", + "TO_EMIT_THIS_TEMPO = {}\n", + "for ck, st in stake_dict.items():\n", + " TO_EMIT_THIS_TEMPO[ck] = 0\n", + " proportion = st / stake_sum\n", + " owed_emission = proportion * to_emit_from_pending\n", + " # Track for below assertion\n", + " TO_EMIT_THIS_TEMPO[ck] += owed_emission\n", + " \n", + " if ck not in TO_EMIT:\n", + " TO_EMIT[ck] = 0\n", + " TO_EMIT[ck] += owed_emission\n", + "\n", + "# Verify that the sum of the emissions is less than the total to emit\n", + "# Using an epsilon of 1_000 RAO\n", + "assert sum(TO_EMIT_THIS_TEMPO.values()) <= to_emit_from_pending + 1_000\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "stake_to_distribute = sum(TO_EMIT.values())\n", + "emissions_since = sum(EMISSIONS.values())\n", + "owner_key_em = TO_EMIT.get(OWNER_KEY)\n", + "vali_take = emissions_since - stake_to_distribute\n", + "\n", + "stake_to_distribute_no_owner = stake_to_distribute - owner_key_em\n", + "\n", + "null_stake_after = sub.query_subtensor(\"Stake\", target_block, params=[target_hk, ZERO_KEY])\n", + "if not null_stake_after:\n", + " print(f\"No null stake found at block {target_block}\")\n", + " raise Exception(\"No null stake found\")\n", + "\n", + "assert null_stake_after.value == emissions_since, f\"Expected {emissions_since}, got {null_stake_after.value}\"\n", + "\n", + "\n", + "print(f\"Total emissions earned: {emissions_since/1e9} TAO\")\n", + "print(f\"Stake on the null account: {null_stake_after.value/1e9} TAO\")\n", + "print(f\"Validator take: {vali_take/1e9} TAO -> {vali_take/emissions_since*100:.2f}%\")\n", + "print(f\"Earned by owner key: {owner_key_em/1e9} TAO\")\n", + "print(f\"Stake to distribute (minus owner key): {stake_to_distribute_no_owner/1e9} TAO\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add the vali take to the owner key's emission\n", + "TO_EMIT[OWNER_KEY] += vali_take\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "to_emit_formatted = {\n", + " \"address\": [],\n", + " \"amount\": []\n", + "}\n", + "total_in_csv = 0\n", + "for coldkey, amount in TO_EMIT.items():\n", + " in_tao = round(amount/1e9, 9) # make into TAO, keep 9 decimal places\n", + " total_in_csv += in_tao\n", + " \n", + " if in_tao == 0:\n", + " continue # Skip coldkey if owed nothing\n", + " to_emit_formatted[\"address\"].append(coldkey)\n", + " to_emit_formatted[\"amount\"].append(in_tao) \n", + "print(f\"Total to emit recorded in CSV: {total_in_csv} TAO\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def to_csv(emission_map: Dict[str, int], filename: str):\n", + " df = pd.DataFrame.from_dict(emission_map)\n", + " df.to_csv(filename, index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "to_csv(to_emit_formatted, \"emit_map_migration.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def to_json(emission_map: Dict[str, int], filename: str):\n", + " with open(filename, \"w\") as f:\n", + " json.dump(emission_map, f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "TO_EMIT_COPY = {k: int(round(v/1e9, 9)*1e9) for k, v in TO_EMIT.items() if v > 0}\n", + "\n", + "to_json(TO_EMIT_COPY, \"emit_map_migration.json\")\n", + "print(\"Done\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "finney", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/migration/index.js b/migration/index.js new file mode 100644 index 0000000..41c5c26 --- /dev/null +++ b/migration/index.js @@ -0,0 +1,119 @@ +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { readFileSync, writeFileSync } from "fs"; +import { Keyring, encodeAddress } from "@polkadot/keyring"; +import { waitReady } from "@polkadot/wasm-crypto"; +import { createKeyMulti, sortAddresses } from "@polkadot/util-crypto"; + +const lite_node = "wss://lite.chain.opentensor.ai:443"; +const provider = new WsProvider(lite_node); +const api = new ApiPromise({ provider: provider }); + +const emit_map = readFileSync("./emit_map_migration.json", "utf-8"); +const emit_map_json = JSON.parse(emit_map); + +const BATCH_MAX_SIZE = 1024; +// TODO: Uncomment and fill in mnemonic +// const mnemonic = "your mnemonic here" + +// TODO: fill with hotkey +// const HOTKEY = "" + +// TODO: fill in your signer-key address +const SIGNER_KEY = "5Ck5g3MaG7Ho29ZqmcTFgq8zTxmnrwxs6FR94RsCEquT6nLy"; + +// TODO: fill multisig key address +const MULTISIG_KEY = "5GeRjQYsobRWFnrbBmGe5ugme3rfnDVF69N45YtdBpUFsJG8"; + +const CURR_KEY = "5FKstHjZkh4v3qAMSBa1oJcHCLjxYZ8SNTSz1opTv4hR7gVB" + +const main = async (emit_map_json) => { + await waitReady(); + const wallet_key = new Keyring({ type: "sr25519" }).addFromMnemonic(mnemonic); + + const keyring = new Keyring({ type: "sr25519" }); + const pub_key = keyring.addFromAddress(SIGNER_KEY); + + await api.isReady; + + let total_emission = 0; + + let batches = []; + let batch_calls = []; + let curr_batch_size = 0; + console.log("Creating batches of calls"); + console.log("Emit map size: ", Object.keys(emit_map_json).length); + Object.keys(emit_map_json).forEach(async (key) => { + if (curr_batch_size >= BATCH_MAX_SIZE) { + // Batch into BATCH_MAX_SIZE txs for block size reduction + batches.push(batch_calls); + batch_calls = []; + curr_batch_size = 0; + } + + let to_emit = emit_map_json[key]; + let tx = api.tx.balances.transferKeepAlive(key, to_emit); + total_emission += to_emit; + batch_calls.push(tx); + curr_batch_size += 1; + }); + + if (curr_batch_size > 0) { + // Add the last batch + batches.push(batch_calls); + } + + if (batches.length > 0) { + console.log("Creating batch calls"); + for (const [i, batch] of batches.entries()) { + if (i == 0) { + // Add unstake to the first batch + let curr_stake = await api.query.subtensorModule.stake(CURR_KEY, MULTISIG_KEY); + let unstake_call = api.tx.subtensorModule.removeStake( + CURR_KEY, curr_stake + ) + batch.push(unstake_call); + batch.reverse() // in-place + } + + let batch_call = api.tx.utility.batch(batch); + + let proxy_call = api.tx.proxy.proxy( + MULTISIG_KEY, // real + null, // forceProxyType + batch_call // call + ); + + let fee_estimate = await proxy_call.paymentInfo(pub_key); + console.log("Fee Estimate: ", fee_estimate.partialFee.toHuman()); + + // TODO: Choose ONE of two options, sign and send or write to file + const unsub = await proxy_call + .signAndSend(wallet_key, (result) => { + console.log(`Current status is ${result.status}`); + + if (result.status.isInBlock) { + console.log( + `Proxy Transaction:${i} included at blockHash ${result.status.asInBlock}` + ); + } else if (result.status.isFinalized) { + console.log( + `Transaction:${i} finalized at blockHash ${result.status.asFinalized}` + ); + unsub(); + } + }); + + //writeFileSync(`batch_call_hash_${i}.hex`, batch_call.hash.toHex()); + //writeFileSync(`batch_call_js_${i}.hex`, batch_call.toHex()); + + writeFileSync(`proxy_call_${i}.hex`, proxy_call.toHex()); + } + console.log("Total emission: ", total_emission / 1e9); + } + + console.log("Done"); +}; + +await main(emit_map_json); + +process.exit(); diff --git a/migration/package.json b/migration/package.json new file mode 100644 index 0000000..8bf5f04 --- /dev/null +++ b/migration/package.json @@ -0,0 +1,15 @@ +{ + "name": "migration_js", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "private": true, + "type": "module", + "dependencies": { + "@polkadot/api": "^13.0.1", + "@polkadot/keyring": "^13.0.2" + }, + "scripts": { + "start": "node index.js" + } +} diff --git a/migration/yarn.lock b/migration/yarn.lock new file mode 100644 index 0000000..cb6f6a9 --- /dev/null +++ b/migration/yarn.lock @@ -0,0 +1,566 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@noble/curves@^1.3.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" + integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== + dependencies: + "@noble/hashes" "1.5.0" + +"@noble/hashes@1.5.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" + integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== + +"@polkadot-api/json-rpc-provider-proxy@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz#6e191f28e7d0fbbe8b540fc51d12a0adaeba297e" + integrity sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg== + +"@polkadot-api/json-rpc-provider@0.0.1", "@polkadot-api/json-rpc-provider@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz#333645d40ccd9bccfd1f32503f17e4e63e76e297" + integrity sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== + +"@polkadot-api/metadata-builders@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz#007f158c9e0546cf79ba440befc0c753ab1a6629" + integrity sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg== + dependencies: + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" + +"@polkadot-api/observable-client@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz#fd91efee350595a6e0ecfd3f294cc80de86c0cf7" + integrity sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug== + dependencies: + "@polkadot-api/metadata-builders" "0.3.2" + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" + +"@polkadot-api/substrate-bindings@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz#889b0c3ba19dc95282286506bf6e370a43ce119a" + integrity sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw== + dependencies: + "@noble/hashes" "^1.3.1" + "@polkadot-api/utils" "0.1.0" + "@scure/base" "^1.1.1" + scale-ts "^1.6.0" + +"@polkadot-api/substrate-client@^0.1.2": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz#7a808e5cb85ecb9fa2b3a43945090a6c807430ce" + integrity sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A== + dependencies: + "@polkadot-api/json-rpc-provider" "0.0.1" + "@polkadot-api/utils" "0.1.0" + +"@polkadot-api/utils@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.1.0.tgz#d36937cdc465c2ea302f3278cf53157340ab33a0" + integrity sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA== + +"@polkadot/api-augment@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-13.0.1.tgz#a4d441694e5a364f13a800aa71596803f9a48f01" + integrity sha512-r5R2U8PSPNGBsz+HxZ1JYq/KkDSnDh1aBb+H16wKj2uByXKhedpuGt/z1Myvhfm084ccTloZjXDbfpSdYBLi4Q== + dependencies: + "@polkadot/api-base" "13.0.1" + "@polkadot/rpc-augment" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/types-augment" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/api-base@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-13.0.1.tgz#e7f3d1c7dc2b2820d04b1a1a9aad60820005078b" + integrity sha512-TDkgcSZLd3YQ3j9Zx6coEEiBazaK6y3CboaIuUbPNxR9DchlVdIJWSm/1Agh76opsEABK9SjDfsWzVw0TStidA== + dependencies: + "@polkadot/rpc-core" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/util" "^13.0.2" + rxjs "^7.8.1" + tslib "^2.7.0" + +"@polkadot/api-derive@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-13.0.1.tgz#0b9afff170f3e5aa7ed80f9916919d7472fd297f" + integrity sha512-TiPSFp6l9ks0HLJoEWHyqKKz28eoWz3xqglFG10As0udU8J1u8trPyr+SLWHT0DVsto3u9CP+OneWWMA7fTlCw== + dependencies: + "@polkadot/api" "13.0.1" + "@polkadot/api-augment" "13.0.1" + "@polkadot/api-base" "13.0.1" + "@polkadot/rpc-core" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/util" "^13.0.2" + "@polkadot/util-crypto" "^13.0.2" + rxjs "^7.8.1" + tslib "^2.7.0" + +"@polkadot/api@13.0.1", "@polkadot/api@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-13.0.1.tgz#3e40a3226768fc80f659e8565e3555052729a46e" + integrity sha512-st+Y5I8+7/3PCtO651viU4C7PcbDZJHB93acPjqCGzpekwrxOmnBEsupw8CcJwyRVzj/7qMadkSd0b/Uc8JqIA== + dependencies: + "@polkadot/api-augment" "13.0.1" + "@polkadot/api-base" "13.0.1" + "@polkadot/api-derive" "13.0.1" + "@polkadot/keyring" "^13.0.2" + "@polkadot/rpc-augment" "13.0.1" + "@polkadot/rpc-core" "13.0.1" + "@polkadot/rpc-provider" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/types-augment" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/types-create" "13.0.1" + "@polkadot/types-known" "13.0.1" + "@polkadot/util" "^13.0.2" + "@polkadot/util-crypto" "^13.0.2" + eventemitter3 "^5.0.1" + rxjs "^7.8.1" + tslib "^2.7.0" + +"@polkadot/keyring@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-13.0.2.tgz#05a655eb06c965ae5ee5f181d25916797ea50849" + integrity sha512-NeLbhyKDT5W8LI9seWTZGePxNTOVpDhv2018HSrEDwJq9Ie0C4TZhUf3KNERCkSveuThXjfQJMs+1CF33ZXPWw== + dependencies: + "@polkadot/util" "13.0.2" + "@polkadot/util-crypto" "13.0.2" + tslib "^2.6.2" + +"@polkadot/networks@13.0.2", "@polkadot/networks@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-13.0.2.tgz#0f8fc896b8fb2141212b6448739f4a00bc72b29c" + integrity sha512-ABAL+vug/gIwkdFEzeh87JoJd0YKrxSYg/HjUrZ+Zis2ucxQEKpvtCpJ34ku+YrjacBfVqIAkkwd3ZdIPGq9aQ== + dependencies: + "@polkadot/util" "13.0.2" + "@substrate/ss58-registry" "^1.46.0" + tslib "^2.6.2" + +"@polkadot/rpc-augment@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-13.0.1.tgz#109f4172eee3d7c4639cb8b760397a71334156b4" + integrity sha512-igXNG8mONVgqS4Olt7+WmPoX7G/QL/xrHkPOAD2sbS8+p8LC2gDe/+vVFIkKtEKAHgYSel3vZT3iIppjtEG6gw== + dependencies: + "@polkadot/rpc-core" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/rpc-core@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-13.0.1.tgz#61daf451840a94fef98ec342df1889ce78c6404a" + integrity sha512-+z7/4RUsJKiELEunZgXvi4GkGgjPhQd3+RYwCCN455efJ15SHPgdREsAOwUSBO5/dODqXeqZYojKAUIxMlJNqw== + dependencies: + "@polkadot/rpc-augment" "13.0.1" + "@polkadot/rpc-provider" "13.0.1" + "@polkadot/types" "13.0.1" + "@polkadot/util" "^13.0.2" + rxjs "^7.8.1" + tslib "^2.7.0" + +"@polkadot/rpc-provider@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-13.0.1.tgz#9fdf7a16ffd61271c74c14541e1226b0ea2d72a2" + integrity sha512-rl7jizh0b9FI2Z81vbpm+ui6cND3zxMMC8SSxkIzemC0t1L6O/I+zaPYwNpqVpa7wIeZbSfe69SrvtjeZBcn2g== + dependencies: + "@polkadot/keyring" "^13.0.2" + "@polkadot/types" "13.0.1" + "@polkadot/types-support" "13.0.1" + "@polkadot/util" "^13.0.2" + "@polkadot/util-crypto" "^13.0.2" + "@polkadot/x-fetch" "^13.0.2" + "@polkadot/x-global" "^13.0.2" + "@polkadot/x-ws" "^13.0.2" + eventemitter3 "^5.0.1" + mock-socket "^9.3.1" + nock "^13.5.4" + tslib "^2.7.0" + optionalDependencies: + "@substrate/connect" "0.8.11" + +"@polkadot/types-augment@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-13.0.1.tgz#33878908d664df2a8dbb533dcd1b670c93e77ad3" + integrity sha512-MKS8OAiKHgeeLwyjPukHRwlUlrTkdPTVdsFs6H3yWUr0G2I2nIgHuOTK/8OYVBMplNnLgPsNtpEpY+VduAEefQ== + dependencies: + "@polkadot/types" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/types-codec@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-13.0.1.tgz#6f5fe75d3dfcf0c25dc74dee0d0339f0fcd5f2bc" + integrity sha512-E+8Ny8wr/BEGqchoLejP8Z6qmQQaJmBui1rlwWgKCypI4gnDvhNa+hHheIgrUfSzNwUgsxC/04G9fIRnCaxDpw== + dependencies: + "@polkadot/util" "^13.0.2" + "@polkadot/x-bigint" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/types-create@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-13.0.1.tgz#9b4c8d9ab5ce806c72e1320475e9e7dd47a057b1" + integrity sha512-ge5ZmZOQoCqSOB1JtcZZFq2ysh4rnS9xrwC5BVbtk9GZaop5hRmLLmCXqDn49zEsgynRWHgOiKMP8T9AvOigMg== + dependencies: + "@polkadot/types-codec" "13.0.1" + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/types-known@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-13.0.1.tgz#dd7354fa1576dd0b691f56b7a640ac43bbbdc308" + integrity sha512-ZWtQSrDoO290RJu7mZDo1unKcfz1O3ylQkKH7g3oh6Mzmq9I4q7jeS1kS22rJml45berAPIVqZ3zFfODTl6ngA== + dependencies: + "@polkadot/networks" "^13.0.2" + "@polkadot/types" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/types-create" "13.0.1" + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/types-support@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-13.0.1.tgz#57df25e289d8e1f71285909fbaec3a630e31b423" + integrity sha512-UeGnjvyZSegFgzZ6HlR4H7+1itJBAEkGm9NKwEvZTTZJ0dG4zdxbHLNPURJ9UhDYCZ7bOGqkcB49o+hWY25dDA== + dependencies: + "@polkadot/util" "^13.0.2" + tslib "^2.7.0" + +"@polkadot/types@13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-13.0.1.tgz#7a458b9d81ef8ab1c4f0eb8f8dd23bf3a243e8a5" + integrity sha512-01uOx24Fjvhjt1CvKOL+oy1eExAsF4EVuwgZhwAL+WkD0zqlOlAhqlXn5Wg7sY80yzwmgDTLd8Oej/pHFOdCBQ== + dependencies: + "@polkadot/keyring" "^13.0.2" + "@polkadot/types-augment" "13.0.1" + "@polkadot/types-codec" "13.0.1" + "@polkadot/types-create" "13.0.1" + "@polkadot/util" "^13.0.2" + "@polkadot/util-crypto" "^13.0.2" + rxjs "^7.8.1" + tslib "^2.7.0" + +"@polkadot/util-crypto@13.0.2", "@polkadot/util-crypto@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-13.0.2.tgz#fee602bcb39e9424300410f4144f170ee2a29292" + integrity sha512-woUsJJ6zd/caL7U+D30a5oM/+WK9iNI00Y8aNUHSj6Zq/KPzK9uqDBaLGWwlgrejoMQkxxiU2X0f2LzP15AtQg== + dependencies: + "@noble/curves" "^1.3.0" + "@noble/hashes" "^1.3.3" + "@polkadot/networks" "13.0.2" + "@polkadot/util" "13.0.2" + "@polkadot/wasm-crypto" "^7.3.2" + "@polkadot/wasm-util" "^7.3.2" + "@polkadot/x-bigint" "13.0.2" + "@polkadot/x-randomvalues" "13.0.2" + "@scure/base" "^1.1.5" + tslib "^2.6.2" + +"@polkadot/util@13.0.2", "@polkadot/util@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-13.0.2.tgz#f0a2572d74730fda8dfd690b60d53c131a688f3b" + integrity sha512-/6bS9sfhJLhs8QuqWaR1eRapzfDdGC5XAQZEPL9NN5sTTA7HxWos8rVleai0UERm8QUMabjZ9rK9KpzbXl7ojg== + dependencies: + "@polkadot/x-bigint" "13.0.2" + "@polkadot/x-global" "13.0.2" + "@polkadot/x-textdecoder" "13.0.2" + "@polkadot/x-textencoder" "13.0.2" + "@types/bn.js" "^5.1.5" + bn.js "^5.2.1" + tslib "^2.6.2" + +"@polkadot/wasm-bridge@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz#e1b01906b19e06cbca3d94f10f5666f2ae0baadc" + integrity sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g== + dependencies: + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto-asmjs@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz#c6d41bc4b48b5359d57a24ca3066d239f2d70a34" + integrity sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q== + dependencies: + tslib "^2.6.2" + +"@polkadot/wasm-crypto-init@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz#7e1fe79ba978fb0a4a0f74a92d976299d38bc4b8" + integrity sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g== + dependencies: + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto-wasm@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz#44e08ed5cf6499ce4a3aa7247071a5d01f6a74f4" + integrity sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw== + dependencies: + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz#61bbcd9e591500705c8c591e6aff7654bdc8afc9" + integrity sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw== + dependencies: + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-init" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-util@7.3.2", "@polkadot/wasm-util@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz#4fe6370d2b029679b41a5c02cd7ebf42f9b28de1" + integrity sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg== + dependencies: + tslib "^2.6.2" + +"@polkadot/x-bigint@13.0.2", "@polkadot/x-bigint@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-13.0.2.tgz#25adca9ce0c5ed691f9bced283f44f7e7d824300" + integrity sha512-h2jKT/UaxiEal8LhQeH6+GCjO7GwEqVAD2SNYteCOXff6yNttqAZYJuHZsndbVjVNwqRNf8D5q/zZkD0HUd6xQ== + dependencies: + "@polkadot/x-global" "13.0.2" + tslib "^2.6.2" + +"@polkadot/x-fetch@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-13.0.2.tgz#841d901fae36cbc4157297324ca0d73fbe4d200e" + integrity sha512-B/gf9iriUr6za/Ui7zIFBfHz7UBZ68rJEIteWHx1UHRCZPcLqv+hgpev6xIGrkfFljI0/lI7IwtN2qy6HYzFBg== + dependencies: + "@polkadot/x-global" "13.0.2" + node-fetch "^3.3.2" + tslib "^2.6.2" + +"@polkadot/x-global@13.0.2", "@polkadot/x-global@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-13.0.2.tgz#77afc4fbd4cfac8ba78cf120836f30ecc7322a74" + integrity sha512-OoNIXLB5y8vIKpk4R+XmpDPhipNXWSUvEwUnpQT7NAxNLmzgMq1FhbrwBWWPRNHPrQonp7mqxV/X+v5lv1HW/g== + dependencies: + tslib "^2.6.2" + +"@polkadot/x-randomvalues@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-13.0.2.tgz#78ae28b345895cc816ffcad0b336c31cadfcf928" + integrity sha512-SGj+L0H/7TWZtSmtkWlixO4DFzXDdluI0UscN2h285os2Ns8PnmBbue+iJ8PVSzpY1BOxd66gvkkpboPz+jXFQ== + dependencies: + "@polkadot/x-global" "13.0.2" + tslib "^2.6.2" + +"@polkadot/x-textdecoder@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-13.0.2.tgz#662a6855af8e7a5af17f86890e59ab44f829243a" + integrity sha512-mauglOkTJxLGmLwLc3J5Jlq/W+SHP53eiy3F8/8JxxfnXrZKgWoQXGpvXYPjFnMZj0MzDSy/6GjyGWnDCgdQFA== + dependencies: + "@polkadot/x-global" "13.0.2" + tslib "^2.6.2" + +"@polkadot/x-textencoder@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-13.0.2.tgz#5e178e0f759df50592e6870346c8db2a445af957" + integrity sha512-Lq08H2OnVXj97uaOwg7tcmRS7a4VJYkHEeWO4FyEMOk6P6lU6W8OVNjjxG0se9PCEgmyZPUDbJI//1ynzP4cXw== + dependencies: + "@polkadot/x-global" "13.0.2" + tslib "^2.6.2" + +"@polkadot/x-ws@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-13.0.2.tgz#d0392a87adcba851a44fc6f7f56792e529228f3e" + integrity sha512-nC5e2eY5D5ZR5teQOB7ib+dWLbmNws86cTz3BjKCalSMBBIn6i3V9ElgABpierBmnSJe9D94EyrH1BxdVfDxUg== + dependencies: + "@polkadot/x-global" "13.0.2" + tslib "^2.6.2" + ws "^8.16.0" + +"@scure/base@^1.1.1", "@scure/base@^1.1.5": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.8.tgz#8f23646c352f020c83bca750a82789e246d42b50" + integrity sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg== + +"@substrate/connect-extension-protocol@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.1.0.tgz#7df153f704702b98559e7e5e8a2ce17881fe1d1d" + integrity sha512-Wz5Cbn6S6P4vWfHyrsnPW7g15IAViMaXCk+jYkq4nNEMmzPtTKIEbtxrdDMBKrouOFtYKKp0znx5mh9KTCNqlA== + +"@substrate/connect-known-chains@^1.1.5": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.4.0.tgz#ee0562056cf98a3ee1103a64fa33ff21d86c69fd" + integrity sha512-p/mxn1GobtxJ+7xbIkUH4+/njH1neRHHKTcSGHNOC78Cf6Ch1Xzp082+nMjOBDLQLmraK5PF74AKV3WXHGuALw== + +"@substrate/connect@0.8.11": + version "0.8.11" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.11.tgz#983ec69a05231636e217b573b8130a6b942af69f" + integrity sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw== + dependencies: + "@substrate/connect-extension-protocol" "^2.0.0" + "@substrate/connect-known-chains" "^1.1.5" + "@substrate/light-client-extension-helpers" "^1.0.0" + smoldot "2.0.26" + +"@substrate/light-client-extension-helpers@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz#7b60368c57e06e5cf798c6557422d12e6d81f1ff" + integrity sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg== + dependencies: + "@polkadot-api/json-rpc-provider" "^0.0.1" + "@polkadot-api/json-rpc-provider-proxy" "^0.1.0" + "@polkadot-api/observable-client" "^0.3.0" + "@polkadot-api/substrate-client" "^0.1.2" + "@substrate/connect-extension-protocol" "^2.0.0" + "@substrate/connect-known-chains" "^1.1.5" + rxjs "^7.8.1" + +"@substrate/ss58-registry@^1.46.0": + version "1.50.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.50.0.tgz#2d2a3d060cd4eadd200e4538078461ba73e13d6d" + integrity sha512-mkmlMlcC+MSd9rA+PN8ljGAm5fVZskvVwkXIsbx4NFwaT8kt38r7e9cyDWscG3z2Zn40POviZvEMrJSk+r2SgQ== + +"@types/bn.js@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "22.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" + integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== + dependencies: + undici-types "~6.19.2" + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +debug@^4.1.0: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +mock-socket@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" + integrity sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nock@^13.5.4: + version "13.5.5" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.5.tgz#cd1caaca281d42be17d51946367a3d53a6af3e78" + integrity sha512-XKYnqUrCwXC8DGG1xX4YH5yNIrlh9c065uaMZZHUoeUUINTOyt+x/G+ezYk0Ft6ExSREVIs+qBJDK503viTfFA== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +scale-ts@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.0.tgz#e9641093c5a9e50f964ddb1607139034e3e932e9" + integrity sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q== + +smoldot@2.0.26: + version "2.0.26" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.26.tgz#0e64c7fcd26240fbe4c8d6b6e4b9a9aca77e00f6" + integrity sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig== + dependencies: + ws "^8.8.1" + +tslib@^2.1.0, tslib@^2.6.2, tslib@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +ws@^8.16.0, ws@^8.8.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== diff --git a/package.json b/package.json index 236dd88..01f1f9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "emit_js", - "version": "1.0.0", + "version": "1.1.0", "main": "index.js", "license": "MIT", "private": true, @@ -10,6 +10,7 @@ "@polkadot/keyring": "^13.0.2" }, "scripts": { - "start": "node index.js" + "start": "node index.js", + "migration": "node migration/index.js" } }