@subwallet/extension-base 1.2.31-0 → 1.2.33-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +78 -227
- package/background/KoniTypes.js +3 -40
- package/background/errors/SWError.d.ts +4 -7
- package/background/errors/SWError.js +4 -0
- package/background/errors/TransactionError.d.ts +2 -2
- package/background/errors/TransactionError.js +2 -4
- package/background/handlers/State.d.ts +0 -12
- package/background/types.d.ts +9 -134
- package/background/warnings/TransactionWarning.d.ts +1 -1
- package/background/warnings/TransactionWarning.js +5 -1
- package/cjs/background/KoniTypes.js +4 -44
- package/cjs/background/errors/SWError.js +4 -0
- package/cjs/background/errors/TransactionError.js +13 -15
- package/cjs/background/warnings/TransactionWarning.js +6 -2
- package/cjs/constants/environment.js +13 -0
- package/cjs/constants/index.js +40 -13
- package/cjs/constants/signing.js +23 -0
- package/cjs/constants/storage.js +4 -2
- package/cjs/core/consts.js +20 -0
- package/cjs/core/logic-validation/recipientAddress.js +106 -0
- package/cjs/core/logic-validation/request.js +11 -19
- package/cjs/core/logic-validation/swap.js +5 -5
- package/cjs/core/logic-validation/transfer.js +83 -42
- package/cjs/core/types.js +26 -0
- package/cjs/core/utils.js +113 -0
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/nft/index.js +14 -5
- package/cjs/koni/api/staking/bonding/paraChain.js +8 -8
- package/cjs/koni/api/staking/bonding/relayChain.js +9 -9
- package/cjs/koni/api/staking/index.js +4 -1
- package/cjs/koni/background/cron.js +7 -7
- package/cjs/koni/background/handlers/Extension.js +510 -1446
- package/cjs/koni/background/handlers/State.js +61 -238
- package/cjs/koni/background/handlers/Tabs.js +143 -107
- package/cjs/koni/background/subscription.js +5 -5
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/Accounts.js +2 -5
- package/cjs/page/SubWalleEvmProvider.js +1 -1
- package/cjs/page/index.js +2 -1
- package/cjs/services/balance-service/BalanceMapImpl.js +48 -20
- package/cjs/services/balance-service/helpers/subscribe/index.js +27 -15
- package/cjs/services/balance-service/helpers/subscribe/ton/consts.js +40 -0
- package/cjs/services/balance-service/helpers/subscribe/ton/ton.js +120 -0
- package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +181 -0
- package/cjs/services/balance-service/index.js +25 -13
- package/cjs/services/balance-service/transfer/token.js +41 -24
- package/cjs/services/balance-service/transfer/ton-transfer.js +136 -0
- package/cjs/services/buy-service/index.js +5 -1
- package/cjs/services/chain-service/constants.js +1 -1
- package/cjs/services/chain-service/handler/SubstrateApi.js +1 -0
- package/cjs/services/chain-service/handler/TonApi.js +213 -0
- package/cjs/services/chain-service/handler/TonChainHandler.js +81 -0
- package/cjs/services/chain-service/index.js +32 -8
- package/cjs/services/chain-service/utils/index.js +78 -22
- package/cjs/services/earning-service/constants/chains.js +3 -1
- package/cjs/services/earning-service/handlers/base.js +2 -1
- package/cjs/services/earning-service/handlers/lending/base.js +8 -9
- package/cjs/services/earning-service/handlers/lending/interlay.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +9 -10
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/astar.js +2 -2
- package/cjs/services/earning-service/handlers/native-staking/base-para.js +13 -13
- package/cjs/services/earning-service/handlers/native-staking/base.js +2 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +2 -2
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +15 -15
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +14 -14
- package/cjs/services/earning-service/handlers/special.js +10 -10
- package/cjs/services/earning-service/service.js +26 -17
- package/cjs/services/history-service/helpers/subscan-extrinsic-parser-helper.js +1 -1
- package/cjs/services/history-service/index.js +29 -11
- package/cjs/services/history-service/subscan-history.js +9 -21
- package/cjs/services/keyring-service/context/account-context.js +259 -0
- package/cjs/services/keyring-service/context/handlers/Base.js +20 -0
- package/cjs/services/keyring-service/context/handlers/Derive.js +377 -0
- package/cjs/services/keyring-service/context/handlers/Inject.js +75 -0
- package/cjs/services/keyring-service/context/handlers/Json.js +348 -0
- package/cjs/services/keyring-service/context/handlers/Ledger.js +165 -0
- package/cjs/services/keyring-service/context/handlers/Mnemonic.js +218 -0
- package/cjs/services/keyring-service/context/handlers/Modify.js +258 -0
- package/cjs/services/keyring-service/context/handlers/Secret.js +310 -0
- package/cjs/services/keyring-service/context/handlers/index.js +82 -0
- package/cjs/services/keyring-service/context/state.js +649 -0
- package/cjs/services/keyring-service/context/stores/AccountProxy.js +32 -0
- package/cjs/services/keyring-service/context/stores/Base.js +37 -0
- package/cjs/services/keyring-service/context/stores/CurrentAccount.js +28 -0
- package/cjs/services/keyring-service/context/stores/ModifyPair.js +19 -0
- package/cjs/services/keyring-service/context/stores/index.js +38 -0
- package/cjs/services/keyring-service/index.js +20 -164
- package/cjs/services/migration-service/scripts/index.js +6 -4
- package/cjs/services/migration-service/scripts/{MigrateLedgerAccountV2.js → keyring/MigrateLedgerAccountV2.js} +1 -1
- package/cjs/services/migration-service/scripts/keyring/MigratePairData.js +28 -0
- package/cjs/services/migration-service/scripts/{MigrateRemoveGenesisHash.js → keyring/MigrateRemoveGenesisHash.js} +1 -1
- package/cjs/services/request-service/constants.js +5 -3
- package/cjs/services/request-service/handler/AuthRequestHandler.js +104 -57
- package/cjs/services/request-service/handler/EvmRequestHandler.js +3 -4
- package/cjs/services/request-service/handler/SubstrateRequestHandler.js +5 -11
- package/cjs/services/request-service/handler/TonRequestHandler.js +175 -0
- package/cjs/services/request-service/index.js +24 -5
- package/cjs/services/swap-service/handler/asset-hub/handler.js +6 -5
- package/cjs/services/swap-service/handler/base-handler.js +8 -8
- package/cjs/services/swap-service/handler/chainflip-handler.js +5 -4
- package/cjs/services/swap-service/handler/hydradx-handler.js +4 -3
- package/cjs/services/swap-service/index.js +4 -4
- package/cjs/services/transaction-service/helpers/index.js +6 -1
- package/cjs/services/transaction-service/index.js +184 -84
- package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +2 -10
- package/cjs/stores/AccountProxyStore.js +18 -0
- package/cjs/stores/ModifyPairStore.js +18 -0
- package/cjs/stores/index.js +23 -2
- package/cjs/types/account/action/add/index.js +38 -0
- package/cjs/types/account/action/add/json.js +1 -0
- package/cjs/types/account/action/add/mnemonic.js +1 -0
- package/cjs/types/account/action/add/secret.js +1 -0
- package/cjs/types/account/action/derive.js +1 -0
- package/cjs/types/account/action/edit.js +1 -0
- package/cjs/types/account/action/export.js +1 -0
- package/cjs/types/account/action/index.js +71 -0
- package/cjs/types/account/action/subscribe.js +16 -0
- package/cjs/types/account/action/validate.js +1 -0
- package/cjs/types/account/error/common.js +40 -0
- package/cjs/types/account/error/derive.js +55 -0
- package/cjs/types/account/error/index.js +27 -0
- package/cjs/types/account/index.js +38 -0
- package/cjs/types/account/info/current.js +1 -0
- package/cjs/types/account/info/index.js +38 -0
- package/cjs/types/account/info/keyring.js +90 -0
- package/cjs/types/account/info/proxy.js +49 -0
- package/cjs/types/error.js +1 -0
- package/cjs/types/index.js +44 -0
- package/cjs/types/transaction/data.js +1 -0
- package/cjs/types/transaction/error.js +53 -0
- package/cjs/types/transaction/index.js +49 -0
- package/cjs/types/transaction/request.js +1 -0
- package/cjs/types/transaction/warning.js +14 -0
- package/cjs/types/yield/actions/join/validate.js +1 -16
- package/cjs/utils/account/analyze.js +166 -0
- package/cjs/utils/account/common.js +121 -0
- package/cjs/utils/account/derive/index.js +27 -0
- package/cjs/utils/account/derive/info/index.js +27 -0
- package/cjs/utils/account/derive/info/solo.js +246 -0
- package/cjs/utils/account/derive/info/unified.js +112 -0
- package/cjs/utils/account/derive/validate.js +177 -0
- package/cjs/utils/account/index.js +49 -0
- package/cjs/utils/account/transform.js +566 -0
- package/cjs/utils/auth.js +46 -0
- package/cjs/utils/getId.js +8 -1
- package/cjs/utils/index.js +48 -62
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +6 -0
- package/constants/index.d.ts +5 -1
- package/constants/index.js +5 -2
- package/constants/signing.d.ts +4 -0
- package/constants/signing.js +15 -0
- package/constants/storage.d.ts +1 -0
- package/constants/storage.js +2 -1
- package/core/consts.d.ts +1 -0
- package/core/consts.js +13 -0
- package/core/logic-validation/recipientAddress.d.ts +2 -0
- package/core/logic-validation/recipientAddress.js +100 -0
- package/core/logic-validation/request.js +10 -18
- package/core/logic-validation/swap.js +1 -1
- package/core/logic-validation/transfer.d.ts +3 -2
- package/core/logic-validation/transfer.js +50 -10
- package/core/types.d.ts +26 -0
- package/core/types.js +19 -0
- package/core/utils.d.ts +10 -0
- package/core/utils.js +105 -0
- package/koni/api/dotsama/crowdloan.js +1 -1
- package/koni/api/nft/index.js +14 -5
- package/koni/api/staking/bonding/paraChain.js +2 -2
- package/koni/api/staking/bonding/relayChain.js +2 -2
- package/koni/api/staking/index.js +4 -1
- package/koni/background/cron.js +7 -7
- package/koni/background/handlers/Extension.d.ts +26 -35
- package/koni/background/handlers/Extension.js +337 -1242
- package/koni/background/handlers/State.d.ts +12 -19
- package/koni/background/handlers/State.js +57 -231
- package/koni/background/handlers/Tabs.d.ts +2 -3
- package/koni/background/handlers/Tabs.js +105 -61
- package/koni/background/subscription.js +5 -5
- package/package.json +352 -53
- package/packageInfo.js +1 -1
- package/page/Accounts.js +2 -5
- package/page/SubWalleEvmProvider.js +1 -1
- package/page/index.js +2 -1
- package/services/balance-service/BalanceMapImpl.d.ts +6 -4
- package/services/balance-service/BalanceMapImpl.js +44 -18
- package/services/balance-service/helpers/subscribe/index.d.ts +3 -4
- package/services/balance-service/helpers/subscribe/index.js +29 -17
- package/services/balance-service/helpers/subscribe/ton/consts.d.ts +18 -0
- package/services/balance-service/helpers/subscribe/ton/consts.js +28 -0
- package/services/balance-service/helpers/subscribe/ton/ton.d.ts +3 -0
- package/services/balance-service/helpers/subscribe/ton/ton.js +111 -0
- package/services/balance-service/helpers/subscribe/ton/types.d.ts +26 -0
- package/services/balance-service/helpers/subscribe/ton/utils.d.ts +32 -0
- package/services/balance-service/helpers/subscribe/ton/utils.js +159 -0
- package/services/balance-service/index.js +25 -13
- package/services/balance-service/transfer/token.d.ts +2 -2
- package/services/balance-service/transfer/token.js +18 -1
- package/services/balance-service/transfer/ton-transfer.d.ts +25 -0
- package/services/balance-service/transfer/ton-transfer.js +127 -0
- package/services/buy-service/index.js +5 -1
- package/services/buy-service/types.d.ts +2 -2
- package/services/chain-service/constants.js +1 -1
- package/services/chain-service/handler/SubstrateApi.js +1 -0
- package/services/chain-service/handler/TonApi.d.ts +52 -0
- package/services/chain-service/handler/TonApi.js +204 -0
- package/services/chain-service/handler/TonChainHandler.d.ts +17 -0
- package/services/chain-service/handler/TonChainHandler.js +73 -0
- package/services/chain-service/index.d.ts +5 -1
- package/services/chain-service/index.js +32 -8
- package/services/chain-service/types.d.ts +24 -0
- package/services/chain-service/utils/index.d.ts +10 -2
- package/services/chain-service/utils/index.js +59 -18
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +1 -0
- package/services/earning-service/handlers/base.js +3 -2
- package/services/earning-service/handlers/lending/base.js +1 -2
- package/services/earning-service/handlers/lending/interlay.js +2 -2
- package/services/earning-service/handlers/liquid-staking/base.js +1 -2
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
- package/services/earning-service/handlers/native-staking/amplitude.js +2 -2
- package/services/earning-service/handlers/native-staking/astar.js +2 -2
- package/services/earning-service/handlers/native-staking/base-para.js +2 -2
- package/services/earning-service/handlers/native-staking/base.js +2 -2
- package/services/earning-service/handlers/native-staking/para-chain.js +2 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
- package/services/earning-service/handlers/nomination-pool/index.js +2 -2
- package/services/earning-service/handlers/special.js +2 -2
- package/services/earning-service/service.js +18 -9
- package/services/event-service/types.d.ts +3 -1
- package/services/history-service/helpers/subscan-extrinsic-parser-helper.js +1 -1
- package/services/history-service/index.d.ts +4 -1
- package/services/history-service/index.js +29 -11
- package/services/history-service/subscan-history.js +8 -20
- package/services/keyring-service/context/account-context.d.ts +87 -0
- package/services/keyring-service/context/account-context.js +250 -0
- package/services/keyring-service/context/handlers/Base.d.ts +11 -0
- package/services/keyring-service/context/handlers/Base.js +13 -0
- package/services/keyring-service/context/handlers/Derive.d.ts +29 -0
- package/services/keyring-service/context/handlers/Derive.js +365 -0
- package/services/keyring-service/context/handlers/Inject.d.ts +11 -0
- package/services/keyring-service/context/handlers/Inject.js +69 -0
- package/services/keyring-service/context/handlers/Json.d.ts +18 -0
- package/services/keyring-service/context/handlers/Json.js +328 -0
- package/services/keyring-service/context/handlers/Ledger.d.ts +11 -0
- package/services/keyring-service/context/handlers/Ledger.js +158 -0
- package/services/keyring-service/context/handlers/Mnemonic.d.ts +15 -0
- package/services/keyring-service/context/handlers/Mnemonic.js +206 -0
- package/services/keyring-service/context/handlers/Modify.d.ts +16 -0
- package/services/keyring-service/context/handlers/Modify.js +250 -0
- package/services/keyring-service/context/handlers/Secret.d.ts +16 -0
- package/services/keyring-service/context/handlers/Secret.js +299 -0
- package/services/keyring-service/context/handlers/index.d.ts +7 -0
- package/services/keyring-service/context/handlers/index.js +10 -0
- package/services/keyring-service/context/state.d.ts +92 -0
- package/services/keyring-service/context/state.js +629 -0
- package/services/keyring-service/context/stores/AccountProxy.d.ts +13 -0
- package/services/keyring-service/context/stores/AccountProxy.js +25 -0
- package/services/keyring-service/context/stores/Base.d.ts +22 -0
- package/services/keyring-service/context/stores/Base.js +30 -0
- package/services/keyring-service/context/stores/CurrentAccount.d.ts +15 -0
- package/services/keyring-service/context/stores/CurrentAccount.js +21 -0
- package/services/keyring-service/context/stores/ModifyPair.d.ts +10 -0
- package/services/keyring-service/context/stores/ModifyPair.js +12 -0
- package/services/keyring-service/context/stores/index.d.ts +3 -0
- package/services/keyring-service/context/stores/index.js +6 -0
- package/services/keyring-service/index.d.ts +10 -22
- package/services/keyring-service/index.js +20 -161
- package/services/migration-service/scripts/index.js +6 -4
- package/services/migration-service/scripts/{MigrateLedgerAccountV2.d.ts → keyring/MigrateLedgerAccountV2.d.ts} +1 -1
- package/services/migration-service/scripts/{MigrateLedgerAccountV2.js → keyring/MigrateLedgerAccountV2.js} +1 -1
- package/services/migration-service/scripts/keyring/MigratePairData.d.ts +4 -0
- package/services/migration-service/scripts/keyring/MigratePairData.js +20 -0
- package/services/migration-service/scripts/{MigrateRemoveGenesisHash.js → keyring/MigrateRemoveGenesisHash.js} +1 -1
- package/services/mkt-campaign-service/types.d.ts +4 -0
- package/services/request-service/constants.d.ts +1 -1
- package/services/request-service/constants.js +2 -1
- package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
- package/services/request-service/handler/AuthRequestHandler.js +93 -45
- package/services/request-service/handler/EvmRequestHandler.js +3 -4
- package/services/request-service/handler/SubstrateRequestHandler.d.ts +2 -2
- package/services/request-service/handler/SubstrateRequestHandler.js +5 -11
- package/services/request-service/handler/TonRequestHandler.d.ts +17 -0
- package/services/request-service/handler/TonRequestHandler.js +168 -0
- package/services/request-service/index.d.ts +8 -3
- package/services/request-service/index.js +23 -5
- package/services/request-service/types.d.ts +6 -3
- package/services/swap-service/handler/asset-hub/handler.d.ts +1 -1
- package/services/swap-service/handler/asset-hub/handler.js +2 -1
- package/services/swap-service/handler/base-handler.js +1 -1
- package/services/swap-service/handler/chainflip-handler.d.ts +1 -1
- package/services/swap-service/handler/chainflip-handler.js +4 -3
- package/services/swap-service/handler/hydradx-handler.d.ts +1 -1
- package/services/swap-service/handler/hydradx-handler.js +2 -1
- package/services/swap-service/index.js +1 -1
- package/services/transaction-service/helpers/index.d.ts +2 -0
- package/services/transaction-service/helpers/index.js +4 -0
- package/services/transaction-service/index.d.ts +1 -0
- package/services/transaction-service/index.js +114 -17
- package/services/transaction-service/types.d.ts +4 -2
- package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +2 -10
- package/stores/AccountProxyStore.d.ts +5 -0
- package/stores/AccountProxyStore.js +10 -0
- package/stores/Authorize.d.ts +1 -1
- package/stores/CurrentAccountStore.d.ts +1 -1
- package/stores/ModifyPairStore.d.ts +5 -0
- package/stores/ModifyPairStore.js +10 -0
- package/stores/index.d.ts +4 -1
- package/stores/index.js +5 -2
- package/types/account/action/add/index.d.ts +3 -0
- package/types/account/action/add/index.js +6 -0
- package/types/account/action/add/json.d.ts +29 -0
- package/types/account/action/add/json.js +1 -0
- package/types/account/action/add/mnemonic.d.ts +77 -0
- package/types/account/action/add/mnemonic.js +1 -0
- package/types/account/action/add/secret.d.ts +55 -0
- package/types/account/action/add/secret.js +1 -0
- package/types/account/action/derive.d.ts +77 -0
- package/types/account/action/derive.js +1 -0
- package/types/account/action/edit.d.ts +31 -0
- package/types/account/action/edit.js +1 -0
- package/types/account/action/export.d.ts +15 -0
- package/types/account/action/export.js +1 -0
- package/types/account/action/index.d.ts +6 -0
- package/types/account/action/index.js +9 -0
- package/types/account/action/subscribe.d.ts +22 -0
- package/types/account/action/subscribe.js +10 -0
- package/types/account/action/validate.d.ts +17 -0
- package/types/account/action/validate.js +1 -0
- package/types/account/error/common.d.ts +10 -0
- package/types/account/error/common.js +33 -0
- package/types/account/error/derive.d.ts +13 -0
- package/types/account/error/derive.js +48 -0
- package/types/account/error/index.d.ts +2 -0
- package/types/account/error/index.js +5 -0
- package/types/account/index.d.ts +3 -0
- package/types/account/index.js +6 -0
- package/types/account/info/current.d.ts +10 -0
- package/types/account/info/current.js +1 -0
- package/types/account/info/index.d.ts +3 -0
- package/types/account/info/index.js +6 -0
- package/types/account/info/keyring.d.ts +161 -0
- package/types/account/info/keyring.js +88 -0
- package/types/account/info/proxy.d.ts +73 -0
- package/types/account/info/proxy.js +46 -0
- package/types/balance/index.d.ts +4 -1
- package/types/buy.d.ts +3 -1
- package/types/error.d.ts +8 -0
- package/types/error.js +1 -0
- package/types/index.d.ts +4 -0
- package/types/index.js +5 -1
- package/types/transaction/data.d.ts +17 -0
- package/types/transaction/data.js +1 -0
- package/types/transaction/error.d.ts +39 -0
- package/types/transaction/error.js +44 -0
- package/types/transaction/index.d.ts +4 -0
- package/types/transaction/index.js +7 -0
- package/types/transaction/request.d.ts +24 -0
- package/types/transaction/request.js +1 -0
- package/types/transaction/warning.d.ts +5 -0
- package/types/transaction/warning.js +8 -0
- package/types/yield/actions/join/submit.d.ts +2 -2
- package/types/yield/actions/join/validate.d.ts +1 -6
- package/types/yield/actions/join/validate.js +1 -10
- package/types/yield/actions/others.d.ts +1 -1
- package/utils/account/analyze.d.ts +4 -0
- package/utils/account/analyze.js +159 -0
- package/utils/account/common.d.ts +16 -0
- package/utils/account/common.js +104 -0
- package/utils/account/derive/index.d.ts +2 -0
- package/utils/account/derive/index.js +5 -0
- package/utils/account/derive/info/index.d.ts +2 -0
- package/utils/account/derive/info/index.js +5 -0
- package/utils/account/derive/info/solo.d.ts +11 -0
- package/utils/account/derive/info/solo.js +230 -0
- package/utils/account/derive/info/unified.d.ts +7 -0
- package/utils/account/derive/info/unified.js +102 -0
- package/utils/account/derive/validate.d.ts +8 -0
- package/utils/account/derive/validate.js +165 -0
- package/utils/account/index.d.ts +4 -0
- package/utils/account/index.js +7 -0
- package/utils/account/transform.d.ts +41 -0
- package/utils/account/transform.js +533 -0
- package/utils/auth.d.ts +2 -0
- package/utils/auth.js +39 -0
- package/utils/canDerive.d.ts +1 -1
- package/utils/eth/mergeTransactionAndSignature.d.ts +1 -1
- package/utils/getId.d.ts +1 -0
- package/utils/getId.js +3 -1
- package/utils/index.d.ts +12 -5
- package/utils/index.js +28 -47
- package/cjs/signers/substrates/KeyringSigner.js +0 -35
- package/cjs/signers/substrates/LedgerSigner.js +0 -44
- package/cjs/signers/substrates/QrSigner.js +0 -63
- package/cjs/signers/types.js +0 -15
- package/cjs/signers/web3/QrSigner.js +0 -67
- package/cjs/utils/account.js +0 -34
- package/signers/substrates/KeyringSigner.d.ts +0 -13
- package/signers/substrates/KeyringSigner.js +0 -27
- package/signers/substrates/LedgerSigner.d.ts +0 -13
- package/signers/substrates/LedgerSigner.js +0 -37
- package/signers/substrates/QrSigner.d.ts +0 -20
- package/signers/substrates/QrSigner.js +0 -55
- package/signers/types.d.ts +0 -34
- package/signers/types.js +0 -9
- package/signers/web3/QrSigner.d.ts +0 -18
- package/signers/web3/QrSigner.js +0 -59
- package/types/transaction.d.ts +0 -3
- package/utils/account.d.ts +0 -5
- package/utils/account.js +0 -24
- /package/cjs/{types/transaction.js → services/balance-service/helpers/subscribe/ton/types.js} +0 -0
- /package/cjs/services/migration-service/scripts/{MigrateLedgerAccount.js → keyring/MigrateLedgerAccount.js} +0 -0
- /package/{types/transaction.js → services/balance-service/helpers/subscribe/ton/types.js} +0 -0
- /package/services/migration-service/scripts/{MigrateLedgerAccount.d.ts → keyring/MigrateLedgerAccount.d.ts} +0 -0
- /package/services/migration-service/scripts/{MigrateLedgerAccount.js → keyring/MigrateLedgerAccount.js} +0 -0
- /package/services/migration-service/scripts/{MigrateRemoveGenesisHash.d.ts → keyring/MigrateRemoveGenesisHash.d.ts} +0 -0
|
@@ -6,8 +6,8 @@ import { LegacyTransaction } from '@ethereumjs/tx';
|
|
|
6
6
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
7
7
|
import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers';
|
|
8
8
|
import { createSubscription } from '@subwallet/extension-base/background/handlers/subscriptions';
|
|
9
|
-
import {
|
|
10
|
-
import { ALL_ACCOUNT_KEY,
|
|
9
|
+
import { CampaignDataType, ChainType, ExternalRequestPromiseStatus, ExtrinsicType, MantaPayEnableMessage, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
10
|
+
import { ALL_ACCOUNT_KEY, LATEST_SESSION, XCM_FEE_RATIO } from '@subwallet/extension-base/constants';
|
|
11
11
|
import { additionalValidateTransfer, additionalValidateXcmTransfer, validateTransferRequest, validateXcmTransferRequest } from '@subwallet/extension-base/core/logic-validation/transfer';
|
|
12
12
|
import { _isSnowBridgeXcm } from '@subwallet/extension-base/core/substrate/xcm-parser';
|
|
13
13
|
import { ALLOWED_PATH } from '@subwallet/extension-base/defaults';
|
|
@@ -21,54 +21,34 @@ import { getBondingExtrinsic, getCancelWithdrawalExtrinsic, getClaimRewardExtrin
|
|
|
21
21
|
import { getTuringCancelCompoundingExtrinsic, getTuringCompoundExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
|
|
22
22
|
import { getPoolingBondingExtrinsic, getPoolingUnbondingExtrinsic, validatePoolBondingCondition, validateRelayUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
|
|
23
23
|
import { YIELD_EXTRINSIC_TYPES } from '@subwallet/extension-base/koni/api/yield/helper/utils';
|
|
24
|
+
import { isBounceableAddress } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils';
|
|
24
25
|
import { getERC20TransactionObject, getERC721Transaction, getEVMTransactionObject, getPSP34TransferExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
|
|
25
26
|
import { createTransferExtrinsic, getTransferMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/token';
|
|
27
|
+
import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
26
28
|
import { createSnowBridgeExtrinsic, createXcmExtrinsic, getXcmMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
27
29
|
import { _API_OPTIONS_CHAIN_GROUP, _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
|
|
28
30
|
import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
|
|
29
|
-
import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId,
|
|
31
|
+
import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _isAssetSmartContractNft, _isChainEvmCompatible, _isChainTonCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByEvm, _isTokenTransferredByTon } from '@subwallet/extension-base/services/chain-service/utils';
|
|
30
32
|
import { EXTENSION_REQUEST_URL } from '@subwallet/extension-base/services/request-service/constants';
|
|
31
33
|
import { DEFAULT_AUTO_LOCK_TIME } from '@subwallet/extension-base/services/setting-service/constants';
|
|
32
34
|
import { WALLET_CONNECT_EIP155_NAMESPACE } from '@subwallet/extension-base/services/wallet-connect-service/constants';
|
|
33
35
|
import { isProposalExpired, isSupportWalletConnectChain, isSupportWalletConnectNamespace } from '@subwallet/extension-base/services/wallet-connect-service/helpers';
|
|
34
36
|
import { SWStorage } from '@subwallet/extension-base/storage';
|
|
35
37
|
import { AccountsStore } from '@subwallet/extension-base/stores';
|
|
36
|
-
import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
37
|
-
import {
|
|
38
|
+
import { BasicTxErrorType, BasicTxWarningCode, StakingTxErrorType, YieldPoolType } from '@subwallet/extension-base/types';
|
|
39
|
+
import { _analyzeAddress, BN_ZERO, combineAllAccountProxy, createTransactionFromRLP, isSameAddress, MODULE_SUPPORT, reformatAddress, signatureToHex, transformAccounts, transformAddresses, uniqueStringArray } from '@subwallet/extension-base/utils';
|
|
38
40
|
import { parseContractInput, parseEvmRlp } from '@subwallet/extension-base/utils/eth/parseTransaction';
|
|
39
41
|
import { metadataExpand } from '@subwallet/extension-chains';
|
|
40
|
-
import {
|
|
42
|
+
import { getKeypairTypeByAddress, isAddress, isSubstrateAddress, isTonAddress } from '@subwallet/keyring';
|
|
43
|
+
import { EthereumKeypairTypes, SubstrateKeypairTypes, TonKeypairTypes } from '@subwallet/keyring/types';
|
|
41
44
|
import { keyring } from '@subwallet/ui-keyring';
|
|
42
45
|
import { getSdkError } from '@walletconnect/utils';
|
|
43
46
|
import BigN from 'bignumber.js';
|
|
44
47
|
import { t } from 'i18next';
|
|
45
|
-
import { Subject } from 'rxjs';
|
|
48
|
+
import { combineLatest, Subject } from 'rxjs';
|
|
46
49
|
import { Metadata, TypeRegistry } from '@polkadot/types';
|
|
47
|
-
import { assert, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex
|
|
48
|
-
import {
|
|
49
|
-
const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
|
|
50
|
-
function getSuri(seed, type) {
|
|
51
|
-
return type === 'ethereum' ? `${seed}${ETH_DERIVE_DEFAULT}` : seed;
|
|
52
|
-
}
|
|
53
|
-
function transformAccounts(accounts) {
|
|
54
|
-
return Object.values(accounts).map(({
|
|
55
|
-
json: {
|
|
56
|
-
address,
|
|
57
|
-
meta
|
|
58
|
-
},
|
|
59
|
-
type
|
|
60
|
-
}) => ({
|
|
61
|
-
address,
|
|
62
|
-
...meta,
|
|
63
|
-
type
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
const ACCOUNT_ALL_JSON = {
|
|
67
|
-
address: ALL_ACCOUNT_KEY,
|
|
68
|
-
name: 'All'
|
|
69
|
-
};
|
|
70
|
-
export const SEED_DEFAULT_LENGTH = 12;
|
|
71
|
-
export const SEED_LENGTHS = [12, 15, 18, 21, 24];
|
|
50
|
+
import { assert, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex } from '@polkadot/util';
|
|
51
|
+
import { decodeAddress, isEthereumAddress } from '@polkadot/util-crypto';
|
|
72
52
|
export function isJsonPayload(value) {
|
|
73
53
|
return value.genesisHash !== undefined;
|
|
74
54
|
}
|
|
@@ -79,6 +59,11 @@ export default class KoniExtension {
|
|
|
79
59
|
#skipAutoLock = false;
|
|
80
60
|
#firstTime = true;
|
|
81
61
|
#alwaysLock = false;
|
|
62
|
+
/**
|
|
63
|
+
* Use for heartbeat.
|
|
64
|
+
* When auto-lock runs, the value changes, and it stops the heartbeat.
|
|
65
|
+
* With MV3, when the lifecycle ends, this extension Object will be destroyed, so #keyringLockSubject will be destroyed too.
|
|
66
|
+
* */
|
|
82
67
|
#keyringLockSubject = new Subject();
|
|
83
68
|
constructor(state) {
|
|
84
69
|
this.#koniState = state;
|
|
@@ -117,76 +102,14 @@ export default class KoniExtension {
|
|
|
117
102
|
next: updateTimeAutoLock
|
|
118
103
|
});
|
|
119
104
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
accountsCreateExternal({
|
|
123
|
-
address,
|
|
124
|
-
genesisHash,
|
|
125
|
-
name
|
|
126
|
-
}) {
|
|
127
|
-
keyring.addExternal(address, {
|
|
128
|
-
genesisHash,
|
|
129
|
-
name
|
|
130
|
-
});
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
accountsCreateHardware({
|
|
134
|
-
accountIndex,
|
|
135
|
-
address,
|
|
136
|
-
addressOffset,
|
|
137
|
-
genesisHash,
|
|
138
|
-
hardwareType,
|
|
139
|
-
name
|
|
140
|
-
}) {
|
|
141
|
-
keyring.addHardware(address, hardwareType, {
|
|
142
|
-
accountIndex,
|
|
143
|
-
addressOffset,
|
|
144
|
-
genesisHash,
|
|
145
|
-
name
|
|
146
|
-
});
|
|
147
|
-
return true;
|
|
105
|
+
accountsEdit(request) {
|
|
106
|
+
return this.#koniState.keyringService.context.accountsEdit(request);
|
|
148
107
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
name,
|
|
152
|
-
suri,
|
|
153
|
-
type
|
|
154
|
-
}) {
|
|
155
|
-
keyring.addUri(getSuri(suri, type), {
|
|
156
|
-
genesisHash,
|
|
157
|
-
name
|
|
158
|
-
}, type);
|
|
159
|
-
return true;
|
|
108
|
+
tonGetAllTonWalletContractVersion(request) {
|
|
109
|
+
return this.#koniState.keyringService.context.tonGetAllTonWalletContractVersion(request);
|
|
160
110
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
newPass,
|
|
164
|
-
oldPass
|
|
165
|
-
}) {
|
|
166
|
-
const pair = keyring.getPair(address);
|
|
167
|
-
assert(pair, t('Unable to find account'));
|
|
168
|
-
try {
|
|
169
|
-
if (!pair.isLocked) {
|
|
170
|
-
pair.lock();
|
|
171
|
-
}
|
|
172
|
-
pair.decodePkcs8(oldPass);
|
|
173
|
-
} catch (error) {
|
|
174
|
-
throw new Error(t('Wrong password'));
|
|
175
|
-
}
|
|
176
|
-
keyring.encryptAccount(pair, newPass);
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
accountsEdit({
|
|
180
|
-
address,
|
|
181
|
-
name
|
|
182
|
-
}) {
|
|
183
|
-
const pair = keyring.getPair(address);
|
|
184
|
-
assert(pair, t('Unable to find account'));
|
|
185
|
-
keyring.saveAccountMeta(pair, {
|
|
186
|
-
...pair.meta,
|
|
187
|
-
name
|
|
188
|
-
});
|
|
189
|
-
return true;
|
|
111
|
+
tonAccountChangeWalletContractVersion(request) {
|
|
112
|
+
return this.#koniState.keyringService.context.tonAccountChangeWalletContractVersion(request);
|
|
190
113
|
}
|
|
191
114
|
accountsExport({
|
|
192
115
|
address,
|
|
@@ -196,41 +119,6 @@ export default class KoniExtension {
|
|
|
196
119
|
exportedJson: keyring.backupAccount(keyring.getPair(address), password)
|
|
197
120
|
};
|
|
198
121
|
}
|
|
199
|
-
accountsShow({
|
|
200
|
-
address,
|
|
201
|
-
isShowing
|
|
202
|
-
}) {
|
|
203
|
-
const pair = keyring.getPair(address);
|
|
204
|
-
assert(pair, t('Unable to find account'));
|
|
205
|
-
keyring.saveAccountMeta(pair, {
|
|
206
|
-
...pair.meta,
|
|
207
|
-
isHidden: !isShowing
|
|
208
|
-
});
|
|
209
|
-
return true;
|
|
210
|
-
}
|
|
211
|
-
accountsValidate({
|
|
212
|
-
address,
|
|
213
|
-
password
|
|
214
|
-
}) {
|
|
215
|
-
try {
|
|
216
|
-
keyring.backupAccount(keyring.getPair(address), password);
|
|
217
|
-
return true;
|
|
218
|
-
} catch (e) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// FIXME This looks very much like what we have in Tabs
|
|
224
|
-
accountsSubscribe(id, port) {
|
|
225
|
-
const cb = createSubscription(id, port);
|
|
226
|
-
const accountSubject = this.#koniState.keyringService.accountSubject;
|
|
227
|
-
const subscription = accountSubject.subscribe(accounts => cb(transformAccounts(accounts)));
|
|
228
|
-
port.onDisconnect.addListener(() => {
|
|
229
|
-
this.cancelSubscription(id);
|
|
230
|
-
subscription.unsubscribe();
|
|
231
|
-
});
|
|
232
|
-
return true;
|
|
233
|
-
}
|
|
234
122
|
metadataApprove({
|
|
235
123
|
id
|
|
236
124
|
}) {
|
|
@@ -270,81 +158,6 @@ export default class KoniExtension {
|
|
|
270
158
|
});
|
|
271
159
|
return this.#koniState.metaSubject.value;
|
|
272
160
|
}
|
|
273
|
-
jsonRestore({
|
|
274
|
-
file,
|
|
275
|
-
password
|
|
276
|
-
}) {
|
|
277
|
-
try {
|
|
278
|
-
keyring.restoreAccount(file, password, true);
|
|
279
|
-
} catch (error) {
|
|
280
|
-
throw new Error(error.message);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
batchRestore({
|
|
284
|
-
file,
|
|
285
|
-
password
|
|
286
|
-
}) {
|
|
287
|
-
try {
|
|
288
|
-
keyring.restoreAccounts(file, password);
|
|
289
|
-
} catch (error) {
|
|
290
|
-
throw new Error(error.message);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
jsonGetAccountInfo(json) {
|
|
294
|
-
try {
|
|
295
|
-
const {
|
|
296
|
-
address,
|
|
297
|
-
meta: {
|
|
298
|
-
genesisHash,
|
|
299
|
-
name
|
|
300
|
-
},
|
|
301
|
-
type
|
|
302
|
-
} = keyring.createFromJson(json);
|
|
303
|
-
return {
|
|
304
|
-
address,
|
|
305
|
-
genesisHash,
|
|
306
|
-
name,
|
|
307
|
-
type
|
|
308
|
-
};
|
|
309
|
-
} catch (e) {
|
|
310
|
-
console.error(e);
|
|
311
|
-
throw new Error(e.message);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
seedCreate({
|
|
315
|
-
length = SEED_DEFAULT_LENGTH,
|
|
316
|
-
seed: _seed,
|
|
317
|
-
type
|
|
318
|
-
}) {
|
|
319
|
-
const seed = _seed || mnemonicGenerate(length);
|
|
320
|
-
return {
|
|
321
|
-
address: keyring.createFromUri(getSuri(seed, type), {}, type).address,
|
|
322
|
-
seed
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
seedValidate({
|
|
326
|
-
suri,
|
|
327
|
-
type
|
|
328
|
-
}) {
|
|
329
|
-
const {
|
|
330
|
-
phrase
|
|
331
|
-
} = keyExtractSuri(suri);
|
|
332
|
-
if (isHex(phrase)) {
|
|
333
|
-
assert(isHex(phrase, 256), t('Invalid seed phrase. Please try again.'));
|
|
334
|
-
} else {
|
|
335
|
-
// sadly isHex detects as string, so we need a cast here
|
|
336
|
-
assert(SEED_LENGTHS.includes(phrase.split(' ').length), t('Seed phrase needs to contain {{x}} words', {
|
|
337
|
-
replace: {
|
|
338
|
-
x: SEED_LENGTHS.join(', ')
|
|
339
|
-
}
|
|
340
|
-
}));
|
|
341
|
-
assert(mnemonicValidate(phrase), t('Invalid seed phrase. Please try again.'));
|
|
342
|
-
}
|
|
343
|
-
return {
|
|
344
|
-
address: keyring.createFromUri(getSuri(suri, type), {}, type).address,
|
|
345
|
-
suri
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
161
|
|
|
349
162
|
// TODO: move to request service
|
|
350
163
|
signingApproveSignature({
|
|
@@ -414,50 +227,6 @@ export default class KoniExtension {
|
|
|
414
227
|
}));
|
|
415
228
|
return true;
|
|
416
229
|
}
|
|
417
|
-
derive(parentAddress, suri, password, metadata) {
|
|
418
|
-
const parentPair = keyring.getPair(parentAddress);
|
|
419
|
-
try {
|
|
420
|
-
parentPair.decodePkcs8(password);
|
|
421
|
-
} catch (e) {
|
|
422
|
-
throw new Error(t('Wrong password'));
|
|
423
|
-
}
|
|
424
|
-
try {
|
|
425
|
-
return parentPair.derive(suri, metadata);
|
|
426
|
-
} catch (err) {
|
|
427
|
-
throw new Error(t('"{{suri}}" is not a valid derivation path', {
|
|
428
|
-
replace: {
|
|
429
|
-
suri
|
|
430
|
-
}
|
|
431
|
-
}));
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
derivationValidate({
|
|
435
|
-
parentAddress,
|
|
436
|
-
parentPassword,
|
|
437
|
-
suri
|
|
438
|
-
}) {
|
|
439
|
-
const childPair = this.derive(parentAddress, suri, parentPassword, {});
|
|
440
|
-
return {
|
|
441
|
-
address: childPair.address,
|
|
442
|
-
suri
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
derivationCreate({
|
|
446
|
-
genesisHash,
|
|
447
|
-
name,
|
|
448
|
-
parentAddress,
|
|
449
|
-
parentPassword,
|
|
450
|
-
suri
|
|
451
|
-
}) {
|
|
452
|
-
const childPair = this.derive(parentAddress, suri, parentPassword, {
|
|
453
|
-
genesisHash,
|
|
454
|
-
name,
|
|
455
|
-
parentAddress,
|
|
456
|
-
suri
|
|
457
|
-
});
|
|
458
|
-
keyring.addPair(childPair, true);
|
|
459
|
-
return true;
|
|
460
|
-
}
|
|
461
230
|
|
|
462
231
|
///
|
|
463
232
|
|
|
@@ -467,78 +236,101 @@ export default class KoniExtension {
|
|
|
467
236
|
createUnsubscriptionHandle(id, unsubscribe) {
|
|
468
237
|
this.#koniState.createUnsubscriptionHandle(id, unsubscribe);
|
|
469
238
|
}
|
|
470
|
-
|
|
471
|
-
return
|
|
472
|
-
};
|
|
473
|
-
encodeAddress = (key, ss58Format) => {
|
|
474
|
-
return keyring.encodeAddress(key, ss58Format);
|
|
475
|
-
};
|
|
476
|
-
accountExportPrivateKey({
|
|
477
|
-
address,
|
|
478
|
-
password
|
|
479
|
-
}) {
|
|
480
|
-
return this.#koniState.accountExportPrivateKey({
|
|
481
|
-
address,
|
|
482
|
-
password
|
|
483
|
-
});
|
|
239
|
+
accountExportPrivateKey(request) {
|
|
240
|
+
return this.#koniState.accountExportPrivateKey(request);
|
|
484
241
|
}
|
|
485
242
|
checkPublicAndSecretKey(request) {
|
|
486
243
|
return this.#koniState.checkPublicAndSecretKey(request);
|
|
487
244
|
}
|
|
245
|
+
checkNameExists(request) {
|
|
246
|
+
return this.#koniState.keyringService.context.checkNameExists(request);
|
|
247
|
+
}
|
|
488
248
|
async accountsGetAllWithCurrentAddress(id, port) {
|
|
489
249
|
const cb = createSubscription(id, port);
|
|
490
250
|
const keyringService = this.#koniState.keyringService;
|
|
491
251
|
await this.#koniState.eventService.waitAccountReady;
|
|
492
252
|
await this.#koniState.eventService.waitInjectReady;
|
|
493
|
-
const currentAccount = keyringService.currentAccount;
|
|
494
|
-
const
|
|
253
|
+
const currentAccount = keyringService.context.currentAccount;
|
|
254
|
+
const accounts = keyringService.context.accounts;
|
|
255
|
+
const transformedAccounts = Object.values(accounts);
|
|
495
256
|
const responseData = {
|
|
496
|
-
accounts: transformedAccounts !== null && transformedAccounts !== void 0 && transformedAccounts.length ? [
|
|
497
|
-
|
|
498
|
-
}, ...transformedAccounts] : [],
|
|
499
|
-
currentAddress: currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.address,
|
|
500
|
-
currentGenesisHash: currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.currentGenesisHash
|
|
257
|
+
accounts: transformedAccounts !== null && transformedAccounts !== void 0 && transformedAccounts.length ? [combineAllAccountProxy(transformedAccounts), ...transformedAccounts] : [],
|
|
258
|
+
currentAccountProxy: currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.proxyId
|
|
501
259
|
};
|
|
502
|
-
const
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
260
|
+
const accountProxyMapObservable = keyringService.context.observable.accounts;
|
|
261
|
+
const currentAccountInfoObservable = keyringService.context.observable.currentAccount;
|
|
262
|
+
const subscriptionAccountGroups = combineLatest({
|
|
263
|
+
accountProxies: accountProxyMapObservable,
|
|
264
|
+
currentAccount: currentAccountInfoObservable
|
|
265
|
+
}).subscribe(({
|
|
266
|
+
accountProxies,
|
|
267
|
+
currentAccount
|
|
268
|
+
}) => {
|
|
269
|
+
const transformedAccounts = Object.values(accountProxies);
|
|
270
|
+
responseData.accounts = transformedAccounts !== null && transformedAccounts !== void 0 && transformedAccounts.length ? [combineAllAccountProxy(transformedAccounts), ...transformedAccounts] : [];
|
|
271
|
+
responseData.currentAccountProxy = currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.proxyId;
|
|
272
|
+
console.debug('subscriptionAccountGroups', responseData);
|
|
512
273
|
cb(responseData);
|
|
513
274
|
});
|
|
514
275
|
this.createUnsubscriptionHandle(id, () => {
|
|
515
|
-
|
|
516
|
-
subscriptionCurrentAccount.unsubscribe();
|
|
276
|
+
subscriptionAccountGroups.unsubscribe();
|
|
517
277
|
});
|
|
518
278
|
port.onDisconnect.addListener(() => {
|
|
519
279
|
this.cancelSubscription(id);
|
|
520
280
|
});
|
|
521
281
|
return responseData;
|
|
522
282
|
}
|
|
523
|
-
|
|
283
|
+
async subscribeInputAddressData(request, id, port) {
|
|
284
|
+
const {
|
|
285
|
+
chain,
|
|
286
|
+
data
|
|
287
|
+
} = request;
|
|
524
288
|
const cb = createSubscription(id, port);
|
|
525
|
-
const
|
|
526
|
-
const
|
|
527
|
-
|
|
289
|
+
const combineFunction = async (chainInfoMap, accountProxyMap, _contacts) => {
|
|
290
|
+
const accountProxies = Object.values(accountProxyMap);
|
|
291
|
+
const contacts = transformAddresses(_contacts);
|
|
292
|
+
const chainInfo = chainInfoMap[chain];
|
|
293
|
+
const substrateApi = this.#koniState.chainService.getSubstrateApi(chain);
|
|
294
|
+
const rs = await _analyzeAddress(data, accountProxies, contacts, chainInfo, substrateApi);
|
|
295
|
+
return {
|
|
296
|
+
id,
|
|
297
|
+
...rs
|
|
528
298
|
};
|
|
529
|
-
|
|
299
|
+
};
|
|
300
|
+
const accountObservable = this.#koniState.keyringService.context.observable.accounts;
|
|
301
|
+
const contactObservable = this.#koniState.keyringService.context.observable.contacts;
|
|
302
|
+
const chainInfoMapObservable = this.#koniState.chainService.subscribeChainInfoMap().asObservable();
|
|
303
|
+
const subscription = combineLatest({
|
|
304
|
+
chainInfoMap: chainInfoMapObservable,
|
|
305
|
+
accountProxies: accountObservable,
|
|
306
|
+
contacts: contactObservable
|
|
307
|
+
}).subscribe(({
|
|
308
|
+
accountProxies,
|
|
309
|
+
chainInfoMap,
|
|
310
|
+
contacts
|
|
311
|
+
}) => {
|
|
312
|
+
combineFunction(chainInfoMap, accountProxies, contacts).then(rs => cb(rs)).catch(console.error);
|
|
313
|
+
});
|
|
314
|
+
this.createUnsubscriptionHandle(id, () => {
|
|
315
|
+
subscription.unsubscribe();
|
|
530
316
|
});
|
|
531
|
-
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
532
317
|
port.onDisconnect.addListener(() => {
|
|
533
318
|
this.cancelSubscription(id);
|
|
534
319
|
});
|
|
535
|
-
|
|
320
|
+
const accountProxyMap = this.#koniState.keyringService.context.value.accounts;
|
|
321
|
+
const contacts = this.#koniState.keyringService.context.value.contacts;
|
|
322
|
+
const chainInfoMap = this.#koniState.chainService.getChainInfoMap();
|
|
323
|
+
return combineFunction(chainInfoMap, accountProxyMap, contacts);
|
|
536
324
|
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* @todo: move to keyring context
|
|
328
|
+
* */
|
|
537
329
|
subscribeAddresses(id, port) {
|
|
538
330
|
const _cb = createSubscription(id, port);
|
|
539
331
|
let old = '';
|
|
540
|
-
const subscription = this.#koniState.keyringService.
|
|
541
|
-
const addresses =
|
|
332
|
+
const subscription = this.#koniState.keyringService.context.observable.contacts.subscribe(subjectInfo => {
|
|
333
|
+
const addresses = transformAddresses(subjectInfo);
|
|
542
334
|
const _new = JSON.stringify(addresses);
|
|
543
335
|
if (old !== _new) {
|
|
544
336
|
_cb({
|
|
@@ -547,15 +339,21 @@ export default class KoniExtension {
|
|
|
547
339
|
old = _new;
|
|
548
340
|
}
|
|
549
341
|
});
|
|
550
|
-
this.createUnsubscriptionHandle(id,
|
|
342
|
+
this.createUnsubscriptionHandle(id, () => {
|
|
343
|
+
subscription.unsubscribe();
|
|
344
|
+
});
|
|
551
345
|
port.onDisconnect.addListener(() => {
|
|
552
346
|
this.cancelSubscription(id);
|
|
553
347
|
});
|
|
554
|
-
const subjectInfo = this.#koniState.keyringService.
|
|
348
|
+
const subjectInfo = this.#koniState.keyringService.context.contacts;
|
|
555
349
|
return {
|
|
556
|
-
addresses:
|
|
350
|
+
addresses: transformAccounts(subjectInfo)
|
|
557
351
|
};
|
|
558
352
|
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* @todo: move to keyring context
|
|
356
|
+
* */
|
|
559
357
|
saveRecentAccount({
|
|
560
358
|
accountId,
|
|
561
359
|
chain
|
|
@@ -584,7 +382,7 @@ export default class KoniExtension {
|
|
|
584
382
|
}
|
|
585
383
|
}
|
|
586
384
|
metadata.recentChainSlugs = recentChainSlugs;
|
|
587
|
-
const result = keyring.addresses.add(new AccountsStore(), address, {
|
|
385
|
+
const result = keyring.addresses.add(new AccountsStore(), address, address, {
|
|
588
386
|
address: address,
|
|
589
387
|
meta: metadata
|
|
590
388
|
});
|
|
@@ -597,6 +395,10 @@ export default class KoniExtension {
|
|
|
597
395
|
throw Error(t('This is not an address'));
|
|
598
396
|
}
|
|
599
397
|
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* @todo: move to keyring context
|
|
401
|
+
* */
|
|
600
402
|
editContactAccount({
|
|
601
403
|
address,
|
|
602
404
|
meta
|
|
@@ -609,6 +411,10 @@ export default class KoniExtension {
|
|
|
609
411
|
throw Error(t('This is not an address'));
|
|
610
412
|
}
|
|
611
413
|
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* @todo: move to keyring context
|
|
417
|
+
* */
|
|
612
418
|
deleteContactAccount({
|
|
613
419
|
address
|
|
614
420
|
}) {
|
|
@@ -624,7 +430,7 @@ export default class KoniExtension {
|
|
|
624
430
|
const keyringService = this.#koniState.keyringService;
|
|
625
431
|
return new Promise((resolve, reject) => {
|
|
626
432
|
this.#koniState.getAuthorize(rs => {
|
|
627
|
-
const addressList = Object.keys(keyringService.
|
|
433
|
+
const addressList = Object.keys(keyringService.context.pairs);
|
|
628
434
|
const urlList = Object.keys(rs);
|
|
629
435
|
if (Object.keys(rs[urlList[0]].isAllowedMap).toString() !== addressList.toString()) {
|
|
630
436
|
urlList.forEach(url => {
|
|
@@ -737,37 +543,52 @@ export default class KoniExtension {
|
|
|
737
543
|
});
|
|
738
544
|
return true;
|
|
739
545
|
}
|
|
740
|
-
|
|
741
|
-
const storedAccounts = this.#koniState.keyringService.
|
|
742
|
-
|
|
743
|
-
return transformedAccounts.map(a => a.address);
|
|
546
|
+
getPairs() {
|
|
547
|
+
const storedAccounts = this.#koniState.keyringService.context.pairs;
|
|
548
|
+
return transformAccounts(storedAccounts);
|
|
744
549
|
}
|
|
745
|
-
isAddressValidWithAuthType(address,
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
550
|
+
isAddressValidWithAuthType(address, accountAuthTypes) {
|
|
551
|
+
const type = getKeypairTypeByAddress(address);
|
|
552
|
+
const validTypes = {
|
|
553
|
+
evm: EthereumKeypairTypes,
|
|
554
|
+
substrate: SubstrateKeypairTypes,
|
|
555
|
+
ton: TonKeypairTypes
|
|
556
|
+
};
|
|
557
|
+
return !!accountAuthTypes && accountAuthTypes.some(authType => {
|
|
558
|
+
var _validTypes$authType;
|
|
559
|
+
return (_validTypes$authType = validTypes[authType]) === null || _validTypes$authType === void 0 ? void 0 : _validTypes$authType.includes(type);
|
|
560
|
+
});
|
|
752
561
|
}
|
|
753
|
-
filterAccountsByAccountAuthType(accounts,
|
|
754
|
-
if (
|
|
755
|
-
return
|
|
756
|
-
} else if (accountAuthType === 'evm') {
|
|
757
|
-
return accounts.filter(address => isEthereumAddress(address));
|
|
758
|
-
} else {
|
|
759
|
-
return accounts;
|
|
562
|
+
filterAccountsByAccountAuthType(accounts, accountAuthTypes) {
|
|
563
|
+
if (!accountAuthTypes) {
|
|
564
|
+
return [];
|
|
760
565
|
}
|
|
566
|
+
return accountAuthTypes.reduce((list, accountAuthType) => {
|
|
567
|
+
if (accountAuthType === 'evm') {
|
|
568
|
+
accounts.forEach(({
|
|
569
|
+
address
|
|
570
|
+
}) => isEthereumAddress(address) && list.push(address));
|
|
571
|
+
} else if (accountAuthType === 'substrate') {
|
|
572
|
+
accounts.forEach(({
|
|
573
|
+
address
|
|
574
|
+
}) => isSubstrateAddress(address) && list.push(address));
|
|
575
|
+
} else if (accountAuthType === 'ton') {
|
|
576
|
+
accounts.forEach(({
|
|
577
|
+
address
|
|
578
|
+
}) => isTonAddress(address) && list.push(address));
|
|
579
|
+
}
|
|
580
|
+
return list;
|
|
581
|
+
}, []);
|
|
761
582
|
}
|
|
762
583
|
_changeAuthorizationAll(connectValue, callBack) {
|
|
763
584
|
this.#koniState.getAuthorize(value => {
|
|
764
585
|
assert(value, 'The source is not known');
|
|
765
|
-
const
|
|
586
|
+
const pairs = this.getPairs();
|
|
766
587
|
Object.keys(value).forEach(url => {
|
|
767
588
|
if (!value[url].isAllowed) {
|
|
768
589
|
return;
|
|
769
590
|
}
|
|
770
|
-
const targetAccounts = this.filterAccountsByAccountAuthType(
|
|
591
|
+
const targetAccounts = this.filterAccountsByAccountAuthType(pairs, value[url].accountAuthTypes);
|
|
771
592
|
targetAccounts.forEach(address => {
|
|
772
593
|
value[url].isAllowedMap[address] = connectValue;
|
|
773
594
|
});
|
|
@@ -790,8 +611,8 @@ export default class KoniExtension {
|
|
|
790
611
|
_changeAuthorization(url, connectValue, callBack) {
|
|
791
612
|
this.#koniState.getAuthorize(value => {
|
|
792
613
|
assert(value[url], 'The source is not known');
|
|
793
|
-
const
|
|
794
|
-
const targetAccounts = this.filterAccountsByAccountAuthType(
|
|
614
|
+
const pairs = this.getPairs();
|
|
615
|
+
const targetAccounts = this.filterAccountsByAccountAuthType(pairs, value[url].accountAuthTypes);
|
|
795
616
|
targetAccounts.forEach(address => {
|
|
796
617
|
value[url].isAllowedMap[address] = connectValue;
|
|
797
618
|
});
|
|
@@ -826,7 +647,7 @@ export default class KoniExtension {
|
|
|
826
647
|
_changeAuthorizationPerAcc(address, connectValue, url, callBack) {
|
|
827
648
|
this.#koniState.getAuthorize(value => {
|
|
828
649
|
assert(value, 'The source is not known');
|
|
829
|
-
if (this.isAddressValidWithAuthType(address, value[url].
|
|
650
|
+
if (this.isAddressValidWithAuthType(address, value[url].accountAuthTypes)) {
|
|
830
651
|
value[url].isAllowedMap[address] = connectValue;
|
|
831
652
|
this.#koniState.setAuthorize(value, () => {
|
|
832
653
|
callBack && callBack(value);
|
|
@@ -981,39 +802,10 @@ export default class KoniExtension {
|
|
|
981
802
|
});
|
|
982
803
|
return await this.#koniState.getAuthList();
|
|
983
804
|
}
|
|
984
|
-
|
|
985
|
-
let accountInfo = this.#koniState.keyringService.currentAccount;
|
|
986
|
-
if (!accountInfo) {
|
|
987
|
-
accountInfo = {
|
|
988
|
-
address,
|
|
989
|
-
currentGenesisHash: ALL_GENESIS_HASH,
|
|
990
|
-
allGenesisHash: ALL_GENESIS_HASH || undefined
|
|
991
|
-
};
|
|
992
|
-
} else {
|
|
993
|
-
accountInfo.address = address;
|
|
994
|
-
if (address !== ALL_ACCOUNT_KEY) {
|
|
995
|
-
try {
|
|
996
|
-
const currentKeyPair = keyring.getPair(address);
|
|
997
|
-
accountInfo.currentGenesisHash = (currentKeyPair === null || currentKeyPair === void 0 ? void 0 : currentKeyPair.meta.genesisHash) || ALL_GENESIS_HASH;
|
|
998
|
-
} catch {
|
|
999
|
-
accountInfo.currentGenesisHash = ALL_GENESIS_HASH;
|
|
1000
|
-
}
|
|
1001
|
-
} else {
|
|
1002
|
-
accountInfo.currentGenesisHash = accountInfo.allGenesisHash || ALL_GENESIS_HASH;
|
|
1003
|
-
}
|
|
1004
|
-
}
|
|
1005
|
-
this.#koniState.setCurrentAccount(accountInfo, () => {
|
|
1006
|
-
callback && callback(accountInfo);
|
|
1007
|
-
});
|
|
1008
|
-
}
|
|
1009
|
-
updateCurrentAccountAddress(address) {
|
|
1010
|
-
this._saveCurrentAccountAddress(address);
|
|
1011
|
-
return true;
|
|
1012
|
-
}
|
|
1013
|
-
async saveCurrentAccountAddress(data) {
|
|
805
|
+
async saveCurrentAccountProxy(data) {
|
|
1014
806
|
return new Promise(resolve => {
|
|
1015
|
-
this.
|
|
1016
|
-
resolve(
|
|
807
|
+
this.#koniState.keyringService.context.saveCurrentAccountProxyId(data.address, () => {
|
|
808
|
+
resolve(true);
|
|
1017
809
|
});
|
|
1018
810
|
});
|
|
1019
811
|
}
|
|
@@ -1096,136 +888,24 @@ export default class KoniExtension {
|
|
|
1096
888
|
});
|
|
1097
889
|
return this.getCrowdloan(true);
|
|
1098
890
|
}
|
|
1099
|
-
|
|
1100
|
-
const
|
|
1101
|
-
const encType = Array.isArray(json.encoding.type) ? json.encoding.type : [json.encoding.type];
|
|
1102
|
-
const pair = createPair({
|
|
1103
|
-
toSS58: this.encodeAddress,
|
|
1104
|
-
type: cryptoType
|
|
1105
|
-
}, {
|
|
1106
|
-
publicKey: this.decodeAddress(json.address, true)
|
|
1107
|
-
}, json.meta, isHex(json.encoded) ? hexToU8a(json.encoded) : base64Decode(json.encoded), encType);
|
|
1108
|
-
|
|
1109
|
-
// unlock then lock (locking cleans secretKey, so needs to be last)
|
|
1110
|
-
try {
|
|
1111
|
-
pair.decodePkcs8(password);
|
|
1112
|
-
pair.lock();
|
|
1113
|
-
return true;
|
|
1114
|
-
} catch (e) {
|
|
1115
|
-
console.error(e);
|
|
1116
|
-
return false;
|
|
1117
|
-
}
|
|
1118
|
-
}
|
|
1119
|
-
validatedAccountsPassword(json, password) {
|
|
1120
|
-
try {
|
|
1121
|
-
u8aToString(jsonDecrypt(json, password));
|
|
1122
|
-
return true;
|
|
1123
|
-
} catch (e) {
|
|
1124
|
-
return false;
|
|
1125
|
-
}
|
|
1126
|
-
}
|
|
1127
|
-
_addAddressToAuthList(address, isAllowed) {
|
|
1128
|
-
this.#koniState.getAuthorize(value => {
|
|
1129
|
-
if (value && Object.keys(value).length) {
|
|
1130
|
-
Object.keys(value).forEach(url => {
|
|
1131
|
-
if (this.isAddressValidWithAuthType(address, value[url].accountAuthType)) {
|
|
1132
|
-
value[url].isAllowedMap[address] = isAllowed;
|
|
1133
|
-
}
|
|
1134
|
-
});
|
|
1135
|
-
this.#koniState.setAuthorize(value);
|
|
1136
|
-
}
|
|
1137
|
-
});
|
|
1138
|
-
}
|
|
1139
|
-
_addAddressesToAuthList(addresses, isAllowed) {
|
|
1140
|
-
this.#koniState.getAuthorize(value => {
|
|
1141
|
-
if (value && Object.keys(value).length) {
|
|
1142
|
-
Object.keys(value).forEach(url => {
|
|
1143
|
-
addresses.forEach(address => {
|
|
1144
|
-
if (this.isAddressValidWithAuthType(address, value[url].accountAuthType)) {
|
|
1145
|
-
value[url].isAllowedMap[address] = isAllowed;
|
|
1146
|
-
}
|
|
1147
|
-
});
|
|
1148
|
-
}); /**/
|
|
1149
|
-
|
|
1150
|
-
this.#koniState.setAuthorize(value);
|
|
1151
|
-
}
|
|
1152
|
-
});
|
|
1153
|
-
}
|
|
1154
|
-
async accountsCreateSuriV2({
|
|
1155
|
-
genesisHash,
|
|
1156
|
-
isAllowed,
|
|
1157
|
-
name,
|
|
1158
|
-
password,
|
|
1159
|
-
suri: _suri,
|
|
1160
|
-
types
|
|
1161
|
-
}) {
|
|
1162
|
-
const addressDict = {};
|
|
1163
|
-
let changedAccount = false;
|
|
1164
|
-
const hasMasterPassword = keyring.keyring.hasMasterPassword;
|
|
1165
|
-
if (!hasMasterPassword) {
|
|
1166
|
-
if (!password) {
|
|
1167
|
-
throw Error(t('The password of each account is needed to set up master password'));
|
|
1168
|
-
} else {
|
|
1169
|
-
keyring.changeMasterPassword(password);
|
|
1170
|
-
this.#koniState.updateKeyringState();
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
const currentAccount = this.#koniState.keyringService.currentAccount;
|
|
1174
|
-
const allGenesisHash = (currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.allGenesisHash) || undefined;
|
|
1175
|
-
types === null || types === void 0 ? void 0 : types.forEach(type => {
|
|
1176
|
-
const suri = getSuri(_suri, type);
|
|
1177
|
-
const address = keyring.createFromUri(suri, {}, type).address;
|
|
1178
|
-
addressDict[type] = address;
|
|
1179
|
-
const newAccountName = type === 'ethereum' ? `${name} - EVM` : name;
|
|
1180
|
-
keyring.addUri(suri, {
|
|
1181
|
-
genesisHash,
|
|
1182
|
-
name: newAccountName
|
|
1183
|
-
}, type);
|
|
1184
|
-
this._addAddressToAuthList(address, isAllowed);
|
|
1185
|
-
if (!changedAccount) {
|
|
1186
|
-
if (types.length === 1) {
|
|
1187
|
-
this.#koniState.setCurrentAccount({
|
|
1188
|
-
address,
|
|
1189
|
-
currentGenesisHash: genesisHash || null,
|
|
1190
|
-
allGenesisHash
|
|
1191
|
-
});
|
|
1192
|
-
} else {
|
|
1193
|
-
this.#koniState.setCurrentAccount({
|
|
1194
|
-
address: ALL_ACCOUNT_KEY,
|
|
1195
|
-
currentGenesisHash: allGenesisHash || null,
|
|
1196
|
-
allGenesisHash
|
|
1197
|
-
}, undefined, true);
|
|
1198
|
-
}
|
|
1199
|
-
changedAccount = true;
|
|
1200
|
-
}
|
|
1201
|
-
});
|
|
1202
|
-
await new Promise(resolve => {
|
|
1203
|
-
this.#koniState.addAccountRef(Object.values(addressDict), () => {
|
|
1204
|
-
resolve();
|
|
1205
|
-
});
|
|
1206
|
-
});
|
|
891
|
+
accountsCreateSuriV2(request) {
|
|
892
|
+
const addressDict = this.#koniState.keyringService.context.accountsCreateSuriV2(request);
|
|
1207
893
|
if (this.#alwaysLock) {
|
|
1208
894
|
this.keyringLock();
|
|
1209
895
|
}
|
|
1210
896
|
return addressDict;
|
|
1211
897
|
}
|
|
1212
|
-
async accountsForgetOverride({
|
|
1213
|
-
|
|
1214
|
-
lockAfter
|
|
1215
|
-
}) {
|
|
1216
|
-
keyring.forgetAccount(address);
|
|
1217
|
-
await new Promise(resolve => {
|
|
1218
|
-
this.#koniState.removeAccountRef(address, () => {
|
|
1219
|
-
resolve();
|
|
1220
|
-
});
|
|
1221
|
-
});
|
|
898
|
+
async accountsForgetOverride(request) {
|
|
899
|
+
const addresses = await this.#koniState.keyringService.context.accountProxyForget(request);
|
|
1222
900
|
|
|
1223
901
|
// Remove from auth list
|
|
1224
902
|
await new Promise(resolve => {
|
|
1225
903
|
this.#koniState.getAuthorize(value => {
|
|
1226
904
|
if (value && Object.keys(value).length) {
|
|
1227
905
|
Object.keys(value).forEach(url => {
|
|
1228
|
-
|
|
906
|
+
for (const address of addresses) {
|
|
907
|
+
delete value[url].isAllowedMap[address];
|
|
908
|
+
}
|
|
1229
909
|
});
|
|
1230
910
|
this.#koniState.setAuthorize(value, resolve);
|
|
1231
911
|
} else {
|
|
@@ -1233,242 +913,50 @@ export default class KoniExtension {
|
|
|
1233
913
|
}
|
|
1234
914
|
});
|
|
1235
915
|
});
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
this.#koniState.setCurrentAccount({
|
|
1241
|
-
currentGenesisHash: (currentAccountInfo === null || currentAccountInfo === void 0 ? void 0 : currentAccountInfo.allGenesisHash) || null,
|
|
1242
|
-
address: ALL_ACCOUNT_KEY
|
|
1243
|
-
}, resolve);
|
|
1244
|
-
});
|
|
1245
|
-
await this.#koniState.disableMantaPay(address);
|
|
1246
|
-
if (lockAfter) {
|
|
916
|
+
for (const address of addresses) {
|
|
917
|
+
await this.#koniState.disableMantaPay(address);
|
|
918
|
+
}
|
|
919
|
+
if (request.lockAfter) {
|
|
1247
920
|
this.checkLockAfterMigrate();
|
|
1248
921
|
}
|
|
1249
922
|
return true;
|
|
1250
923
|
}
|
|
1251
|
-
seedCreateV2({
|
|
1252
|
-
|
|
1253
|
-
seed: _seed,
|
|
1254
|
-
types
|
|
1255
|
-
}) {
|
|
1256
|
-
const seed = _seed || mnemonicGenerate(length);
|
|
1257
|
-
const rs = {
|
|
1258
|
-
seed: seed,
|
|
1259
|
-
addressMap: {}
|
|
1260
|
-
};
|
|
1261
|
-
types === null || types === void 0 ? void 0 : types.forEach(type => {
|
|
1262
|
-
rs.addressMap[type] = keyring.createFromUri(getSuri(seed, type), {}, type).address;
|
|
1263
|
-
});
|
|
1264
|
-
return rs;
|
|
924
|
+
seedCreateV2(request) {
|
|
925
|
+
return this.#koniState.keyringService.context.mnemonicCreateV2(request);
|
|
1265
926
|
}
|
|
1266
|
-
seedValidateV2({
|
|
1267
|
-
|
|
1268
|
-
types
|
|
1269
|
-
}) {
|
|
1270
|
-
const {
|
|
1271
|
-
phrase
|
|
1272
|
-
} = keyExtractSuri(suri);
|
|
1273
|
-
if (isHex(phrase)) {
|
|
1274
|
-
assert(isHex(phrase, 256), t('Invalid seed phrase. Please try again.'));
|
|
1275
|
-
} else {
|
|
1276
|
-
// sadly isHex detects as string, so we need a cast here
|
|
1277
|
-
assert(SEED_LENGTHS.includes(phrase.split(' ').length), t('Seed phrase needs to contain {{x}} words', {
|
|
1278
|
-
replace: {
|
|
1279
|
-
x: SEED_LENGTHS.join(', ')
|
|
1280
|
-
}
|
|
1281
|
-
}));
|
|
1282
|
-
assert(mnemonicValidate(phrase), t('Invalid seed phrase. Please try again.'));
|
|
1283
|
-
}
|
|
1284
|
-
const rs = {
|
|
1285
|
-
seed: suri,
|
|
1286
|
-
addressMap: {}
|
|
1287
|
-
};
|
|
1288
|
-
types && types.forEach(type => {
|
|
1289
|
-
rs.addressMap[type] = keyring.createFromUri(getSuri(suri, type), {}, type).address;
|
|
1290
|
-
});
|
|
1291
|
-
return rs;
|
|
927
|
+
seedValidateV2(request) {
|
|
928
|
+
return this.#koniState.keyringService.context.mnemonicValidateV2(request);
|
|
1292
929
|
}
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
types
|
|
1296
|
-
}, autoAddPrefix = false) {
|
|
1297
|
-
const {
|
|
1298
|
-
phrase
|
|
1299
|
-
} = keyExtractSuri(suri);
|
|
1300
|
-
const rs = {
|
|
1301
|
-
autoAddPrefix: autoAddPrefix,
|
|
1302
|
-
addressMap: {}
|
|
1303
|
-
};
|
|
1304
|
-
types && types.forEach(type => {
|
|
1305
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
1306
|
-
rs.addressMap[type] = '';
|
|
1307
|
-
});
|
|
1308
|
-
if (isHex(phrase) && isHex(phrase, 256)) {
|
|
1309
|
-
types && types.forEach(type => {
|
|
1310
|
-
rs.addressMap[type] = keyring.createFromUri(getSuri(suri, type), {}, type).address;
|
|
1311
|
-
});
|
|
1312
|
-
} else {
|
|
1313
|
-
rs.autoAddPrefix = false;
|
|
1314
|
-
assert(false, t('Invalid private key. Please try again.'));
|
|
1315
|
-
}
|
|
1316
|
-
return rs;
|
|
1317
|
-
}
|
|
1318
|
-
metamaskPrivateKeyValidateV2({
|
|
1319
|
-
suri,
|
|
1320
|
-
types
|
|
1321
|
-
}) {
|
|
1322
|
-
const isValidSuri = suri.startsWith('0x');
|
|
1323
|
-
if (isValidSuri) {
|
|
1324
|
-
return this._checkValidatePrivateKey({
|
|
1325
|
-
suri,
|
|
1326
|
-
types
|
|
1327
|
-
});
|
|
1328
|
-
} else {
|
|
1329
|
-
return this._checkValidatePrivateKey({
|
|
1330
|
-
suri: `0x${suri}`,
|
|
1331
|
-
types
|
|
1332
|
-
}, true);
|
|
1333
|
-
}
|
|
930
|
+
privateKeyValidateV2(request) {
|
|
931
|
+
return this.#koniState.keyringService.context.privateKeyValidateV2(request);
|
|
1334
932
|
}
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
try {
|
|
1341
|
-
return parentPair.derive(suri, metadata);
|
|
1342
|
-
} catch (err) {
|
|
1343
|
-
throw new Error(t('"{{suri}}" is not a valid derivation path', {
|
|
1344
|
-
replace: {
|
|
1345
|
-
suri
|
|
1346
|
-
}
|
|
1347
|
-
}));
|
|
1348
|
-
}
|
|
933
|
+
|
|
934
|
+
/* JSON */
|
|
935
|
+
|
|
936
|
+
parseInfoSingleJson(request) {
|
|
937
|
+
return this.#koniState.keyringService.context.parseInfoSingleJson(request);
|
|
1349
938
|
}
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
suri
|
|
1356
|
-
}) {
|
|
1357
|
-
const childPair = this.deriveV2(parentAddress, suri, {
|
|
1358
|
-
genesisHash,
|
|
1359
|
-
name,
|
|
1360
|
-
parentAddress,
|
|
1361
|
-
suri
|
|
1362
|
-
});
|
|
1363
|
-
const address = childPair.address;
|
|
1364
|
-
this._saveCurrentAccountAddress(address, () => {
|
|
1365
|
-
keyring.addPair(childPair, true);
|
|
1366
|
-
this._addAddressToAuthList(address, isAllowed);
|
|
939
|
+
async jsonRestoreV2(request) {
|
|
940
|
+
return await this.#koniState.keyringService.context.jsonRestoreV2(request, () => {
|
|
941
|
+
if (this.#alwaysLock) {
|
|
942
|
+
this.keyringLock();
|
|
943
|
+
}
|
|
1367
944
|
});
|
|
1368
|
-
return true;
|
|
1369
945
|
}
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
const {
|
|
1379
|
-
promise,
|
|
1380
|
-
resolve
|
|
1381
|
-
} = createPromiseHandler();
|
|
1382
|
-
if (isPasswordValidated) {
|
|
1383
|
-
try {
|
|
1384
|
-
this._saveCurrentAccountAddress(address, () => {
|
|
1385
|
-
var _newAccount$meta, _newAccount$meta2;
|
|
1386
|
-
const newAccount = keyring.restoreAccount(file, password, withMasterPassword);
|
|
1387
|
-
|
|
1388
|
-
// genesisHash is not used in SubWallet => reset it to empty string
|
|
1389
|
-
if ((_newAccount$meta = newAccount.meta) !== null && _newAccount$meta !== void 0 && _newAccount$meta.genesisHash && ((_newAccount$meta2 = newAccount.meta) === null || _newAccount$meta2 === void 0 ? void 0 : _newAccount$meta2.genesisHash) !== '') {
|
|
1390
|
-
keyring.saveAccountMeta(newAccount, {
|
|
1391
|
-
...newAccount.meta,
|
|
1392
|
-
genesisHash: ''
|
|
1393
|
-
});
|
|
1394
|
-
}
|
|
1395
|
-
this._addAddressToAuthList(address, isAllowed);
|
|
1396
|
-
resolve([address]);
|
|
1397
|
-
});
|
|
1398
|
-
if (this.#alwaysLock) {
|
|
1399
|
-
this.keyringLock();
|
|
1400
|
-
}
|
|
1401
|
-
return promise;
|
|
1402
|
-
} catch (error) {
|
|
1403
|
-
throw new Error(error.message);
|
|
1404
|
-
}
|
|
1405
|
-
} else {
|
|
1406
|
-
throw new Error(t('Wrong password'));
|
|
1407
|
-
}
|
|
946
|
+
parseInfoMultiJson(request) {
|
|
947
|
+
return this.#koniState.keyringService.context.parseInfoMultiJson(request);
|
|
948
|
+
}
|
|
949
|
+
batchRestoreV2(request) {
|
|
950
|
+
return this.#koniState.keyringService.context.batchRestoreV2(request);
|
|
951
|
+
}
|
|
952
|
+
async batchExportV2(request) {
|
|
953
|
+
return this.#koniState.keyringService.context.batchExportV2(request);
|
|
1408
954
|
}
|
|
1409
|
-
batchRestoreV2({
|
|
1410
|
-
accountsInfo,
|
|
1411
|
-
file,
|
|
1412
|
-
isAllowed,
|
|
1413
|
-
password
|
|
1414
|
-
}) {
|
|
1415
|
-
const addressList = accountsInfo.map(acc => acc.address);
|
|
1416
|
-
const isPasswordValidated = this.validatedAccountsPassword(file, password);
|
|
1417
|
-
const {
|
|
1418
|
-
promise,
|
|
1419
|
-
resolve
|
|
1420
|
-
} = createPromiseHandler();
|
|
1421
|
-
if (isPasswordValidated) {
|
|
1422
|
-
try {
|
|
1423
|
-
this._saveCurrentAccountAddress(ALL_ACCOUNT_KEY, () => {
|
|
1424
|
-
keyring.restoreAccounts(file, password);
|
|
1425
|
-
this.#koniState.keyringService.removeNoneHardwareGenesisHash();
|
|
1426
|
-
const successAddressList = addressList.reduce((addressList, address) => {
|
|
1427
|
-
try {
|
|
1428
|
-
const account = keyring.getPair(address);
|
|
1429
|
-
if (account) {
|
|
1430
|
-
addressList.push(address);
|
|
1431
|
-
}
|
|
1432
|
-
} catch (error) {
|
|
1433
|
-
console.log(error);
|
|
1434
|
-
}
|
|
1435
|
-
return addressList;
|
|
1436
|
-
}, []);
|
|
1437
|
-
this._addAddressesToAuthList(successAddressList, isAllowed);
|
|
1438
|
-
resolve(successAddressList);
|
|
1439
|
-
});
|
|
1440
955
|
|
|
1441
|
-
|
|
1442
|
-
// this.keyringLock();
|
|
1443
|
-
// }
|
|
956
|
+
/* JSON */
|
|
1444
957
|
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
throw new Error(error.message);
|
|
1448
|
-
}
|
|
1449
|
-
} else {
|
|
1450
|
-
throw new Error(t('Wrong password'));
|
|
1451
|
-
}
|
|
1452
|
-
}
|
|
1453
|
-
async batchExportV2({
|
|
1454
|
-
addresses,
|
|
1455
|
-
password
|
|
1456
|
-
}) {
|
|
1457
|
-
try {
|
|
1458
|
-
if (addresses && !addresses.length) {
|
|
1459
|
-
throw new Error(t('No accounts found to export'));
|
|
1460
|
-
}
|
|
1461
|
-
return {
|
|
1462
|
-
exportedJson: await keyring.backupAccounts(password, addresses)
|
|
1463
|
-
};
|
|
1464
|
-
} catch (e) {
|
|
1465
|
-
const error = e;
|
|
1466
|
-
if (error.message === 'Invalid master password') {
|
|
1467
|
-
throw new Error(t('Wrong password'));
|
|
1468
|
-
} else {
|
|
1469
|
-
throw error;
|
|
1470
|
-
}
|
|
1471
|
-
}
|
|
958
|
+
exportAccountProxyMnemonic(request) {
|
|
959
|
+
return this.#koniState.keyringService.context.exportAccountProxyMnemonic(request);
|
|
1472
960
|
}
|
|
1473
961
|
getNftCollection() {
|
|
1474
962
|
return this.#koniState.getNftCollection();
|
|
@@ -1610,12 +1098,12 @@ export default class KoniExtension {
|
|
|
1610
1098
|
to,
|
|
1611
1099
|
tokenSlug,
|
|
1612
1100
|
transferAll,
|
|
1101
|
+
transferBounceable,
|
|
1613
1102
|
value
|
|
1614
1103
|
} = inputData;
|
|
1615
1104
|
const transferTokenInfo = this.#koniState.chainService.getAssetBySlug(tokenSlug);
|
|
1616
1105
|
const [errors,,] = validateTransferRequest(transferTokenInfo, from, to, value, transferAll);
|
|
1617
1106
|
const warnings = [];
|
|
1618
|
-
const evmApiMap = this.#koniState.getEvmApiMap();
|
|
1619
1107
|
const chainInfo = this.#koniState.getChainInfo(networkKey);
|
|
1620
1108
|
const nativeTokenInfo = this.#koniState.getNativeTokenInfo(networkKey);
|
|
1621
1109
|
const nativeTokenSlug = nativeTokenInfo.slug;
|
|
@@ -1638,8 +1126,9 @@ export default class KoniExtension {
|
|
|
1638
1126
|
if (isEthereumAddress(from) && isEthereumAddress(to) && _isTokenTransferredByEvm(transferTokenInfo)) {
|
|
1639
1127
|
chainType = ChainType.EVM;
|
|
1640
1128
|
const txVal = transferAll ? transferTokenAvailable.value : value || '0';
|
|
1641
|
-
const evmApi =
|
|
1129
|
+
const evmApi = this.#koniState.getEvmApi(networkKey);
|
|
1642
1130
|
|
|
1131
|
+
// todo: refactor: merge getERC20TransactionObject & getEVMTransactionObject
|
|
1643
1132
|
// Estimate with EVM API
|
|
1644
1133
|
if (_isTokenEvmSmartContract(transferTokenInfo) || _isLocalToken(transferTokenInfo)) {
|
|
1645
1134
|
[transaction, transferAmount.value] = await getERC20TransactionObject(_getContractAddressOfToken(transferTokenInfo), chainInfo, from, to, txVal, !!transferAll, evmApi);
|
|
@@ -1649,6 +1138,19 @@ export default class KoniExtension {
|
|
|
1649
1138
|
} else if (_isMantaZkAsset(transferTokenInfo)) {
|
|
1650
1139
|
transaction = undefined;
|
|
1651
1140
|
transferAmount.value = '0';
|
|
1141
|
+
} else if (isTonAddress(from) && isTonAddress(to) && _isTokenTransferredByTon(transferTokenInfo)) {
|
|
1142
|
+
chainType = ChainType.TON;
|
|
1143
|
+
const tonApi = this.#koniState.getTonApi(networkKey);
|
|
1144
|
+
[transaction, transferAmount.value] = await createTonTransaction({
|
|
1145
|
+
tokenInfo: transferTokenInfo,
|
|
1146
|
+
from,
|
|
1147
|
+
to,
|
|
1148
|
+
networkKey,
|
|
1149
|
+
value: value || '0',
|
|
1150
|
+
transferAll: !!transferAll,
|
|
1151
|
+
// currently not used
|
|
1152
|
+
tonApi
|
|
1153
|
+
});
|
|
1652
1154
|
} else {
|
|
1653
1155
|
const substrateApi = this.#koniState.getSubstrateApi(networkKey);
|
|
1654
1156
|
[transaction, transferAmount.value] = await createTransferExtrinsic({
|
|
@@ -1702,6 +1204,13 @@ export default class KoniExtension {
|
|
|
1702
1204
|
warnings.length && inputTransaction.warnings.push(...warnings);
|
|
1703
1205
|
errors.length && inputTransaction.errors.push(...errors);
|
|
1704
1206
|
};
|
|
1207
|
+
const ignoreWarnings = [];
|
|
1208
|
+
if (transferAll) {
|
|
1209
|
+
ignoreWarnings.push(BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT);
|
|
1210
|
+
}
|
|
1211
|
+
if (transferBounceable) {
|
|
1212
|
+
ignoreWarnings.push(BasicTxWarningCode.IS_BOUNCEABLE_ADDRESS);
|
|
1213
|
+
}
|
|
1705
1214
|
return this.#koniState.transactionService.handleTransaction({
|
|
1706
1215
|
errors,
|
|
1707
1216
|
warnings,
|
|
@@ -1712,7 +1221,7 @@ export default class KoniExtension {
|
|
|
1712
1221
|
transaction,
|
|
1713
1222
|
data: inputData,
|
|
1714
1223
|
extrinsicType,
|
|
1715
|
-
ignoreWarnings
|
|
1224
|
+
ignoreWarnings,
|
|
1716
1225
|
isTransferAll: isTransferNativeToken ? transferAll : false,
|
|
1717
1226
|
edAsWarning: isTransferNativeToken,
|
|
1718
1227
|
additionalValidator: additionalValidator
|
|
@@ -1725,6 +1234,8 @@ export default class KoniExtension {
|
|
|
1725
1234
|
originNetworkKey,
|
|
1726
1235
|
to,
|
|
1727
1236
|
tokenSlug,
|
|
1237
|
+
transferAll,
|
|
1238
|
+
transferBounceable,
|
|
1728
1239
|
value
|
|
1729
1240
|
} = inputData;
|
|
1730
1241
|
const originTokenInfo = this.#koniState.getAssetBySlug(tokenSlug);
|
|
@@ -1802,6 +1313,13 @@ export default class KoniExtension {
|
|
|
1802
1313
|
});
|
|
1803
1314
|
};
|
|
1804
1315
|
}
|
|
1316
|
+
const ignoreWarnings = [];
|
|
1317
|
+
if (transferAll) {
|
|
1318
|
+
ignoreWarnings.push(BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT);
|
|
1319
|
+
}
|
|
1320
|
+
if (transferBounceable) {
|
|
1321
|
+
ignoreWarnings.push(BasicTxWarningCode.IS_BOUNCEABLE_ADDRESS);
|
|
1322
|
+
}
|
|
1805
1323
|
return await this.#koniState.transactionService.handleTransaction({
|
|
1806
1324
|
url: EXTENSION_REQUEST_URL,
|
|
1807
1325
|
address: from,
|
|
@@ -1811,8 +1329,8 @@ export default class KoniExtension {
|
|
|
1811
1329
|
extrinsicType: ExtrinsicType.TRANSFER_XCM,
|
|
1812
1330
|
chainType: !isSnowBridgeEvmTransfer ? ChainType.SUBSTRATE : ChainType.EVM,
|
|
1813
1331
|
transferNativeAmount: _isNativeToken(originTokenInfo) ? value : '0',
|
|
1814
|
-
ignoreWarnings
|
|
1815
|
-
isTransferAll:
|
|
1332
|
+
ignoreWarnings,
|
|
1333
|
+
isTransferAll: transferAll,
|
|
1816
1334
|
errors,
|
|
1817
1335
|
additionalValidator: additionalValidator,
|
|
1818
1336
|
eventsHandler: eventsHandler
|
|
@@ -1982,7 +1500,7 @@ export default class KoniExtension {
|
|
|
1982
1500
|
}
|
|
1983
1501
|
async getNativeTokenMaxTransferable(tokenInfo, networkKey, address) {
|
|
1984
1502
|
const chainInfo = this.#koniState.chainService.getChainInfoByKey(networkKey);
|
|
1985
|
-
const api = _isChainEvmCompatible(chainInfo) && _isTokenTransferredByEvm(tokenInfo) ? this.#koniState.chainService.getEvmApi(networkKey) : this.#koniState.chainService.getSubstrateApi(networkKey);
|
|
1503
|
+
const api = _isChainEvmCompatible(chainInfo) && _isTokenTransferredByEvm(tokenInfo) ? this.#koniState.chainService.getEvmApi(networkKey) : _isChainTonCompatible(chainInfo) && _isTokenTransferredByTon(tokenInfo) ? this.#koniState.chainService.getTonApi(networkKey) : this.#koniState.chainService.getSubstrateApi(networkKey);
|
|
1986
1504
|
const [mockTxFee, {
|
|
1987
1505
|
value
|
|
1988
1506
|
}] = await Promise.all([getTransferMockTxFee(address, chainInfo, tokenInfo, api), this.getAddressTransferableBalance({
|
|
@@ -2064,271 +1582,21 @@ export default class KoniExtension {
|
|
|
2064
1582
|
}
|
|
2065
1583
|
return true;
|
|
2066
1584
|
}
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
}) {
|
|
2070
|
-
const pair = keyring.getPair(address);
|
|
2071
|
-
assert(pair, t('Unable to find account'));
|
|
2072
|
-
return {
|
|
2073
|
-
meta: pair.meta
|
|
2074
|
-
};
|
|
2075
|
-
}
|
|
2076
|
-
accountsTie2({
|
|
2077
|
-
address,
|
|
2078
|
-
genesisHash
|
|
2079
|
-
}) {
|
|
2080
|
-
return this.#koniState.setAccountTie(address, genesisHash);
|
|
1585
|
+
async accountsCreateExternalV2(request) {
|
|
1586
|
+
return this.#koniState.keyringService.context.accountsCreateExternalV2(request);
|
|
2081
1587
|
}
|
|
2082
|
-
async
|
|
2083
|
-
|
|
2084
|
-
genesisHash,
|
|
2085
|
-
isAllowed,
|
|
2086
|
-
isEthereum,
|
|
2087
|
-
isReadOnly,
|
|
2088
|
-
name
|
|
2089
|
-
}) {
|
|
2090
|
-
try {
|
|
2091
|
-
let result;
|
|
2092
|
-
try {
|
|
2093
|
-
const exists = keyring.getPair(address);
|
|
2094
|
-
if (exists) {
|
|
2095
|
-
if (exists.type === (isEthereum ? 'ethereum' : 'sr25519')) {
|
|
2096
|
-
return [{
|
|
2097
|
-
code: AccountExternalErrorCode.INVALID_ADDRESS,
|
|
2098
|
-
message: t('Account exists')
|
|
2099
|
-
}];
|
|
2100
|
-
}
|
|
2101
|
-
}
|
|
2102
|
-
} catch (e) {}
|
|
2103
|
-
if (isEthereum) {
|
|
2104
|
-
const chainInfoMap = this.#koniState.getChainInfoMap();
|
|
2105
|
-
let _gen = '';
|
|
2106
|
-
if (genesisHash) {
|
|
2107
|
-
for (const network of Object.values(chainInfoMap)) {
|
|
2108
|
-
if (_getEvmChainId(network) === parseInt(genesisHash)) {
|
|
2109
|
-
// TODO: pure EVM chains do not have genesisHash
|
|
2110
|
-
_gen = _getSubstrateGenesisHash(network);
|
|
2111
|
-
}
|
|
2112
|
-
}
|
|
2113
|
-
}
|
|
2114
|
-
result = keyring.keyring.addFromAddress(address, {
|
|
2115
|
-
name,
|
|
2116
|
-
isExternal: true,
|
|
2117
|
-
isReadOnly,
|
|
2118
|
-
genesisHash: _gen
|
|
2119
|
-
}, null, 'ethereum');
|
|
2120
|
-
keyring.saveAccount(result);
|
|
2121
|
-
} else {
|
|
2122
|
-
result = keyring.addExternal(address, {
|
|
2123
|
-
genesisHash,
|
|
2124
|
-
name,
|
|
2125
|
-
isReadOnly
|
|
2126
|
-
}).pair;
|
|
2127
|
-
}
|
|
2128
|
-
const _address = result.address;
|
|
2129
|
-
await new Promise(resolve => {
|
|
2130
|
-
this.#koniState.addAccountRef([_address], () => {
|
|
2131
|
-
resolve();
|
|
2132
|
-
});
|
|
2133
|
-
});
|
|
2134
|
-
await new Promise(resolve => {
|
|
2135
|
-
this._saveCurrentAccountAddress(_address, () => {
|
|
2136
|
-
this._addAddressToAuthList(_address, isAllowed);
|
|
2137
|
-
resolve();
|
|
2138
|
-
});
|
|
2139
|
-
});
|
|
2140
|
-
return [];
|
|
2141
|
-
} catch (e) {
|
|
2142
|
-
return [{
|
|
2143
|
-
code: AccountExternalErrorCode.KEYRING_ERROR,
|
|
2144
|
-
message: e.message
|
|
2145
|
-
}];
|
|
2146
|
-
}
|
|
1588
|
+
async accountsCreateHardwareV2(request) {
|
|
1589
|
+
return this.#koniState.keyringService.context.accountsCreateHardwareV2(request);
|
|
2147
1590
|
}
|
|
2148
|
-
async
|
|
2149
|
-
|
|
2150
|
-
address,
|
|
2151
|
-
addressOffset,
|
|
2152
|
-
genesisHash,
|
|
2153
|
-
hardwareType,
|
|
2154
|
-
isAllowed,
|
|
2155
|
-
name,
|
|
2156
|
-
originGenesisHash
|
|
2157
|
-
}) {
|
|
2158
|
-
const key = keyring.addHardware(address, hardwareType, {
|
|
2159
|
-
accountIndex,
|
|
2160
|
-
addressOffset,
|
|
2161
|
-
genesisHash,
|
|
2162
|
-
name,
|
|
2163
|
-
originGenesisHash
|
|
2164
|
-
});
|
|
2165
|
-
const result = key.pair;
|
|
2166
|
-
const _address = result.address;
|
|
2167
|
-
await new Promise(resolve => {
|
|
2168
|
-
this.#koniState.addAccountRef([_address], () => {
|
|
2169
|
-
resolve();
|
|
2170
|
-
});
|
|
2171
|
-
});
|
|
2172
|
-
await new Promise(resolve => {
|
|
2173
|
-
this._saveCurrentAccountAddress(_address, () => {
|
|
2174
|
-
this._addAddressToAuthList(_address, isAllowed || false);
|
|
2175
|
-
resolve();
|
|
2176
|
-
});
|
|
2177
|
-
});
|
|
2178
|
-
return true;
|
|
1591
|
+
async accountsCreateHardwareMultiple(request) {
|
|
1592
|
+
return this.#koniState.keyringService.context.accountsCreateHardwareMultiple(request);
|
|
2179
1593
|
}
|
|
2180
|
-
async
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
if (!accounts.length) {
|
|
2185
|
-
throw new Error(t("Can't find an account. Please try again"));
|
|
2186
|
-
}
|
|
2187
|
-
const slugMap = {};
|
|
2188
|
-
for (const account of accounts) {
|
|
2189
|
-
const {
|
|
2190
|
-
accountIndex,
|
|
2191
|
-
address,
|
|
2192
|
-
addressOffset,
|
|
2193
|
-
genesisHash,
|
|
2194
|
-
hardwareType,
|
|
2195
|
-
isEthereum,
|
|
2196
|
-
isGeneric,
|
|
2197
|
-
name,
|
|
2198
|
-
originGenesisHash
|
|
2199
|
-
} = account;
|
|
2200
|
-
let result;
|
|
2201
|
-
const baseMeta = {
|
|
2202
|
-
name,
|
|
2203
|
-
hardwareType,
|
|
2204
|
-
accountIndex,
|
|
2205
|
-
addressOffset,
|
|
2206
|
-
genesisHash,
|
|
2207
|
-
originGenesisHash,
|
|
2208
|
-
isGeneric
|
|
2209
|
-
};
|
|
2210
|
-
if (isEthereum) {
|
|
2211
|
-
result = keyring.keyring.addFromAddress(address, {
|
|
2212
|
-
...baseMeta,
|
|
2213
|
-
isExternal: true,
|
|
2214
|
-
isHardware: true
|
|
2215
|
-
}, null, 'ethereum');
|
|
2216
|
-
keyring.saveAccount(result);
|
|
2217
|
-
slugMap.ethereum = 'ethereum';
|
|
2218
|
-
} else {
|
|
2219
|
-
result = keyring.addHardware(address, hardwareType, {
|
|
2220
|
-
...baseMeta,
|
|
2221
|
-
availableGenesisHashes: [genesisHash]
|
|
2222
|
-
}).pair;
|
|
2223
|
-
const [slug] = this.#koniState.findNetworkKeyByGenesisHash(genesisHash);
|
|
2224
|
-
if (slug) {
|
|
2225
|
-
slugMap[slug] = slug;
|
|
2226
|
-
}
|
|
2227
|
-
}
|
|
2228
|
-
const _address = result.address;
|
|
2229
|
-
addresses.push(_address);
|
|
2230
|
-
await new Promise(resolve => {
|
|
2231
|
-
this._addAddressToAuthList(_address, true);
|
|
2232
|
-
resolve();
|
|
2233
|
-
});
|
|
2234
|
-
}
|
|
2235
|
-
const currentAccount = this.#koniState.keyringService.currentAccount;
|
|
2236
|
-
const allGenesisHash = (currentAccount === null || currentAccount === void 0 ? void 0 : currentAccount.allGenesisHash) || undefined;
|
|
2237
|
-
if (addresses.length <= 1) {
|
|
2238
|
-
this.#koniState.setCurrentAccount({
|
|
2239
|
-
address: addresses[0],
|
|
2240
|
-
currentGenesisHash: null,
|
|
2241
|
-
allGenesisHash
|
|
2242
|
-
});
|
|
2243
|
-
} else {
|
|
2244
|
-
this.#koniState.setCurrentAccount({
|
|
2245
|
-
address: ALL_ACCOUNT_KEY,
|
|
2246
|
-
currentGenesisHash: allGenesisHash || null,
|
|
2247
|
-
allGenesisHash
|
|
2248
|
-
});
|
|
2249
|
-
}
|
|
2250
|
-
await new Promise(resolve => {
|
|
2251
|
-
this.#koniState.addAccountRef(addresses, () => {
|
|
2252
|
-
resolve();
|
|
2253
|
-
});
|
|
2254
|
-
});
|
|
2255
|
-
if (Object.keys(slugMap).length) {
|
|
2256
|
-
this.enableChains({
|
|
2257
|
-
chainSlugs: Object.keys(slugMap),
|
|
2258
|
-
enableTokens: true
|
|
2259
|
-
}).catch(console.error);
|
|
2260
|
-
}
|
|
2261
|
-
return true;
|
|
2262
|
-
}
|
|
2263
|
-
async accountsCreateWithSecret({
|
|
2264
|
-
isAllow,
|
|
2265
|
-
isEthereum,
|
|
2266
|
-
name,
|
|
2267
|
-
publicKey,
|
|
2268
|
-
secretKey
|
|
2269
|
-
}) {
|
|
2270
|
-
try {
|
|
2271
|
-
let keyringPair = null;
|
|
2272
|
-
if (isEthereum) {
|
|
2273
|
-
const _secret = hexStripPrefix(secretKey);
|
|
2274
|
-
if (_secret.length === 64) {
|
|
2275
|
-
const suri = `0x${_secret}`;
|
|
2276
|
-
const {
|
|
2277
|
-
phrase
|
|
2278
|
-
} = keyExtractSuri(suri);
|
|
2279
|
-
if (isHex(phrase) && isHex(phrase, 256)) {
|
|
2280
|
-
const type = 'ethereum';
|
|
2281
|
-
keyringPair = keyring.addUri(getSuri(suri, type), {
|
|
2282
|
-
name: name
|
|
2283
|
-
}, type).pair;
|
|
2284
|
-
}
|
|
2285
|
-
}
|
|
2286
|
-
} else {
|
|
2287
|
-
keyringPair = keyring.keyring.addFromPair({
|
|
2288
|
-
publicKey: hexToU8a(publicKey),
|
|
2289
|
-
secretKey: hexToU8a(secretKey)
|
|
2290
|
-
}, {
|
|
2291
|
-
name
|
|
2292
|
-
});
|
|
2293
|
-
keyring.addPair(keyringPair, true);
|
|
2294
|
-
}
|
|
2295
|
-
if (!keyringPair) {
|
|
2296
|
-
return {
|
|
2297
|
-
success: false,
|
|
2298
|
-
errors: [{
|
|
2299
|
-
code: AccountExternalErrorCode.KEYRING_ERROR,
|
|
2300
|
-
message: t('Cannot create account')
|
|
2301
|
-
}]
|
|
2302
|
-
};
|
|
2303
|
-
}
|
|
2304
|
-
const _address = keyringPair.address;
|
|
2305
|
-
await new Promise(resolve => {
|
|
2306
|
-
this.#koniState.addAccountRef([_address], () => {
|
|
2307
|
-
resolve();
|
|
2308
|
-
});
|
|
2309
|
-
});
|
|
2310
|
-
await new Promise(resolve => {
|
|
2311
|
-
this._saveCurrentAccountAddress(_address, () => {
|
|
2312
|
-
this._addAddressToAuthList(_address, isAllow);
|
|
2313
|
-
resolve();
|
|
2314
|
-
});
|
|
2315
|
-
});
|
|
2316
|
-
if (this.#alwaysLock) {
|
|
2317
|
-
this.keyringLock();
|
|
2318
|
-
}
|
|
2319
|
-
return {
|
|
2320
|
-
errors: [],
|
|
2321
|
-
success: true
|
|
2322
|
-
};
|
|
2323
|
-
} catch (e) {
|
|
2324
|
-
return {
|
|
2325
|
-
success: false,
|
|
2326
|
-
errors: [{
|
|
2327
|
-
code: AccountExternalErrorCode.KEYRING_ERROR,
|
|
2328
|
-
message: e.message
|
|
2329
|
-
}]
|
|
2330
|
-
};
|
|
1594
|
+
async accountsCreateWithSecret(request) {
|
|
1595
|
+
const result = await this.#koniState.keyringService.context.accountsCreateWithSecret(request);
|
|
1596
|
+
if (this.#alwaysLock) {
|
|
1597
|
+
this.keyringLock();
|
|
2331
1598
|
}
|
|
1599
|
+
return result;
|
|
2332
1600
|
}
|
|
2333
1601
|
|
|
2334
1602
|
/// External account
|
|
@@ -2378,9 +1646,21 @@ export default class KoniExtension {
|
|
|
2378
1646
|
});
|
|
2379
1647
|
return this.#koniState.getConfirmationsQueueSubject().getValue();
|
|
2380
1648
|
}
|
|
1649
|
+
subscribeConfirmationsTon(id, port) {
|
|
1650
|
+
const cb = createSubscription(id, port);
|
|
1651
|
+
const subscription = this.#koniState.getConfirmationsQueueSubjectTon().subscribe(cb);
|
|
1652
|
+
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
1653
|
+
port.onDisconnect.addListener(() => {
|
|
1654
|
+
this.cancelSubscription(id);
|
|
1655
|
+
});
|
|
1656
|
+
return this.#koniState.getConfirmationsQueueSubjectTon().getValue();
|
|
1657
|
+
}
|
|
2381
1658
|
async completeConfirmation(request) {
|
|
2382
1659
|
return await this.#koniState.completeConfirmation(request);
|
|
2383
1660
|
}
|
|
1661
|
+
async completeConfirmationTon(request) {
|
|
1662
|
+
return await this.#koniState.completeConfirmationTon(request);
|
|
1663
|
+
}
|
|
2384
1664
|
|
|
2385
1665
|
/// Sign Qr
|
|
2386
1666
|
|
|
@@ -2474,7 +1754,7 @@ export default class KoniExtension {
|
|
|
2474
1754
|
} else if (isAscii(message)) {
|
|
2475
1755
|
data = `0x${message}`;
|
|
2476
1756
|
}
|
|
2477
|
-
signed = await pair.
|
|
1757
|
+
signed = await pair.evm.signMessage(data, 'personal_sign');
|
|
2478
1758
|
} else {
|
|
2479
1759
|
var _signedTranaction$r, _signedTranaction$s, _signedTranaction$v;
|
|
2480
1760
|
const tx = createTransactionFromRLP(message);
|
|
@@ -2501,7 +1781,7 @@ export default class KoniExtension {
|
|
|
2501
1781
|
const transaction = new LegacyTransaction(txObject, {
|
|
2502
1782
|
common
|
|
2503
1783
|
});
|
|
2504
|
-
const signedTranaction = LegacyTransaction.fromSerializedTx(hexToU8a(pair.
|
|
1784
|
+
const signedTranaction = LegacyTransaction.fromSerializedTx(hexToU8a(pair.evm.signTransaction(transaction)));
|
|
2505
1785
|
signed = signatureToHex({
|
|
2506
1786
|
r: ((_signedTranaction$r = signedTranaction.r) === null || _signedTranaction$r === void 0 ? void 0 : _signedTranaction$r.toString(16)) || '',
|
|
2507
1787
|
s: ((_signedTranaction$s = signedTranaction.s) === null || _signedTranaction$s === void 0 ? void 0 : _signedTranaction$s.toString(16)) || '',
|
|
@@ -2795,8 +2075,7 @@ export default class KoniExtension {
|
|
|
2795
2075
|
|
|
2796
2076
|
keyringStateSubscribe(id, port) {
|
|
2797
2077
|
const cb = createSubscription(id, port);
|
|
2798
|
-
const
|
|
2799
|
-
const subscription = keyringStateSubject.subscribe(value => cb(value));
|
|
2078
|
+
const subscription = this.#koniState.keyringService.keyringStateSubscribe(cb);
|
|
2800
2079
|
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
2801
2080
|
port.onDisconnect.addListener(() => {
|
|
2802
2081
|
this.cancelSubscription(id);
|
|
@@ -2806,47 +2085,14 @@ export default class KoniExtension {
|
|
|
2806
2085
|
|
|
2807
2086
|
// Change master password
|
|
2808
2087
|
|
|
2809
|
-
keyringChangeMasterPassword({
|
|
2810
|
-
createNew
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
try {
|
|
2815
|
-
// Remove isMasterPassword meta if createNew
|
|
2816
|
-
if (createNew && !keyring.keyring.hasMasterPassword) {
|
|
2817
|
-
const pairs = keyring.getPairs();
|
|
2818
|
-
for (const pair of pairs) {
|
|
2819
|
-
if (pair.meta.isInjected) {
|
|
2820
|
-
// Empty
|
|
2821
|
-
} else {
|
|
2822
|
-
const meta = {
|
|
2823
|
-
...pair.meta,
|
|
2824
|
-
isMasterPassword: false
|
|
2825
|
-
};
|
|
2826
|
-
if (!meta.originGenesisHash) {
|
|
2827
|
-
meta.genesisHash = '';
|
|
2828
|
-
}
|
|
2829
|
-
pair.setMeta(meta);
|
|
2830
|
-
keyring.saveAccountMeta(pair, pair.meta);
|
|
2831
|
-
}
|
|
2832
|
-
}
|
|
2088
|
+
keyringChangeMasterPassword(request) {
|
|
2089
|
+
const createNew = request.createNew;
|
|
2090
|
+
const callback = () => {
|
|
2091
|
+
if (this.#alwaysLock && !createNew) {
|
|
2092
|
+
this.keyringLock();
|
|
2833
2093
|
}
|
|
2834
|
-
keyring.changeMasterPassword(newPassword, oldPassword);
|
|
2835
|
-
} catch (e) {
|
|
2836
|
-
console.error(e);
|
|
2837
|
-
return {
|
|
2838
|
-
errors: [t(e.message)],
|
|
2839
|
-
status: false
|
|
2840
|
-
};
|
|
2841
|
-
}
|
|
2842
|
-
this.#koniState.updateKeyringState();
|
|
2843
|
-
if (this.#alwaysLock && !createNew) {
|
|
2844
|
-
this.keyringLock();
|
|
2845
|
-
}
|
|
2846
|
-
return {
|
|
2847
|
-
status: true,
|
|
2848
|
-
errors: []
|
|
2849
2094
|
};
|
|
2095
|
+
return this.#koniState.keyringService.context.keyringChangeMasterPassword(request, callback);
|
|
2850
2096
|
}
|
|
2851
2097
|
|
|
2852
2098
|
// Migrate password
|
|
@@ -2860,24 +2106,11 @@ export default class KoniExtension {
|
|
|
2860
2106
|
}
|
|
2861
2107
|
}
|
|
2862
2108
|
}
|
|
2863
|
-
keyringMigrateMasterPassword({
|
|
2864
|
-
|
|
2865
|
-
password
|
|
2866
|
-
}) {
|
|
2867
|
-
try {
|
|
2868
|
-
keyring.migrateWithMasterPassword(address, password);
|
|
2109
|
+
keyringMigrateMasterPassword(request) {
|
|
2110
|
+
const cb = () => {
|
|
2869
2111
|
this.checkLockAfterMigrate();
|
|
2870
|
-
} catch (e) {
|
|
2871
|
-
console.error(e);
|
|
2872
|
-
return {
|
|
2873
|
-
errors: [e.message],
|
|
2874
|
-
status: false
|
|
2875
|
-
};
|
|
2876
|
-
}
|
|
2877
|
-
return {
|
|
2878
|
-
status: true,
|
|
2879
|
-
errors: []
|
|
2880
2112
|
};
|
|
2113
|
+
return this.#koniState.keyringService.context.keyringMigrateMasterPassword(request, cb);
|
|
2881
2114
|
}
|
|
2882
2115
|
|
|
2883
2116
|
// Unlock wallet
|
|
@@ -2956,7 +2189,7 @@ export default class KoniExtension {
|
|
|
2956
2189
|
request,
|
|
2957
2190
|
resolve
|
|
2958
2191
|
} = queued;
|
|
2959
|
-
const pair = keyring.getPair(queued.
|
|
2192
|
+
const pair = keyring.getPair(queued.address);
|
|
2960
2193
|
|
|
2961
2194
|
// unlike queued.account.address the following
|
|
2962
2195
|
// address is encoded with the default prefix
|
|
@@ -3046,162 +2279,24 @@ export default class KoniExtension {
|
|
|
3046
2279
|
|
|
3047
2280
|
/// Derive account
|
|
3048
2281
|
|
|
3049
|
-
derivationCreateMultiple({
|
|
3050
|
-
|
|
3051
|
-
items,
|
|
3052
|
-
parentAddress
|
|
3053
|
-
}) {
|
|
3054
|
-
const parentPair = keyring.getPair(parentAddress);
|
|
3055
|
-
const isEvm = parentPair.type === 'ethereum';
|
|
3056
|
-
if (parentPair.isLocked) {
|
|
3057
|
-
keyring.unlockPair(parentPair.address);
|
|
3058
|
-
}
|
|
3059
|
-
const createChild = ({
|
|
3060
|
-
name,
|
|
3061
|
-
suri
|
|
3062
|
-
}) => {
|
|
3063
|
-
const meta = {
|
|
3064
|
-
name: name,
|
|
3065
|
-
parentAddress
|
|
3066
|
-
};
|
|
3067
|
-
if (isEvm) {
|
|
3068
|
-
let index = 0;
|
|
3069
|
-
try {
|
|
3070
|
-
const reg = /^\d+$/;
|
|
3071
|
-
const path = suri.split('//')[1];
|
|
3072
|
-
if (reg.test(path)) {
|
|
3073
|
-
index = parseInt(path);
|
|
3074
|
-
}
|
|
3075
|
-
} catch (e) {}
|
|
3076
|
-
if (!index) {
|
|
3077
|
-
throw Error(t('Invalid derive path'));
|
|
3078
|
-
}
|
|
3079
|
-
meta.suri = `//${index}`;
|
|
3080
|
-
return parentPair.deriveEvm(index, meta);
|
|
3081
|
-
} else {
|
|
3082
|
-
meta.suri = suri;
|
|
3083
|
-
return parentPair.derive(suri, meta);
|
|
3084
|
-
}
|
|
3085
|
-
};
|
|
3086
|
-
const result = [];
|
|
3087
|
-
for (const item of items) {
|
|
3088
|
-
try {
|
|
3089
|
-
const childPair = createChild(item);
|
|
3090
|
-
const address = childPair.address;
|
|
3091
|
-
keyring.addPair(childPair, true);
|
|
3092
|
-
this._addAddressToAuthList(address, isAllowed);
|
|
3093
|
-
result.push(childPair);
|
|
3094
|
-
} catch (e) {
|
|
3095
|
-
console.log(e);
|
|
3096
|
-
}
|
|
3097
|
-
}
|
|
3098
|
-
if (result.length === 1) {
|
|
3099
|
-
this._saveCurrentAccountAddress(result[0].address);
|
|
3100
|
-
} else {
|
|
3101
|
-
this.#koniState.setCurrentAccount({
|
|
3102
|
-
address: ALL_ACCOUNT_KEY,
|
|
3103
|
-
currentGenesisHash: null
|
|
3104
|
-
});
|
|
3105
|
-
}
|
|
3106
|
-
return true;
|
|
2282
|
+
derivationCreateMultiple(request) {
|
|
2283
|
+
return this.#koniState.keyringService.context.derivationCreateMultiple(request);
|
|
3107
2284
|
}
|
|
3108
|
-
derivationCreateV3({
|
|
3109
|
-
|
|
3110
|
-
}) {
|
|
3111
|
-
const parentPair = keyring.getPair(parentAddress);
|
|
3112
|
-
const isEvm = parentPair.type === 'ethereum';
|
|
3113
|
-
if (parentPair.isLocked) {
|
|
3114
|
-
keyring.unlockPair(parentPair.address);
|
|
3115
|
-
}
|
|
3116
|
-
const pairs = keyring.getPairs();
|
|
3117
|
-
const children = pairs.filter(p => p.meta.parentAddress === parentAddress);
|
|
3118
|
-
const name = `Account ${pairs.length}`;
|
|
3119
|
-
let index = isEvm ? 1 : 0;
|
|
3120
|
-
let valid = false;
|
|
3121
|
-
do {
|
|
3122
|
-
const exist = children.find(p => p.meta.suri === `//${index}`);
|
|
3123
|
-
if (exist) {
|
|
3124
|
-
index++;
|
|
3125
|
-
} else {
|
|
3126
|
-
valid = true;
|
|
3127
|
-
}
|
|
3128
|
-
} while (!valid);
|
|
3129
|
-
const meta = {
|
|
3130
|
-
name,
|
|
3131
|
-
parentAddress,
|
|
3132
|
-
suri: `//${index}`
|
|
3133
|
-
};
|
|
3134
|
-
const childPair = isEvm ? parentPair.deriveEvm(index, meta) : parentPair.derive(meta.suri, meta);
|
|
3135
|
-
const address = childPair.address;
|
|
3136
|
-
this._saveCurrentAccountAddress(address, () => {
|
|
3137
|
-
keyring.addPair(childPair, true);
|
|
3138
|
-
this._addAddressToAuthList(address, true);
|
|
3139
|
-
});
|
|
2285
|
+
derivationCreateV3(request) {
|
|
2286
|
+
const rs = this.#koniState.keyringService.context.derivationAccountProxyCreate(request);
|
|
3140
2287
|
if (this.#alwaysLock) {
|
|
3141
2288
|
this.keyringLock();
|
|
3142
2289
|
}
|
|
3143
|
-
return
|
|
2290
|
+
return rs;
|
|
3144
2291
|
}
|
|
3145
|
-
validateDerivePath({
|
|
3146
|
-
|
|
3147
|
-
suri
|
|
3148
|
-
}) {
|
|
3149
|
-
const parentPair = keyring.getPair(parentAddress);
|
|
3150
|
-
const isEvm = parentPair.type === 'ethereum';
|
|
3151
|
-
if (parentPair.isLocked) {
|
|
3152
|
-
keyring.unlockPair(parentPair.address);
|
|
3153
|
-
}
|
|
3154
|
-
const meta = {
|
|
3155
|
-
parentAddress
|
|
3156
|
-
};
|
|
3157
|
-
let childPair;
|
|
3158
|
-
if (isEvm) {
|
|
3159
|
-
let index = 0;
|
|
3160
|
-
try {
|
|
3161
|
-
const reg = /^\d+$/;
|
|
3162
|
-
const path = suri.split('//')[1];
|
|
3163
|
-
if (reg.test(path)) {
|
|
3164
|
-
index = parseInt(path);
|
|
3165
|
-
}
|
|
3166
|
-
} catch (e) {}
|
|
3167
|
-
if (!index) {
|
|
3168
|
-
throw Error(t('Invalid derive path'));
|
|
3169
|
-
}
|
|
3170
|
-
meta.suri = `//${index}`;
|
|
3171
|
-
childPair = parentPair.deriveEvm(index, meta);
|
|
3172
|
-
} else {
|
|
3173
|
-
meta.suri = suri;
|
|
3174
|
-
childPair = parentPair.derive(suri, meta);
|
|
3175
|
-
}
|
|
3176
|
-
return {
|
|
3177
|
-
address: childPair.address,
|
|
3178
|
-
suri: meta.suri
|
|
3179
|
-
};
|
|
2292
|
+
validateDerivePath(request) {
|
|
2293
|
+
return this.#koniState.keyringService.context.validateDerivePath(request);
|
|
3180
2294
|
}
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
const parentPair = keyring.getPair(parentAddress);
|
|
3187
|
-
const isEvm = parentPair.type === 'ethereum';
|
|
3188
|
-
if (parentPair.isLocked) {
|
|
3189
|
-
keyring.unlockPair(parentPair.address);
|
|
3190
|
-
}
|
|
3191
|
-
const start = (page - 1) * limit + (isEvm ? 1 : 0);
|
|
3192
|
-
const end = start + limit;
|
|
3193
|
-
const result = [];
|
|
3194
|
-
for (let i = start; i < end; i++) {
|
|
3195
|
-
const suri = `//${i}`;
|
|
3196
|
-
const pair = isEvm ? parentPair.deriveEvm(i, {}) : parentPair.derive(suri, {});
|
|
3197
|
-
result.push({
|
|
3198
|
-
address: pair.address,
|
|
3199
|
-
suri: suri
|
|
3200
|
-
});
|
|
3201
|
-
}
|
|
3202
|
-
return {
|
|
3203
|
-
result: result
|
|
3204
|
-
};
|
|
2295
|
+
getDeriveSuggestion(request) {
|
|
2296
|
+
return this.#koniState.keyringService.context.getDeriveSuggestion(request);
|
|
2297
|
+
}
|
|
2298
|
+
getListDeriveAccounts(request) {
|
|
2299
|
+
return this.#koniState.keyringService.context.getListDeriveAccounts(request);
|
|
3205
2300
|
}
|
|
3206
2301
|
|
|
3207
2302
|
// ChainService -------------------------------------------------
|
|
@@ -3563,7 +2658,7 @@ export default class KoniExtension {
|
|
|
3563
2658
|
}
|
|
3564
2659
|
const result = await this.#koniState.enableMantaPay(true, address, password, mnemonic.result);
|
|
3565
2660
|
this.#skipAutoLock = true;
|
|
3566
|
-
await this.
|
|
2661
|
+
await this.saveCurrentAccountProxy({
|
|
3567
2662
|
address
|
|
3568
2663
|
});
|
|
3569
2664
|
const unsubSyncProgress = await ((_this$koniState$chain = this.#koniState.chainService) === null || _this$koniState$chain === void 0 ? void 0 : (_this$koniState$chain2 = _this$koniState$chain.mantaPay) === null || _this$koniState$chain2 === void 0 ? void 0 : _this$koniState$chain2.subscribeSyncProgress());
|
|
@@ -3602,7 +2697,7 @@ export default class KoniExtension {
|
|
|
3602
2697
|
return;
|
|
3603
2698
|
}
|
|
3604
2699
|
this.#skipAutoLock = true;
|
|
3605
|
-
await this.
|
|
2700
|
+
await this.saveCurrentAccountProxy({
|
|
3606
2701
|
address
|
|
3607
2702
|
});
|
|
3608
2703
|
const unsubSyncProgress = await ((_this$koniState$chain5 = this.#koniState.chainService) === null || _this$koniState$chain5 === void 0 ? void 0 : (_this$koniState$chain6 = _this$koniState$chain5.mantaPay) === null || _this$koniState$chain6 === void 0 ? void 0 : _this$koniState$chain6.subscribeSyncProgress());
|
|
@@ -3631,6 +2726,21 @@ export default class KoniExtension {
|
|
|
3631
2726
|
async disableMantaPay(address) {
|
|
3632
2727
|
return this.#koniState.disableMantaPay(address);
|
|
3633
2728
|
}
|
|
2729
|
+
async isTonBounceableAddress({
|
|
2730
|
+
address,
|
|
2731
|
+
chain
|
|
2732
|
+
}) {
|
|
2733
|
+
try {
|
|
2734
|
+
const tonApi = this.#koniState.getTonApi(chain);
|
|
2735
|
+
const state = await tonApi.getAccountState(address);
|
|
2736
|
+
const isActive = state === 'active';
|
|
2737
|
+
const isBounceable = isBounceableAddress(address);
|
|
2738
|
+
return !isActive && isBounceable;
|
|
2739
|
+
} catch (error) {
|
|
2740
|
+
console.error(`Failed to validate address ${address} on chain ${chain}:`, error);
|
|
2741
|
+
return false;
|
|
2742
|
+
}
|
|
2743
|
+
}
|
|
3634
2744
|
subscribeMantaPayConfig(id, port) {
|
|
3635
2745
|
const cb = createSubscription(id, port);
|
|
3636
2746
|
const mantaPayConfigSubscription = this.#koniState.subscribeMantaPayConfig().subscribe({
|
|
@@ -3712,11 +2822,11 @@ export default class KoniExtension {
|
|
|
3712
2822
|
|
|
3713
2823
|
/// Inject account
|
|
3714
2824
|
addInjects(request) {
|
|
3715
|
-
this.#koniState.keyringService.addInjectAccounts(request.accounts);
|
|
2825
|
+
this.#koniState.keyringService.context.addInjectAccounts(request.accounts);
|
|
3716
2826
|
return true;
|
|
3717
2827
|
}
|
|
3718
2828
|
removeInjects(request) {
|
|
3719
|
-
this.#koniState.keyringService.removeInjectAccounts(request.addresses);
|
|
2829
|
+
this.#koniState.keyringService.context.removeInjectAccounts(request.addresses);
|
|
3720
2830
|
return true;
|
|
3721
2831
|
}
|
|
3722
2832
|
async subscribeYieldPoolInfo(id, port) {
|
|
@@ -4202,22 +3312,8 @@ export default class KoniExtension {
|
|
|
4202
3312
|
case 'pri(ping)':
|
|
4203
3313
|
return 'pong';
|
|
4204
3314
|
/// Clone from PolkadotJs
|
|
4205
|
-
case 'pri(accounts.
|
|
4206
|
-
return this.accountsCreateExternal(request);
|
|
4207
|
-
case 'pri(accounts.create.hardware)':
|
|
4208
|
-
return this.accountsCreateHardware(request);
|
|
4209
|
-
case 'pri(accounts.create.suri)':
|
|
4210
|
-
return this.accountsCreateSuri(request);
|
|
4211
|
-
case 'pri(accounts.changePassword)':
|
|
4212
|
-
return this.accountsChangePassword(request);
|
|
4213
|
-
case 'pri(accounts.export)':
|
|
3315
|
+
case 'pri(accounts.export.json)':
|
|
4214
3316
|
return this.accountsExport(request);
|
|
4215
|
-
case 'pri(accounts.show)':
|
|
4216
|
-
return this.accountsShow(request);
|
|
4217
|
-
case 'pri(accounts.subscribe)':
|
|
4218
|
-
return this.accountsSubscribe(id, port);
|
|
4219
|
-
case 'pri(accounts.validate)':
|
|
4220
|
-
return this.accountsValidate(request);
|
|
4221
3317
|
case 'pri(metadata.approve)':
|
|
4222
3318
|
return this.metadataApprove(request);
|
|
4223
3319
|
case 'pri(metadata.get)':
|
|
@@ -4228,20 +3324,6 @@ export default class KoniExtension {
|
|
|
4228
3324
|
return this.metadataReject(request);
|
|
4229
3325
|
case 'pri(metadata.requests)':
|
|
4230
3326
|
return this.metadataSubscribe(id, port);
|
|
4231
|
-
case 'pri(derivation.create)':
|
|
4232
|
-
return this.derivationCreate(request);
|
|
4233
|
-
case 'pri(derivation.validate)':
|
|
4234
|
-
return this.derivationValidate(request);
|
|
4235
|
-
case 'pri(json.restore)':
|
|
4236
|
-
return this.jsonRestore(request);
|
|
4237
|
-
case 'pri(json.batchRestore)':
|
|
4238
|
-
return this.batchRestore(request);
|
|
4239
|
-
case 'pri(json.account.info)':
|
|
4240
|
-
return this.jsonGetAccountInfo(request);
|
|
4241
|
-
case 'pri(seed.create)':
|
|
4242
|
-
return this.seedCreate(request);
|
|
4243
|
-
case 'pri(seed.validate)':
|
|
4244
|
-
return this.seedValidate(request);
|
|
4245
3327
|
case 'pri(signing.approve.signature)':
|
|
4246
3328
|
return this.signingApproveSignature(request);
|
|
4247
3329
|
case 'pri(signing.cancel)':
|
|
@@ -4320,14 +3402,6 @@ export default class KoniExtension {
|
|
|
4320
3402
|
return this.getCrowdloanContributions(request);
|
|
4321
3403
|
case 'pri(crowdloan.getSubscription)':
|
|
4322
3404
|
return this.subscribeCrowdloan(id, port);
|
|
4323
|
-
case 'pri(derivation.createV2)':
|
|
4324
|
-
return this.derivationCreateV2(request);
|
|
4325
|
-
case 'pri(accounts.batchExportV2)':
|
|
4326
|
-
return this.batchExportV2(request);
|
|
4327
|
-
case 'pri(json.restoreV2)':
|
|
4328
|
-
return await this.jsonRestoreV2(request);
|
|
4329
|
-
case 'pri(json.batchRestoreV2)':
|
|
4330
|
-
return await this.batchRestoreV2(request);
|
|
4331
3405
|
case 'pri(nft.getNft)':
|
|
4332
3406
|
return await this.getNft();
|
|
4333
3407
|
case 'pri(nft.getSubscription)':
|
|
@@ -4403,7 +3477,7 @@ export default class KoniExtension {
|
|
|
4403
3477
|
/* Account management */
|
|
4404
3478
|
// Add account
|
|
4405
3479
|
case 'pri(accounts.create.suriV2)':
|
|
4406
|
-
return
|
|
3480
|
+
return this.accountsCreateSuriV2(request);
|
|
4407
3481
|
case 'pri(accounts.create.externalV2)':
|
|
4408
3482
|
return await this.accountsCreateExternalV2(request);
|
|
4409
3483
|
case 'pri(accounts.create.hardwareV2)':
|
|
@@ -4412,6 +3486,14 @@ export default class KoniExtension {
|
|
|
4412
3486
|
return await this.accountsCreateHardwareMultiple(request);
|
|
4413
3487
|
case 'pri(accounts.create.withSecret)':
|
|
4414
3488
|
return await this.accountsCreateWithSecret(request);
|
|
3489
|
+
case 'pri(accounts.json.info)':
|
|
3490
|
+
return this.parseInfoSingleJson(request);
|
|
3491
|
+
case 'pri(accounts.json.restoreV2)':
|
|
3492
|
+
return this.jsonRestoreV2(request);
|
|
3493
|
+
case 'pri(accounts.json.batchInfo)':
|
|
3494
|
+
return this.parseInfoMultiJson(request);
|
|
3495
|
+
case 'pri(accounts.json.batchRestoreV2)':
|
|
3496
|
+
return this.batchRestoreV2(request);
|
|
4415
3497
|
case 'pri(seed.createV2)':
|
|
4416
3498
|
return this.seedCreateV2(request);
|
|
4417
3499
|
|
|
@@ -4420,43 +3502,54 @@ export default class KoniExtension {
|
|
|
4420
3502
|
return await this.accountsForgetOverride(request);
|
|
4421
3503
|
|
|
4422
3504
|
// Validate account
|
|
4423
|
-
case 'pri(seed
|
|
3505
|
+
case 'pri(accounts.validate.seed)':
|
|
4424
3506
|
return this.seedValidateV2(request);
|
|
4425
|
-
case 'pri(privateKey
|
|
4426
|
-
return this.
|
|
4427
|
-
case 'pri(accounts.
|
|
3507
|
+
case 'pri(accounts.validate.privateKey)':
|
|
3508
|
+
return this.privateKeyValidateV2(request);
|
|
3509
|
+
case 'pri(accounts.validate.substrate.publicAndPrivateKey)':
|
|
4428
3510
|
return this.checkPublicAndSecretKey(request);
|
|
3511
|
+
case 'pri(accounts.validate.name)':
|
|
3512
|
+
return this.checkNameExists(request);
|
|
3513
|
+
case 'pri(accounts.validate.bounceable)':
|
|
3514
|
+
return this.isTonBounceableAddress(request);
|
|
4429
3515
|
|
|
4430
3516
|
// Export account
|
|
4431
|
-
case 'pri(accounts.
|
|
3517
|
+
case 'pri(accounts.export.privateKey)':
|
|
4432
3518
|
return this.accountExportPrivateKey(request);
|
|
3519
|
+
case 'pri(accounts.export.json.batch)':
|
|
3520
|
+
return this.batchExportV2(request);
|
|
3521
|
+
case 'pri(accounts.export.mnemonic)':
|
|
3522
|
+
return this.exportAccountProxyMnemonic(request);
|
|
4433
3523
|
|
|
4434
3524
|
// Subscribe account
|
|
4435
|
-
case 'pri(accounts.
|
|
3525
|
+
case 'pri(accounts.subscribeWithCurrentProxy)':
|
|
4436
3526
|
return await this.accountsGetAllWithCurrentAddress(id, port);
|
|
4437
3527
|
case 'pri(accounts.subscribeAccountsInputAddress)':
|
|
4438
|
-
return this.
|
|
3528
|
+
return this.subscribeInputAddressData(request, id, port);
|
|
4439
3529
|
|
|
4440
3530
|
// Save current account
|
|
4441
|
-
case 'pri(
|
|
4442
|
-
return await this.
|
|
4443
|
-
case 'pri(accounts.updateCurrentAddress)':
|
|
4444
|
-
return this.updateCurrentAccountAddress(request);
|
|
3531
|
+
case 'pri(accounts.saveCurrentProxy)':
|
|
3532
|
+
return await this.saveCurrentAccountProxy(request);
|
|
4445
3533
|
|
|
4446
3534
|
// Edit account
|
|
4447
3535
|
case 'pri(accounts.edit)':
|
|
4448
3536
|
return this.accountsEdit(request);
|
|
3537
|
+
// Ton change wallet contract version
|
|
3538
|
+
case 'pri(accounts.ton.version.map)':
|
|
3539
|
+
return this.tonGetAllTonWalletContractVersion(request);
|
|
3540
|
+
case 'pri(accounts.ton.version.change)':
|
|
3541
|
+
return this.tonAccountChangeWalletContractVersion(request);
|
|
4449
3542
|
|
|
4450
3543
|
// Save contact address
|
|
4451
|
-
case 'pri(
|
|
3544
|
+
case 'pri(addressBook.saveRecent)':
|
|
4452
3545
|
return this.saveRecentAccount(request);
|
|
4453
|
-
case 'pri(
|
|
3546
|
+
case 'pri(addressBook.edit)':
|
|
4454
3547
|
return this.editContactAccount(request);
|
|
4455
|
-
case 'pri(
|
|
3548
|
+
case 'pri(addressBook.delete)':
|
|
4456
3549
|
return this.deleteContactAccount(request);
|
|
4457
3550
|
|
|
4458
3551
|
// Subscribe address
|
|
4459
|
-
case 'pri(
|
|
3552
|
+
case 'pri(addressBook.subscribe)':
|
|
4460
3553
|
return this.subscribeAddresses(id, port);
|
|
4461
3554
|
case 'pri(accounts.resolveDomainToAddress)':
|
|
4462
3555
|
return await this.resolveDomainByAddress(request);
|
|
@@ -4514,8 +3607,6 @@ export default class KoniExtension {
|
|
|
4514
3607
|
return await this.updateAssetSetting(request);
|
|
4515
3608
|
case 'pri(transfer.getMaxTransferable)':
|
|
4516
3609
|
return this.getMaxTransferable(request);
|
|
4517
|
-
case 'pri(transfer.subscribeMaxTransferable)':
|
|
4518
|
-
return this.getMaxTransferable(request);
|
|
4519
3610
|
case 'pri(freeBalance.get)':
|
|
4520
3611
|
return this.getAddressTransferableBalance(request);
|
|
4521
3612
|
case 'pri(freeBalance.subscribe)':
|
|
@@ -4524,8 +3615,6 @@ export default class KoniExtension {
|
|
|
4524
3615
|
return this.cancelSubscription(request);
|
|
4525
3616
|
case 'pri(chainService.recoverSubstrateApi)':
|
|
4526
3617
|
return this.recoverDotSamaApi(request);
|
|
4527
|
-
case 'pri(accounts.get.meta)':
|
|
4528
|
-
return this.getAccountMeta(request);
|
|
4529
3618
|
|
|
4530
3619
|
/// Send NFT
|
|
4531
3620
|
case 'pri(evmNft.submitTransaction)':
|
|
@@ -4558,12 +3647,14 @@ export default class KoniExtension {
|
|
|
4558
3647
|
return this.rejectExternalRequest(request);
|
|
4559
3648
|
case 'pri(account.external.resolve)':
|
|
4560
3649
|
return this.resolveQrTransfer(request);
|
|
4561
|
-
case 'pri(accounts.tie)':
|
|
4562
|
-
return this.accountsTie2(request);
|
|
4563
3650
|
case 'pri(confirmations.subscribe)':
|
|
4564
3651
|
return this.subscribeConfirmations(id, port);
|
|
3652
|
+
case 'pri(confirmationsTon.subscribe)':
|
|
3653
|
+
return this.subscribeConfirmationsTon(id, port);
|
|
4565
3654
|
case 'pri(confirmations.complete)':
|
|
4566
3655
|
return await this.completeConfirmation(request);
|
|
3656
|
+
case 'pri(confirmationsTon.complete)':
|
|
3657
|
+
return await this.completeConfirmationTon(request);
|
|
4567
3658
|
|
|
4568
3659
|
/// Stake
|
|
4569
3660
|
case 'pri(bonding.getBondingOptions)':
|
|
@@ -4624,14 +3715,16 @@ export default class KoniExtension {
|
|
|
4624
3715
|
return this.signingApprovePasswordV2(request);
|
|
4625
3716
|
|
|
4626
3717
|
/// Derive account
|
|
4627
|
-
case 'pri(
|
|
3718
|
+
case 'pri(accounts.derive.validateV2)':
|
|
4628
3719
|
return this.validateDerivePath(request);
|
|
4629
|
-
case 'pri(
|
|
3720
|
+
case 'pri(accounts.derive.getList)':
|
|
4630
3721
|
return this.getListDeriveAccounts(request);
|
|
4631
|
-
case 'pri(
|
|
3722
|
+
case 'pri(accounts.derive.create.multiple)':
|
|
4632
3723
|
return this.derivationCreateMultiple(request);
|
|
4633
|
-
case 'pri(
|
|
3724
|
+
case 'pri(accounts.derive.createV3)':
|
|
4634
3725
|
return this.derivationCreateV3(request);
|
|
3726
|
+
case 'pri(accounts.derive.suggestion)':
|
|
3727
|
+
return this.getDeriveSuggestion(request);
|
|
4635
3728
|
|
|
4636
3729
|
// Transaction
|
|
4637
3730
|
case 'pri(transactions.getOne)':
|
|
@@ -4737,6 +3830,8 @@ export default class KoniExtension {
|
|
|
4737
3830
|
return this.#koniState.migrateMV3LocalStorage(request);
|
|
4738
3831
|
case 'pri(database.setLocalStorage)':
|
|
4739
3832
|
return this.#koniState.setStorageFromWS(request);
|
|
3833
|
+
case 'pri(database.getLocalStorage)':
|
|
3834
|
+
return this.#koniState.getStorageFromWS(request);
|
|
4740
3835
|
/* Database */
|
|
4741
3836
|
|
|
4742
3837
|
/* Swap service */
|